Commit 0f381f9447c79e0ff24b5f1db5ad10bb05779a18

Authored by Ye Li
1 parent 1c7f8ef978

MLK-18591-8 android: iot: Add board support for imx6dl pico pi

Add board support for imx6dl pico pi, porting from v2017.03

Signed-off-by: Ye Li <ye.li@nxp.com>

Showing 10 changed files with 1123 additions and 1 deletions Side-by-side Diff

arch/arm/mach-imx/mx6/Kconfig
... ... @@ -482,6 +482,14 @@
482 482 select SUPPORT_SPL
483 483 imply CMD_SATA
484 484  
  485 +config TARGET_PICO_IMX6DL
  486 + bool "Support pico-imx6dl"
  487 + select MX6QDL
  488 + select BOARD_LATE_INIT
  489 + select DM
  490 + select DM_THERMAL
  491 + select BOARD_EARLY_INIT_F
  492 +
485 493 config TARGET_PICO_IMX6UL
486 494 bool "PICO-IMX6UL-EMMC"
487 495 select MX6UL
... ... @@ -631,6 +639,7 @@
631 639 source "board/sks-kinkel/sksimx6/Kconfig"
632 640 source "board/solidrun/mx6cuboxi/Kconfig"
633 641 source "board/technexion/pico-imx6ul/Kconfig"
  642 +source "board/technexion/pico-imx6dl/Kconfig"
634 643 source "board/tbs/tbs2910/Kconfig"
635 644 source "board/tqc/tqma6/Kconfig"
636 645 source "board/toradex/apalis_imx6/Kconfig"
arch/arm/mach-imx/mx6/clock.c
... ... @@ -1461,7 +1461,7 @@
1461 1461 }
1462 1462 #endif
1463 1463  
1464   -#if defined(CONFIG_MX6Q) || defined(CONFIG_MX6DL) || \
  1464 +#if defined(CONFIG_MX6QDL) || defined(CONFIG_MX6Q) || defined(CONFIG_MX6DL) || \
