ARM: 6057/1: Realview: register PMU IRQs during board initialisation
This patch updates the initialisation routines for the Realview boards and the Versatile Express board [ca9x4 tile] so that they register their PMU IRQs with the PMU framework in the Kernel. Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
Родитель
59ac59f6f1
Коммит
f417cbad73
|
@ -31,6 +31,7 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/leds.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/pmu.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
#include <asm/localtimer.h>
|
||||
|
@ -292,6 +293,36 @@ static struct resource realview_eb_isp1761_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct resource pmu_resources[] = {
|
||||
[0] = {
|
||||
.start = IRQ_EB11MP_PMU_CPU0,
|
||||
.end = IRQ_EB11MP_PMU_CPU0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[1] = {
|
||||
.start = IRQ_EB11MP_PMU_CPU1,
|
||||
.end = IRQ_EB11MP_PMU_CPU1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_EB11MP_PMU_CPU2,
|
||||
.end = IRQ_EB11MP_PMU_CPU2,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[3] = {
|
||||
.start = IRQ_EB11MP_PMU_CPU3,
|
||||
.end = IRQ_EB11MP_PMU_CPU3,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device pmu_device = {
|
||||
.name = "arm-pmu",
|
||||
.id = ARM_PMU_DEVICE_CPU,
|
||||
.num_resources = ARRAY_SIZE(pmu_resources),
|
||||
.resource = pmu_resources,
|
||||
};
|
||||
|
||||
static void __init gic_init_irq(void)
|
||||
{
|
||||
if (core_tile_eb11mp() || core_tile_a9mp()) {
|
||||
|
@ -405,6 +436,7 @@ static void __init realview_eb_init(void)
|
|||
* Bits: .... ...0 0111 1001 0000 .... .... .... */
|
||||
l2x0_init(__io_address(REALVIEW_EB11MP_L220_BASE), 0x00790000, 0xfe000fff);
|
||||
#endif
|
||||
platform_device_register(&pmu_device);
|
||||
}
|
||||
|
||||
realview_flash_register(&realview_eb_flash_resource, 1);
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/leds.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/pmu.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
|
||||
|
@ -261,6 +262,19 @@ static struct resource realview_pb1176_isp1761_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct resource pmu_resource = {
|
||||
.start = IRQ_DC1176_CORE_PMU,
|
||||
.end = IRQ_DC1176_CORE_PMU,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
static struct platform_device pmu_device = {
|
||||
.name = "arm-pmu",
|
||||
.id = ARM_PMU_DEVICE_CPU,
|
||||
.num_resources = 1,
|
||||
.resource = &pmu_resource,
|
||||
};
|
||||
|
||||
static void __init gic_init_irq(void)
|
||||
{
|
||||
/* ARM1176 DevChip GIC, primary */
|
||||
|
@ -322,6 +336,7 @@ static void __init realview_pb1176_init(void)
|
|||
realview_eth_register(NULL, realview_pb1176_smsc911x_resources);
|
||||
platform_device_register(&realview_i2c_device);
|
||||
realview_usb_register(realview_pb1176_isp1761_resources);
|
||||
platform_device_register(&pmu_device);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
||||
struct amba_device *d = amba_devs[i];
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/leds.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/pmu.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
#include <asm/localtimer.h>
|
||||
|
@ -258,6 +259,36 @@ static struct resource realview_pb11mp_isp1761_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct resource pmu_resources[] = {
|
||||
[0] = {
|
||||
.start = IRQ_TC11MP_PMU_CPU0,
|
||||
.end = IRQ_TC11MP_PMU_CPU0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[1] = {
|
||||
.start = IRQ_TC11MP_PMU_CPU1,
|
||||
.end = IRQ_TC11MP_PMU_CPU1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_TC11MP_PMU_CPU2,
|
||||
.end = IRQ_TC11MP_PMU_CPU2,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[3] = {
|
||||
.start = IRQ_TC11MP_PMU_CPU3,
|
||||
.end = IRQ_TC11MP_PMU_CPU3,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device pmu_device = {
|
||||
.name = "arm-pmu",
|
||||
.id = ARM_PMU_DEVICE_CPU,
|
||||
.num_resources = ARRAY_SIZE(pmu_resources),
|
||||
.resource = pmu_resources,
|
||||
};
|
||||
|
||||
static void __init gic_init_irq(void)
|
||||
{
|
||||
unsigned int pldctrl;
|
||||
|
@ -327,6 +358,7 @@ static void __init realview_pb11mp_init(void)
|
|||
platform_device_register(&realview_i2c_device);
|
||||
platform_device_register(&realview_cf_device);
|
||||
realview_usb_register(realview_pb11mp_isp1761_resources);
|
||||
platform_device_register(&pmu_device);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
||||
struct amba_device *d = amba_devs[i];
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/leds.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/pmu.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
|
@ -248,6 +249,19 @@ static struct resource realview_pba8_isp1761_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct resource pmu_resource = {
|
||||
.start = IRQ_PBA8_PMU,
|
||||
.end = IRQ_PBA8_PMU,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
static struct platform_device pmu_device = {
|
||||
.name = "arm-pmu",
|
||||
.id = ARM_PMU_DEVICE_CPU,
|
||||
.num_resources = 1,
|
||||
.resource = &pmu_resource,
|
||||
};
|
||||
|
||||
static void __init gic_init_irq(void)
|
||||
{
|
||||
/* ARM PB-A8 on-board GIC */
|
||||
|
@ -294,6 +308,7 @@ static void __init realview_pba8_init(void)
|
|||
platform_device_register(&realview_i2c_device);
|
||||
platform_device_register(&realview_cf_device);
|
||||
realview_usb_register(realview_pba8_isp1761_resources);
|
||||
platform_device_register(&pmu_device);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
||||
struct amba_device *d = amba_devs[i];
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <asm/irq.h>
|
||||
#include <asm/leds.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/pmu.h>
|
||||
#include <asm/smp_twd.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
|
@ -270,6 +271,36 @@ static struct resource realview_pbx_isp1761_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct resource pmu_resources[] = {
|
||||
[0] = {
|
||||
.start = IRQ_PBX_PMU_CPU0,
|
||||
.end = IRQ_PBX_PMU_CPU0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[1] = {
|
||||
.start = IRQ_PBX_PMU_CPU1,
|
||||
.end = IRQ_PBX_PMU_CPU1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_PBX_PMU_CPU2,
|
||||
.end = IRQ_PBX_PMU_CPU2,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[3] = {
|
||||
.start = IRQ_PBX_PMU_CPU3,
|
||||
.end = IRQ_PBX_PMU_CPU3,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device pmu_device = {
|
||||
.name = "arm-pmu",
|
||||
.id = ARM_PMU_DEVICE_CPU,
|
||||
.num_resources = ARRAY_SIZE(pmu_resources),
|
||||
.resource = pmu_resources,
|
||||
};
|
||||
|
||||
static void __init gic_init_irq(void)
|
||||
{
|
||||
/* ARM PBX on-board GIC */
|
||||
|
@ -354,6 +385,7 @@ static void __init realview_pbx_init(void)
|
|||
/* 16KB way size, 8-way associativity, parity disabled
|
||||
* Bits: .. 0 0 0 0 1 00 1 0 1 001 0 000 0 .... .... .... */
|
||||
l2x0_init(l2x0_base, 0x02520000, 0xc0000fff);
|
||||
platform_device_register(&pmu_device);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
|
||||
|
@ -12,6 +13,7 @@
|
|||
#include <asm/hardware/cache-l2x0.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/pmu.h>
|
||||
|
||||
#include <mach/clkdev.h>
|
||||
#include <mach/ct-ca9x4.h>
|
||||
|
@ -186,6 +188,36 @@ static struct clk_lookup lookups[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct resource pmu_resources[] = {
|
||||
[0] = {
|
||||
.start = IRQ_CT_CA9X4_PMU_CPU0,
|
||||
.end = IRQ_CT_CA9X4_PMU_CPU0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[1] = {
|
||||
.start = IRQ_CT_CA9X4_PMU_CPU1,
|
||||
.end = IRQ_CT_CA9X4_PMU_CPU1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_CT_CA9X4_PMU_CPU2,
|
||||
.end = IRQ_CT_CA9X4_PMU_CPU2,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[3] = {
|
||||
.start = IRQ_CT_CA9X4_PMU_CPU3,
|
||||
.end = IRQ_CT_CA9X4_PMU_CPU3,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device pmu_device = {
|
||||
.name = "arm-pmu",
|
||||
.id = ARM_PMU_DEVICE_CPU,
|
||||
.num_resources = ARRAY_SIZE(pmu_resources),
|
||||
.resource = pmu_resources,
|
||||
};
|
||||
|
||||
static void ct_ca9x4_init(void)
|
||||
{
|
||||
int i;
|
||||
|
@ -198,6 +230,8 @@ static void ct_ca9x4_init(void)
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE(ct_ca9x4_amba_devs); i++)
|
||||
amba_device_register(ct_ca9x4_amba_devs[i], &iomem_resource);
|
||||
|
||||
platform_device_register(&pmu_device);
|
||||
}
|
||||
|
||||
MACHINE_START(VEXPRESS, "ARM-Versatile Express CA9x4")
|
||||
|
|
|
@ -39,5 +39,9 @@
|
|||
#define IRQ_CT_CA9X4_TIMER0 80
|
||||
#define IRQ_CT_CA9X4_TIMER1 81
|
||||
#define IRQ_CT_CA9X4_GPIO { 82 }
|
||||
#define IRQ_CT_CA9X4_PMU_CPU0 92
|
||||
#define IRQ_CT_CA9X4_PMU_CPU1 93
|
||||
#define IRQ_CT_CA9X4_PMU_CPU2 94
|
||||
#define IRQ_CT_CA9X4_PMU_CPU3 95
|
||||
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче