All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lorenzo Pieralisi <lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org>
To: James Morse <james.morse-5wv7dgnIgG8@public.gmane.org>
Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
	Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>,
	Christoffer Dall
	<christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	Loc Ho <lho-qTEPVZfXA3Y@public.gmane.org>,
	Heyi Guo <guoheyi-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Subject: Re: [PATCH v6 14/16] firmware: arm_sdei: Discover SDEI support via ACPI
Date: Mon, 8 Jan 2018 17:56:01 +0000	[thread overview]
Message-ID: <20180108175601.GD2530@red-moon> (raw)
In-Reply-To: <20180108153818.22743-15-james.morse-5wv7dgnIgG8@public.gmane.org>

On Mon, Jan 08, 2018 at 03:38:16PM +0000, James Morse wrote:
> SDEI defines a new ACPI table to indicate the presence of the interface.
> The conduit is discovered in the same way as PSCI.
> 
> For ACPI we need to create the platform device ourselves as SDEI doesn't
> have an entry in the DSDT.
> 
> The SDEI platform device should be created after ACPI has been initialised
> so that we can parse the table, but before GHES devices are created, which
> may register SDE events if they use SDEI as their notification type.
> 
> Signed-off-by: James Morse <james.morse-5wv7dgnIgG8@public.gmane.org>
> Acked-by: Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>
> ---
>  drivers/firmware/arm_sdei.c | 41 ++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 40 insertions(+), 1 deletion(-)

Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org>

> diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
> index 10a8bfa7339a..fb7caa3628b9 100644
> --- a/drivers/firmware/arm_sdei.c
> +++ b/drivers/firmware/arm_sdei.c
> @@ -907,6 +907,14 @@ static int sdei_get_conduit(struct platform_device *pdev)
>  		}
>  
>  		pr_warn("invalid \"method\" property: %s\n", method);
> +	} else if (IS_ENABLED(CONFIG_ACPI) && !acpi_disabled) {
> +		if (acpi_psci_use_hvc()) {
> +			sdei_firmware_call = &sdei_smccc_hvc;
> +			return CONDUIT_HVC;
> +		} else {
> +			sdei_firmware_call = &sdei_smccc_smc;
> +			return CONDUIT_SMC;
> +		}
>  	}
>  
>  	return CONDUIT_INVALID;
> @@ -1020,14 +1028,45 @@ static bool __init sdei_present_dt(void)
>  	return true;
>  }
>  
> +static bool __init sdei_present_acpi(void)
> +{
> +	acpi_status status;
> +	struct platform_device *pdev;
> +	struct acpi_table_header *sdei_table_header;
> +
> +	if (acpi_disabled)
> +		return false;
> +
> +	status = acpi_get_table(ACPI_SIG_SDEI, 0, &sdei_table_header);
> +	if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
> +		const char *msg = acpi_format_exception(status);
> +
> +		pr_info("Failed to get ACPI:SDEI table, %s\n", msg);
> +	}
> +	if (ACPI_FAILURE(status))
> +		return false;
> +
> +	pdev = platform_device_register_simple(sdei_driver.driver.name, 0, NULL,
> +					       0);
> +	if (IS_ERR(pdev))
> +		return false;
> +
> +	return true;
> +}
> +
>  static int __init sdei_init(void)
>  {
> -	if (sdei_present_dt())
> +	if (sdei_present_dt() || sdei_present_acpi())
>  		platform_driver_register(&sdei_driver);
>  
>  	return 0;
>  }
>  
> +/*
> + * On an ACPI system SDEI needs to be ready before HEST:GHES tries to register
> + * its events. ACPI is initialised from a subsys_initcall(), GHES is initialised
> + * by device_initcall(). We want to be called in the middle.
> + */
>  subsys_initcall_sync(sdei_init);
>  
>  int sdei_event_handler(struct pt_regs *regs,
> -- 
> 2.15.0
> 
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 14/16] firmware: arm_sdei: Discover SDEI support via ACPI
Date: Mon, 8 Jan 2018 17:56:01 +0000	[thread overview]
Message-ID: <20180108175601.GD2530@red-moon> (raw)
In-Reply-To: <20180108153818.22743-15-james.morse@arm.com>

On Mon, Jan 08, 2018 at 03:38:16PM +0000, James Morse wrote:
> SDEI defines a new ACPI table to indicate the presence of the interface.
> The conduit is discovered in the same way as PSCI.
> 
> For ACPI we need to create the platform device ourselves as SDEI doesn't
> have an entry in the DSDT.
> 
> The SDEI platform device should be created after ACPI has been initialised
> so that we can parse the table, but before GHES devices are created, which
> may register SDE events if they use SDEI as their notification type.
> 
> Signed-off-by: James Morse <james.morse@arm.com>
> Acked-by: Catalin Marinas <catalin.marinas@arm.com>
> ---
>  drivers/firmware/arm_sdei.c | 41 ++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 40 insertions(+), 1 deletion(-)

Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>

> diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
> index 10a8bfa7339a..fb7caa3628b9 100644
> --- a/drivers/firmware/arm_sdei.c
> +++ b/drivers/firmware/arm_sdei.c
> @@ -907,6 +907,14 @@ static int sdei_get_conduit(struct platform_device *pdev)
>  		}
>  
>  		pr_warn("invalid \"method\" property: %s\n", method);
> +	} else if (IS_ENABLED(CONFIG_ACPI) && !acpi_disabled) {
> +		if (acpi_psci_use_hvc()) {
> +			sdei_firmware_call = &sdei_smccc_hvc;
> +			return CONDUIT_HVC;
> +		} else {
> +			sdei_firmware_call = &sdei_smccc_smc;
> +			return CONDUIT_SMC;
> +		}
>  	}
>  
>  	return CONDUIT_INVALID;
> @@ -1020,14 +1028,45 @@ static bool __init sdei_present_dt(void)
>  	return true;
>  }
>  
> +static bool __init sdei_present_acpi(void)
> +{
> +	acpi_status status;
> +	struct platform_device *pdev;
> +	struct acpi_table_header *sdei_table_header;
> +
> +	if (acpi_disabled)
> +		return false;
> +
> +	status = acpi_get_table(ACPI_SIG_SDEI, 0, &sdei_table_header);
> +	if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
> +		const char *msg = acpi_format_exception(status);
> +
> +		pr_info("Failed to get ACPI:SDEI table, %s\n", msg);
> +	}
> +	if (ACPI_FAILURE(status))
> +		return false;
> +
> +	pdev = platform_device_register_simple(sdei_driver.driver.name, 0, NULL,
> +					       0);
> +	if (IS_ERR(pdev))
> +		return false;
> +
> +	return true;
> +}
> +
>  static int __init sdei_init(void)
>  {
> -	if (sdei_present_dt())
> +	if (sdei_present_dt() || sdei_present_acpi())
>  		platform_driver_register(&sdei_driver);
>  
>  	return 0;
>  }
>  
> +/*
> + * On an ACPI system SDEI needs to be ready before HEST:GHES tries to register
> + * its events. ACPI is initialised from a subsys_initcall(), GHES is initialised
> + * by device_initcall(). We want to be called in the middle.
> + */
>  subsys_initcall_sync(sdei_init);
>  
>  int sdei_event_handler(struct pt_regs *regs,
> -- 
> 2.15.0
> 

  parent reply	other threads:[~2018-01-08 17:56 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-08 15:38 [PATCH v6 00/16] arm64/firmware: Software Delegated Exception Interface James Morse
2018-01-08 15:38 ` James Morse
     [not found] ` <20180108153818.22743-1-james.morse-5wv7dgnIgG8@public.gmane.org>
2018-01-08 15:38   ` [PATCH v6 01/16] KVM: arm64: Store vcpu on the stack during __guest_enter() James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 02/16] KVM: arm/arm64: Convert kvm_host_cpu_state to a static per-cpu allocation James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 03/16] KVM: arm64: Change hyp_panic()s dependency on tpidr_el2 James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 04/16] arm64: alternatives: use tpidr_el2 on VHE hosts James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 05/16] KVM: arm64: Stop save/restoring host tpidr_el1 on VHE James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 06/16] Docs: dt: add devicetree binding for describing arm64 SDEI firmware James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 07/16] firmware: arm_sdei: Add driver for Software Delegated Exceptions James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 09/16] arm64: uaccess: Add PAN helper James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 10/16] arm64: kernel: Add arch-specific SDEI entry code and CPU masking James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 12/16] firmware: arm_sdei: add support for CPU private events James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 15/16] arm64: mmu: add the entry trampolines start/end section markers into sections.h James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38   ` [PATCH v6 16/16] arm64: sdei: Add trampoline code for remapping the kernel James Morse
2018-01-08 15:38     ` James Morse
2018-01-08 15:38 ` [PATCH v6 08/16] arm64: Add vmap_stack header file James Morse
2018-01-08 15:38   ` James Morse
2018-01-08 15:38 ` [PATCH v6 11/16] firmware: arm_sdei: Add support for CPU and system power states James Morse
2018-01-08 15:38   ` James Morse
     [not found]   ` <20180108153818.22743-12-james.morse-5wv7dgnIgG8@public.gmane.org>
2018-01-08 17:22     ` Lorenzo Pieralisi
2018-01-08 17:22       ` Lorenzo Pieralisi
2018-01-13 12:00       ` Catalin Marinas
2018-01-13 12:00         ` Catalin Marinas
2018-01-14 12:20         ` Lorenzo Pieralisi
2018-01-14 12:20           ` Lorenzo Pieralisi
2018-01-17 12:01           ` James Morse
2018-01-17 12:01             ` James Morse
2018-01-08 15:38 ` [PATCH v6 13/16] arm64: acpi: Remove __init from acpi_psci_use_hvc() for use by SDEI James Morse
2018-01-08 15:38   ` James Morse
2018-01-08 15:51   ` Lorenzo Pieralisi
2018-01-08 15:51     ` Lorenzo Pieralisi
2018-01-08 15:38 ` [PATCH v6 14/16] firmware: arm_sdei: Discover SDEI support via ACPI James Morse
2018-01-08 15:38   ` James Morse
     [not found]   ` <20180108153818.22743-15-james.morse-5wv7dgnIgG8@public.gmane.org>
2018-01-08 17:56     ` Lorenzo Pieralisi [this message]
2018-01-08 17:56       ` Lorenzo Pieralisi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180108175601.GD2530@red-moon \
    --to=lorenzo.pieralisi-5wv7dgnigg8@public.gmane.org \
    --cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
    --cc=christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=guoheyi-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
    --cc=james.morse-5wv7dgnIgG8@public.gmane.org \
    --cc=kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org \
    --cc=lho-qTEPVZfXA3Y@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=marc.zyngier-5wv7dgnIgG8@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.