board: gateworks: gw_ventana: move ft_early_fixups out of common
authorTim Harvey <tharvey@gateworks.com>
Tue, 8 Mar 2022 00:24:03 +0000 (16:24 -0800)
committerStefano Babic <sbabic@denx.de>
Tue, 12 Apr 2022 13:36:17 +0000 (15:36 +0200)
DM is not used for the SPL and a generic DT is used in the SPL
which requires no fixups. Remove the call in the SPL and move the function
into the U-Boot code.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>
board/gateworks/gw_ventana/common.c
board/gateworks/gw_ventana/common.h
board/gateworks/gw_ventana/gw_ventana.c
board/gateworks/gw_ventana/gw_ventana_spl.c

index 725f948..4144064 100644 (file)
@@ -1209,154 +1209,6 @@ void setup_iomux_gpio(int board, struct ventana_board_info *info)
        }
 }
 
-#include <fdt_support.h>
-#define WDOG1_ADDR      0x20bc000
-#define WDOG2_ADDR      0x20c0000
-#define GPIO3_ADDR      0x20a4000
-#define USDHC3_ADDR     0x2198000
-
-static void ft_board_wdog_fixup(void *blob, phys_addr_t addr)
-{
-       int off = fdt_node_offset_by_compat_reg(blob, "fsl,imx6q-wdt", addr);
-
-       if (off) {
-               fdt_delprop(blob, off, "ext-reset-output");
-               fdt_delprop(blob, off, "fsl,ext-reset-output");
-       }
-}
-
-void ft_early_fixup(void *blob, int board_type)
-{
-       struct ventana_board_info *info = &ventana_info;
-       char rev = 0;
-       int i;
-
-       /* determine board revision */
-       for (i = sizeof(ventana_info.model) - 1; i > 0; i--) {
-               if (ventana_info.model[i] >= 'A') {
-                       rev = ventana_info.model[i];
-                       break;
-               }
-       }
-
-       /*
-        * Board model specific fixups
-        */
-       switch (board_type) {
-       case GW51xx:
-               /*
-                * disable wdog node for GW51xx-A/B to work around
-                * errata causing wdog timer to be unreliable.
-                */
-               if (rev >= 'A' && rev < 'C') {
-                       i = fdt_node_offset_by_compat_reg(blob, "fsl,imx6q-wdt",
-                                                         WDOG1_ADDR);
-                       if (i)
-                               fdt_status_disabled(blob, i);
-               }
-
-               /* GW51xx-E adds WDOG1_B external reset */
-               if (rev < 'E')
-                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
-               break;
-
-       case GW52xx:
-               /* GW522x Uses GPIO3_IO23 instead of GPIO1_IO29 */
-               if (info->model[4] == '2') {
-                       u32 handle = 0;
-                       u32 *range = NULL;
-
-                       i = fdt_node_offset_by_compatible(blob, -1,
-                                                         "fsl,imx6q-pcie");
-                       if (i)
-                               range = (u32 *)fdt_getprop(blob, i,
-                                                          "reset-gpio", NULL);
-
-                       if (range) {
-                               i = fdt_node_offset_by_compat_reg(blob,
-                                       "fsl,imx6q-gpio", GPIO3_ADDR);
-                               if (i)
-                                       handle = fdt_get_phandle(blob, i);
-                               if (handle) {
-                                       range[0] = cpu_to_fdt32(handle);
-                                       range[1] = cpu_to_fdt32(23);
-                               }
-                       }
-
-                       /* these have broken usd_vsel */
-                       if (strstr((const char *)info->model, "SP318-B") ||
-                           strstr((const char *)info->model, "SP331-B"))
-                               gpio_cfg[board_type].usd_vsel = 0;
-
-                       /* GW522x-B adds WDOG1_B external reset */
-                       if (rev < 'B')
-                               ft_board_wdog_fixup(blob, WDOG1_ADDR);
-               }
-
-               /* GW520x-E adds WDOG1_B external reset */
-               else if (info->model[4] == '0' && rev < 'E')
-                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
-               break;
-
-       case GW53xx:
-               /* GW53xx-E adds WDOG1_B external reset */
-               if (rev < 'E')
-                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
-
-               /* GW53xx-G has an adv7280 instead of an adv7180 */
-               else if (rev > 'F') {
-                       i = fdt_node_offset_by_compatible(blob, -1, "adi,adv7180");
-                       if (i) {
-                               fdt_setprop_string(blob, i, "compatible", "adi,adv7280");
-                               fdt_setprop_empty(blob, i, "adv,force-bt656-4");
-                       }
-               }
-               break;
-
-       case GW54xx:
-               /*
-                * disable serial2 node for GW54xx for compatibility with older
-                * 3.10.x kernel that improperly had this node enabled in the DT
-                */
-               fdt_set_status_by_alias(blob, "serial2", FDT_STATUS_DISABLED);
-
-               /* GW54xx-E adds WDOG2_B external reset */
-               if (rev < 'E')
-                       ft_board_wdog_fixup(blob, WDOG2_ADDR);
-
-               /* GW54xx-G has an adv7280 instead of an adv7180 */
-               else if (rev > 'F') {
-                       i = fdt_node_offset_by_compatible(blob, -1, "adi,adv7180");
-                       if (i) {
-                               fdt_setprop_string(blob, i, "compatible", "adi,adv7280");
-                               fdt_setprop_empty(blob, i, "adv,force-bt656-4");
-                       }
-               }
-               break;
-
-       case GW551x:
-               /* GW551x-C adds WDOG1_B external reset */
-               if (rev < 'C')
-                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
-               break;
-       case GW5901:
-       case GW5902:
-               /* GW5901/GW5901 revB adds WDOG1_B as an external reset */
-               if (rev < 'B')
-                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
-               break;
-       }
-
-       /* remove no-1-8-v if UHS-I support is present */
-       if (gpio_cfg[board_type].usd_vsel) {
-               debug("Enabling UHS-I support\n");
-               i = fdt_node_offset_by_compat_reg(blob, "fsl,imx6q-usdhc",
-                                                 USDHC3_ADDR);
-               if (i)
-                       fdt_delprop(blob, i, "no-1-8-v");
-       }
-}
-
 #ifdef CONFIG_FSL_ESDHC_IMX
 static struct fsl_esdhc_cfg usdhc_cfg[2];
 