1465 1465 defined(CONFIG_MX6S)
1466 1466 static void disable_ldb_di_clock_sources(void)
1467 1467 {
board/technexion/pico-imx6dl/Kconfig
  1 +if TARGET_PICO_IMX6DL
  2 +
  3 +config SYS_BOARD
  4 + default "pico-imx6dl"
  5 +
  6 +config SYS_VENDOR
  7 + default "technexion"
  8 +
  9 +config SYS_SOC
  10 + default "mx6"
  11 +
  12 +config SYS_CONFIG_NAME
  13 + default "pico-imx6dl"
  14 +
  15 +endif
board/technexion/pico-imx6dl/MAINTAINERS
  1 +Technexion PICO-IMX6 board
  2 +M: Richard Hu <richard.hu@technexion.com>
  3 +S: Maintained
  4 +F: board/pico-imx6dl/
  5 +F: include/configs/pico-imx6dl.h
  6 +F: configs/pico-imx6dl_defconfig
board/technexion/pico-imx6dl/Makefile
  1 +#
  2 +# (C) Copyright 2015 Technexion Ltd.
  3 +# (C) Copyright 2017 NXP
  4 +#
  5 +# SPDX-License-Identifier: GPL-2.0+
  6 +#
  7 +
  8 +obj-y := pico-imx6dl.o
board/technexion/pico-imx6dl/pico-imx6dl.c
  1 +/*
  2 + * Copyright (C) 2015 Technexion Ltd.
  3 + * Copyright 2017 NXP
  4 + *
  5 + * Author: Richard Hu <richard.hu@technexion.com>
  6 + *
  7 + * SPDX-License-Identifier: GPL-2.0+
  8 + */
  9 +
  10 +#include <asm/arch/clock.h>
  11 +#include <asm/arch/crm_regs.h>
  12 +#include <asm/arch/iomux.h>
  13 +#include <asm/arch/imx-regs.h>
  14 +#include <asm/arch/mx6-pins.h>
  15 +#include <asm/arch/mxc_hdmi.h>
  16 +#include <asm/arch/sys_proto.h>
  17 +#include <asm/gpio.h>
  18 +#include <asm/mach-imx/iomux-v3.h>
  19 +#include <asm/mach-imx/mxc_i2c.h>
  20 +#include <asm/mach-imx/boot_mode.h>
  21 +#include <asm/mach-imx/video.h>
  22 +#include <asm/io.h>
  23 +#include <linux/sizes.h>
  24 +#include <common.h>
  25 +#include <fsl_esdhc.h>
  26 +#include <mmc.h>
  27 +#include <miiphy.h>
  28 +#include <netdev.h>
  29 +#include <phy.h>
  30 +#include <input.h>
  31 +#include <i2c.h>
  32 +#include <power/pmic.h>
  33 +#include <power/pfuze100_pmic.h>
  34 +
  35 +DECLARE_GLOBAL_DATA_PTR;
  36 +
  37 +#define UART_PAD_CTRL (PAD_CTL_PUS_100K_UP | \
  38 + PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \
  39 + PAD_CTL_SRE_FAST | PAD_CTL_HYS)
  40 +
  41 +#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP | \
  42 + PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm | \
  43 + PAD_CTL_SRE_FAST | PAD_CTL_HYS)
  44 +
  45 +#define BASEBOARD_USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP | \
  46 + PAD_CTL_SPEED_LOW | PAD_CTL_DSE_40ohm | \
  47 + PAD_CTL_SRE_FAST | PAD_CTL_HYS)
  48 +
  49 +#define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | \
  50 + PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
  51 +
  52 +#define I2C_PAD_CTRL (PAD_CTL_PUS_100K_UP | \
  53 + PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \
  54 + PAD_CTL_ODE | PAD_CTL_SRE_FAST)
  55 +
  56 +#define USDHC1_CD_GPIO IMX_GPIO_NR(3, 9)
  57 +#define USDHC3_CD_GPIO IMX_GPIO_NR(1, 2)
  58 +#define ETH_PHY_RESET IMX_GPIO_NR(1, 26)
  59 +#define WL_REG_ON IMX_GPIO_NR(1, 7)
  60 +#define BT_NRST IMX_GPIO_NR(7, 12)
  61 +#define LVDS0_EN IMX_GPIO_NR(2, 8)
  62 +#define LVDS0_BL_EN IMX_GPIO_NR(2, 9)
  63 +
  64 +int dram_init(void)
  65 +{
  66 + gd->ram_size = imx_ddr_size();
  67 +
  68 + return 0;
  69 +}
  70 +
  71 +static iomux_v3_cfg_t const uart1_pads[] = {
  72 + IOMUX_PADS(PAD_CSI0_DAT10__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
  73 + IOMUX_PADS(PAD_CSI0_DAT11__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
  74 +};
  75 +
  76 +static iomux_v3_cfg_t const usdhc1_pads[] = {
  77 + IOMUX_PADS(PAD_SD1_CLK__SD1_CLK | MUX_PAD_CTRL(BASEBOARD_USDHC_PAD_CTRL)),
  78 + IOMUX_PADS(PAD_SD1_CMD__SD1_CMD | MUX_PAD_CTRL(BASEBOARD_USDHC_PAD_CTRL)),
  79 + IOMUX_PADS(PAD_SD1_DAT0__SD1_DATA0 | MUX_PAD_CTRL(BASEBOARD_USDHC_PAD_CTRL)),
  80 + IOMUX_PADS(PAD_SD1_DAT1__SD1_DATA1 | MUX_PAD_CTRL(BASEBOARD_USDHC_PAD_CTRL)),
  81 + IOMUX_PADS(PAD_SD1_DAT2__SD1_DATA2 | MUX_PAD_CTRL(BASEBOARD_USDHC_PAD_CTRL)),
  82 + IOMUX_PADS(PAD_SD1_DAT3__SD1_DATA3 | MUX_PAD_CTRL(BASEBOARD_USDHC_PAD_CTRL)),
  83 + /* Carrier MicroSD Card Detect */
  84 + IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL)),
  85 +};
  86 +
  87 +static iomux_v3_cfg_t const usdhc3_pads[] = {
  88 + IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  89 + IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  90 + IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  91 + IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  92 + IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  93 + IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  94 + /* SOM MicroSD Card Detect */
  95 + IOMUX_PADS(PAD_EIM_DA9__GPIO3_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL)),
  96 +};
  97 +
  98 +static iomux_v3_cfg_t const lvds_pads[] = {
  99 + /* lvds */
  100 + IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL)),
  101 + IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL)),
  102 + IOMUX_PADS(PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK | MUX_PAD_CTRL(NO_PAD_CTRL)),
  103 + IOMUX_PADS(PAD_DI0_PIN2__IPU1_DI0_PIN02 | MUX_PAD_CTRL(NO_PAD_CTRL)),
  104 + IOMUX_PADS(PAD_DI0_PIN3__IPU1_DI0_PIN03 | MUX_PAD_CTRL(NO_PAD_CTRL)),
  105 +};
  106 +
  107 +static void setup_iomux_uart(void)
  108 +{
  109 + SETUP_IOMUX_PADS(uart1_pads);
  110 +}
  111 +
  112 +static bool cpu_is_pop(void)
  113 +{
  114 + u32 soc_sbmr = readl(SRC_BASE_ADDR + 0x4);
  115 + u32 ddr_map;
  116 +
  117 + /* BOOT_CFG3[4] and BOOT_CFG3[5] */
  118 + ddr_map = (soc_sbmr >> 20) & 0x3;
  119 +
  120 + if (ddr_map == 0x2)
  121 + return true;
  122 + else
  123 + return false;
  124 +}
  125 +
  126 +static struct fsl_esdhc_cfg usdhc_cfg[2] = {
  127 + { USDHC3_BASE_ADDR, 0, 8 },
  128 + {USDHC1_BASE_ADDR, 0, 8 },
  129 +};
  130 +
  131 +int mmc_map_to_kernel_blk(int dev_no)
  132 +{
  133 + return dev_no + 2;
  134 +}
  135 +
  136 +int board_mmc_getcd(struct mmc *mmc)
  137 +{
  138 + struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
  139 + int ret = 0;
  140 +
  141 + switch (cfg->esdhc_base) {
  142 + case USDHC1_BASE_ADDR:
  143 + ret = !gpio_get_value(USDHC1_CD_GPIO);
  144 + break;
  145 + case USDHC3_BASE_ADDR:
  146 + ret = !gpio_get_value(USDHC3_CD_GPIO);
  147 + break;
  148 + }
  149 +
  150 + return ret;
  151 +}
  152 +
  153 +int board_mmc_init(bd_t *bis)
  154 +{
  155 + int ret;
  156 + u32 index = 0;
  157 +
  158 + /*
  159 + * Following map is done:
  160 + * (USDHC) (Physical Port)
  161 + * usdhc3 SOM MicroSD/MMC
  162 + * usdhc1 Carrier board MicroSD
  163 + * Always set boot USDHC as mmc0
  164 + */
  165 +
  166 + SETUP_IOMUX_PADS(usdhc3_pads);
  167 + gpio_direction_input(USDHC3_CD_GPIO);
  168 +
  169 + SETUP_IOMUX_PADS(usdhc1_pads);
  170 + gpio_direction_input(USDHC1_CD_GPIO);
  171 +
  172 + switch (get_boot_device()) {
  173 + case SD1_BOOT:
  174 + usdhc_cfg[0].esdhc_base = USDHC1_BASE_ADDR;
  175 + usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
  176 + usdhc_cfg[0].max_bus_width = 4;
  177 + usdhc_cfg[1].esdhc_base = USDHC3_BASE_ADDR;
  178 + usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
  179 + usdhc_cfg[1].max_bus_width = 4;
  180 + break;
  181 +
  182 + case SD3_BOOT:
  183 + default:
  184 + usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR;
  185 + usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
  186 + usdhc_cfg[0].max_bus_width = 4;
  187 + usdhc_cfg[1].esdhc_base = USDHC1_BASE_ADDR;
  188 + usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
  189 + usdhc_cfg[1].max_bus_width = 4;
  190 + break;
  191 + }
  192 +
  193 + for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) {
  194 + ret = fsl_esdhc_initialize(bis, &usdhc_cfg[index]);
  195 + if (ret)
  196 + return ret;
  197 + }
  198 +
  199 + return 0;
  200 +}
  201 +
  202 +int check_mmc_autodetect(void)
  203 +{
  204 + char *autodetect_str = env_get("mmcautodetect");
  205 +
  206 + if ((autodetect_str != NULL) &&
  207 + (strcmp(autodetect_str, "yes") == 0)) {
  208 + return 1;
  209 + }
  210 +
  211 + return 0;
  212 +}
  213 +
  214 +void board_late_mmc_init(void)
  215 +{
  216 + char cmd[32];
  217 + char mmcblk[32];
  218 + u32 dev_no = mmc_get_env_dev();
  219 +
  220 + if (!check_mmc_autodetect())
  221 + return;
  222 +
  223 + env_set_ulong("mmcdev", dev_no);
  224 +
  225 + /* Set mmcblk env */
  226 + sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw",
  227 + mmc_map_to_kernel_blk(dev_no));
  228 + env_set("mmcroot", mmcblk);
  229 +
  230 + sprintf(cmd, "mmc dev %d", dev_no);
  231 + run_command(cmd, 0);
  232 +}
  233 +
  234 +static int mx6_rgmii_rework(struct phy_device *phydev)
  235 +{
  236 + unsigned short val;
  237 +
  238 + /* To enable AR8035 ouput a 125MHz clk from CLK_25M */
  239 + phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x7);
  240 + phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
  241 + phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
  242 +
  243 + val = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
  244 + val &= 0xffe7;
  245 + val |= 0x18;
  246 + phy_write(phydev, MDIO_DEVAD_NONE, 0xe, val);
  247 +
  248 + /* introduce tx clock delay */
  249 + phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x5);
  250 + val = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
  251 + val |= 0x0100;
  252 + phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, val);
  253 +
  254 + return 0;
  255 +}
  256 +
  257 +int board_phy_config(struct phy_device *phydev)
  258 +{
  259 + mx6_rgmii_rework(phydev);
  260 +
  261 + if (phydev->drv->config)
  262 + phydev->drv->config(phydev);
  263 +
  264 + return 0;
  265 +}
  266 +
  267 +#if defined(CONFIG_VIDEO_IPUV3)
  268 +struct i2c_pads_info mx6q_i2c2_pad_info = {
  269 + .scl = {
  270 + .i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL
  271 + | MUX_PAD_CTRL(I2C_PAD_CTRL),
  272 + .gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12
  273 + | MUX_PAD_CTRL(I2C_PAD_CTRL),
  274 + .gp = IMX_GPIO_NR(4, 12)
  275 + },
  276 + .sda = {
  277 + .i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA
  278 + | MUX_PAD_CTRL(I2C_PAD_CTRL),
  279 + .gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13
  280 + | MUX_PAD_CTRL(I2C_PAD_CTRL),
  281 + .gp = IMX_GPIO_NR(4, 13)
  282 + }
  283 +};
  284 +
  285 +struct i2c_pads_info mx6dl_i2c2_pad_info = {
  286 + .scl = {
  287 + .i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL
  288 + | MUX_PAD_CTRL(I2C_PAD_CTRL),
  289 + .gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12
  290 + | MUX_PAD_CTRL(I2C_PAD_CTRL),
  291 + .gp = IMX_GPIO_NR(4, 12)
  292 + },
  293 + .sda = {
  294 + .i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA
  295 + | MUX_PAD_CTRL(I2C_PAD_CTRL),
  296 + .gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13
  297 + | MUX_PAD_CTRL(I2C_PAD_CTRL),
  298 + .gp = IMX_GPIO_NR(4, 13)
  299 + }
  300 +};
  301 +
  302 +struct i2c_pads_info mx6q_i2c3_pad_info = {
  303 + .scl = {
  304 + .i2c_mode = MX6Q_PAD_EIM_D17__I2C3_SCL | MUX_PAD_CTRL(I2C_PAD_CTRL),
  305 + .gpio_mode = MX6Q_PAD_EIM_D17__GPIO3_IO17 | MUX_PAD_CTRL(I2C_PAD_CTRL),
  306 + .gp = IMX_GPIO_NR(3, 17)
  307 + },
  308 + .sda = {
  309 + .i2c_mode = MX6Q_PAD_EIM_D18__I2C3_SDA | MUX_PAD_CTRL(I2C_PAD_CTRL),
  310 + .gpio_mode = MX6Q_PAD_EIM_D18__GPIO3_IO18 | MUX_PAD_CTRL(I2C_PAD_CTRL),
  311 + .gp = IMX_GPIO_NR(3, 18)
  312 + }
  313 +};
  314 +
  315 +struct i2c_pads_info mx6dl_i2c3_pad_info = {
  316 + .scl = {
  317 + .i2c_mode = MX6DL_PAD_EIM_D17__I2C3_SCL | MUX_PAD_CTRL(I2C_PAD_CTRL),
  318 + .gpio_mode = MX6DL_PAD_EIM_D17__GPIO3_IO17 | MUX_PAD_CTRL(I2C_PAD_CTRL),
  319 + .gp = IMX_GPIO_NR(3, 17)
  320 + },
  321 + .sda = {
  322 + .i2c_mode = MX6DL_PAD_EIM_D18__I2C3_SDA | MUX_PAD_CTRL(I2C_PAD_CTRL),
  323 + .gpio_mode = MX6DL_PAD_EIM_D18__GPIO3_IO18 | MUX_PAD_CTRL(I2C_PAD_CTRL),
  324 + .gp = IMX_GPIO_NR(3, 18)
  325 + }
  326 +};
  327 +#endif
  328 +
  329 +#if defined(CONFIG_VIDEO_IPUV3)
  330 +static iomux_v3_cfg_t const ej050na_pads[] = {
  331 + IOMUX_PADS(PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK),
  332 + IOMUX_PADS(PAD_DI0_PIN2__IPU1_DI0_PIN02), /* HSync */
  333 + IOMUX_PADS(PAD_DI0_PIN3__IPU1_DI0_PIN03), /* VSync */
  334 + IOMUX_PADS(PAD_DI0_PIN4__IPU1_DI0_PIN04 | MUX_PAD_CTRL(PAD_CTL_DSE_120ohm)), /* Contrast */
  335 + IOMUX_PADS(PAD_DI0_PIN15__IPU1_DI0_PIN15), /* DISP0_DRDY */
  336 + IOMUX_PADS(PAD_DISP0_DAT0__IPU1_DISP0_DATA00),
  337 + IOMUX_PADS(PAD_DISP0_DAT1__IPU1_DISP0_DATA01),
  338 + IOMUX_PADS(PAD_DISP0_DAT2__IPU1_DISP0_DATA02),
  339 + IOMUX_PADS(PAD_DISP0_DAT3__IPU1_DISP0_DATA03),
  340 + IOMUX_PADS(PAD_DISP0_DAT4__IPU1_DISP0_DATA04),
  341 + IOMUX_PADS(PAD_DISP0_DAT5__IPU1_DISP0_DATA05),
  342 + IOMUX_PADS(PAD_DISP0_DAT6__IPU1_DISP0_DATA06),
  343 + IOMUX_PADS(PAD_DISP0_DAT7__IPU1_DISP0_DATA07),
  344 + IOMUX_PADS(PAD_DISP0_DAT8__IPU1_DISP0_DATA08),
  345 + IOMUX_PADS(PAD_DISP0_DAT9__IPU1_DISP0_DATA09),
  346 + IOMUX_PADS(PAD_DISP0_DAT10__IPU1_DISP0_DATA10),
  347 + IOMUX_PADS(PAD_DISP0_DAT11__IPU1_DISP0_DATA11),
  348 + IOMUX_PADS(PAD_DISP0_DAT12__IPU1_DISP0_DATA12),
  349 + IOMUX_PADS(PAD_DISP0_DAT13__IPU1_DISP0_DATA13),
  350 + IOMUX_PADS(PAD_DISP0_DAT14__IPU1_DISP0_DATA14),
  351 + IOMUX_PADS(PAD_DISP0_DAT15__IPU1_DISP0_DATA15),
  352 + IOMUX_PADS(PAD_DISP0_DAT16__IPU1_DISP0_DATA16),
  353 + IOMUX_PADS(PAD_DISP0_DAT17__IPU1_DISP0_DATA17),
  354 + IOMUX_PADS(PAD_DISP0_DAT18__IPU1_DISP0_DATA18),
  355 + IOMUX_PADS(PAD_DISP0_DAT19__IPU1_DISP0_DATA19),
  356 + IOMUX_PADS(PAD_DISP0_DAT20__IPU1_DISP0_DATA20),
  357 + IOMUX_PADS(PAD_DISP0_DAT21__IPU1_DISP0_DATA21),
  358 + IOMUX_PADS(PAD_DISP0_DAT22__IPU1_DISP0_DATA22),
  359 + IOMUX_PADS(PAD_DISP0_DAT23__IPU1_DISP0_DATA23),
  360 + IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL)), /* DISP0_BKLEN */
  361 + IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL)), /* DISP0_VDDEN */
  362 +};
  363 +
  364 +static void do_enable_hdmi(struct display_info_t const *dev)
  365 +{
  366 + imx_enable_hdmi_phy();
  367 +}
  368 +
  369 +static int detect_i2c(struct display_info_t const *dev)
  370 +{
  371 + return (0 == i2c_set_bus_num(dev->bus)) &&
  372 + (0 == i2c_probe(dev->addr));
  373 +}
  374 +
  375 +static void enable_lvds(struct display_info_t const *dev)
  376 +{
  377 + struct iomuxc *iomux = (struct iomuxc *)
  378 + IOMUXC_BASE_ADDR;
  379 +
  380 + /* set CH0 data width to 24bit (IOMUXC_GPR2:5 0=18bit, 1=24bit) */
  381 + u32 reg = readl(&iomux->gpr[2]);
  382 + reg |= IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT;
  383 + writel(reg, &iomux->gpr[2]);
  384 +
  385 + /* Enable Backlight - use GPIO for Brightness adjustment */
  386 + SETUP_IOMUX_PAD(PAD_SD4_DAT1__GPIO2_IO09);
  387 + gpio_direction_output(IMX_GPIO_NR(2, 9), 1);
  388 +
  389 + SETUP_IOMUX_PAD(PAD_SD4_DAT0__GPIO2_IO08);
  390 + gpio_direction_output(IMX_GPIO_NR(2, 8), 1);
  391 +}
  392 +
  393 +static void enable_ej050na(struct display_info_t const *dev)
  394 +{
  395 + SETUP_IOMUX_PADS(ej050na_pads);
  396 +
  397 + gpio_direction_output(IMX_GPIO_NR(2, 10), 1);
  398 + gpio_direction_output(IMX_GPIO_NR(2, 11), 1);
  399 +}
  400 +
  401 +struct display_info_t const displays[] = {{
  402 + .bus = -1,
  403 + .addr = 0,
  404 + .pixfmt = IPU_PIX_FMT_RGB24,
  405 + .detect = NULL,
  406 + .enable = enable_lvds,
  407 + .mode = {
  408 + .name = "hj070na",
  409 + .refresh = 60,
  410 + .xres = 1024,
  411 + .yres = 600,
  412 + .pixclock = 15385,
  413 + .left_margin = 220,
  414 + .right_margin = 40,
  415 + .upper_margin = 21,
  416 + .lower_margin = 7,
  417 + .hsync_len = 60,
  418 + .vsync_len = 10,
  419 + .sync = FB_SYNC_EXT,
  420 + .vmode = FB_VMODE_NONINTERLACED
  421 +} }, {
  422 + .bus = -1,
  423 + .addr = 0,
  424 + .pixfmt = IPU_PIX_FMT_RGB24,
  425 + .detect = detect_hdmi,
  426 + .enable = do_enable_hdmi,
  427 + .mode = {
  428 + .name = "HDMI",
  429 + .refresh = 60,
  430 + .xres = 1024,
  431 + .yres = 768,
  432 + .pixclock = 15385,
  433 + .left_margin = 220,
  434 + .right_margin = 40,
  435 + .upper_margin = 21,
  436 + .lower_margin = 7,
  437 + .hsync_len = 60,
  438 + .vsync_len = 10,
  439 + .sync = FB_SYNC_EXT,
  440 + .vmode = FB_VMODE_NONINTERLACED
  441 +} }, {
  442 + .bus = 1,
  443 + .addr = 0x38,
  444 + .pixfmt = IPU_PIX_FMT_RGB24,
  445 + .detect = detect_i2c,
  446 + .enable = enable_ej050na,
  447 + .mode = {
  448 + .name = "EJ050NA",
  449 + .refresh = 60,
  450 + .xres = 800,
  451 + .yres = 480,
  452 + .pixclock = 29850,
  453 + .left_margin = 89,
  454 + .right_margin = 64,
  455 + .upper_margin = 23,
  456 + .lower_margin = 10,
  457 + .hsync_len = 10,
  458 + .vsync_len = 10,
  459 + .sync = 0,
  460 + .vmode = FB_VMODE_NONINTERLACED
  461 +} } };
  462 +size_t display_count = ARRAY_SIZE(displays);
  463 +
  464 +static void setup_display(void)
  465 +{
  466 + struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
  467 + struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
  468 + int reg;
  469 +
  470 + /* Setup HSYNC, VSYNC, DISP_CLK for debugging purposes */
  471 + SETUP_IOMUX_PADS(lvds_pads);
  472 + gpio_direction_output(LVDS0_EN, 1);
  473 + gpio_direction_output(LVDS0_BL_EN, 1);
  474 +
  475 + enable_ipu_clock();
  476 + imx_setup_hdmi();
  477 +
  478 + reg = __raw_readl(&mxc_ccm->CCGR3);
  479 + reg |= MXC_CCM_CCGR3_LDB_DI0_MASK | MXC_CCM_CCGR3_LDB_DI1_MASK;
  480 + writel(reg, &mxc_ccm->CCGR3);
  481 +
  482 + /* set LDB0, LDB1 clk select to 011/011 */
  483 + reg = readl(&mxc_ccm->cs2cdr);
  484 + reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK
  485 + | MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK);
  486 + reg |= (3 << MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_OFFSET)
  487 + | (3 << MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET);
  488 + writel(reg, &mxc_ccm->cs2cdr);
  489 +
  490 + reg = readl(&mxc_ccm->cscmr2);
  491 + reg |= MXC_CCM_CSCMR2_LDB_DI0_IPU_DIV | MXC_CCM_CSCMR2_LDB_DI1_IPU_DIV;
  492 + writel(reg, &mxc_ccm->cscmr2);
  493 +
  494 + reg = readl(&mxc_ccm->chsccdr);
  495 + reg |= (CHSCCDR_CLK_SEL_LDB_DI0
  496 + << MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET);
  497 + reg |= (CHSCCDR_CLK_SEL_LDB_DI0
  498 + << MXC_CCM_CHSCCDR_IPU1_DI1_CLK_SEL_OFFSET);
  499 + writel(reg, &mxc_ccm->chsccdr);
  500 +
  501 + reg = IOMUXC_GPR2_BGREF_RRMODE_EXTERNAL_RES
  502 + | IOMUXC_GPR2_DI1_VS_POLARITY_ACTIVE_LOW
  503 + | IOMUXC_GPR2_DI0_VS_POLARITY_ACTIVE_LOW
  504 + | IOMUXC_GPR2_BIT_MAPPING_CH1_SPWG
  505 + | IOMUXC_GPR2_DATA_WIDTH_CH1_24BIT
  506 + | IOMUXC_GPR2_BIT_MAPPING_CH0_SPWG
  507 + | IOMUXC_GPR2_DATA_WIDTH_CH0_24BIT
  508 + | IOMUXC_GPR2_LVDS_CH1_MODE_ENABLED_DI0
  509 + | IOMUXC_GPR2_LVDS_CH0_MODE_ENABLED_DI0;
  510 + writel(reg, &iomux->gpr[2]);
  511 + reg = readl(&iomux->gpr[3]);
  512 +
  513 + reg = (reg & ~(IOMUXC_GPR3_LVDS0_MUX_CTL_MASK
  514 + | IOMUXC_GPR3_HDMI_MUX_CTL_MASK))
  515 + | (IOMUXC_GPR3_MUX_SRC_IPU1_DI0
  516 + << IOMUXC_GPR3_LVDS0_MUX_CTL_OFFSET);
  517 +
  518 + writel(reg, &iomux->gpr[3]);
  519 +}
  520 +#endif /* CONFIG_VIDEO_IPUV3 */
  521 +
  522 +int board_eth_init(bd_t *bis)
  523 +{
  524 +#if 0 // fix me, cause exception
  525 + setup_iomux_enet();
  526 + return cpu_eth_init(bis);
  527 +#endif
  528 +
  529 + return 0;
  530 +}
  531 +
  532 +int board_early_init_f(void)
  533 +{
  534 + setup_iomux_uart();
  535 +#if defined(CONFIG_VIDEO_IPUV3)
  536 + setup_display();
  537 +#endif
  538 + return 0;
  539 +}
  540 +
  541 +/*
  542 + * Do not overwrite the console
  543 + * Use always serial for U-Boot console
  544 + */
  545 +int overwrite_console(void)
  546 +{
  547 + return 1;
  548 +}
  549 +
  550 +#ifdef CONFIG_CMD_BMODE
  551 +static const struct boot_mode board_boot_modes[] = {
  552 + /* 4 bit bus width */
  553 + {"mmc0", MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00)},
  554 + {"mmc1", MAKE_CFGVAL(0x40, 0x20, 0x00, 0x00)},
  555 + {NULL, 0},
  556 +};
  557 +#endif
  558 +
  559 +#define I2C_PMIC 1
  560 +int board_init_pmic(void) {
  561 + struct pmic *p;
  562 + unsigned int reg;
  563 +
  564 + power_pfuze100_init(1);
  565 +
  566 + /* configure PFUZE100 PMIC */
  567 + power_pfuze100_init(I2C_PMIC);
  568 + p = pmic_get("PFUZE100");
  569 + if (p && !pmic_probe(p)) {
  570 + pmic_reg_read(p, PFUZE100_DEVICEID, &reg);
  571 + printf("PMIC: PFUZE100 ID=0x%02x\n", reg);
  572 +
  573 + /* Set VGEN2 to 1.5V and enable */
  574 + pmic_reg_read(p, PFUZE100_VGEN2VOL, &reg);
  575 + reg &= ~(LDO_VOL_MASK);
  576 + reg |= (LDOA_1_50V | (1 << (LDO_EN)));
  577 + pmic_reg_write(p, PFUZE100_VGEN2VOL, reg);
  578 + }
  579 +
  580 + return 0;
  581 +}
  582 +
  583 +int board_late_init(void)
  584 +{
  585 +
  586 +#ifdef CONFIG_CMD_BMODE
  587 + add_board_boot_modes(board_boot_modes);
  588 +#endif
  589 +
  590 +#ifdef CONFIG_ENV_IS_IN_MMC
  591 + board_late_mmc_init();
  592 +#endif
  593 +
  594 + set_wdog_reset((struct wdog_regs *)WDOG1_BASE_ADDR);
  595 +
  596 + return 0;
  597 +}
  598 +
  599 +int board_init(void)
  600 +{
  601 + /* address of boot parameters */
  602 + gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
  603 +
  604 +#if defined(CONFIG_VIDEO_IPUV3)
  605 + if (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) {
  606 + //setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c1_pad_info);
  607 + setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c2_pad_info);
  608 + setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c3_pad_info);
  609 + } else {
  610 + //setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c1_pad_info);
  611 + setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c2_pad_info);
  612 + setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c3_pad_info);
  613 + }
  614 +#endif
  615 + return 0;
  616 +}
  617 +
  618 +int checkboard(void)
  619 +{
  620 + if (cpu_is_pop())
  621 + printf("Board: pico-imx6-pop\n");
  622 + else
  623 + printf("Board: pico-imx6\n");
  624 +
  625 + printf("Available baseboard: dwarf, hobbit, nymph\n");
  626 +
  627 + return 0;
  628 +}
  629 +
  630 +#ifdef CONFIG_FSL_FASTBOOT
  631 +#ifdef CONFIG_ANDROID_RECOVERY
  632 +int is_recovery_key_pressing(void)
  633 +{
  634 + return 0;
  635 +
  636 +}
  637 +#endif /*CONFIG_ANDROID_RECOVERY*/
  638 +#endif /*CONFIG_FSL_FASTBOOT*/
