[U-Boot] [PATCH 48/60] ARM: tegra: lay groundwork for board hook cleanup

Stephen Warren
2016-04-19T20:59:28Z

From: Stephen Warren <swarren@nvidia.com>

Tegra's board2.c and spl.c implement the core U-Boot board initialization
hooks, and call a variety of other functions to initialize the system,
some of which are implemented by board-specific code. board2.c and spl.c
currently call a large variety of "hook" functions that boards can
customize, one per type of action that might be performed by a board. This
isn't very scalable, and leads to a lot of ifdefs in board2.c. This patch
creates yet more functions that board2.c ans spl.c will call, with the aim
that all other functionality will be migrated into those functions.

The new functions are added to a new header file to make it more obvious
which are "the new way" and which will eventually go away (board.h).

Two simple one-off cases are immediately converted to the new functions,
and the old functions removed. Other functions require a bit more work
and will be converted by separate patches.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
arch/arm/mach-tegra/board2.c | 17 +++++++++++------
arch/arm/mach-tegra/include/mach/board.h | 7 -------
arch/arm/mach-tegra/include/mach/board_init.h | 15 +++++++++++++++
arch/arm/mach-tegra/spl.c | 4 ++++
board/nvidia/nyan-big/nyan-big.c | 2 +-
board/nvidia/p2571/p2571.c | 7 ++-----
6 files changed, 33 insertions(+), 19 deletions(-)
create mode 100644 arch/arm/mach-tegra/include/mach/board_init.h

diff --git a/arch/arm/mach-tegra/board2.c b/arch/arm/mach-tegra/board2.c
index 2667efe5aa71..cf17f709d480 100644
--- a/arch/arm/mach-tegra/board2.c
+++ b/arch/arm/mach-tegra/board2.c
@@ -21,6 +21,7 @@
#include <usb.h>
#endif
#include <mach/board.h>
+#include <mach/board_init.h>
#ifdef CONFIG_TEGRA_MMC
#include <mach/tegra_mmc.h>
#endif
@@ -52,7 +53,6 @@ __weak void pin_mux_usb(void) {}
__weak void pin_mux_spi(void) {}
__weak void gpio_early_init_uart(void) {}
__weak void pin_mux_display(void) {}
-__weak void start_cpu_fan(void) {}

#if defined(CONFIG_TEGRA_NAND)
__weak void pin_mux_nand(void)
@@ -100,7 +100,7 @@ __weak int tegra_lcd_pmic_init(int board_it)
return 0;
}

-__weak int nvidia_board_init(void)
+__weak int tegra_board_init(void)
{
return 0;
}
@@ -174,16 +174,17 @@ int board_init(void)
/* prepare the WB code to LP0 location */
warmboot_prepare_code(TEGRA_LP0_ADDR, TEGRA_LP0_SIZE);
#endif
- return nvidia_board_init();
+ return tegra_board_init();
}

-#ifdef CONFIG_BOARD_EARLY_INIT_F
static void __gpio_early_init(void)
{
}

void gpio_early_init(void) __attribute__((weak, alias("__gpio_early_init")));

+__weak void tegra_board_early_init_f(void) {}
+
int board_early_init_f(void)
{
#if defined(CONFIG_TEGRA_DISCONNECT_UDC_ON_BOOT)
@@ -200,6 +201,8 @@ int board_early_init_f(void)
#endif
arch_timer_init();

+ tegra_board_early_init_f();
+
pinmux_init();
board_init_uart_f();

@@ -209,7 +212,8 @@ int board_early_init_f(void)

return 0;
}
-#endif /* EARLY_INIT */
+
+__weak void tegra_board_late_init(void) {}

int board_late_init(void)
{
@@ -221,7 +225,8 @@ int board_late_init(void)
setenv("cpu_ns_mode", "");
}
#endif
- start_cpu_fan();
+
+ tegra_board_late_init();

return 0;
}
diff --git a/arch/arm/mach-tegra/include/mach/board.h b/arch/arm/mach-tegra/include/mach/board.h
index f6688ef761e7..b12ec7eed25e 100644
--- a/arch/arm/mach-tegra/include/mach/board.h
+++ b/arch/arm/mach-tegra/include/mach/board.h
@@ -43,11 +43,4 @@ int tegra_lcd_pmic_init(int board_id);
*/
int tegra_board_id(void);

-/**
- * nvidia_board_init() - perform any board-specific init
- *
- * @return 0 if OK, -ve on error
- */
-int nvidia_board_init(void);
-
#endif
diff --git a/arch/arm/mach-tegra/include/mach/board_init.h b/arch/arm/mach-tegra/include/mach/board_init.h
new file mode 100644
index 000000000000..fe13b8e9439b
--- /dev/null
+++ b/arch/arm/mach-tegra/include/mach/board_init.h
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+ *
+ * SPDX-License-Identifier: GPL-2.0
+ */
+
+#ifndef _MACH_BOARD_INIT_H
+#define _MACH_BOARD_INIT_H
+
+void tegra_spl_board_init(void);
+void tegra_board_early_init_f(void);
+int tegra_board_init(void);
+void tegra_board_late_init(void);
+
+#endif
diff --git a/arch/arm/mach-tegra/spl.c b/arch/arm/mach-tegra/spl.c
index 49af4119e927..35b538f0f614 100644
--- a/arch/arm/mach-tegra/spl.c
+++ b/arch/arm/mach-tegra/spl.c
@@ -14,9 +14,12 @@
#include <asm/arch/tegra.h>
#include <asm/spl.h>
#include <mach/board.h>
+#include <mach/board_init.h>
#include "apb_misc.h"
#include "cpu.h"

+__weak void tegra_spl_board_init(void) {}
+
void spl_board_init(void)
{
struct apb_misc_pp_ctlr *apb_misc =
@@ -31,6 +34,7 @@ void spl_board_init(void)
gpio_early_init_uart();

clock_early_init();
+ tegra_spl_board_init();
preloader_console_init();
}

diff --git a/board/nvidia/nyan-big/nyan-big.c b/board/nvidia/nyan-big/nyan-big.c
index fd9669ba0bb5..1af7f535f6d4 100644
--- a/board/nvidia/nyan-big/nyan-big.c
+++ b/board/nvidia/nyan-big/nyan-big.c
@@ -104,7 +104,7 @@ static void enable_required_clocks(void)
reset_set_enable(ids[i], 0);
}

-int nvidia_board_init(void)
+int tegra_board_init(void)
{
clock_start_periph_pll(PERIPH_ID_EXTPERIPH1, CLOCK_ID_OSC, 12000000);
clock_start_periph_pll(PERIPH_ID_I2S1, CLOCK_ID_OSC, 1500000);
diff --git a/board/nvidia/p2571/p2571.c b/board/nvidia/p2571/p2571.c
index 58e5c56c5b16..ae9b6aa2e54c 100644
--- a/board/nvidia/p2571/p2571.c
+++ b/board/nvidia/p2571/p2571.c
@@ -52,12 +52,9 @@ void pinmux_init(void)
ARRAY_SIZE(p2571_drvgrps));
}

-/*
- * Routine: start_cpu_fan
- * Description: Enable/start PWM CPU fan on P2571
- */
-void start_cpu_fan(void)
+void tegra_board_late_init(void)
{
+ /* Enable/start PWM CPU fan */
/* GPIO_PE4 is PS_VDD_FAN_ENABLE */
gpio_request(TEGRA_GPIO(E, 4), "FAN_VDD");
gpio_direction_output(TEGRA_GPIO(E, 4), 1);
--
2.8.1