From d44538a7558f3afe9c6a7b0c4112680536d83485 Mon Sep 17 00:00:00 2001 From: Hongbo Yao Date: Mon, 19 Aug 2019 17:29:09 +0800 Subject: [PATCH] Revert "arm_pmu: acpi: spe: Add initial MADT/SPE probing" hulk inclusion category: feature bugzilla: 16072 CVE: NA --------------------------- This reverts commit 556b16f5ad7e910c3784bb02b33c2af6ca9c9a4b. In Linux 5.3.0, SPE ACPI enablement has been upstreamed. SPE patches in hulk-4.19 are the old version, and they need to be reverted to the mainline version. Signed-off-by: Hongbo Yao Reviewed-by: Hanjun Guo Signed-off-by: Yang Yingliang --- arch/arm64/include/asm/acpi.h | 4 -- drivers/perf/arm_pmu_acpi.c | 78 ----------------------------------- 2 files changed, 82 deletions(-) diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h index 1bae47510cd7..2def77ec14be 100644 --- a/arch/arm64/include/asm/acpi.h +++ b/arch/arm64/include/asm/acpi.h @@ -40,10 +40,6 @@ (!(entry) || (entry)->header.length < ACPI_MADT_GICC_MIN_LENGTH || \ (unsigned long)(entry) + (entry)->header.length > (end)) -#define ACPI_MADT_GICC_SPE (ACPI_OFFSET(struct acpi_madt_generic_interrupt, \ - spe_overflow_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 70f605568aee..0f197516d708 100644 --- a/drivers/perf/arm_pmu_acpi.c +++ b/drivers/perf/arm_pmu_acpi.c @@ -74,82 +74,6 @@ static void arm_pmu_acpi_unregister_irq(int cpu) acpi_unregister_gsi(gsi); } -static struct resource spe_resources[] = { - { - /* irq */ - .flags = IORESOURCE_IRQ, - } -}; - -static struct platform_device spe_dev = { - .name = "arm,spe-v1", - .id = -1, - .resource = spe_resources, - .num_resources = ARRAY_SIZE(spe_resources) -}; - -/* - * For lack of a better place lets just hook the - * normal PMU MADT walk and create a SPE device if - * we detect a recent MADT with a homogeneous PPI mapping - */ -static int arm_spe_acpi_parse_irqs(void) -{ - int cpu, ret, irq; - u32 flags, gsi; - bool first = true; - - struct acpi_madt_generic_interrupt *gicc; - - /* - * sanity check all the GICC tables for the same interrupt number - * for now we only support homogeneous ACPI/SPE machines. - */ - for_each_possible_cpu(cpu) { - gicc = acpi_cpu_get_madt_gicc(cpu); - - if (gicc->header.length < ACPI_MADT_GICC_SPE) - return -ENODEV; - - if (first) { - gsi = gicc->spe_overflow_interrupt; - if (!gsi) - return -ENODEV; - first = false; - } else if (gsi != gicc->spe_overflow_interrupt) { - pr_warn("ACPI: SPE must have homogeneous interrupts\n"); - return -EINVAL; - } - } - - irq = acpi_register_gsi(NULL, gsi, ACPI_LEVEL_SENSITIVE, - ACPI_ACTIVE_HIGH); - if (irq < 0) { - pr_warn("ACPI: SPE Unable to register interrupt: %d\n", gsi); - return irq; - } - - /* - * really we want SPE to behave like a normal ACPI device, with the - * possibility of future power control methods, compatible flags/etc. - * But we don't have that choice and acpi_add_single_object() and - * acpi_create_platform_device() makes it hard to simulate that - * functionality outside of DSDT. - * Spinning this off as a platform device is the least evil - * choice that gives us a normal driver module that can be - * loaded/unloaded without a lot of overhead while keeping open the - * possibility of future expansion via compatible alternative modules. - */ - spe_resources[0].start = irq; - ret = platform_device_register(&spe_dev); - if (ret < 0) { - pr_warn("ACPI: SPE: Unable to register device\n"); - acpi_unregister_gsi(gsi); - } - - return ret; -} - static int arm_pmu_acpi_parse_irqs(void) { int irq, cpu, irq_cpu, err; @@ -355,8 +279,6 @@ static int arm_pmu_acpi_init(void) if (acpi_disabled) return 0; - arm_spe_acpi_parse_irqs(); /* failures are expected */ - ret = arm_pmu_acpi_parse_irqs(); if (ret) return ret; -- GitLab