index a036634..7a60db7 100644 (file)
@@ -81,7 +81,5 @@ extern struct ventana gpio_cfg[GW_UNKNOWN];
 
 /* configure gpio iomux/defaults */
 void setup_iomux_gpio(int board, struct ventana_board_info *);
-/* early model/revision ft fixups */
-void ft_early_fixup(void *fdt, int board_type);
 
 #endif /* #ifndef _GWVENTANA_COMMON_H_ */
index 9b8f7b5..8748878 100644 (file)
@@ -1017,6 +1017,152 @@ void ft_board_pci_fixup(void *blob, struct bd_info *bd)
 }
 #endif /* if defined(CONFIG_CMD_PCI) */
 
+#define WDOG1_ADDR      0x20bc000
+#define WDOG2_ADDR      0x20c0000
+#define GPIO3_ADDR      0x20a4000
+#define USDHC3_ADDR     0x2198000
+static void ft_board_wdog_fixup(void *blob, phys_addr_t addr)
+{
+       int off = fdt_node_offset_by_compat_reg(blob, "fsl,imx6q-wdt", addr);
+
+       if (off) {
+               fdt_delprop(blob, off, "ext-reset-output");
+               fdt_delprop(blob, off, "fsl,ext-reset-output");
+       }
+}
+
+void ft_early_fixup(void *blob, int board_type)
+{
+       struct ventana_board_info *info = &ventana_info;
+       char rev = 0;
+       int i;
+
+       /* determine board revision */
+       for (i = sizeof(ventana_info.model) - 1; i > 0; i--) {
+               if (ventana_info.model[i] >= 'A') {
+                       rev = ventana_info.model[i];
+                       break;
+               }
+       }
+
+       /*
+        * Board model specific fixups
+        */
+       switch (board_type) {
+       case GW51xx:
+               /*
+                * disable wdog node for GW51xx-A/B to work around
+                * errata causing wdog timer to be unreliable.
+                */
+               if (rev >= 'A' && rev < 'C') {
+                       i = fdt_node_offset_by_compat_reg(blob, "fsl,imx6q-wdt",
+                                                         WDOG1_ADDR);
+                       if (i)
+                               fdt_status_disabled(blob, i);
+               }
+
+               /* GW51xx-E adds WDOG1_B external reset */
+               if (rev < 'E')
+                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
+               break;
+
+       case GW52xx:
+               /* GW522x Uses GPIO3_IO23 instead of GPIO1_IO29 */
+               if (info->model[4] == '2') {
+                       u32 handle = 0;
+                       u32 *range = NULL;
+
+                       i = fdt_node_offset_by_compatible(blob, -1,
+                                                         "fsl,imx6q-pcie");
+                       if (i)
+                               range = (u32 *)fdt_getprop(blob, i,
+                                                          "reset-gpio", NULL);
+
+                       if (range) {
+                               i = fdt_node_offset_by_compat_reg(blob,
+                                                                 "fsl,imx6q-gpio", GPIO3_ADDR);
+                               if (i)
+                                       handle = fdt_get_phandle(blob, i);
+                               if (handle) {
+                                       range[0] = cpu_to_fdt32(handle);
+                                       range[1] = cpu_to_fdt32(23);
+                               }
+                       }
+
+                       /* these have broken usd_vsel */
+                       if (strstr((const char *)info->model, "SP318-B") ||
+                           strstr((const char *)info->model, "SP331-B"))
+                               gpio_cfg[board_type].usd_vsel = 0;
+
+                       /* GW522x-B adds WDOG1_B external reset */
+                       if (rev < 'B')
+                               ft_board_wdog_fixup(blob, WDOG1_ADDR);
+               }
+
+               /* GW520x-E adds WDOG1_B external reset */
+               else if (info->model[4] == '0' && rev < 'E')
+                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
+               break;
+
+       case GW53xx:
+               /* GW53xx-E adds WDOG1_B external reset */
+               if (rev < 'E')
+                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
+
+               /* GW53xx-G has an adv7280 instead of an adv7180 */
+               else if (rev > 'F') {
+                       i = fdt_node_offset_by_compatible(blob, -1, "adi,adv7180");
+                       if (i) {
+                               fdt_setprop_string(blob, i, "compatible", "adi,adv7280");
+                               fdt_setprop_empty(blob, i, "adv,force-bt656-4");
+                       }
+               }
+               break;
+
+       case GW54xx:
+               /*
+                * disable serial2 node for GW54xx for compatibility with older
+                * 3.10.x kernel that improperly had this node enabled in the DT
+                */
+               fdt_set_status_by_alias(blob, "serial2", FDT_STATUS_DISABLED);
+
+               /* GW54xx-E adds WDOG2_B external reset */
+               if (rev < 'E')
+                       ft_board_wdog_fixup(blob, WDOG2_ADDR);
+
+               /* GW54xx-G has an adv7280 instead of an adv7180 */
+               else if (rev > 'F') {
+                       i = fdt_node_offset_by_compatible(blob, -1, "adi,adv7180");
+                       if (i) {
+                               fdt_setprop_string(blob, i, "compatible", "adi,adv7280");
+                               fdt_setprop_empty(blob, i, "adv,force-bt656-4");
+                       }
+               }
+               break;
+
+       case GW551x:
+               /* GW551x-C adds WDOG1_B external reset */
+               if (rev < 'C')
+                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
+               break;
+       case GW5901:
+       case GW5902:
+               /* GW5901/GW5901 revB adds WDOG1_B as an external reset */
+               if (rev < 'B')
+                       ft_board_wdog_fixup(blob, WDOG1_ADDR);
+               break;
+       }
+
+       /* remove no-1-8-v if UHS-I support is present */
+       if (gpio_cfg[board_type].usd_vsel) {
+               debug("Enabling UHS-I support\n");
+               i = fdt_node_offset_by_compat_reg(blob, "fsl,imx6q-usdhc",
+                                                 USDHC3_ADDR);
+               if (i)
+                       fdt_delprop(blob, i, "no-1-8-v");
+       }
+}
+
 /*
  * called prior to booting kernel or by 'fdt boardsetup' command
  *
index 2d6ef30..3149e88 100644 (file)
@@ -1062,8 +1062,3 @@ int spl_start_uboot(void)
        return ret;
 }
 #endif
-
-void spl_perform_fixups(struct spl_image_info *spl_image)
-{
-       ft_early_fixup(spl_image->fdt_addr, board_type);
-}