提交 d44538a7 编写于 作者: H Hongbo Yao 提交者: Xie XiuQi

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: NHongbo Yao <yaohongbo@huawei.com>
Reviewed-by: NHanjun Guo <guohanjun@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 580fcece
...@@ -40,10 +40,6 @@ ...@@ -40,10 +40,6 @@
(!(entry) || (entry)->header.length < ACPI_MADT_GICC_MIN_LENGTH || \ (!(entry) || (entry)->header.length < ACPI_MADT_GICC_MIN_LENGTH || \
(unsigned long)(entry) + (entry)->header.length > (end)) (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 */ /* Basic configuration for ACPI */
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
pgprot_t __acpi_get_mem_attribute(phys_addr_t addr); pgprot_t __acpi_get_mem_attribute(phys_addr_t addr);
......
...@@ -74,82 +74,6 @@ static void arm_pmu_acpi_unregister_irq(int cpu) ...@@ -74,82 +74,6 @@ static void arm_pmu_acpi_unregister_irq(int cpu)
acpi_unregister_gsi(gsi); 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) static int arm_pmu_acpi_parse_irqs(void)
{ {
int irq, cpu, irq_cpu, err; int irq, cpu, irq_cpu, err;
...@@ -355,8 +279,6 @@ static int arm_pmu_acpi_init(void) ...@@ -355,8 +279,6 @@ static int arm_pmu_acpi_init(void)
if (acpi_disabled) if (acpi_disabled)
return 0; return 0;
arm_spe_acpi_parse_irqs(); /* failures are expected */
ret = arm_pmu_acpi_parse_irqs(); ret = arm_pmu_acpi_parse_irqs();
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册