board/technexion/pico-imx6dl/pico-imx6dl.cfg
  1 +/*
  2 + * Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
  3 + *
  4 + * SPDX-License-Identifier: GPL-2.0+
  5 + *
  6 + * Refer docs/README.imxmage for more details about how-to configure
  7 + * and create imximage boot image
  8 + *
  9 + * The syntax is taken as close as possible with the kwbimage
  10 + */
  11 +
  12 +#define __ASSEMBLY__
  13 +#include <config.h>
  14 +/* image version */
  15 +
  16 +IMAGE_VERSION 2
  17 +
  18 +/*
  19 + * Boot Device : one of
  20 + * spi, sd (the board has no nand neither onenand)
  21 + */
  22 +
  23 +BOOT_FROM sd
  24 +
  25 +#ifdef CONFIG_SECURE_BOOT
  26 +CSF CONFIG_CSF_SIZE
  27 +#endif
  28 +
  29 +/*
  30 + * Device Configuration Data (DCD)
  31 + *
  32 + * Each entry must have the format:
  33 + * Addr-type Address Value
  34 + *
  35 + * where:
  36 + * Addr-type register length (1,2 or 4 bytes)
  37 + * Address absolute address of the register
  38 + * value value to be stored in the register
  39 + */
  40 +DATA 4 0x020e0774 0x000C0000
  41 +DATA 4 0x020e0754 0x00000000
  42 +DATA 4 0x020e04ac 0x00000028
  43 +DATA 4 0x020e04b0 0x00000028
  44 +DATA 4 0x020e0464 0x00000028
  45 +DATA 4 0x020e0490 0x00000028
  46 +DATA 4 0x020e074c 0x00000028
  47 +DATA 4 0x020e0494 0x00000028
  48 +DATA 4 0x020e04a0 0x00000000
  49 +DATA 4 0x020e04b4 0x00000028
  50 +DATA 4 0x020e04b8 0x00000028
  51 +DATA 4 0x020e076c 0x00000028
  52 +DATA 4 0x020e0750 0x00020000
  53 +DATA 4 0x020e04bc 0x00000028
  54 +DATA 4 0x020e04c0 0x00000028
  55 +DATA 4 0x020e04c4 0x00000028
  56 +DATA 4 0x020e04c8 0x00000028
  57 +DATA 4 0x020e0760 0x00020000
  58 +DATA 4 0x020e0764 0x00000028
  59 +DATA 4 0x020e0770 0x00000028
  60 +DATA 4 0x020e0778 0x00000028
  61 +DATA 4 0x020e077c 0x00000028
  62 +DATA 4 0x020e0470 0x00000028
  63 +DATA 4 0x020e0474 0x00000028
  64 +DATA 4 0x020e0478 0x00000028
  65 +DATA 4 0x020e047c 0x00000028
  66 +
  67 +DATA 4 0x021b0800 0xA1390003
  68 +
  69 +DATA 4 0x021b080c 0x003D0044
  70 +DATA 4 0x021b0810 0x0036003A
  71 +
  72 +DATA 4 0x021b083c 0x0240023C
  73 +DATA 4 0x021b0840 0x0224022C
  74 +
  75 +DATA 4 0x021b0848 0x42464848
  76 +
  77 +DATA 4 0x021b0850 0x3A383636
  78 +
  79 +DATA 4 0x021b081c 0x33333333
  80 +DATA 4 0x021b0820 0x33333333
  81 +DATA 4 0x021b0824 0x33333333
  82 +DATA 4 0x021b0828 0x33333333
  83 +
  84 +DATA 4 0x021b08b8 0x00000800
  85 +
  86 +DATA 4 0x021b0004 0x0002002D
  87 +DATA 4 0x021b0008 0x00333040
  88 +DATA 4 0x021b000c 0x676B5333
  89 +DATA 4 0x021b0010 0xB68E8B63
  90 +DATA 4 0x021b0014 0x01FF00DB
  91 +
  92 +DATA 4 0x021b0018 0x00011740
  93 +DATA 4 0x021b001c 0x00008000
  94 +DATA 4 0x021b002c 0x000026D2
  95 +DATA 4 0x021b0030 0x006B1023
  96 +DATA 4 0x021b0040 0x00000027
  97 +DATA 4 0x021b0000 0x84190000
  98 +
  99 +DATA 4 0x021b001c 0x02008032
  100 +DATA 4 0x021b001c 0x00008033
  101 +DATA 4 0x021b001c 0x00048031
  102 +DATA 4 0x021b001c 0x05208030
  103 +DATA 4 0x021b001c 0x04008040
  104 +
  105 +DATA 4 0x021b0020 0x00007800
  106 +DATA 4 0x021b0818 0x00022227
  107 +
  108 +DATA 4 0x021b0004 0x0002556D
  109 +DATA 4 0x021b0404 0x00011006
  110 +DATA 4 0x021b001c 0x00000000
  111 +
  112 +/* set the default clock gate to save power */
  113 +DATA 4 0x020c4068 0x00C03F3F
  114 +DATA 4 0x020c406c 0x0030FC03
  115 +DATA 4 0x020c4070 0x0FFFC000
  116 +DATA 4 0x020c4074 0x3FF00000
  117 +DATA 4 0x020c4078 0x00FFF300
  118 +DATA 4 0x020c407c 0x0F0000C3
  119 +DATA 4 0x020c4080 0x000003FF
  120 +
  121 +/* enable AXI cache for VDOA/VPU/IPU */
  122 +DATA 4 0x020e0010 0xF00000CF
  123 +/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
  124 +DATA 4 0x020e0018 0x007F007F
  125 +DATA 4 0x020e001c 0x007F007F
