提交 c37c07dd 编写于 作者: P Peter De Schrijver 提交者: Olof Johansson

arm/tegra: prepare early init for multiple tegra variants

This patch splits the early init code in a common and a tegra20 specific part.
Signed-off-by: NPeter De Schrijver <pdeschrijver@nvidia.com>
Acked-by: NStephen Warren <swarren@nvidia.com>
Acked-by: NColin Cross <ccross@android.com>
Signed-off-by: NOlof Johansson <olof@lixom.net>
上级 8e4fab2c
...@@ -53,17 +53,6 @@ void seaboard_pinmux_init(void); ...@@ -53,17 +53,6 @@ void seaboard_pinmux_init(void);
void trimslice_pinmux_init(void); void trimslice_pinmux_init(void);
void ventana_pinmux_init(void); void ventana_pinmux_init(void);
static const struct of_device_id tegra_dt_irq_match[] __initconst = {
{ .compatible = "arm,cortex-a9-gic", .data = gic_of_init },
{ }
};
void __init tegra_dt_init_irq(void)
{
tegra_init_irq();
of_irq_init(tegra_dt_irq_match);
}
struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = { struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = {
OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC1_BASE, "sdhci-tegra.0", NULL), OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC1_BASE, "sdhci-tegra.0", NULL),
OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC2_BASE, "sdhci-tegra.1", NULL), OF_DEV_AUXDATA("nvidia,tegra20-sdhci", TEGRA_SDMMC2_BASE, "sdhci-tegra.1", NULL),
...@@ -139,7 +128,7 @@ static void __init tegra_dt_init(void) ...@@ -139,7 +128,7 @@ static void __init tegra_dt_init(void)
"Unknown platform! Pinmuxing not initialized\n"); "Unknown platform! Pinmuxing not initialized\n");
} }
static const char * tegra_dt_board_compat[] = { static const char *tegra20_dt_board_compat[] = {
"compulab,trimslice", "compulab,trimslice",
"nvidia,harmony", "nvidia,harmony",
"compal,paz00", "compal,paz00",
...@@ -148,12 +137,12 @@ static const char * tegra_dt_board_compat[] = { ...@@ -148,12 +137,12 @@ static const char * tegra_dt_board_compat[] = {
NULL NULL
}; };
DT_MACHINE_START(TEGRA_DT, "nVidia Tegra (Flattened Device Tree)") DT_MACHINE_START(TEGRA_DT, "nVidia Tegra20 (Flattened Device Tree)")
.map_io = tegra_map_common_io, .map_io = tegra_map_common_io,
.init_early = tegra_init_early, .init_early = tegra20_init_early,
.init_irq = tegra_dt_init_irq, .init_irq = tegra_dt_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_timer,
.init_machine = tegra_dt_init, .init_machine = tegra_dt_init,
.dt_compat = tegra_dt_board_compat, .dt_compat = tegra20_dt_board_compat,
MACHINE_END MACHINE_END
...@@ -186,7 +186,7 @@ MACHINE_START(HARMONY, "harmony") ...@@ -186,7 +186,7 @@ MACHINE_START(HARMONY, "harmony")
.atag_offset = 0x100, .atag_offset = 0x100,
.fixup = tegra_harmony_fixup, .fixup = tegra_harmony_fixup,
.map_io = tegra_map_common_io, .map_io = tegra_map_common_io,
.init_early = tegra_init_early, .init_early = tegra20_init_early,
.init_irq = tegra_init_irq, .init_irq = tegra_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_timer,
......
...@@ -189,7 +189,7 @@ MACHINE_START(PAZ00, "Toshiba AC100 / Dynabook AZ") ...@@ -189,7 +189,7 @@ MACHINE_START(PAZ00, "Toshiba AC100 / Dynabook AZ")
.atag_offset = 0x100, .atag_offset = 0x100,
.fixup = tegra_paz00_fixup, .fixup = tegra_paz00_fixup,
.map_io = tegra_map_common_io, .map_io = tegra_map_common_io,
.init_early = tegra_init_early, .init_early = tegra20_init_early,
.init_irq = tegra_init_irq, .init_irq = tegra_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_timer,
......
...@@ -283,7 +283,7 @@ static void __init tegra_wario_init(void) ...@@ -283,7 +283,7 @@ static void __init tegra_wario_init(void)
MACHINE_START(SEABOARD, "seaboard") MACHINE_START(SEABOARD, "seaboard")
.atag_offset = 0x100, .atag_offset = 0x100,
.map_io = tegra_map_common_io, .map_io = tegra_map_common_io,
.init_early = tegra_init_early, .init_early = tegra20_init_early,
.init_irq = tegra_init_irq, .init_irq = tegra_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_timer,
...@@ -293,7 +293,7 @@ MACHINE_END ...@@ -293,7 +293,7 @@ MACHINE_END
MACHINE_START(KAEN, "kaen") MACHINE_START(KAEN, "kaen")
.atag_offset = 0x100, .atag_offset = 0x100,
.map_io = tegra_map_common_io, .map_io = tegra_map_common_io,
.init_early = tegra_init_early, .init_early = tegra20_init_early,
.init_irq = tegra_init_irq, .init_irq = tegra_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_timer,
...@@ -303,7 +303,7 @@ MACHINE_END ...@@ -303,7 +303,7 @@ MACHINE_END
MACHINE_START(WARIO, "wario") MACHINE_START(WARIO, "wario")
.atag_offset = 0x100, .atag_offset = 0x100,
.map_io = tegra_map_common_io, .map_io = tegra_map_common_io,
.init_early = tegra_init_early, .init_early = tegra20_init_early,
.init_irq = tegra_init_irq, .init_irq = tegra_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_timer,
......
...@@ -175,7 +175,7 @@ MACHINE_START(TRIMSLICE, "trimslice") ...@@ -175,7 +175,7 @@ MACHINE_START(TRIMSLICE, "trimslice")
.atag_offset = 0x100, .atag_offset = 0x100,
.fixup = tegra_trimslice_fixup, .fixup = tegra_trimslice_fixup,
.map_io = tegra_map_common_io, .map_io = tegra_map_common_io,
.init_early = tegra_init_early, .init_early = tegra20_init_early,
.init_irq = tegra_init_irq, .init_irq = tegra_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_timer,
......
...@@ -25,9 +25,10 @@ ...@@ -25,9 +25,10 @@
void tegra_assert_system_reset(char mode, const char *cmd); void tegra_assert_system_reset(char mode, const char *cmd);
void __init tegra_init_early(void); void __init tegra20_init_early(void);
void __init tegra_map_common_io(void); void __init tegra_map_common_io(void);
void __init tegra_init_irq(void); void __init tegra_init_irq(void);
void __init tegra_dt_init_irq(void);
void __init tegra_init_clock(void); void __init tegra_init_clock(void);
int __init tegra_pcie_init(bool init_port0, bool init_port1); int __init tegra_pcie_init(bool init_port0, bool init_port1);
......
/* /*
* arch/arm/mach-tegra/board-harmony.c * arch/arm/mach-tegra/common.c
* *
* Copyright (C) 2010 Google, Inc. * Copyright (C) 2010 Google, Inc.
* *
...@@ -21,8 +21,10 @@ ...@@ -21,8 +21,10 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/of_irq.h>
#include <asm/hardware/cache-l2x0.h> #include <asm/hardware/cache-l2x0.h>
#include <asm/hardware/gic.h>
#include <mach/iomap.h> #include <mach/iomap.h>
#include <mach/system.h> #include <mach/system.h>
...@@ -33,6 +35,17 @@ ...@@ -33,6 +35,17 @@
void (*arch_reset)(char mode, const char *cmd) = tegra_assert_system_reset; void (*arch_reset)(char mode, const char *cmd) = tegra_assert_system_reset;
static const struct of_device_id tegra_dt_irq_match[] __initconst = {
{ .compatible = "arm,cortex-a9-gic", .data = gic_of_init },
{ }
};
void __init tegra_dt_init_irq(void)
{
tegra_init_irq();
of_irq_init(tegra_dt_irq_match);
}
void tegra_assert_system_reset(char mode, const char *cmd) void tegra_assert_system_reset(char mode, const char *cmd)
{ {
void __iomem *reset = IO_ADDRESS(TEGRA_CLK_RESET_BASE + 0x04); void __iomem *reset = IO_ADDRESS(TEGRA_CLK_RESET_BASE + 0x04);
...@@ -44,7 +57,8 @@ void tegra_assert_system_reset(char mode, const char *cmd) ...@@ -44,7 +57,8 @@ void tegra_assert_system_reset(char mode, const char *cmd)
writel_relaxed(reg, reset); writel_relaxed(reg, reset);
} }
static __initdata struct tegra_clk_init_table common_clk_init_table[] = { #ifdef CONFIG_ARCH_TEGRA_2x_SOC
static __initdata struct tegra_clk_init_table tegra20_clk_init_table[] = {
/* name parent rate enabled */ /* name parent rate enabled */
{ "clk_m", NULL, 0, true }, { "clk_m", NULL, 0, true },
{ "pll_p", "clk_m", 216000000, true }, { "pll_p", "clk_m", 216000000, true },
...@@ -60,6 +74,7 @@ static __initdata struct tegra_clk_init_table common_clk_init_table[] = { ...@@ -60,6 +74,7 @@ static __initdata struct tegra_clk_init_table common_clk_init_table[] = {
{ "cpu", NULL, 0, true }, { "cpu", NULL, 0, true },
{ NULL, NULL, 0, 0}, { NULL, NULL, 0, 0},
}; };
#endif
static void __init tegra_init_cache(void) static void __init tegra_init_cache(void)
{ {
...@@ -74,10 +89,12 @@ static void __init tegra_init_cache(void) ...@@ -74,10 +89,12 @@ static void __init tegra_init_cache(void)
} }
void __init tegra_init_early(void) #ifdef CONFIG_ARCH_TEGRA_2x_SOC
void __init tegra20_init_early(void)
{ {
tegra_init_fuse(); tegra_init_fuse();
tegra_init_clock(); tegra2_init_clocks();
tegra_clk_init_from_table(common_clk_init_table); tegra_clk_init_from_table(tegra20_clk_init_table);
tegra_init_cache(); tegra_init_cache();
} }
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册