aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-tegra/board-dt-tegra20.c
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2012-05-02 15:43:26 -0400
committerStephen Warren <swarren@nvidia.com>2012-06-20 14:37:41 -0400
commitc554dee35c3e6b0c19db5fb75193d4cd99736c6b (patch)
tree48c1a144d458a6c4614752787a5835796e4760b8 /arch/arm/mach-tegra/board-dt-tegra20.c
parent98a1405e20ecf261abbc091eabb229d8adfbf62c (diff)
ARM: tegra: trimslice: enable PCIe when booting from device tree
There currently aren't bindings for the Tegra PCIe controller. Work on this is in progress, but not yet complete. Manually initialize PCIe when booting from device tree, in order to bring DT support to the same feature level as board files, which will in turn allow board files to be deprecated. PCIe hosts the wired Ethernet controller on TrimSlice. To support this, add infra-structure to board-dt-tegra20.c for board- specific initialization code. Once device tree support for the relevant features is in place, this code will be removed. Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/board-dt-tegra20.c')
-rw-r--r--arch/arm/mach-tegra/board-dt-tegra20.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/board-dt-tegra20.c b/arch/arm/mach-tegra/board-dt-tegra20.c
index eb7249db50a5..9537f20384fc 100644
--- a/arch/arm/mach-tegra/board-dt-tegra20.c
+++ b/arch/arm/mach-tegra/board-dt-tegra20.c
@@ -98,6 +98,40 @@ static void __init tegra_dt_init(void)
98 tegra20_auxdata_lookup, NULL); 98 tegra20_auxdata_lookup, NULL);
99} 99}
100 100
101#ifdef CONFIG_MACH_TRIMSLICE
102static void __init trimslice_init(void)
103{
104 int ret;
105
106 ret = tegra_pcie_init(true, true);
107 if (ret)
108 pr_err("tegra_pci_init() failed: %d\n", ret);
109}
110#endif
111
112static struct {
113 char *machine;
114 void (*init)(void);
115} board_init_funcs[] = {
116#ifdef CONFIG_MACH_TRIMSLICE
117 { "compulab,trimslice", trimslice_init },
118#endif
119};
120
121static void __init tegra_dt_init_late(void)
122{
123 int i;
124
125 tegra_init_late();
126
127 for (i = 0; i < ARRAY_SIZE(board_init_funcs); i++) {
128 if (of_machine_is_compatible(board_init_funcs[i].machine)) {
129 board_init_funcs[i].init();
130 break;
131 }
132 }
133}
134
101static const char *tegra20_dt_board_compat[] = { 135static const char *tegra20_dt_board_compat[] = {
102 "nvidia,tegra20", 136 "nvidia,tegra20",
103 NULL 137 NULL
@@ -110,7 +144,7 @@ DT_MACHINE_START(TEGRA_DT, "nVidia Tegra20 (Flattened Device Tree)")
110 .handle_irq = gic_handle_irq, 144 .handle_irq = gic_handle_irq,
111 .timer = &tegra_timer, 145 .timer = &tegra_timer,
112 .init_machine = tegra_dt_init, 146 .init_machine = tegra_dt_init,
113 .init_late = tegra_init_late, 147 .init_late = tegra_dt_init_late,
114 .restart = tegra_assert_system_reset, 148 .restart = tegra_assert_system_reset,
115 .dt_compat = tegra20_dt_board_compat, 149 .dt_compat = tegra20_dt_board_compat,
116MACHINE_END 150MACHINE_END