configs/pico-imx6dl_defconfig
  1 +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/technexion/pico-imx6dl/pico-imx6dl.cfg,ANDROID_THINGS_SUPPORT"
  2 +CONFIG_ARM=y
  3 +CONFIG_ARCH_MX6=y
  4 +CONFIG_TARGET_PICO_IMX6DL=y
  5 +CONFIG_SYS_TEXT_BASE=0x17800000
  6 +CONFIG_SYS_MALLOC_F=y
  7 +CONFIG_SYS_MALLOC_F_LEN=0x400
  8 +CONFIG_FASTBOOT=y
  9 +CONFIG_CMD_FASTBOOT=y
  10 +CONFIG_ANDROID_BOOT_IMAGE=y
  11 +CONFIG_BOOTDELAY=-2
  12 +CONFIG_EFI_PARTITION=y
  13 +CONFIG_VIDEO=y
  14 +CONFIG_ENV_IS_IN_MMC=y
  15 +# CONFIG_CONSOLE_MUX is not set
  16 +CONFIG_SYS_CONSOLE_IS_IN_ENV=y
  17 +CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
  18 +CONFIG_HUSH_PARSER=y
  19 +CONFIG_CMD_BOOTZ=y
  20 +# CONFIG_CMD_IMLS is not set
  21 +CONFIG_CMD_MEMTEST=y
  22 +# CONFIG_CMD_FLASH is not set
  23 +CONFIG_CMD_MMC=y
  24 +CONFIG_CMD_USB=y
  25 +CONFIG_CMD_GPIO=y
  26 +CONFIG_CMD_DHCP=y
  27 +CONFIG_CMD_MII=y
  28 +CONFIG_CMD_PING=y
  29 +CONFIG_CMD_CACHE=y
  30 +CONFIG_CMD_EXT2=y
  31 +CONFIG_CMD_EXT4=y
  32 +CONFIG_CMD_EXT4_WRITE=y
  33 +CONFIG_CMD_FAT=y
  34 +CONFIG_CMD_FS_GENERIC=y
  35 +CONFIG_DFU_MMC=y
  36 +CONFIG_USB=y
  37 +CONFIG_USB_STORAGE=y
  38 +CONFIG_OF_LIBFDT=y
  39 +CONFIG_DM=y
  40 +CONFIG_DM_THERMAL=y
