diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2012-01-05 12:09:04 -0500 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2013-03-12 16:59:34 -0400 |
commit | b9faa360fa2cbdccd0a56b6553362d1ada556bbb (patch) | |
tree | ead68f181d7fc3e8cd9f1b534959b12b0e712155 /arch/powerpc/platforms | |
parent | 077f598ac706779303a145e75bd045bb0663063f (diff) |
powerpc/fsl-booke: Add initial T4240QDS board support
Some minor changes to the common corenet_ds.c code are needed to support
the T4240QDS:
* Add support for "fsl,qoriq-pcie-v3.0" controller
* Bump max # of IRQs to 512 (T4240 supports more interrupts than
previous SoCs).
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r-- | arch/powerpc/platforms/85xx/Kconfig | 17 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/Makefile | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/corenet_ds.c | 5 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/t4240_qds.c | 98 |
4 files changed, 120 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig index a0dcd577fb0d..31dc0668a8ec 100644 --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig | |||
@@ -305,6 +305,23 @@ config PPC_QEMU_E500 | |||
305 | unset based on the emulated CPU (or actual host CPU in the case | 305 | unset based on the emulated CPU (or actual host CPU in the case |
306 | of KVM). | 306 | of KVM). |
307 | 307 | ||
308 | if PPC64 | ||
309 | |||
310 | config T4240_QDS | ||
311 | bool "Freescale T4240 QDS" | ||
312 | select DEFAULT_UIMAGE | ||
313 | select E500 | ||
314 | select PPC_E500MC | ||
315 | select PHYS_64BIT | ||
316 | select SWIOTLB | ||
317 | select ARCH_REQUIRE_GPIOLIB | ||
318 | select GPIO_MPC8XXX | ||
319 | select HAS_RAPIDIO | ||
320 | select PPC_EPAPR_HV_PIC | ||
321 | help | ||
322 | This option enables support for the T4240 QDS board | ||
323 | |||
324 | endif | ||
308 | endif # FSL_SOC_BOOKE | 325 | endif # FSL_SOC_BOOKE |
309 | 326 | ||
310 | config TQM85xx | 327 | config TQM85xx |
diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile index 07d0dbb141c0..712e23313bb6 100644 --- a/arch/powerpc/platforms/85xx/Makefile +++ b/arch/powerpc/platforms/85xx/Makefile | |||
@@ -22,6 +22,7 @@ obj-$(CONFIG_P3041_DS) += p3041_ds.o corenet_ds.o | |||
22 | obj-$(CONFIG_P4080_DS) += p4080_ds.o corenet_ds.o | 22 | obj-$(CONFIG_P4080_DS) += p4080_ds.o corenet_ds.o |
23 | obj-$(CONFIG_P5020_DS) += p5020_ds.o corenet_ds.o | 23 | obj-$(CONFIG_P5020_DS) += p5020_ds.o corenet_ds.o |
24 | obj-$(CONFIG_P5040_DS) += p5040_ds.o corenet_ds.o | 24 | obj-$(CONFIG_P5040_DS) += p5040_ds.o corenet_ds.o |
25 | obj-$(CONFIG_T4240_QDS) += t4240_qds.o corenet_ds.o | ||
25 | obj-$(CONFIG_STX_GP3) += stx_gp3.o | 26 | obj-$(CONFIG_STX_GP3) += stx_gp3.o |
26 | obj-$(CONFIG_TQM85xx) += tqm85xx.o | 27 | obj-$(CONFIG_TQM85xx) += tqm85xx.o |
27 | obj-$(CONFIG_SBC8548) += sbc8548.o | 28 | obj-$(CONFIG_SBC8548) += sbc8548.o |
diff --git a/arch/powerpc/platforms/85xx/corenet_ds.c b/arch/powerpc/platforms/85xx/corenet_ds.c index 6f355d8c92f6..c59c617eee93 100644 --- a/arch/powerpc/platforms/85xx/corenet_ds.c +++ b/arch/powerpc/platforms/85xx/corenet_ds.c | |||
@@ -40,7 +40,7 @@ void __init corenet_ds_pic_init(void) | |||
40 | if (ppc_md.get_irq == mpic_get_coreint_irq) | 40 | if (ppc_md.get_irq == mpic_get_coreint_irq) |
41 | flags |= MPIC_ENABLE_COREINT; | 41 | flags |= MPIC_ENABLE_COREINT; |
42 | 42 | ||
43 | mpic = mpic_alloc(NULL, 0, flags, 0, 256, " OpenPIC "); | 43 | mpic = mpic_alloc(NULL, 0, flags, 0, 512, " OpenPIC "); |
44 | BUG_ON(mpic == NULL); | 44 | BUG_ON(mpic == NULL); |
45 | 45 | ||
46 | mpic_init(mpic); | 46 | mpic_init(mpic); |
@@ -83,6 +83,9 @@ static const struct of_device_id of_device_ids[] = { | |||
83 | { | 83 | { |
84 | .compatible = "fsl,qoriq-pcie-v2.4", | 84 | .compatible = "fsl,qoriq-pcie-v2.4", |
85 | }, | 85 | }, |
86 | { | ||
87 | .compatible = "fsl,qoriq-pcie-v3.0", | ||
88 | }, | ||
86 | /* The following two are for the Freescale hypervisor */ | 89 | /* The following two are for the Freescale hypervisor */ |
87 | { | 90 | { |
88 | .name = "hypervisor", | 91 | .name = "hypervisor", |
diff --git a/arch/powerpc/platforms/85xx/t4240_qds.c b/arch/powerpc/platforms/85xx/t4240_qds.c new file mode 100644 index 000000000000..5998e9f33304 --- /dev/null +++ b/arch/powerpc/platforms/85xx/t4240_qds.c | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * T4240 QDS Setup | ||
3 | * | ||
4 | * Maintained by Kumar Gala (see MAINTAINERS for contact information) | ||
5 | * | ||
6 | * Copyright 2012 Freescale Semiconductor Inc. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | */ | ||
13 | |||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/pci.h> | ||
16 | #include <linux/kdev_t.h> | ||
17 | #include <linux/delay.h> | ||
18 | #include <linux/interrupt.h> | ||
19 | #include <linux/phy.h> | ||
20 | |||
21 | #include <asm/time.h> | ||
22 | #include <asm/machdep.h> | ||
23 | #include <asm/pci-bridge.h> | ||
24 | #include <mm/mmu_decl.h> | ||
25 | #include <asm/prom.h> | ||
26 | #include <asm/udbg.h> | ||
27 | #include <asm/mpic.h> | ||
28 | |||
29 | #include <linux/of_platform.h> | ||
30 | #include <sysdev/fsl_soc.h> | ||
31 | #include <sysdev/fsl_pci.h> | ||
32 | #include <asm/ehv_pic.h> | ||
33 | |||
34 | #include "corenet_ds.h" | ||
35 | |||
36 | /* | ||
37 | * Called very early, device-tree isn't unflattened | ||
38 | */ | ||
39 | static int __init t4240_qds_probe(void) | ||
40 | { | ||
41 | unsigned long root = of_get_flat_dt_root(); | ||
42 | #ifdef CONFIG_SMP | ||
43 | extern struct smp_ops_t smp_85xx_ops; | ||
44 | #endif | ||
45 | |||
46 | if (of_flat_dt_is_compatible(root, "fsl,T4240QDS")) | ||
47 | return 1; | ||
48 | |||
49 | /* Check if we're running under the Freescale hypervisor */ | ||
50 | if (of_flat_dt_is_compatible(root, "fsl,T4240QDS-hv")) { | ||
51 | ppc_md.init_IRQ = ehv_pic_init; | ||
52 | ppc_md.get_irq = ehv_pic_get_irq; | ||
53 | ppc_md.restart = fsl_hv_restart; | ||
54 | ppc_md.power_off = fsl_hv_halt; | ||
55 | ppc_md.halt = fsl_hv_halt; | ||
56 | #ifdef CONFIG_SMP | ||
57 | /* | ||
58 | * Disable the timebase sync operations because we can't write | ||
59 | * to the timebase registers under the hypervisor. | ||
60 | */ | ||
61 | smp_85xx_ops.give_timebase = NULL; | ||
62 | smp_85xx_ops.take_timebase = NULL; | ||
63 | #endif | ||
64 | return 1; | ||
65 | } | ||
66 | |||
67 | return 0; | ||
68 | } | ||
69 | |||
70 | define_machine(t4240_qds) { | ||
71 | .name = "T4240 QDS", | ||
72 | .probe = t4240_qds_probe, | ||
73 | .setup_arch = corenet_ds_setup_arch, | ||
74 | .init_IRQ = corenet_ds_pic_init, | ||
75 | #ifdef CONFIG_PCI | ||
76 | .pcibios_fixup_bus = fsl_pcibios_fixup_bus, | ||
77 | #endif | ||
78 | /* coreint doesn't play nice with lazy EE, use legacy mpic for now */ | ||
79 | #ifdef CONFIG_PPC64 | ||
80 | .get_irq = mpic_get_irq, | ||
81 | #else | ||
82 | .get_irq = mpic_get_coreint_irq, | ||
83 | #endif | ||
84 | .restart = fsl_rstcr_restart, | ||
85 | .calibrate_decr = generic_calibrate_decr, | ||
86 | .progress = udbg_progress, | ||
87 | #ifdef CONFIG_PPC64 | ||
88 | .power_save = book3e_idle, | ||
89 | #else | ||
90 | .power_save = e500_idle, | ||
91 | #endif | ||
92 | }; | ||
93 | |||
94 | machine_arch_initcall(t4240_qds, corenet_ds_publish_devices); | ||
95 | |||
96 | #ifdef CONFIG_SWIOTLB | ||
97 | machine_arch_initcall(t4240_qds, swiotlb_setup_bus_notifier); | ||
98 | #endif | ||