* [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES
@ 2025-05-07 4:57 Huang Yiwei
2025-05-07 11:21 ` Rafael J. Wysocki
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Huang Yiwei @ 2025-05-07 4:57 UTC (permalink / raw)
To: will, rafael, lenb, james.morse, tony.luck, bp
Cc: Huang Yiwei, xueshuai, quic_aiquny, quic_satyap, linux-acpi,
linux-kernel, linux-arm-kernel, kernel, kernel
SDEI usually initialize with the ACPI table, but on platforms where
ACPI is not used, the SDEI feature can still be used to handle
specific firmware calls or other customized purposes. Therefore, it
is not necessary for ARM_SDE_INTERFACE to depend on ACPI_APEI_GHES.
In commit dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES
in acpi_init()"), to make APEI ready earlier, sdei_init was moved
into acpi_ghes_init instead of being a standalone initcall, adding
ACPI_APEI_GHES dependency to ARM_SDE_INTERFACE. This restricts the
flexibility and usability of SDEI.
This patch corrects the dependency in Kconfig and splits sdei_init()
into two separate functions: sdei_init() and acpi_sdei_init().
sdei_init() will be called by arch_initcall and will only initialize
the platform driver, while acpi_sdei_init() will initialize the
device from acpi_ghes_init() when ACPI is ready. This allows the
initialization of SDEI without ACPI_APEI_GHES enabled.
Fixes: dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES in apci_init()")
Cc: Shuai Xue <xueshuai@linux.alibaba.com>
Signed-off-by: Huang Yiwei <quic_hyiwei@quicinc.com>
---
drivers/acpi/apei/Kconfig | 1 +
drivers/acpi/apei/ghes.c | 2 +-
drivers/firmware/Kconfig | 1 -
drivers/firmware/arm_sdei.c | 11 ++++++++---
include/linux/arm_sdei.h | 4 ++--
5 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/acpi/apei/Kconfig b/drivers/acpi/apei/Kconfig
index 3cfe7e7475f2..070c07d68dfb 100644
--- a/drivers/acpi/apei/Kconfig
+++ b/drivers/acpi/apei/Kconfig
@@ -23,6 +23,7 @@ config ACPI_APEI_GHES
select ACPI_HED
select IRQ_WORK
select GENERIC_ALLOCATOR
+ select ARM_SDE_INTERFACE if ARM64
help
Generic Hardware Error Source provides a way to report
platform hardware errors (such as that from chipset). It
diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
index 289e365f84b2..0f3c663c1b0a 100644
--- a/drivers/acpi/apei/ghes.c
+++ b/drivers/acpi/apei/ghes.c
@@ -1715,7 +1715,7 @@ void __init acpi_ghes_init(void)
{
int rc;
- sdei_init();
+ acpi_sdei_init();
if (acpi_disabled)
return;
diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
index aadc395ee168..7df19d82aa68 100644
--- a/drivers/firmware/Kconfig
+++ b/drivers/firmware/Kconfig
@@ -31,7 +31,6 @@ config ARM_SCPI_PROTOCOL
config ARM_SDE_INTERFACE
bool "ARM Software Delegated Exception Interface (SDEI)"
depends on ARM64
- depends on ACPI_APEI_GHES
help
The Software Delegated Exception Interface (SDEI) is an ARM
standard for registering callbacks from the platform firmware
diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
index 3e8051fe8296..71e2a9a89f6a 100644
--- a/drivers/firmware/arm_sdei.c
+++ b/drivers/firmware/arm_sdei.c
@@ -1062,13 +1062,12 @@ static bool __init sdei_present_acpi(void)
return true;
}
-void __init sdei_init(void)
+void __init acpi_sdei_init(void)
{
struct platform_device *pdev;
int ret;
- ret = platform_driver_register(&sdei_driver);
- if (ret || !sdei_present_acpi())
+ if (!sdei_present_acpi())
return;
pdev = platform_device_register_simple(sdei_driver.driver.name,
@@ -1081,6 +1080,12 @@ void __init sdei_init(void)
}
}
+static int __init sdei_init(void)
+{
+ return platform_driver_register(&sdei_driver);
+}
+arch_initcall(sdei_init);
+
int sdei_event_handler(struct pt_regs *regs,
struct sdei_registered_event *arg)
{
diff --git a/include/linux/arm_sdei.h b/include/linux/arm_sdei.h
index 255701e1251b..f652a5028b59 100644
--- a/include/linux/arm_sdei.h
+++ b/include/linux/arm_sdei.h
@@ -46,12 +46,12 @@ int sdei_unregister_ghes(struct ghes *ghes);
/* For use by arch code when CPU hotplug notifiers are not appropriate. */
int sdei_mask_local_cpu(void);
int sdei_unmask_local_cpu(void);
-void __init sdei_init(void);
+void __init acpi_sdei_init(void);
void sdei_handler_abort(void);
#else
static inline int sdei_mask_local_cpu(void) { return 0; }
static inline int sdei_unmask_local_cpu(void) { return 0; }
-static inline void sdei_init(void) { }
+static inline void acpi_sdei_init(void) { }
static inline void sdei_handler_abort(void) { }
#endif /* CONFIG_ARM_SDE_INTERFACE */
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES
2025-05-07 4:57 [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES Huang Yiwei
@ 2025-05-07 11:21 ` Rafael J. Wysocki
2025-05-08 0:24 ` Gavin Shan
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Rafael J. Wysocki @ 2025-05-07 11:21 UTC (permalink / raw)
To: Huang Yiwei
Cc: will, rafael, lenb, james.morse, tony.luck, bp, xueshuai,
quic_aiquny, quic_satyap, linux-acpi, linux-kernel,
linux-arm-kernel, kernel, kernel
On Wed, May 7, 2025 at 6:58 AM Huang Yiwei <quic_hyiwei@quicinc.com> wrote:
>
> SDEI usually initialize with the ACPI table, but on platforms where
> ACPI is not used, the SDEI feature can still be used to handle
> specific firmware calls or other customized purposes. Therefore, it
> is not necessary for ARM_SDE_INTERFACE to depend on ACPI_APEI_GHES.
>
> In commit dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES
> in acpi_init()"), to make APEI ready earlier, sdei_init was moved
> into acpi_ghes_init instead of being a standalone initcall, adding
> ACPI_APEI_GHES dependency to ARM_SDE_INTERFACE. This restricts the
> flexibility and usability of SDEI.
>
> This patch corrects the dependency in Kconfig and splits sdei_init()
> into two separate functions: sdei_init() and acpi_sdei_init().
> sdei_init() will be called by arch_initcall and will only initialize
> the platform driver, while acpi_sdei_init() will initialize the
> device from acpi_ghes_init() when ACPI is ready. This allows the
> initialization of SDEI without ACPI_APEI_GHES enabled.
>
> Fixes: dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES in apci_init()")
> Cc: Shuai Xue <xueshuai@linux.alibaba.com>
> Signed-off-by: Huang Yiwei <quic_hyiwei@quicinc.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
for the ACPI bits and please route this through ARM.
Thanks!
> ---
> drivers/acpi/apei/Kconfig | 1 +
> drivers/acpi/apei/ghes.c | 2 +-
> drivers/firmware/Kconfig | 1 -
> drivers/firmware/arm_sdei.c | 11 ++++++++---
> include/linux/arm_sdei.h | 4 ++--
> 5 files changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/acpi/apei/Kconfig b/drivers/acpi/apei/Kconfig
> index 3cfe7e7475f2..070c07d68dfb 100644
> --- a/drivers/acpi/apei/Kconfig
> +++ b/drivers/acpi/apei/Kconfig
> @@ -23,6 +23,7 @@ config ACPI_APEI_GHES
> select ACPI_HED
> select IRQ_WORK
> select GENERIC_ALLOCATOR
> + select ARM_SDE_INTERFACE if ARM64
> help
> Generic Hardware Error Source provides a way to report
> platform hardware errors (such as that from chipset). It
> diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
> index 289e365f84b2..0f3c663c1b0a 100644
> --- a/drivers/acpi/apei/ghes.c
> +++ b/drivers/acpi/apei/ghes.c
> @@ -1715,7 +1715,7 @@ void __init acpi_ghes_init(void)
> {
> int rc;
>
> - sdei_init();
> + acpi_sdei_init();
>
> if (acpi_disabled)
> return;
> diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
> index aadc395ee168..7df19d82aa68 100644
> --- a/drivers/firmware/Kconfig
> +++ b/drivers/firmware/Kconfig
> @@ -31,7 +31,6 @@ config ARM_SCPI_PROTOCOL
> config ARM_SDE_INTERFACE
> bool "ARM Software Delegated Exception Interface (SDEI)"
> depends on ARM64
> - depends on ACPI_APEI_GHES
> help
> The Software Delegated Exception Interface (SDEI) is an ARM
> standard for registering callbacks from the platform firmware
> diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
> index 3e8051fe8296..71e2a9a89f6a 100644
> --- a/drivers/firmware/arm_sdei.c
> +++ b/drivers/firmware/arm_sdei.c
> @@ -1062,13 +1062,12 @@ static bool __init sdei_present_acpi(void)
> return true;
> }
>
> -void __init sdei_init(void)
> +void __init acpi_sdei_init(void)
> {
> struct platform_device *pdev;
> int ret;
>
> - ret = platform_driver_register(&sdei_driver);
> - if (ret || !sdei_present_acpi())
> + if (!sdei_present_acpi())
> return;
>
> pdev = platform_device_register_simple(sdei_driver.driver.name,
> @@ -1081,6 +1080,12 @@ void __init sdei_init(void)
> }
> }
>
> +static int __init sdei_init(void)
> +{
> + return platform_driver_register(&sdei_driver);
> +}
> +arch_initcall(sdei_init);
> +
> int sdei_event_handler(struct pt_regs *regs,
> struct sdei_registered_event *arg)
> {
> diff --git a/include/linux/arm_sdei.h b/include/linux/arm_sdei.h
> index 255701e1251b..f652a5028b59 100644
> --- a/include/linux/arm_sdei.h
> +++ b/include/linux/arm_sdei.h
> @@ -46,12 +46,12 @@ int sdei_unregister_ghes(struct ghes *ghes);
> /* For use by arch code when CPU hotplug notifiers are not appropriate. */
> int sdei_mask_local_cpu(void);
> int sdei_unmask_local_cpu(void);
> -void __init sdei_init(void);
> +void __init acpi_sdei_init(void);
> void sdei_handler_abort(void);
> #else
> static inline int sdei_mask_local_cpu(void) { return 0; }
> static inline int sdei_unmask_local_cpu(void) { return 0; }
> -static inline void sdei_init(void) { }
> +static inline void acpi_sdei_init(void) { }
> static inline void sdei_handler_abort(void) { }
> #endif /* CONFIG_ARM_SDE_INTERFACE */
>
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES
2025-05-07 4:57 [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES Huang Yiwei
2025-05-07 11:21 ` Rafael J. Wysocki
@ 2025-05-08 0:24 ` Gavin Shan
2025-05-08 1:11 ` Shuai Xue
2025-05-08 13:02 ` Will Deacon
3 siblings, 0 replies; 5+ messages in thread
From: Gavin Shan @ 2025-05-08 0:24 UTC (permalink / raw)
To: Huang Yiwei, will, rafael, lenb, james.morse, tony.luck, bp
Cc: xueshuai, quic_aiquny, quic_satyap, linux-acpi, linux-kernel,
linux-arm-kernel, kernel, kernel
On 5/7/25 2:57 PM, Huang Yiwei wrote:
> SDEI usually initialize with the ACPI table, but on platforms where
> ACPI is not used, the SDEI feature can still be used to handle
> specific firmware calls or other customized purposes. Therefore, it
> is not necessary for ARM_SDE_INTERFACE to depend on ACPI_APEI_GHES.
>
> In commit dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES
> in acpi_init()"), to make APEI ready earlier, sdei_init was moved
> into acpi_ghes_init instead of being a standalone initcall, adding
> ACPI_APEI_GHES dependency to ARM_SDE_INTERFACE. This restricts the
> flexibility and usability of SDEI.
>
> This patch corrects the dependency in Kconfig and splits sdei_init()
> into two separate functions: sdei_init() and acpi_sdei_init().
> sdei_init() will be called by arch_initcall and will only initialize
> the platform driver, while acpi_sdei_init() will initialize the
> device from acpi_ghes_init() when ACPI is ready. This allows the
> initialization of SDEI without ACPI_APEI_GHES enabled.
>
> Fixes: dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES in apci_init()")
> Cc: Shuai Xue <xueshuai@linux.alibaba.com>
> Signed-off-by: Huang Yiwei <quic_hyiwei@quicinc.com>
> ---
> drivers/acpi/apei/Kconfig | 1 +
> drivers/acpi/apei/ghes.c | 2 +-
> drivers/firmware/Kconfig | 1 -
> drivers/firmware/arm_sdei.c | 11 ++++++++---
> include/linux/arm_sdei.h | 4 ++--
> 5 files changed, 12 insertions(+), 7 deletions(-)
>
Reviewed-by: Gavin Shan <gshan@redhat.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES
2025-05-07 4:57 [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES Huang Yiwei
2025-05-07 11:21 ` Rafael J. Wysocki
2025-05-08 0:24 ` Gavin Shan
@ 2025-05-08 1:11 ` Shuai Xue
2025-05-08 13:02 ` Will Deacon
3 siblings, 0 replies; 5+ messages in thread
From: Shuai Xue @ 2025-05-08 1:11 UTC (permalink / raw)
To: Huang Yiwei, will, rafael, lenb, james.morse, tony.luck, bp
Cc: quic_aiquny, quic_satyap, linux-acpi, linux-kernel,
linux-arm-kernel, kernel, kernel
在 2025/5/7 12:57, Huang Yiwei 写道:
> SDEI usually initialize with the ACPI table, but on platforms where
> ACPI is not used, the SDEI feature can still be used to handle
> specific firmware calls or other customized purposes. Therefore, it
> is not necessary for ARM_SDE_INTERFACE to depend on ACPI_APEI_GHES.
>
> In commit dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES
> in acpi_init()"), to make APEI ready earlier, sdei_init was moved
> into acpi_ghes_init instead of being a standalone initcall, adding
> ACPI_APEI_GHES dependency to ARM_SDE_INTERFACE. This restricts the
> flexibility and usability of SDEI.
>
> This patch corrects the dependency in Kconfig and splits sdei_init()
> into two separate functions: sdei_init() and acpi_sdei_init().
> sdei_init() will be called by arch_initcall and will only initialize
> the platform driver, while acpi_sdei_init() will initialize the
> device from acpi_ghes_init() when ACPI is ready. This allows the
> initialization of SDEI without ACPI_APEI_GHES enabled.
>
> Fixes: dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES in apci_init()")
> Cc: Shuai Xue <xueshuai@linux.alibaba.com>
> Signed-off-by: Huang Yiwei <quic_hyiwei@quicinc.com>
> ---
> drivers/acpi/apei/Kconfig | 1 +
> drivers/acpi/apei/ghes.c | 2 +-
> drivers/firmware/Kconfig | 1 -
> drivers/firmware/arm_sdei.c | 11 ++++++++---
> include/linux/arm_sdei.h | 4 ++--
> 5 files changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/acpi/apei/Kconfig b/drivers/acpi/apei/Kconfig
> index 3cfe7e7475f2..070c07d68dfb 100644
> --- a/drivers/acpi/apei/Kconfig
> +++ b/drivers/acpi/apei/Kconfig
> @@ -23,6 +23,7 @@ config ACPI_APEI_GHES
> select ACPI_HED
> select IRQ_WORK
> select GENERIC_ALLOCATOR
> + select ARM_SDE_INTERFACE if ARM64
> help
> Generic Hardware Error Source provides a way to report
> platform hardware errors (such as that from chipset). It
> diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
> index 289e365f84b2..0f3c663c1b0a 100644
> --- a/drivers/acpi/apei/ghes.c
> +++ b/drivers/acpi/apei/ghes.c
> @@ -1715,7 +1715,7 @@ void __init acpi_ghes_init(void)
> {
> int rc;
>
> - sdei_init();
> + acpi_sdei_init();
>
> if (acpi_disabled)
> return;
> diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
> index aadc395ee168..7df19d82aa68 100644
> --- a/drivers/firmware/Kconfig
> +++ b/drivers/firmware/Kconfig
> @@ -31,7 +31,6 @@ config ARM_SCPI_PROTOCOL
> config ARM_SDE_INTERFACE
> bool "ARM Software Delegated Exception Interface (SDEI)"
> depends on ARM64
> - depends on ACPI_APEI_GHES
> help
> The Software Delegated Exception Interface (SDEI) is an ARM
> standard for registering callbacks from the platform firmware
> diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c
> index 3e8051fe8296..71e2a9a89f6a 100644
> --- a/drivers/firmware/arm_sdei.c
> +++ b/drivers/firmware/arm_sdei.c
> @@ -1062,13 +1062,12 @@ static bool __init sdei_present_acpi(void)
> return true;
> }
>
> -void __init sdei_init(void)
> +void __init acpi_sdei_init(void)
> {
> struct platform_device *pdev;
> int ret;
>
> - ret = platform_driver_register(&sdei_driver);
> - if (ret || !sdei_present_acpi())
> + if (!sdei_present_acpi())
> return;
>
> pdev = platform_device_register_simple(sdei_driver.driver.name,
> @@ -1081,6 +1080,12 @@ void __init sdei_init(void)
> }
> }
>
> +static int __init sdei_init(void)
> +{
> + return platform_driver_register(&sdei_driver);
> +}
> +arch_initcall(sdei_init);
> +
> int sdei_event_handler(struct pt_regs *regs,
> struct sdei_registered_event *arg)
> {
> diff --git a/include/linux/arm_sdei.h b/include/linux/arm_sdei.h
> index 255701e1251b..f652a5028b59 100644
> --- a/include/linux/arm_sdei.h
> +++ b/include/linux/arm_sdei.h
> @@ -46,12 +46,12 @@ int sdei_unregister_ghes(struct ghes *ghes);
> /* For use by arch code when CPU hotplug notifiers are not appropriate. */
> int sdei_mask_local_cpu(void);
> int sdei_unmask_local_cpu(void);
> -void __init sdei_init(void);
> +void __init acpi_sdei_init(void);
> void sdei_handler_abort(void);
> #else
> static inline int sdei_mask_local_cpu(void) { return 0; }
> static inline int sdei_unmask_local_cpu(void) { return 0; }
> -static inline void sdei_init(void) { }
> +static inline void acpi_sdei_init(void) { }
> static inline void sdei_handler_abort(void) { }
> #endif /* CONFIG_ARM_SDE_INTERFACE */
>
LGTM. Thanks.
Reviewed-by: Shuai Xue <xueshuai@linux.alibaba.com>
Shuai
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES
2025-05-07 4:57 [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES Huang Yiwei
` (2 preceding siblings ...)
2025-05-08 1:11 ` Shuai Xue
@ 2025-05-08 13:02 ` Will Deacon
3 siblings, 0 replies; 5+ messages in thread
From: Will Deacon @ 2025-05-08 13:02 UTC (permalink / raw)
To: rafael, lenb, james.morse, tony.luck, bp, Huang Yiwei
Cc: catalin.marinas, kernel-team, Will Deacon, xueshuai, quic_aiquny,
quic_satyap, linux-acpi, linux-kernel, linux-arm-kernel, kernel,
kernel
On Wed, 07 May 2025 12:57:57 +0800, Huang Yiwei wrote:
> SDEI usually initialize with the ACPI table, but on platforms where
> ACPI is not used, the SDEI feature can still be used to handle
> specific firmware calls or other customized purposes. Therefore, it
> is not necessary for ARM_SDE_INTERFACE to depend on ACPI_APEI_GHES.
>
> In commit dc4e8c07e9e2 ("ACPI: APEI: explicit init of HEST and GHES
> in acpi_init()"), to make APEI ready earlier, sdei_init was moved
> into acpi_ghes_init instead of being a standalone initcall, adding
> ACPI_APEI_GHES dependency to ARM_SDE_INTERFACE. This restricts the
> flexibility and usability of SDEI.
>
> [...]
Applied to arm64 (for-next/acpi), thanks!
[1/1] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES
https://git.kernel.org/arm64/c/59529bbe642d
Cheers,
--
Will
https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-05-08 13:02 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-07 4:57 [PATCH v2] firmware: SDEI: Allow sdei initialization without ACPI_APEI_GHES Huang Yiwei
2025-05-07 11:21 ` Rafael J. Wysocki
2025-05-08 0:24 ` Gavin Shan
2025-05-08 1:11 ` Shuai Xue
2025-05-08 13:02 ` Will Deacon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®