mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-30 18:51:30 +00:00
119 lines
3 KiB
Diff
119 lines
3 KiB
Diff
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
|
|
index 818d2a0..a3ee6ed 100644
|
|
--- a/board/sunxi/board.c
|
|
+++ b/board/sunxi/board.c
|
|
@@ -725,6 +725,74 @@ static void setup_environment(const void *fdt)
|
|
}
|
|
}
|
|
|
|
+#if defined(CONFIG_BOOT_PROCESS_MULTI_DTB) && !defined(CONFIG_SPL_BUILD)
|
|
+
|
|
+#define NP_NEO2_DT_SS "nanopi-neo2."
|
|
+
|
|
+#define NP_NEO2_DT_EXT_V1_1 "-v1.1.dtb"
|
|
+
|
|
+#define NP_NEO2_BOARD_ID_GPIO "PL3"
|
|
+#define NP_NEO2_BOARD_ID_1_0 1
|
|
+#define NP_NEO2_BOARD_ID_1_1 0
|
|
+
|
|
+void boot_process_multi_dtb(void)
|
|
+{
|
|
+ const char *fdtfile = env_get("fdtfile");
|
|
+ if (fdtfile == NULL) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ /* check for a NanoPi NEO2 */
|
|
+ if (strstr(fdtfile, NP_NEO2_DT_SS) != NULL) {
|
|
+ int board_id_pin, prev_cfg, ret, rev_1_1;
|
|
+
|
|
+ /* NEO2 DT found; process board revision and select corresponding DT */
|
|
+
|
|
+ board_id_pin = sunxi_name_to_gpio(NP_NEO2_BOARD_ID_GPIO);
|
|
+ if (board_id_pin < 0) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ ret = gpio_request(board_id_pin, "board_id_pin");
|
|
+ if (ret) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ prev_cfg = sunxi_gpio_get_cfgpin(board_id_pin);
|
|
+
|
|
+ gpio_direction_input(board_id_pin);
|
|
+ sunxi_gpio_set_pull(board_id_pin, SUNXI_GPIO_PULL_DISABLE);
|
|
+
|
|
+ mdelay(2);
|
|
+
|
|
+ rev_1_1 = gpio_get_value(board_id_pin) == NP_NEO2_BOARD_ID_1_1;
|
|
+
|
|
+ sunxi_gpio_set_cfgpin(board_id_pin, prev_cfg);
|
|
+ gpio_free(board_id_pin);
|
|
+
|
|
+ printf("NanoPi NEO2 v1.%d detected\n", rev_1_1);
|
|
+
|
|
+ if (rev_1_1) {
|
|
+ int ddt_len = sizeof(CONFIG_DEFAULT_DEVICE_TREE);
|
|
+ int fdt_len = strlen(fdtfile);
|
|
+
|
|
+ char *n_fdtfile = (char *)malloc(max(fdt_len, ddt_len) + sizeof(NP_NEO2_DT_EXT_V1_1) + 1);
|
|
+ if (n_fdtfile != NULL) {
|
|
+ char *cp = strstr(strcpy(n_fdtfile, fdtfile), CONFIG_DEFAULT_DEVICE_TREE);
|
|
+ if (cp != NULL) {
|
|
+ cp[ddt_len - 1] = '\0';
|
|
+ strcat(cp, NP_NEO2_DT_EXT_V1_1);
|
|
+
|
|
+ env_set("fdtfile", n_fdtfile);
|
|
+ }
|
|
+
|
|
+ free(n_fdtfile);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+}
|
|
+#endif
|
|
+
|
|
int misc_init_r(void)
|
|
{
|
|
__maybe_unused int ret;
|
|
@@ -758,6 +826,10 @@ int misc_init_r(void)
|
|
usb_ether_init();
|
|
#endif
|
|
|
|
+#if defined(CONFIG_BOOT_PROCESS_MULTI_DTB) && !defined(CONFIG_SPL_BUILD)
|
|
+ boot_process_multi_dtb();
|
|
+#endif
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
diff --git a/configs/nanopi_neo2_defconfig b/configs/nanopi_neo2_defconfig
|
|
index 78d587f..ca8a842 100755
|
|
--- a/configs/nanopi_neo2_defconfig
|
|
+++ b/configs/nanopi_neo2_defconfig
|
|
@@ -12,4 +12,5 @@ CONFIG_DEFAULT_DEVICE_TREE="sun50i-h5-nanopi-neo2"
|
|
CONFIG_SUN8I_EMAC=y
|
|
CONFIG_USB_EHCI_HCD=y
|
|
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
|
|
-CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
|
\ No newline at end of file
|
|
+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
|
|
+CONFIG_BOOT_PROCESS_MULTI_DTB=y
|
|
diff --git a/dts/Kconfig b/dts/Kconfig
|
|
index 0cef225..cd4d101 100644
|
|
--- a/dts/Kconfig
|
|
+++ b/dts/Kconfig
|
|
@@ -166,6 +166,12 @@ config SPL_OF_LIST
|
|
device tree files (without the directory or .dtb suffix)
|
|
separated by <space>.
|
|
|
|
+if ARCH_SUNXI
|
|
+config BOOT_PROCESS_MULTI_DTB
|
|
+ bool "Adjust default board DT as necessary at boot"
|
|
+ default n
|
|
+endif
|
|
+
|
|
choice
|
|
prompt "SPL OF LIST compression"
|
|
depends on SPL_MULTI_DTB_FIT
|