On 8/3/23 14:44, Yicong Yang wrote:
On 2023/8/3 13:56, Anshuman Khandual wrote:
ACPI TRBE does not have a HID for identification which could create and add a platform device into the platform bus. Also without a platform device, it cannot be probed and bound to a platform driver.
This creates a dummy platform device for TRBE after ascertaining that ACPI provides required interrupts uniformly across all cpus on the system. This device gets created inside drivers/perf/arm_pmu_acpi.c to accommodate TRBE being built as a module.
Cc: Catalin Marinas catalin.marinas@arm.com Cc: Will Deacon will@kernel.org Cc: Mark Rutland mark.rutland@arm.com Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual anshuman.khandual@arm.com
arch/arm64/include/asm/acpi.h | 3 +++ drivers/perf/arm_pmu_acpi.c | 37 ++++++++++++++++++++++++++++++++++- include/linux/perf/arm_pmu.h | 1 + 3 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h index bd68e1b7f29f..4d537d56eb84 100644 --- a/arch/arm64/include/asm/acpi.h +++ b/arch/arm64/include/asm/acpi.h @@ -42,6 +42,9 @@ #define ACPI_MADT_GICC_SPE (offsetof(struct acpi_madt_generic_interrupt, \ spe_interrupt) + sizeof(u16)) +#define ACPI_MADT_GICC_TRBE (offsetof(struct acpi_madt_generic_interrupt, \
- trbe_interrupt) + sizeof(u16))
/* Basic configuration for ACPI */ #ifdef CONFIG_ACPI pgprot_t __acpi_get_mem_attribute(phys_addr_t addr); diff --git a/drivers/perf/arm_pmu_acpi.c b/drivers/perf/arm_pmu_acpi.c index 235c14766a36..79feea548e6e 100644 --- a/drivers/perf/arm_pmu_acpi.c +++ b/drivers/perf/arm_pmu_acpi.c @@ -69,7 +69,7 @@ static void arm_pmu_acpi_unregister_irq(int cpu) acpi_unregister_gsi(gsi); } -#if IS_ENABLED(CONFIG_ARM_SPE_PMU) +#if IS_ENABLED(CONFIG_ARM_SPE_PMU) || IS_ENABLED(CONFIG_CORESIGHT_TRBE) static int arm_acpi_register_pmu_device(struct platform_device *pdev, u8 len, u16 (*parse_gsi)(struct acpi_madt_generic_interrupt *)) @@ -166,6 +166,40 @@ static inline void arm_spe_acpi_register_device(void) } #endif /* CONFIG_ARM_SPE_PMU */ +#ifdef CONFIG_CORESIGHT_TRBE
Maybe we should use #if IS_ENABLED(CONFIG_CORESIGHT_TRBE) here and other places?
As trbe can be configured as a module, when CONFIG_CORESIGHT_TRBE=m this block won't be compiled. Referred to
https://github.com/torvalds/linux/blob/c7c90e121e992eefdf07945e5a6e9cf097b29...
You are right, just making CONFIG_CORESIGHT_TRBE=m make it fall back on the stub arm_trbe_acpi_register_device() definition, which does not create the required dummy platform device thus preventing TRBE probe on the platform.
Will change the above #ifdef as IS_ENABLED() for CONFIG_CORESIGHT_TRBE and revert back using IS_ENABLED() in the previous patch for CONFIG_ARM_SPE_PMU as well. Thanks for noticing this problem.