diff options
author | Igor Opaniuk <igor.opaniuk@toradex.com> | 2020-07-29 11:20:06 +0300 |
---|---|---|
committer | Igor Opaniuk <igor.opaniuk@toradex.com> | 2020-08-05 11:34:09 +0300 |
commit | 3f7808fcdefdb2e61da135435fef95ad8eeddb7c (patch) | |
tree | 36d6c9c10a93711edd4f73cefcdba9651fd10851 | |
parent | aa604cd6ab48d6c9b3017758d0149d7fc8d1796d (diff) |
colibri-imx8x: up-port initial implementation
USB (both host and device), Networking, MMC/SD work.
Testing:
-----------------------------------------------
U-Boot 2020.04-00119-g9dc5e94cb0-dirty (Jul 30 2020 - 22:36:54 +0300)
CPU: NXP i.MX8QXP RevB A35 at 1200 MHz at 47C
DRAM: 2 GiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In: serial@5a090000
Out: serial@5a090000
Err: serial@5a090000
Model: Toradex Colibri iMX8 QuadXPlus 2GB Wi-Fi / BT IT V1.0B, Serial# 06494331
Net: eth0: ethernet@5b040000 [PRIME]
Boot from USB for mfgtools
Hit any key to stop autoboot: 0
-----------------------------------------------
Was tested with:
imx-mkimage: imx_5.4.24_2.1.0
imx-scfw: ab182211e("Update .gitignore to ignore our built files and files from vscode")
imx-atf: imx_5.4.24_2.1.0
imx-seco: 3.6.3 [1]
-----------------------------------------------
Dropped patches from toradex_imx_v2018.03_4.14.98_2.3.0_bringup
as they have come in from mainline v2020.04 or just not relevant anymore:
9bfdda4f ("tdx-cfg-block.c: correct colibri imx8 string")
ae52342b ("colibri-imx8qxp: initial add")
9b950998 ("colibri-imx8qxp: move debug uart to lpuart3")
f9b0065b ("colibri-imx8qxp: synchronize with imx8qxp-mek from beta2")
982b4667 ("colibri-imx8qxp: forward port to 2018.03")
5c80880d ("colibri-imx8qxp: add unused pins as gpio")
30b37a6a ("colibri-imx8qxp: adjust copyright/licensing headers)
873a9561 ("colibri-imx8qxp: fix top-level compatible")
0e0f095d ("colibri-imx8qxp: clean-up device tree")
f61187df ("colibri-imx8qxp: clean-up configuration")
85a5d16b ("colibri-imx8qxp: clean-up board file")
a5a9bb4b ("colibri-imx8qxp: fused modules boot from emmc")
39c20ddd ("colibri-imx8qxp: default to dsihdmi device tree")
7443a6e5 ("colibri-imx8qxp: fix usb device/host functionality")
c721083a ("colibri-imx8qxp: fix ethernet functionality")
9f40db9d ("colibri-imx8qxp: adjust copyright/licensing headers some more")
9070b6f0 ("colibri-imx8qxp: dts: clean-up whitespace")
257470ac ("colibri-imx8x: enable FDT relocation")
a9272336 ("colibri-imx8qxp: change default device tree")
8470fb25 ("colibri-imx8x/apalis-imx8: converge scriptaddr for distroboot")
62493440 ("apalis-imx8/colibri-imx8x: use proper distroboot script")
f1993901 ("apalis-imx8/colibri-imx8x: set fdtfile since it is used by distro bootcmd")
890d03ae ("colibri-imx8qxp: sync with MEK platform")
eeb1d9b8 ("colibri-imx8qxp: move environment into first boot area")
c8c562ea ("colibri-imx8qxp: do not undef configs configured using Kconfig")
12489199 ("colibri-imx8qxp: make sure config block fdt fix-ups are called")
6a84ffaa ("colibri-imx8qxp: modify default ramdisk loading address")
[1] https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-seco-3.6.3.bin
Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
-rw-r--r-- | arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi | 62 | ||||
-rw-r--r-- | arch/arm/dts/fsl-imx8qxp-colibri.dts | 83 | ||||
-rw-r--r-- | board/toradex/colibri-imx8x/Makefile | 2 | ||||
-rw-r--r-- | board/toradex/colibri-imx8x/colibri-imx8x.c | 191 | ||||
-rw-r--r-- | configs/colibri-imx8qxp_defconfig | 50 | ||||
-rw-r--r-- | include/configs/colibri-imx8x.h | 89 |
6 files changed, 394 insertions, 83 deletions
diff --git a/arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi b/arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi index 322429a98a..7b2bf7e2cd 100644 --- a/arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi +++ b/arch/arm/dts/fsl-imx8qxp-colibri-u-boot.dtsi @@ -3,6 +3,30 @@ * Copyright 2019 Toradex AG */ +/ { + + aliases { + usbhost1 = &usbh3; + usbgadget0 = &usbg1; + }; + + usbh3: usbh3 { + compatible = "Cadence,usb3-host"; + dr_mode = "host"; + cdns3,usb = <&usbotg3>; + status = "okay"; + }; + + usbg1: usbg1 { + compatible = "fsl,imx27-usb-gadget"; + dr_mode = "peripheral"; + chipidea,usb = <&usbotg1>; + status = "okay"; + u-boot,dm-pre-proper; + }; + +}; + &{/imx8qx-pm} { u-boot,dm-pre-proper; @@ -72,6 +96,22 @@ u-boot,dm-pre-proper; }; +&pd_conn_usbotg0 { + u-boot,dm-spl; +}; + +&pd_conn_usbotg0_phy { + u-boot,dm-spl; +}; + +&pd_conn_usb2 { + u-boot,dm-spl; +}; + +&pd_conn_usb2_phy { + u-boot,dm-spl; +}; + &pd_conn_sdch0 { u-boot,dm-pre-proper; }; @@ -122,8 +162,30 @@ &usdhc1 { u-boot,dm-pre-proper; + /delete-property/ assigned-clock-parents; }; &usdhc2 { u-boot,dm-pre-proper; + /delete-property/ assigned-clock-parents; +}; + +&usbphy1 { + u-boot,dm-pre-proper; +}; + +&usbotg1 { + u-boot,dm-pre-proper; +}; + +&usbotg3 { + phys = <&usbphynop1>; + u-boot,dm-pre-proper; +}; + +&usbphynop1 { + compatible = "cdns,usb3-phy"; + reg = <0x0 0x5B160000 0x0 0x40000>; + #phy-cells = <0>; + u-boot,dm-pre-proper; }; diff --git a/arch/arm/dts/fsl-imx8qxp-colibri.dts b/arch/arm/dts/fsl-imx8qxp-colibri.dts index 0c20edf2cf..e6b01378f3 100644 --- a/arch/arm/dts/fsl-imx8qxp-colibri.dts +++ b/arch/arm/dts/fsl-imx8qxp-colibri.dts @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0+ OR X11 /* - * Copyright 2019 Toradex AG + * Copyright 2018-2019 Toradex */ /dts-v1/; @@ -17,22 +17,31 @@ stdout-path = &lpuart3; }; - reg_usbh_vbus: regulator-usbh-vbus { - compatible = "regulator-fixed"; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_usbh1_reg>; - regulator-name = "usbh_vbus"; - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; - gpio = <&gpio4 3 GPIO_ACTIVE_LOW>; + regulators { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + reg_usbh_vbus: regulator-usbh-vbus { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usbh1_reg>; + regulator-name = "usbh_vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + gpio = <&gpio4 3 GPIO_ACTIVE_LOW>; + }; }; + }; &iomuxc { + u-boot,dm-pre-proper; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_hog0>, <&pinctrl_hog1>, <&pinctrl_hog2>; colibri-imx8qxp { + u-boot,dm-pre-proper; pinctrl_lpuart0: lpuart0grp { fsl,pins = < SC_P_UART0_RX_ADMA_UART0_RX 0x06000020 @@ -157,6 +166,7 @@ }; pinctrl_usdhc1: usdhc1grp { + u-boot,dm-pre-proper; fsl,pins = < SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000041 SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x00000021 @@ -174,6 +184,7 @@ }; pinctrl_usdhc1_100mhz: usdhc1grp100mhz { + u-boot,dm-pre-proper; fsl,pins = < SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000041 SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x00000021 @@ -191,6 +202,7 @@ }; pinctrl_usdhc1_200mhz: usdhc1grp200mhz { + u-boot,dm-pre-proper; fsl,pins = < SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000041 SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x00000021 @@ -208,12 +220,14 @@ }; pinctrl_usdhc2_gpio: usdhc2gpiogrp { + u-boot,dm-pre-proper; fsl,pins = < SC_P_QSPI0A_DATA0_LSIO_GPIO3_IO09 0x06000021 >; }; pinctrl_usdhc2: usdhc2grp { + u-boot,dm-pre-proper; fsl,pins = < SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000041 SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x00000021 @@ -226,6 +240,7 @@ }; pinctrl_usdhc2_100mhz: usdhc2grp100mhz { + u-boot,dm-pre-proper; fsl,pins = < SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000041 SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x00000021 @@ -238,6 +253,7 @@ }; pinctrl_usdhc2_200mhz: usdhc2grp200mhz { + u-boot,dm-pre-proper; fsl,pins = < SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000041 SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x00000021 @@ -248,9 +264,27 @@ SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT 0x00000021 >; }; + + pinctrl_i2c0_mipi_lvds0: mipi_lvds0_i2c0_grp { + fsl,pins = < + SC_P_MIPI_DSI0_I2C0_SCL_MIPI_DSI0_I2C0_SCL 0xc6000020 + SC_P_MIPI_DSI0_I2C0_SDA_MIPI_DSI0_I2C0_SDA 0xc6000020 + >; + }; + + pinctrl_i2c0_mipi_lvds1: mipi_lvds1_i2c0_grp { + fsl,pins = < + SC_P_MIPI_DSI1_I2C0_SCL_MIPI_DSI1_I2C0_SCL 0xc6000020 + SC_P_MIPI_DSI1_I2C0_SDA_MIPI_DSI1_I2C0_SDA 0xc6000020 + >; + }; }; }; +&A35_0 { + u-boot,dm-pre-reloc; +}; + &lpuart0 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_lpuart0>; @@ -307,6 +341,24 @@ status = "okay"; }; +&i2c0_mipi_lvds0 { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c0_mipi_lvds0>; + clock-frequency = <100000>; + status = "okay"; +}; + +&i2c0_mipi_lvds1 { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_i2c0_mipi_lvds1>; + clock-frequency = <100000>; + status = "okay"; +}; + &usdhc1 { bus-width = <8>; non-removable; @@ -326,3 +378,16 @@ pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>; status = "okay"; }; + +&usbotg1 { + srp-disable; + hnp-disable; + adp-disable; + disable-over-current; + status = "okay"; +}; + +&usbotg3 { + status = "okay"; + vbus-supply = <®_usbh_vbus>; +}; diff --git a/board/toradex/colibri-imx8x/Makefile b/board/toradex/colibri-imx8x/Makefile index e3945c8f15..783d4fb5ba 100644 --- a/board/toradex/colibri-imx8x/Makefile +++ b/board/toradex/colibri-imx8x/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0+ # -# Copyright 2019 Toradex +# Copyright 2018-2019 Toradex # obj-y += colibri-imx8x.o diff --git a/board/toradex/colibri-imx8x/colibri-imx8x.c b/board/toradex/colibri-imx8x/colibri-imx8x.c index e4d762f5df..d57fe4d5ef 100644 --- a/board/toradex/colibri-imx8x/colibri-imx8x.c +++ b/board/toradex/colibri-imx8x/colibri-imx8x.c @@ -1,36 +1,48 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * Copyright 2019 Toradex + * Copyright 2018-2019 Toradex */ - #include <common.h> #include <cpu_func.h> +#include <env.h> +#include <errno.h> #include <init.h> +#include <linux/libfdt.h> +#include <fsl_esdhc_imx.h> +#include <fdt_support.h> +#include <asm/io.h> +#include <asm/gpio.h> #include <asm/arch/clock.h> +#include <asm/arch-imx8/sci/sci.h> #include <asm/arch/imx8-pins.h> +#include <asm/arch/snvs_security_sc.h> #include <asm/arch/iomux.h> -#include <asm/arch/sci/sci.h> #include <asm/arch/sys_proto.h> -#include <asm/gpio.h> -#include <asm/io.h> -#include <env.h> -#include <errno.h> -#include <linux/libfdt.h> + +#include <power-domain.h> +#include <usb.h> #include "../common/tdx-cfg-block.h" DECLARE_GLOBAL_DATA_PTR; -#define UART_PAD_CTRL ((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | \ - (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \ - (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \ - (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) +#define ESDHC_PAD_CTRL ((SC_PAD_CONFIG_NORMAL << PADRING_CONFIG_SHIFT) | (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) \ + | (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) + +#define ESDHC_CLK_PAD_CTRL ((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) \ + | (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) + +#define GPIO_PAD_CTRL ((SC_PAD_CONFIG_NORMAL << PADRING_CONFIG_SHIFT) | (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) \ + | (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) + +#define UART_PAD_CTRL ((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) \ + | (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) static iomux_cfg_t uart3_pads[] = { SC_P_FLEXCAN2_RX | MUX_MODE_ALT(2) | MUX_PAD_CTRL(UART_PAD_CTRL), SC_P_FLEXCAN2_TX | MUX_MODE_ALT(2) | MUX_PAD_CTRL(UART_PAD_CTRL), - /* Transceiver FORCEOFF# signal, mux to use pull-up */ + /* Transceiver FORCEOFF# signal, mux to use pullup */ SC_P_QSPI0B_DQS | MUX_MODE_ALT(4) | MUX_PAD_CTRL(UART_PAD_CTRL), }; @@ -41,43 +53,41 @@ static void setup_iomux_uart(void) int board_early_init_f(void) { - sc_pm_clock_rate_t rate; - sc_err_t err = 0; + sc_pm_clock_rate_t rate = SC_80MHZ; + int ret; /* * This works around that having only UART3 up the baudrate is 1.2M * instead of 115.2k. Set UART0 clock root to 80 MHz */ - rate = 80000000; - err = sc_pm_set_clock_rate(-1, SC_R_UART_0, SC_PM_CLK_PER, &rate); - if (err != SC_ERR_NONE) - return 0; + ret = sc_pm_setup_uart(SC_R_UART_0, rate); + if (ret) + return ret; - /* Set UART3 clock root to 80 MHz and enable it */ - rate = SC_80MHZ; - err = sc_pm_setup_uart(SC_R_UART_3, rate); - if (err != SC_ERR_NONE) - return 0; + /* Set UART0 clock root to 80 MHz */ + ret = sc_pm_setup_uart(SC_R_UART_3, rate); + if (ret) + return ret; setup_iomux_uart(); return 0; } -#if IS_ENABLED(CONFIG_DM_GPIO) -static void board_gpio_init(void) -{ - /* TODO */ -} -#else -static inline void board_gpio_init(void) {} -#endif -#if IS_ENABLED(CONFIG_FEC_MXC) +#ifdef CONFIG_FEC_MXC #include <miiphy.h> int board_phy_config(struct phy_device *phydev) { + phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f); + phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8); + + phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x00); + phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x82ee); + phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05); + phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100); + if (phydev->drv->config) phydev->drv->config(phydev); @@ -85,9 +95,44 @@ int board_phy_config(struct phy_device *phydev) } #endif +#undef CONFIG_MXC_GPIO /* TODO */ +#ifdef CONFIG_MXC_GPIO +#define IOEXP_RESET IMX_GPIO_NR(1, 1) + +static iomux_cfg_t board_gpios[] = { + SC_P_SPI2_SDO | MUX_MODE_ALT(4) | MUX_PAD_CTRL(GPIO_PAD_CTRL), + SC_P_ENET0_REFCLK_125M_25M | MUX_MODE_ALT(4) | MUX_PAD_CTRL(GPIO_PAD_CTRL), +}; + +static void board_gpio_init(void) +{ + int ret; + struct gpio_desc desc; + + ret = dm_gpio_lookup_name("gpio@1a_3", &desc); + if (ret) + return; + + ret = dm_gpio_request(&desc, "bb_per_rst_b"); + if (ret) + return; + + dm_gpio_set_dir_flags(&desc, GPIOD_IS_OUT); + dm_gpio_set_value(&desc, 0); + udelay(50); + dm_gpio_set_value(&desc, 1); + + imx8_iomux_setup_multiple_pads(board_gpios, ARRAY_SIZE(board_gpios)); + + /* enable i2c port expander assert reset line */ + gpio_request(IOEXP_RESET, "ioexp_rst"); + gpio_direction_output(IOEXP_RESET, 1); +} +#endif + int checkboard(void) { - puts("Model: Toradex Colibri iMX8X\n"); + puts("Board: Colibri iMX8QXP \n"); build_info(); print_bootinfo(); @@ -95,28 +140,81 @@ int checkboard(void) return 0; } +/* Only Enable USB3 resources currently */ +int board_usb_init(int index, enum usb_init_type init) +{ + struct power_domain pd; + int ret = 0; + + /* Power on usb */ + if (!power_domain_lookup_name("conn_usb2", &pd)) { + ret = power_domain_on(&pd); + if (ret) + printf("conn_usb2 Power up failed! (error = %d)\n", ret); + } + + if (!power_domain_lookup_name("conn_usb2_phy", &pd)) { + ret = power_domain_on(&pd); + if (ret) + printf("conn_usb2_phy Power up failed! (error = %d)\n", ret); + } + + return ret; +} + int board_init(void) { +#ifdef CONFIG_MXC_GPIO board_gpio_init(); +#endif + +#ifdef CONFIG_SNVS_SEC_SC_AUTO + { + int ret = snvs_security_sc_init(); + + if (ret) + return ret; + } +#endif return 0; } +void board_quiesce_devices(void) +{ + const char *power_on_devices[] = { + "dma_lpuart3", + + /* HIFI DSP boot */ + "audio_sai0", + "audio_ocram", + }; + + power_off_pd_devices(power_on_devices, ARRAY_SIZE(power_on_devices)); +} + +void detail_board_ddr_info(void) +{ + puts("\nDDR "); +} + /* * Board specific reset that is system reset. */ void reset_cpu(ulong addr) { - /* TODO */ + sc_pm_reboot(-1, SC_PM_RESET_TYPE_COLD); + while(1); + } -#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) +#ifdef CONFIG_OF_BOARD_SETUP int ft_board_setup(void *blob, bd_t *bd) { return ft_common_board_setup(blob, bd); } #endif - +void board_late_mmc_env_init() {} int board_mmc_get_env_dev(int devno) { return devno; @@ -130,5 +228,24 @@ int board_late_init(void) env_set("board_rev", "v1.0"); #endif +#ifdef CONFIG_AHAB_BOOT + env_set("sec_boot", "yes"); +#else + env_set("sec_boot", "no"); +#endif + +#ifdef CONFIG_ENV_IS_IN_MMC + board_late_mmc_env_init(); +#endif + return 0; } + +#ifdef CONFIG_FSL_FASTBOOT +#ifdef CONFIG_ANDROID_RECOVERY +int is_recovery_key_pressing(void) +{ + return 0; /*TODO*/ +} +#endif /*CONFIG_ANDROID_RECOVERY*/ +#endif /*CONFIG_FSL_FASTBOOT*/ diff --git a/configs/colibri-imx8qxp_defconfig b/configs/colibri-imx8qxp_defconfig index 33a0cf0a85..cc96ef54d2 100644 --- a/configs/colibri-imx8qxp_defconfig +++ b/configs/colibri-imx8qxp_defconfig @@ -1,54 +1,79 @@ CONFIG_ARM=y CONFIG_ARCH_IMX8=y CONFIG_SYS_TEXT_BASE=0x80020000 -CONFIG_SYS_MALLOC_F_LEN=0x4000 +CONFIG_SYS_MALLOC_F_LEN=0x8000 CONFIG_ENV_SIZE=0x2000 CONFIG_ENV_OFFSET=0xFFFFDE00 CONFIG_DM_GPIO=y +CONFIG_BOOTAUX_RESERVED_MEM_BASE=0x88000000 +CONFIG_BOOTAUX_RESERVED_MEM_SIZE=0x08000000 CONFIG_TARGET_COLIBRI_IMX8X=y +CONFIG_SNVS_SEC_SC=y CONFIG_NR_DRAM_BANKS=3 +CONFIG_IMX_BOOTAUX=y +CONFIG_IMX_VSERVICE_SHARED_BUFFER=0x90400000 CONFIG_DISTRO_DEFAULTS=y -CONFIG_FIT=y CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/colibri-imx8x/colibri-imx8qxp-imximage.cfg" +CONFIG_BOOTDELAY=1 CONFIG_LOG=y -CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_DISPLAY_BOARDINFO_LATE=y CONFIG_BOARD_EARLY_INIT_F=y CONFIG_CMD_CPU=y # CONFIG_BOOTM_NETBSD is not set CONFIG_CMD_ASKENV=y +# CONFIG_CMD_IMPORTENV is not set CONFIG_CMD_MEMTEST=y CONFIG_CMD_CLK=y CONFIG_CMD_DM=y +CONFIG_CMD_FUSE=y CONFIG_CMD_GPIO=y CONFIG_CMD_I2C=y CONFIG_CMD_MMC=y +CONFIG_CMD_USB=y CONFIG_CMD_CACHE=y CONFIG_CMD_UUID=y CONFIG_CMD_EXT4_WRITE=y +CONFIG_OF_EMBED=y CONFIG_DEFAULT_DEVICE_TREE="fsl-imx8qxp-colibri" CONFIG_ENV_IS_IN_MMC=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_NET_RANDOM_ETHADDR=y CONFIG_IP_DEFRAG=y CONFIG_TFTP_BLOCKSIZE=4096 -CONFIG_CLK_IMX8=y +CONFIG_REGMAP=y +CONFIG_SYSCON=y CONFIG_BOOTCOUNT_LIMIT=y CONFIG_BOOTCOUNT_ENV=y +CONFIG_CLK_IMX8=y CONFIG_CPU=y CONFIG_MXC_GPIO=y +CONFIG_DM_PCA953X=y CONFIG_DM_I2C=y CONFIG_SYS_I2C_IMX_LPI2C=y -CONFIG_MISC=y +CONFIG_SYS_I2C_IMX_VIRT_I2C=y +CONFIG_I2C_MUX=y +CONFIG_I2C_MUX_PCA954x=y +CONFIG_I2C_MUX_IMX_VIRT=y CONFIG_DM_MMC=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_IO_VOLTAGE=y +CONFIG_MMC_UHS_SUPPORT=y +CONFIG_MMC_HS400_SUPPORT=y CONFIG_FSL_USDHC=y CONFIG_PHYLIB=y CONFIG_PHY_ADDR_ENABLE=y CONFIG_PHY_MICREL=y CONFIG_DM_ETH=y +CONFIG_PHY_GIGE=y CONFIG_FEC_MXC_SHARE_MDIO=y CONFIG_FEC_MXC_MDIO_BASE=0x5B040000 CONFIG_FEC_MXC=y CONFIG_MII=y +CONFIG_PCI=y +CONFIG_DM_PCI=y +CONFIG_PHY=y +CONFIG_CDNS3_USB_PHY=y CONFIG_PINCTRL=y CONFIG_PINCTRL_IMX8=y CONFIG_POWER_DOMAIN=y @@ -56,7 +81,22 @@ CONFIG_IMX8_POWER_DOMAIN=y CONFIG_DM_REGULATOR=y CONFIG_DM_REGULATOR_FIXED=y CONFIG_DM_REGULATOR_GPIO=y +# CONFIG_REQUIRE_SERIAL_CONSOLE is not set CONFIG_DM_SERIAL=y CONFIG_FSL_LPUART=y CONFIG_DM_THERMAL=y +CONFIG_IMX_SCU_THERMAL=y +CONFIG_USB=y +CONFIG_DM_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_CDNS3=y +CONFIG_USB_CDNS3_GADGET=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_CI_UDC=y +CONFIG_SDP_LOADADDR=0x80400000 +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_PANIC_HANG=y # CONFIG_EFI_LOADER is not set diff --git a/include/configs/colibri-imx8x.h b/include/configs/colibri-imx8x.h index 311ed439f6..f1b8dfc807 100644 --- a/include/configs/colibri-imx8x.h +++ b/include/configs/colibri-imx8x.h @@ -6,17 +6,14 @@ #ifndef __COLIBRI_IMX8X_H #define __COLIBRI_IMX8X_H -#include <asm/arch/imx-regs.h> #include <linux/sizes.h> +#include <asm/arch/imx-regs.h> #define CONFIG_REMAKE_ELF -#define CONFIG_DISPLAY_BOARDINFO_LATE - -#define CONFIG_SYS_FSL_ESDHC_ADDR 0 -#define USDHC1_BASE_ADDR 0x5b010000 -#define USDHC2_BASE_ADDR 0x5b020000 -#define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */ +#define CONFIG_SYS_FSL_ESDHC_ADDR 0 +#define USDHC1_BASE_ADDR 0x5B010000 +#define USDHC2_BASE_ADDR 0x5B020000 #define CONFIG_ENV_OVERWRITE @@ -50,44 +47,29 @@ "${m4_0_image}\0" \ "m4boot_0=run loadm4image_0; dcache flush; bootaux ${loadaddr} 0\0" \ -#define MFG_NAND_PARTITION "" - #define BOOT_TARGET_DEVICES(func) \ func(MMC, mmc, 1) \ func(MMC, mmc, 0) \ + func(USB, usb, 0) \ func(DHCP, dhcp, na) #include <config_distro_bootcmd.h> -#undef BOOTENV_RUN_NET_USB_START -#define BOOTENV_RUN_NET_USB_START "" - -#define CONFIG_MFG_ENV_SETTINGS \ - "mfgtool_args=setenv bootargs console=${console},${baudrate} " \ - "rdinit=/linuxrc g_mass_storage.stall=0 " \ - "g_mass_storage.removable=1 g_mass_storage.idVendor=0x066F " \ - "g_mass_storage.idProduct=0x37FF " \ - "g_mass_storage.iSerialNumber=\"\" " MFG_NAND_PARTITION \ - "${vidargs} clk_ignore_unused\0" \ - "initrd_addr=0x83800000\0" \ - "initrd_high=0xffffffff\0" \ - "bootcmd_mfg=run mfgtool_args;booti ${loadaddr} ${initrd_addr} " \ - "${fdt_addr};\0" \ +#define FDT_FILE "fsl-imx8qxp-colibri-eval-v3.dtb" + +#include <config_distro_bootcmd.h> /* Initial environment variables */ #define CONFIG_EXTRA_ENV_SETTINGS \ - AHAB_ENV \ BOOTENV \ - CONFIG_MFG_ENV_SETTINGS \ + AHAB_ENV \ M4_BOOT_ENV \ MEM_LAYOUT_ENV_SETTINGS \ "boot_file=Image\0" \ - "console=ttyLP3 earlycon\0" \ + "console=ttyLP3,115200 earlycon=lpuart32,0x5a090000,115200\0" \ "fdt_addr=0x83000000\0" \ - "fdt_file=fsl-imx8qxp-colibri-dsihdmi-eval-v3.dtb\0" \ - "fdtfile=fsl-imx8qxp-colibri-dsihdmi-eval-v3.dtb\0" \ + "fdtfile=" FDT_FILE "\0" \ "finduuid=part uuid mmc ${mmcdev}:2 uuid\0" \ "image=Image\0" \ "initrd_addr=0x83800000\0" \ - "initrd_high=0xffffffffffffffff\0" \ "mmcargs=setenv bootargs console=${console},${baudrate} " \ "root=PARTUUID=${uuid} rootwait " \ "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \ @@ -100,6 +82,7 @@ "${fdt_addr}\0" \ "panel=NULL\0" \ "script=boot.scr\0" \ + "setup=run mmcargs\0" \ "update_uboot=askenv confirm Did you load u-boot-dtb.imx (y/N)?; " \ "if test \"$confirm\" = \"y\"; then " \ "setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt " \ @@ -117,6 +100,8 @@ #define CONFIG_SYS_MEMTEST_START 0x88000000 #define CONFIG_SYS_MEMTEST_END 0x89000000 +#define CONFIG_SYS_MMC_IMG_LOAD_PART 1 + /* Environment in eMMC, before config block at the end of 1st "boot sector" */ #define CONFIG_SYS_MMC_ENV_DEV 0 /* USDHC1 eMMC */ #define CONFIG_SYS_MMC_ENV_PART 1 @@ -151,7 +136,49 @@ /* Generic Timer Definitions */ #define COUNTER_FREQUENCY 8000000 /* 8MHz */ -#define BOOTAUX_RESERVED_MEM_BASE 0x88000000 -#define BOOTAUX_RESERVED_MEM_SIZE SZ_128M /* Reserve from second 128MB */ +/* USB Config */ +#define CONFIG_USBD_HS + +#define CONFIG_CMD_USB_MASS_STORAGE +#define CONFIG_USB_GADGET_MASS_STORAGE +#define CONFIG_USB_FUNCTION_MASS_STORAGE + +#define CONFIG_USB_MAX_CONTROLLER_COUNT 2 + +/* USB OTG controller configs */ +#ifdef CONFIG_USB_EHCI_HCD +#define CONFIG_USB_HOST_ETHER +#define CONFIG_USB_ETHER_ASIX +#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) +#endif + +/* Networking */ +#define CONFIG_FEC_ENET_DEV 0 + +#if (CONFIG_FEC_ENET_DEV == 0) +#define IMX_FEC_BASE 0x5B040000 +#define CONFIG_FEC_MXC_PHYADDR 0x0 +#define CONFIG_ETHPRIME "eth0" +#elif (CONFIG_FEC_ENET_DEV == 1) +#define IMX_FEC_BASE 0x5B050000 +#define CONFIG_FEC_MXC_PHYADDR 0x1 +#define CONFIG_ETHPRIME "eth1" +#endif + +#define CONFIG_FEC_XCV_TYPE RGMII +#define FEC_QUIRK_ENET_MAC +#define PHY_ANEG_TIMEOUT 20000 + +#ifdef CONFIG_DM_VIDEO +#define CONFIG_VIDEO_LOGO +#define CONFIG_SPLASH_SCREEN +#define CONFIG_SPLASH_SCREEN_ALIGN +#define CONFIG_CMD_BMP +#define CONFIG_BMP_16BPP +#define CONFIG_BMP_24BPP +#define CONFIG_BMP_32BPP +#define CONFIG_VIDEO_BMP_RLE8 +#define CONFIG_VIDEO_BMP_LOGO +#endif #endif /* __COLIBRI_IMX8X_H */ |