include/configs/pico-imx6dl.h
  1 +/*
  2 + * Copyright (C) 2015 Technexion Ltd.
  3 + * Copyright 2017-2018 NXP
  4 + *
  5 + * Configuration settings for the Technexion Pico i.mx6DL board.
  6 + *
  7 + * SPDX-License-Identifier: GPL-2.0+
  8 + */
  9 +#ifndef __PICO_IMX6DL_CONFIG_H
  10 +#define __PICO_IMX6DL_CONFIG_H
  11 +
  12 +#include "mx6_common.h"
  13 +
  14 +#undef CONFIG_LDO_BYPASS_CHECK
  15 +
  16 +/* Size of malloc() pool */
  17 +#define CONFIG_SYS_MALLOC_LEN (16 * SZ_1M)
  18 +
  19 +#define CONFIG_MXC_UART
  20 +#define CONFIG_MXC_UART_BASE UART1_BASE
  21 +
  22 +/* MMC Configs */
  23 +/* #define CONFIG_SYS_FSL_ESDHC_ADDR USDHC3_BASE_ADDR */
  24 +/* #define CONFIG_SYS_FSL_USDHC_NUM 1 */
  25 +
  26 +
  27 +/* MMC Configuration */
  28 +#define CONFIG_FSL_ESDHC
  29 +#define CONFIG_FSL_USDHC
  30 +#define CONFIG_SYS_FSL_USDHC_NUM 2
  31 +#define CONFIG_SYS_FSL_ESDHC_ADDR USDHC3_BASE_ADDR
  32 +
  33 +
  34 +
  35 +#ifdef CONFIG_CMD_NET
  36 +#define CONFIG_FEC_MXC
  37 +#define CONFIG_MII
  38 +#define CONFIG_FEC_ENET_DEV 1
  39 +
  40 +#if (CONFIG_FEC_ENET_DEV == 0)
  41 +#define IMX_FEC_BASE ENET_BASE_ADDR
  42 +#define CONFIG_FEC_MXC_PHYADDR 0x2
  43 +#define CONFIG_FEC_XCV_TYPE RMII
  44 +#elif (CONFIG_FEC_ENET_DEV == 1)
  45 +#define IMX_FEC_BASE ENET2_BASE_ADDR
  46 +#define CONFIG_FEC_MXC_PHYADDR 0x1 /* need board rework */
  47 +#define CONFIG_FEC_XCV_TYPE RMII
  48 +#endif
  49 +#define CONFIG_ETHPRIME "FEC"
  50 +
  51 +#define CONFIG_PHYLIB
  52 +#define CONFIG_PHY_MICREL
  53 +#endif
  54 +
  55 +/* I2C configs */
  56 +#define CONFIG_CMD_I2C
  57 +#ifdef CONFIG_CMD_I2C
  58 +#define CONFIG_SYS_I2C
  59 +#define CONFIG_SYS_I2C_MXC
  60 +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */
  61 +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */
  62 +#define CONFIG_SYS_I2C_SPEED 100000
  63 +#endif
  64 +
  65 +#ifdef CONFIG_DEFAULT_FDT_FILE
  66 +#undef CONFIG_DEFAULT_FDT_FILE
  67 +#define CONFIG_DEFAULT_FDT_FILE "imx6dl-pico.dtb"
  68 +#endif
  69 +
  70 +#define PHYS_SDRAM_SIZE SZ_512M
  71 +
  72 +/* PMIC */
  73 +#define CONFIG_POWER
  74 +#define CONFIG_POWER_I2C
  75 +#define CONFIG_POWER_PFUZE100
  76 +#define CONFIG_POWER_PFUZE100_I2C_ADDR 0x08
  77 +
  78 +
  79 +/* Framebuffer */
  80 +#define CONFIG_VIDEO_IPUV3
  81 +#define CONFIG_VIDEO_BMP_RLE8
  82 +#define CONFIG_SPLASH_SCREEN
  83 +#define CONFIG_SPLASH_SCREEN_ALIGN
  84 +#define CONFIG_BMP_16BPP
  85 +#define CONFIG_VIDEO_LOGO
  86 +#define CONFIG_VIDEO_BMP_LOGO
  87 +#define CONFIG_CMD_HDMIDETECT
  88 +#define CONFIG_IMX_HDMI
  89 +#define CONFIG_IMX_VIDEO_SKIP
  90 +
  91 +#define CONFIG_SYS_MMC_IMG_LOAD_PART 1
  92 +
  93 +#define CONFIG_MFG_ENV_SETTINGS \
  94 + "mfgtool_args=setenv bootargs console=${console},${baudrate} " \
  95 + "rdinit=/linuxrc " \
  96 + "g_mass_storage.stall=0 g_mass_storage.removable=1 " \
  97 + "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\
  98 + "g_mass_storage.iSerialNumber=\"\" "\
  99 + "clk_ignore_unused "\
  100 + "\0" \
  101 + "loadaddr=0x12000000\0" \
  102 + "fdt_addr=0x18000000\0" \
  103 + "initrd_addr=0x12C00000\0" \
  104 + "initrd_high=0xffffffff\0" \
  105 + "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \
  106 +
  107 +
  108 +#define CONFIG_EXTRA_ENV_SETTINGS \
  109 + CONFIG_MFG_ENV_SETTINGS \
  110 + "script=boot.scr\0" \
  111 + "image=zImage\0" \
  112 + "console=ttymxc0\0" \
  113 + "splashpos=m,m\0" \
  114 + "som=autodetect\0" \
  115 + "baseboard=dwarf\0" \
  116 + "default_baseboard=dwarf\0" \
  117 + "fdtfile=undefined\0" \
  118 + "fdt_high=0xffffffff\0" \
  119 + "initrd_high=0xffffffff\0" \
  120 + "fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
  121 + "fdt_addr=0x18000000\0" \
  122 + "boot_fdt=try\0" \
  123 + "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
  124 + "mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
  125 + "mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
  126 + "mmcautodetect=yes\0" \
  127 + "mmcargs=setenv bootargs console=${console},${baudrate} " \
  128 + "root=${mmcroot}\0" \
  129 + "loadbootscript=" \
  130 + "fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
  131 + "bootscript=echo Running bootscript from mmc ...; " \
  132 + "source\0" \
  133 + "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
  134 + "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
  135 + "mmcboot=echo Booting from mmc ...; " \
  136 + "run mmcargs; " \
  137 + "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
  138 + "if run loadfdt; then " \
  139 + "bootz ${loadaddr} - ${fdt_addr}; " \
  140 + "else " \
  141 + "if test ${boot_fdt} = try; then " \
  142 + "bootz; " \
  143 + "else " \
  144 + "echo WARN: Cannot load the DT; " \
  145 + "fi; " \
  146 + "fi; " \
  147 + "else " \
  148 + "bootz; " \
  149 + "fi;\0"
  150 +
  151 +#define CONFIG_BOOTCOMMAND \
  152 + "mmc dev ${mmcdev};" \
  153 + "mmc dev ${mmcdev}; if mmc rescan; then " \
  154 + "if run loadbootscript; then " \
  155 + "run bootscript; " \
  156 + "else " \
  157 + "if run loadimage; then " \
  158 + "run mmcboot; " \
  159 + "else run netboot; " \
  160 + "fi; " \
  161 + "fi; " \
  162 + "else run netboot; fi"
  163 +
  164 +#define CONFIG_SYS_MEMTEST_START 0x80000000
  165 +#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + (PHYS_SDRAM_SIZE >> 1))
  166 +
  167 +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
  168 +#define CONFIG_SYS_HZ 1000
  169 +
  170 +/* Physical Memory Map */
  171 +#define CONFIG_NR_DRAM_BANKS 1
  172 +#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
  173 +
  174 +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
  175 +#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
  176 +#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE
  177 +
  178 +#define CONFIG_SYS_INIT_SP_OFFSET \
  179 + (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
  180 +#define CONFIG_SYS_INIT_SP_ADDR \
  181 + (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
  182 +
  183 +#define CONFIG_ENV_SIZE SZ_8K
  184 +
  185 +#ifdef CONFIG_CMD_NAND
  186 +#define CONFIG_CMD_NAND_TRIMFFS
  187 +
  188 +/* NAND stuff */
  189 +#define CONFIG_NAND_MXS
  190 +#define CONFIG_SYS_MAX_NAND_DEVICE 1
  191 +#define CONFIG_SYS_NAND_BASE 0x40000000
  192 +#define CONFIG_SYS_NAND_5_ADDR_CYCLE
  193 +#define CONFIG_SYS_NAND_ONFI_DETECTION
  194 +
  195 +/* DMA stuff, needed for GPMI/MXS NAND support */
  196 +#define CONFIG_APBH_DMA
  197 +#define CONFIG_APBH_DMA_BURST
  198 +#define CONFIG_APBH_DMA_BURST8
  199 +#endif
  200 +
  201 +#if defined(CONFIG_ENV_IS_IN_MMC)
  202 +#define CONFIG_ENV_OFFSET (12 * SZ_64K)
  203 +#elif defined(CONFIG_ENV_IS_IN_SPI_FLASH)
  204 +#define CONFIG_ENV_OFFSET (384 * 1024)
  205 +#define CONFIG_ENV_SECT_SIZE (64 * 1024)
  206 +#define CONFIG_ENV_SPI_BUS CONFIG_SF_DEFAULT_BUS
  207 +#define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS
  208 +#define CONFIG_ENV_SPI_MODE CONFIG_SF_DEFAULT_MODE
  209 +#define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED
  210 +#elif defined(CONFIG_ENV_IS_IN_NAND)
  211 +#undef CONFIG_ENV_SIZE
  212 +#define CONFIG_ENV_OFFSET (60 << 20)
  213 +#define CONFIG_ENV_SECT_SIZE (128 << 10)
  214 +#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
  215 +#endif
  216 +
  217 +#define CONFIG_SYS_MMC_ENV_DEV 0 /* USDHC3 */
  218 +#define CONFIG_SYS_MMC_ENV_PART 1 /* user area */
  219 +#define CONFIG_MMCROOT "/dev/mmcblk2p2" /* USDHC3 */
  220 +
  221 +
  222 +/* USB Configs */
  223 +#ifdef CONFIG_CMD_USB
  224 +#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
  225 +#define CONFIG_USB_HOST_ETHER
  226 +#define CONFIG_USB_ETHER_ASIX
  227 +#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
  228 +#define CONFIG_MXC_USB_FLAGS 0
  229 +#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
  230 +#endif
  231 +
  232 +#define PRODUCT_NAME "imx6dl_pico"
  233 +#define VARIANT_NAME "imx6dl_pico"
  234 +
  235 +#if defined(CONFIG_ANDROID_THINGS_SUPPORT)
  236 +#include "pico-imx6dl_android_things.h"
  237 +#endif
  238 +
  239 +#endif
include/configs/pico-imx6dl_android_things.h
  1 +
  2 +/*
  3 + * Copyright 2017 NXP
  4 + *
  5 + * SPDX-License-Identifier: GPL-2.0+
  6 + */
  7 +
  8 +#ifndef __PICO_IMX6DL_ANDROID_THINGS_H
  9 +#define __PICO_IMX6DL_ANDROID_THINGS_H
  10 +#include "mx_android_common.h"
  11 +/* For NAND we don't support lock/unlock */
  12 +#ifndef CONFIG_NAND_BOOT
  13 +#define CONFIG_FASTBOOT_LOCK
  14 +#define CONFIG_ENABLE_LOCKSTATUS_SUPPORT
  15 +#define FSL_FASTBOOT_FB_DEV "mmc"
  16 +#endif
  17 +
  18 +#define CONFIG_ANDROID_AB_SUPPORT
  19 +#define CONFIG_FSL_CAAM_KB
  20 +#define CONFIG_CMD_FSL_CAAM_KB
  21 +#define CONFIG_SHA1
  22 +#define CONFIG_SHA256
  23 +
  24 +#define CONFIG_AVB_SUPPORT
  25 +#define CONFIG_SYSTEM_RAMDISK_SUPPORT
  26 +#ifdef CONFIG_AVB_SUPPORT
  27 +
  28 +#ifdef CONFIG_SYS_MALLOC_LEN
  29 +#undef CONFIG_SYS_MALLOC_LEN
  30 +#define CONFIG_SYS_MALLOC_LEN (32 * SZ_1M)
  31 +#endif
  32 +
  33 +#define CONFIG_SUPPORT_EMMC_RPMB
  34 +/* fuse bank size in word */
  35 +#define CONFIG_AVB_FUSE_BANK_SIZEW 8
  36 +#define CONFIG_AVB_FUSE_BANK_START 10
  37 +#define CONFIG_AVB_FUSE_BANK_END 15
  38 +#endif
  39 +
  40 +#endif
  41 +/* __PICO_IMX6DL_ANDROID_THINGS_H */