arm: imx: Renamed mx6ullevk.c -> imx6ull_somdevices.c.
authorJosep Orga <jorga@somdevices.com>
Sat, 25 Apr 2020 07:46:48 +0000 (09:46 +0200)
committerJosep Orga <jorga@somdevices.com>
Sat, 25 Apr 2020 07:46:48 +0000 (09:46 +0200)
Signed-off-by: Josep Orga <jorga@somdevices.com>
board/somdevices/imx6ull_somdevices/imx6ull_somdevices.c [new file with mode: 0644]
board/somdevices/imx6ull_somdevices/mx6ullevk.c [deleted file]

diff --git a/board/somdevices/imx6ull_somdevices/imx6ull_somdevices.c b/board/somdevices/imx6ull_somdevices/imx6ull_somdevices.c
new file mode 100644 (file)
index 0000000..3b0a8ad
--- /dev/null
@@ -0,0 +1,414 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
+ */
+
+#include <asm/arch/clock.h>
+#include <asm/arch/iomux.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/crm_regs.h>
+#include <asm/arch/mx6-pins.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/gpio.h>
+#include <asm/mach-imx/iomux-v3.h>
+#include <asm/mach-imx/boot_mode.h>
+#include <asm/mach-imx/mxc_i2c.h>
+#include <asm/io.h>
+#include <common.h>
+#include <i2c.h>
+#include <miiphy.h>
+#include <fsl_esdhc.h>
+#include <linux/sizes.h>
+#include <mmc.h>
+#include <mxsfb.h>
+#include <asm/mach-imx/video.h>
+#include <power/pmic.h>
+#include <power/pfuze3000_pmic.h>
+#include "../common/pfuze.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define UART_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |            \
+       PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |               \
+       PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
+
+#define I2C_PAD_CTRL    (PAD_CTL_PKE | PAD_CTL_PUE |            \
+       PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |               \
+       PAD_CTL_DSE_40ohm | PAD_CTL_HYS |                       \
+       PAD_CTL_ODE)
+
+#define LCD_PAD_CTRL    (PAD_CTL_HYS | PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \
+       PAD_CTL_PKE | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm)
+
+#define GPMI_PAD_CTRL0 (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP)
+#define GPMI_PAD_CTRL1 (PAD_CTL_DSE_40ohm | PAD_CTL_SPEED_MED | \
+                       PAD_CTL_SRE_FAST)
+#define GPMI_PAD_CTRL2 (GPMI_PAD_CTRL0 | GPMI_PAD_CTRL1)
+
+
+#ifdef CONFIG_DM_PMIC
+int power_init_board(void)
+{
+       struct udevice *dev;
+       int ret, dev_id, rev_id;
+       unsigned int reg;
+
+       ret = pmic_get("pfuze3000", &dev);
+       if (ret == -ENODEV)
+               return 0;
+       if (ret != 0)
+               return ret;
+
+       dev_id = pmic_reg_read(dev, PFUZE3000_DEVICEID);
+       rev_id = pmic_reg_read(dev, PFUZE3000_REVID);
+       printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", dev_id, rev_id);
+
+       /* disable Low Power Mode during standby mode */
+       reg = pmic_reg_read(dev, PFUZE3000_LDOGCTL);
+       reg |= 0x1;
+       pmic_reg_write(dev, PFUZE3000_LDOGCTL, reg);
+
+       /* SW1B step ramp up time from 2us to 4us/25mV */
+       pmic_reg_write(dev, PFUZE3000_SW1BCONF, 0x40);
+
+       /* SW1B mode to APS/PFM */
+       pmic_reg_write(dev, PFUZE3000_SW1BMODE, 0xc);
+
+       /* SW1B standby voltage set to 0.975V */
+       pmic_reg_write(dev, PFUZE3000_SW1BSTBY, 0xb);
+
+       return 0;
+}
+
+#ifdef CONFIG_LDO_BYPASS_CHECK
+void ldo_mode_set(int ldo_bypass)
+{
+       unsigned int value;
+       u32 vddarm;
+       struct udevice *dev;
+       int ret;
+
+       ret = pmic_get("pfuze3000", &dev);
+       if (ret == -ENODEV) {
+               printf("No PMIC found!\n");
+               return;
+       }
+
+       /* switch to ldo_bypass mode */
+       if (ldo_bypass) {
+               prep_anatop_bypass();
+               /* decrease VDDARM to 1.275V */
+               value = pmic_reg_read(dev, PFUZE3000_SW1BVOLT);
+               value &= ~0x1f;
+               value |= PFUZE3000_SW1AB_SETP(12750);
+               pmic_reg_write(dev, PFUZE3000_SW1BVOLT, value);
+
+               set_anatop_bypass(1);
+               vddarm = PFUZE3000_SW1AB_SETP(11750);
+
+               value = pmic_reg_read(dev, PFUZE3000_SW1BVOLT);
+               value &= ~0x1f;
+               value |= vddarm;
+               pmic_reg_write(dev, PFUZE3000_SW1BVOLT, value);
+
+               finish_anatop_bypass();
+
+               printf("switch to ldo_bypass mode!\n");
+       }
+}
+#endif
+#endif
+
+int dram_init(void)
+{
+       gd->ram_size = imx_ddr_size();
+
+       return 0;
+}
+
+static iomux_v3_cfg_t const uart1_pads[] = {
+       MX6_PAD_UART1_TX_DATA__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
+       MX6_PAD_UART1_RX_DATA__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
+};
+
+static void setup_iomux_uart(void)
+{
+       imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
+}
+
+#ifdef CONFIG_FSL_QSPI
+
+#ifndef CONFIG_DM_SPI
+#define QSPI_PAD_CTRL1 \
+       (PAD_CTL_SRE_FAST | PAD_CTL_SPEED_MED | \
+        PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_120ohm)
+
+static iomux_v3_cfg_t const quadspi_pads[] = {
+       MX6_PAD_NAND_WP_B__QSPI_A_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
+       MX6_PAD_NAND_READY_B__QSPI_A_DATA00 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
+       MX6_PAD_NAND_CE0_B__QSPI_A_DATA01 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
+       MX6_PAD_NAND_CE1_B__QSPI_A_DATA02 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
+       MX6_PAD_NAND_CLE__QSPI_A_DATA03 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
+       MX6_PAD_NAND_DQS__QSPI_A_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
+};
+#endif
+
+static int board_qspi_init(void)
+{
+#ifndef CONFIG_DM_SPI
+       /* Set the iomux */
+       imx_iomux_v3_setup_multiple_pads(quadspi_pads,
+                                        ARRAY_SIZE(quadspi_pads));
+#endif
+       /* Set the clock */
+       enable_qspi_clk(0);
+
+       return 0;
+}
+#endif
+
+#ifdef CONFIG_NAND_MXS
+static iomux_v3_cfg_t const nand_pads[] = {
+       MX6_PAD_NAND_DATA00__RAWNAND_DATA00 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_DATA01__RAWNAND_DATA01 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_DATA02__RAWNAND_DATA02 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_DATA03__RAWNAND_DATA03 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_DATA04__RAWNAND_DATA04 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_DATA05__RAWNAND_DATA05 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_DATA06__RAWNAND_DATA06 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_DATA07__RAWNAND_DATA07 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_CLE__RAWNAND_CLE | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_ALE__RAWNAND_ALE | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_CE0_B__RAWNAND_CE0_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_CE1_B__RAWNAND_CE1_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_RE_B__RAWNAND_RE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_WE_B__RAWNAND_WE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_WP_B__RAWNAND_WP_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_READY_B__RAWNAND_READY_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+       MX6_PAD_NAND_DQS__RAWNAND_DQS | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
+};
+
+static void setup_gpmi_nand(void)
+{
+       struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
+
+       /* config gpmi nand iomux */
+       imx_iomux_v3_setup_multiple_pads(nand_pads, ARRAY_SIZE(nand_pads));
+
+       setup_gpmi_io_clk((3 << MXC_CCM_CSCDR1_BCH_PODF_OFFSET) |
+                         (3 << MXC_CCM_CSCDR1_GPMI_PODF_OFFSET));
+
+       /* enable apbh clock gating */
+       setbits_le32(&mxc_ccm->CCGR0, MXC_CCM_CCGR0_APBHDMA_MASK);
+}
+#endif
+
+#ifdef CONFIG_FEC_MXC
+static int setup_fec(int fec_id)
+{
+       struct iomuxc *const iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
+       int ret;
+
+       if (fec_id == 0) {
+               if (check_module_fused(MX6_MODULE_ENET1))
+                       return -1;
+
+               /*
+                * Use 50M anatop loopback REF_CLK1 for ENET1,
+                * clear gpr1[13], set gpr1[17].
+                */
+               clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC1_MASK,
+                               IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK);
+       } else {
+               if (check_module_fused(MX6_MODULE_ENET2))
+                       return -1;
+
+               /*
+                * Use 50M anatop loopback REF_CLK2 for ENET2,
+                * clear gpr1[14], set gpr1[18].
+                */
+               clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC2_MASK,
+                               IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK);
+       }
+
+       ret = enable_fec_anatop_clock(fec_id, ENET_50MHZ);
+       if (ret)
+               return ret;
+
+       enable_enet_clk(1);
+
+       return 0;
+}
+
+int board_phy_config(struct phy_device *phydev)
+{
+       phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x8190);
+
+       if (phydev->drv->config)
+               phydev->drv->config(phydev);
+
+       return 0;
+}
+#endif
+
+#ifdef CONFIG_VIDEO_MXS
+static iomux_v3_cfg_t const lcd_pads[] = {
+       MX6_PAD_LCD_CLK__LCDIF_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_ENABLE__LCDIF_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_HSYNC__LCDIF_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_VSYNC__LCDIF_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA00__LCDIF_DATA00 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA01__LCDIF_DATA01 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA02__LCDIF_DATA02 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA03__LCDIF_DATA03 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA04__LCDIF_DATA04 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA05__LCDIF_DATA05 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA06__LCDIF_DATA06 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA07__LCDIF_DATA07 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA08__LCDIF_DATA08 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA09__LCDIF_DATA09 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA10__LCDIF_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA11__LCDIF_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA12__LCDIF_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA13__LCDIF_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA14__LCDIF_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA15__LCDIF_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA16__LCDIF_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA17__LCDIF_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA18__LCDIF_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA19__LCDIF_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA20__LCDIF_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA21__LCDIF_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA22__LCDIF_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+       MX6_PAD_LCD_DATA23__LCDIF_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL),
+
+       /* LCD_RST */
+       MX6_PAD_SNVS_TAMPER9__GPIO5_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL),
+
+       /* Use GPIO for Brightness adjustment, duty cycle = period. */
+       MX6_PAD_GPIO1_IO08__GPIO1_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
+};
+
+void do_enable_parallel_lcd(struct display_info_t const *dev)
+{
+       enable_lcdif_clock(dev->bus, 1);
+
+       imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
+
+       /* Reset the LCD */
+       gpio_request(IMX_GPIO_NR(5, 9), "lcd reset");
+       gpio_direction_output(IMX_GPIO_NR(5, 9) , 0);
+       udelay(500);
+       gpio_direction_output(IMX_GPIO_NR(5, 9) , 1);
+
+       /* Set Brightness to high */
+       gpio_request(IMX_GPIO_NR(1, 8), "backlight");
+       gpio_direction_output(IMX_GPIO_NR(1, 8) , 1);
+}
+
+struct display_info_t const displays[] = {{
+       .bus = MX6UL_LCDIF1_BASE_ADDR,
+       .addr = 0,
+       .pixfmt = 24,
+       .detect = NULL,
+       .enable = do_enable_parallel_lcd,
+       .mode   = {
+               .name                   = "TFT43AB",
+               .xres           = 480,
+               .yres           = 272,
+               .pixclock       = 108695,
+               .left_margin    = 8,
+               .right_margin   = 4,
+               .upper_margin   = 2,
+               .lower_margin   = 4,
+               .hsync_len      = 41,
+               .vsync_len      = 10,
+               .sync           = 0,
+               .vmode          = FB_VMODE_NONINTERLACED
+} } };
+size_t display_count = ARRAY_SIZE(displays);
+#endif
+
+int board_early_init_f(void)
+{
+       setup_iomux_uart();
+
+       return 0;
+}
+
+int board_init(void)
+{
+       /* Address of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+#ifdef CONFIG_FEC_MXC
+       setup_fec(CONFIG_FEC_ENET_DEV);
+#endif
+
+#ifdef CONFIG_FSL_QSPI
+       board_qspi_init();
+#endif
+
+#ifdef CONFIG_NAND_MXS
+       setup_gpmi_nand();
+#endif
+
+       return 0;
+}
+
+#ifdef CONFIG_CMD_BMODE
+static const struct boot_mode board_boot_modes[] = {
+       /* 4 bit bus width */
+       {"sd1", MAKE_CFGVAL(0x42, 0x20, 0x00, 0x00)},
+       {"sd2", MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)},
+       {"qspi1", MAKE_CFGVAL(0x10, 0x00, 0x00, 0x00)},
+       {NULL,   0},
+};
+#endif
+
+int board_late_init(void)
+{
+#ifdef CONFIG_CMD_BMODE
+       add_board_boot_modes(board_boot_modes);
+#endif
+
+       env_set("tee", "no");
+#ifdef CONFIG_IMX_OPTEE
+       env_set("tee", "yes");
+#endif
+
+#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+       env_set("board_name", "EVK");
+
+       if (is_mx6ull_9x9_evk())
+               env_set("board_rev", "9X9");
+       else
+               env_set("board_rev", "14X14");
+
+       if (is_cpu_type(MXC_CPU_MX6ULZ)) {
+               env_set("board_name", "ULZ-EVK");
+               env_set("usb_net_cmd", "usb start");
+    }
+#endif
+
+#ifdef CONFIG_ENV_IS_IN_MMC
+       board_late_mmc_env_init();
+#endif
+
+       set_wdog_reset((struct wdog_regs *)WDOG1_BASE_ADDR);
+
+       return 0;
+}
+
+int checkboard(void)
+{
+       if (is_mx6ull_9x9_evk())
+               puts("Board: MX6ULL 9x9 EVK\n");
+       else if (is_cpu_type(MXC_CPU_MX6ULZ))
+               puts("Board: MX6ULZ 14x14 EVK\n");
+       else
+               puts("Board: MX6ULL 14x14 EVK\n");
+
+       return 0;
+}
diff --git a/board/somdevices/imx6ull_somdevices/mx6ullevk.c b/board/somdevices/imx6ull_somdevices/mx6ullevk.c
deleted file mode 100644 (file)
index 3b0a8ad..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2016 Freescale Semiconductor, Inc.
- * Copyright 2017 NXP
- */
-
-#include <asm/arch/clock.h>
-#include <asm/arch/iomux.h>
-#include <asm/arch/imx-regs.h>
-#include <asm/arch/crm_regs.h>
-#include <asm/arch/mx6-pins.h>
-#include <asm/arch/sys_proto.h>
-#include <asm/gpio.h>
-#include <asm/mach-imx/iomux-v3.h>
-#include <asm/mach-imx/boot_mode.h>
-#include <asm/mach-imx/mxc_i2c.h>
-#include <asm/io.h>
-#include <common.h>
-#include <i2c.h>
-#include <miiphy.h>
-#include <fsl_esdhc.h>
-#include <linux/sizes.h>
-#include <mmc.h>
-#include <mxsfb.h>
-#include <asm/mach-imx/video.h>
-#include <power/pmic.h>
-#include <power/pfuze3000_pmic.h>
-#include "../common/pfuze.h"
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#define UART_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |            \
-       PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |               \
-       PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
-
-#define I2C_PAD_CTRL    (PAD_CTL_PKE | PAD_CTL_PUE |            \
-       PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |               \
-       PAD_CTL_DSE_40ohm | PAD_CTL_HYS |                       \
-       PAD_CTL_ODE)
-
-#define LCD_PAD_CTRL    (PAD_CTL_HYS | PAD_CTL_PUS_100K_UP | PAD_CTL_PUE | \
-       PAD_CTL_PKE | PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm)
-
-#define GPMI_PAD_CTRL0 (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP)
-#define GPMI_PAD_CTRL1 (PAD_CTL_DSE_40ohm | PAD_CTL_SPEED_MED | \
-                       PAD_CTL_SRE_FAST)
-#define GPMI_PAD_CTRL2 (GPMI_PAD_CTRL0 | GPMI_PAD_CTRL1)
-
-
-#ifdef CONFIG_DM_PMIC
-int power_init_board(void)
-{
-       struct udevice *dev;
-       int ret, dev_id, rev_id;
-       unsigned int reg;
-
-       ret = pmic_get("pfuze3000", &dev);
-       if (ret == -ENODEV)
-               return 0;
-       if (ret != 0)
-               return ret;
-
-       dev_id = pmic_reg_read(dev, PFUZE3000_DEVICEID);
-       rev_id = pmic_reg_read(dev, PFUZE3000_REVID);
-       printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", dev_id, rev_id);
-
-       /* disable Low Power Mode during standby mode */
-       reg = pmic_reg_read(dev, PFUZE3000_LDOGCTL);
-       reg |= 0x1;
-       pmic_reg_write(dev, PFUZE3000_LDOGCTL, reg);
-
-       /* SW1B step ramp up time from 2us to 4us/25mV */
-       pmic_reg_write(dev, PFUZE3000_SW1BCONF, 0x40);
-
-       /* SW1B mode to APS/PFM */
-       pmic_reg_write(dev, PFUZE3000_SW1BMODE, 0xc);
-
-       /* SW1B standby voltage set to 0.975V */
-       pmic_reg_write(dev, PFUZE3000_SW1BSTBY, 0xb);
-
-       return 0;
-}
-
-#ifdef CONFIG_LDO_BYPASS_CHECK
-void ldo_mode_set(int ldo_bypass)
-{
-       unsigned int value;
-       u32 vddarm;
-       struct udevice *dev;
-       int ret;
-
-       ret = pmic_get("pfuze3000", &dev);
-       if (ret == -ENODEV) {
-               printf("No PMIC found!\n");
-               return;
-       }
-
-       /* switch to ldo_bypass mode */
-       if (ldo_bypass) {
-               prep_anatop_bypass();
-               /* decrease VDDARM to 1.275V */
-               value = pmic_reg_read(dev, PFUZE3000_SW1BVOLT);
-               value &= ~0x1f;
-               value |= PFUZE3000_SW1AB_SETP(12750);
-               pmic_reg_write(dev, PFUZE3000_SW1BVOLT, value);
-
-               set_anatop_bypass(1);
-               vddarm = PFUZE3000_SW1AB_SETP(11750);
-
-               value = pmic_reg_read(dev, PFUZE3000_SW1BVOLT);
-               value &= ~0x1f;
-               value |= vddarm;
-               pmic_reg_write(dev, PFUZE3000_SW1BVOLT, value);
-
-               finish_anatop_bypass();
-
-               printf("switch to ldo_bypass mode!\n");
-       }
-}
-#endif
-#endif
-
-int dram_init(void)
-{
-       gd->ram_size = imx_ddr_size();
-
-       return 0;
-}
-
-static iomux_v3_cfg_t const uart1_pads[] = {
-       MX6_PAD_UART1_TX_DATA__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
-       MX6_PAD_UART1_RX_DATA__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
-};
-
-static void setup_iomux_uart(void)
-{
-       imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
-}
-
-#ifdef CONFIG_FSL_QSPI
-
-#ifndef CONFIG_DM_SPI
-#define QSPI_PAD_CTRL1 \
-       (PAD_CTL_SRE_FAST | PAD_CTL_SPEED_MED | \
-        PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_120ohm)
-
-static iomux_v3_cfg_t const quadspi_pads[] = {
-       MX6_PAD_NAND_WP_B__QSPI_A_SCLK | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
-       MX6_PAD_NAND_READY_B__QSPI_A_DATA00 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
-       MX6_PAD_NAND_CE0_B__QSPI_A_DATA01 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
-       MX6_PAD_NAND_CE1_B__QSPI_A_DATA02 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
-       MX6_PAD_NAND_CLE__QSPI_A_DATA03 | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
-       MX6_PAD_NAND_DQS__QSPI_A_SS0_B | MUX_PAD_CTRL(QSPI_PAD_CTRL1),
-};
-#endif
-
-static int board_qspi_init(void)
-{
-#ifndef CONFIG_DM_SPI
-       /* Set the iomux */
-       imx_iomux_v3_setup_multiple_pads(quadspi_pads,
-                                        ARRAY_SIZE(quadspi_pads));
-#endif
-       /* Set the clock */
-       enable_qspi_clk(0);
-
-       return 0;
-}
-#endif
-
-#ifdef CONFIG_NAND_MXS
-static iomux_v3_cfg_t const nand_pads[] = {
-       MX6_PAD_NAND_DATA00__RAWNAND_DATA00 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_DATA01__RAWNAND_DATA01 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_DATA02__RAWNAND_DATA02 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_DATA03__RAWNAND_DATA03 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_DATA04__RAWNAND_DATA04 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_DATA05__RAWNAND_DATA05 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_DATA06__RAWNAND_DATA06 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_DATA07__RAWNAND_DATA07 | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_CLE__RAWNAND_CLE | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_ALE__RAWNAND_ALE | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_CE0_B__RAWNAND_CE0_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_CE1_B__RAWNAND_CE1_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_RE_B__RAWNAND_RE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_WE_B__RAWNAND_WE_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_WP_B__RAWNAND_WP_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_READY_B__RAWNAND_READY_B | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-       MX6_PAD_NAND_DQS__RAWNAND_DQS | MUX_PAD_CTRL(GPMI_PAD_CTRL2),
-};
-
-static void setup_gpmi_nand(void)
-{
-       struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
-
-       /* config gpmi nand iomux */
-       imx_iomux_v3_setup_multiple_pads(nand_pads, ARRAY_SIZE(nand_pads));
-
-       setup_gpmi_io_clk((3 << MXC_CCM_CSCDR1_BCH_PODF_OFFSET) |
-                         (3 << MXC_CCM_CSCDR1_GPMI_PODF_OFFSET));
-
-       /* enable apbh clock gating */
-       setbits_le32(&mxc_ccm->CCGR0, MXC_CCM_CCGR0_APBHDMA_MASK);
-}
-#endif
-
-#ifdef CONFIG_FEC_MXC
-static int setup_fec(int fec_id)
-{
-       struct iomuxc *const iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
-       int ret;
-
-       if (fec_id == 0) {
-               if (check_module_fused(MX6_MODULE_ENET1))
-                       return -1;
-
-               /*
-                * Use 50M anatop loopback REF_CLK1 for ENET1,
-                * clear gpr1[13], set gpr1[17].
-                */
-               clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC1_MASK,
-                               IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK);
-       } else {
-               if (check_module_fused(MX6_MODULE_ENET2))
-                       return -1;
-
-               /*
-                * Use 50M anatop loopback REF_CLK2 for ENET2,
-                * clear gpr1[14], set gpr1[18].
-                */
-               clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC2_MASK,
-                               IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK);
-       }
-
-       ret = enable_fec_anatop_clock(fec_id, ENET_50MHZ);
-       if (ret)
-               return ret;
-
-       enable_enet_clk(1);
-
-       return 0;
-}
-
-int board_phy_config(struct phy_device *phydev)
-{
-       phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x8190);
-
-       if (phydev->drv->config)
-               phydev->drv->config(phydev);
-
-       return 0;
-}
-#endif
-
-#ifdef CONFIG_VIDEO_MXS
-static iomux_v3_cfg_t const lcd_pads[] = {
-       MX6_PAD_LCD_CLK__LCDIF_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_ENABLE__LCDIF_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_HSYNC__LCDIF_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_VSYNC__LCDIF_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA00__LCDIF_DATA00 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA01__LCDIF_DATA01 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA02__LCDIF_DATA02 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA03__LCDIF_DATA03 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA04__LCDIF_DATA04 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA05__LCDIF_DATA05 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA06__LCDIF_DATA06 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA07__LCDIF_DATA07 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA08__LCDIF_DATA08 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA09__LCDIF_DATA09 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA10__LCDIF_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA11__LCDIF_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA12__LCDIF_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA13__LCDIF_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA14__LCDIF_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA15__LCDIF_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA16__LCDIF_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA17__LCDIF_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA18__LCDIF_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA19__LCDIF_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA20__LCDIF_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA21__LCDIF_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA22__LCDIF_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-       MX6_PAD_LCD_DATA23__LCDIF_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL),
-
-       /* LCD_RST */
-       MX6_PAD_SNVS_TAMPER9__GPIO5_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL),
-
-       /* Use GPIO for Brightness adjustment, duty cycle = period. */
-       MX6_PAD_GPIO1_IO08__GPIO1_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
-};
-
-void do_enable_parallel_lcd(struct display_info_t const *dev)
-{
-       enable_lcdif_clock(dev->bus, 1);
-
-       imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
-
-       /* Reset the LCD */
-       gpio_request(IMX_GPIO_NR(5, 9), "lcd reset");
-       gpio_direction_output(IMX_GPIO_NR(5, 9) , 0);
-       udelay(500);
-       gpio_direction_output(IMX_GPIO_NR(5, 9) , 1);
-
-       /* Set Brightness to high */
-       gpio_request(IMX_GPIO_NR(1, 8), "backlight");
-       gpio_direction_output(IMX_GPIO_NR(1, 8) , 1);
-}
-
-struct display_info_t const displays[] = {{
-       .bus = MX6UL_LCDIF1_BASE_ADDR,
-       .addr = 0,
-       .pixfmt = 24,
-       .detect = NULL,
-       .enable = do_enable_parallel_lcd,
-       .mode   = {
-               .name                   = "TFT43AB",
-               .xres           = 480,
-               .yres           = 272,
-               .pixclock       = 108695,
-               .left_margin    = 8,
-               .right_margin   = 4,
-               .upper_margin   = 2,
-               .lower_margin   = 4,
-               .hsync_len      = 41,
-               .vsync_len      = 10,
-               .sync           = 0,
-               .vmode          = FB_VMODE_NONINTERLACED
-} } };
-size_t display_count = ARRAY_SIZE(displays);
-#endif
-
-int board_early_init_f(void)
-{
-       setup_iomux_uart();
-
-       return 0;
-}
-
-int board_init(void)
-{
-       /* Address of boot parameters */
-       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
-
-#ifdef CONFIG_FEC_MXC
-       setup_fec(CONFIG_FEC_ENET_DEV);
-#endif
-
-#ifdef CONFIG_FSL_QSPI
-       board_qspi_init();
-#endif
-
-#ifdef CONFIG_NAND_MXS
-       setup_gpmi_nand();
-#endif
-
-       return 0;
-}
-
-#ifdef CONFIG_CMD_BMODE
-static const struct boot_mode board_boot_modes[] = {
-       /* 4 bit bus width */
-       {"sd1", MAKE_CFGVAL(0x42, 0x20, 0x00, 0x00)},
-       {"sd2", MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)},
-       {"qspi1", MAKE_CFGVAL(0x10, 0x00, 0x00, 0x00)},
-       {NULL,   0},
-};
-#endif
-
-int board_late_init(void)
-{
-#ifdef CONFIG_CMD_BMODE
-       add_board_boot_modes(board_boot_modes);
-#endif
-
-       env_set("tee", "no");
-#ifdef CONFIG_IMX_OPTEE
-       env_set("tee", "yes");
-#endif
-
-#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
-       env_set("board_name", "EVK");
-
-       if (is_mx6ull_9x9_evk())
-               env_set("board_rev", "9X9");
-       else
-               env_set("board_rev", "14X14");
-
-       if (is_cpu_type(MXC_CPU_MX6ULZ)) {
-               env_set("board_name", "ULZ-EVK");
-               env_set("usb_net_cmd", "usb start");
-    }
-#endif
-
-#ifdef CONFIG_ENV_IS_IN_MMC
-       board_late_mmc_env_init();
-#endif
-
-       set_wdog_reset((struct wdog_regs *)WDOG1_BASE_ADDR);
-
-       return 0;
-}
-
-int checkboard(void)
-{
-       if (is_mx6ull_9x9_evk())
-               puts("Board: MX6ULL 9x9 EVK\n");
-       else if (is_cpu_type(MXC_CPU_MX6ULZ))
-               puts("Board: MX6ULZ 14x14 EVK\n");
-       else
-               puts("Board: MX6ULL 14x14 EVK\n");
-
-       return 0;
-}