mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 09:14:19 +08:00
d60fc3892c
ACPI kernel uses MADT table for proper GIC initialization. It needs to parse GIC related subtables, collect CPU interface and distributor addresses and call driver initialization function (which is hardware abstraction agnostic). In a similar way, FDT initialize GICv1/2. NOTE: This commit allow to initialize GICv1/2 basic functionality. While now simple GICv2 init call is used, any further GIC features require generic infrastructure for proper ACPI irqchip initialization. That mechanism and stacked irqdomains to support GICv2 MSI/virtualization extension, GICv3/4 and its ITS are considered as next steps. CC: Jason Cooper <jason@lakedaemon.net> CC: Marc Zyngier <marc.zyngier@arm.com> CC: Thomas Gleixner <tglx@linutronix.de> Tested-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com> Tested-by: Yijing Wang <wangyijing@huawei.com> Tested-by: Mark Langsdorf <mlangsdo@redhat.com> Tested-by: Jon Masters <jcm@redhat.com> Tested-by: Timur Tabi <timur@codeaurora.org> Tested-by: Robert Richter <rrichter@cavium.com> Acked-by: Robert Richter <rrichter@cavium.com> Acked-by: Marc Zyngier <marc.zyngier@arm.com> Acked-by: Jason Cooper <jason@lakedaemon.net> Reviewed-by: Grant Likely <grant.likely@linaro.org> Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org> Signed-off-by: Will Deacon <will.deacon@arm.com>
33 lines
866 B
C
33 lines
866 B
C
/*
|
|
* Copyright (C) 2012 Thomas Petazzoni
|
|
*
|
|
* Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
*
|
|
* This file is licensed under the terms of the GNU General Public
|
|
* License version 2. This program is licensed "as is" without any
|
|
* warranty of any kind, whether express or implied.
|
|
*/
|
|
|
|
#include <linux/acpi_irq.h>
|
|
#include <linux/init.h>
|
|
#include <linux/of_irq.h>
|
|
#include <linux/irqchip.h>
|
|
|
|
/*
|
|
* This special of_device_id is the sentinel at the end of the
|
|
* of_device_id[] array of all irqchips. It is automatically placed at
|
|
* the end of the array by the linker, thanks to being part of a
|
|
* special section.
|
|
*/
|
|
static const struct of_device_id
|
|
irqchip_of_match_end __used __section(__irqchip_of_table_end);
|
|
|
|
extern struct of_device_id __irqchip_of_table[];
|
|
|
|
void __init irqchip_init(void)
|
|
{
|
|
of_irq_init(__irqchip_of_table);
|
|
|
|
acpi_irq_init();
|
|
}
|