Merge branch 'master' of git://git.denx.de/u-boot-imx

trini: Update colibri-imx6ull to use Kconfig for mtdparts related
options.

Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
Tom Rini 2018-07-23 10:51:13 -04:00
commit f0306a145b
50 changed files with 2513 additions and 507 deletions

View File

@ -331,6 +331,8 @@ ENTRY(psci_cpu_entry)
bl _nonsec_init bl _nonsec_init
bl psci_stack_setup
bl psci_arch_cpu_entry bl psci_arch_cpu_entry
bl psci_get_cpu_id @ CPU ID => r0 bl psci_get_cpu_id @ CPU ID => r0

View File

@ -0,0 +1,550 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright 2018 Toradex AG
*/
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include "imx6ull.dtsi"
/ {
model = "Toradex Colibri iMX6ULL";
compatible = "toradex,imx6ull-colibri", "fsl,imx6ull";
chosen {
stdout-path = &uart1;
};
reg_module_3v3: regulator-module-3v3 {
compatible = "regulator-fixed";
regulator-always-on;
regulator-name = "+V3.3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
reg_module_3v3_avdd: regulator-module-3v3-avdd {
compatible = "regulator-fixed";
regulator-always-on;
regulator-name = "+V3.3_AVDD_AUDIO";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
reg_sd1_vmmc: regulator-sd1-vmmc {
compatible = "regulator-gpio";
gpio = <&gpio5 9 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_snvs_reg_sd>;
regulator-always-on;
regulator-name = "+V3.3_1.8_SD";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
states = <1800000 0x1 3300000 0x0>;
vin-supply = <&reg_module_3v3>;
};
};
&adc1 {
num-channels = <10>;
vref-supply = <&reg_module_3v3_avdd>;
};
/* Colibri SPI */
&ecspi1 {
cs-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1_cs>;
};
&fec2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet2>;
phy-mode = "rmii";
phy-handle = <&ethphy1>;
status = "okay";
mdio {
#address-cells = <1>;
#size-cells = <0>;
ethphy1: ethernet-phy@2 {
compatible = "ethernet-phy-ieee802.3-c22";
max-speed = <100>;
reg = <2>;
};
};
};
&gpmi {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpmi_nand>;
nand-on-flash-bbt;
nand-ecc-mode = "hw";
nand-ecc-strength = <8>;
nand-ecc-step-size = <512>;
status = "okay";
};
&i2c1 {
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c1>;
pinctrl-1 = <&pinctrl_i2c1_gpio>;
sda-gpios = <&gpio1 29 GPIO_ACTIVE_LOW>;
scl-gpios = <&gpio1 28 GPIO_ACTIVE_LOW>;
status = "okay";
};
&i2c2 {
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c2>;
pinctrl-1 = <&pinctrl_i2c2_gpio>;
sda-gpios = <&gpio1 31 GPIO_ACTIVE_LOW>;
scl-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
status = "okay";
ad7879@2c {
compatible = "adi,ad7879-1";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_snvs_ad7879_int>;
reg = <0x2c>;
interrupt-parent = <&gpio5>;
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
touchscreen-max-pressure = <4096>;
adi,resistance-plate-x = <120>;
adi,first-conversion-delay = /bits/ 8 <3>;
adi,acquisition-time = /bits/ 8 <1>;
adi,median-filter-size = /bits/ 8 <2>;
adi,averaging = /bits/ 8 <1>;
adi,conversion-interval = /bits/ 8 <255>;
};
};
&lcdif {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_lcdif_dat
&pinctrl_lcdif_ctrl>;
};
&pwm4 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm4>;
#pwm-cells = <3>;
};
&pwm5 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm5>;
#pwm-cells = <3>;
};
&pwm6 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm6>;
#pwm-cells = <3>;
};
&pwm7 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm7>;
#pwm-cells = <3>;
};
&sdma {
status = "okay";
};
&snvs_pwrkey {
status = "disabled";
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart1 &pinctrl_uart1_ctrl1>;
fsl,uart-has-rtscts;
fsl,dte-mode;
status = "okay";
};
&uart2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart2>;
fsl,uart-has-rtscts;
fsl,dte-mode;
};
&uart5 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart5>;
fsl,dte-mode;
};
&usbotg1 {
dr_mode = "otg";
srp-disable;
hnp-disable;
adp-disable;
};
&usbotg2 {
dr_mode = "host";
};
&usdhc1 {
assigned-clocks = <&clks IMX6UL_CLK_USDHC1_SEL>, <&clks IMX6UL_CLK_USDHC1>;
assigned-clock-parents = <&clks IMX6UL_CLK_PLL2_PFD2>;
assigned-clock-rates = <0>, <198000000>;
};
&iomuxc {
pinctrl_gpio1: gpio1-grp {
fsl,pins = <
MX6UL_PAD_ENET1_RX_DATA0__GPIO2_IO00 0x74 /* SODIMM 55 */
MX6UL_PAD_ENET1_RX_DATA1__GPIO2_IO01 0x74 /* SODIMM 63 */
MX6UL_PAD_UART3_RX_DATA__GPIO1_IO25 0X14 /* SODIMM 77 */
MX6UL_PAD_JTAG_TCK__GPIO1_IO14 0x14 /* SODIMM 99 */
MX6UL_PAD_NAND_CE1_B__GPIO4_IO14 0x14 /* SODIMM 133 */
MX6UL_PAD_UART3_TX_DATA__GPIO1_IO24 0x14 /* SODIMM 135 */
MX6UL_PAD_UART3_CTS_B__GPIO1_IO26 0x14 /* SODIMM 100 */
MX6UL_PAD_JTAG_TRST_B__GPIO1_IO15 0x14 /* SODIMM 102 */
MX6UL_PAD_ENET1_RX_ER__GPIO2_IO07 0x14 /* SODIMM 104 */
MX6UL_PAD_UART3_RTS_B__GPIO1_IO27 0x14 /* SODIMM 186 */
>;
};
pinctrl_gpio2: gpio2-grp { /* Camera */
fsl,pins = <
MX6UL_PAD_CSI_DATA04__GPIO4_IO25 0x74 /* SODIMM 69 */
MX6UL_PAD_CSI_MCLK__GPIO4_IO17 0x14 /* SODIMM 75 */
MX6UL_PAD_CSI_DATA06__GPIO4_IO27 0x14 /* SODIMM 85 */
MX6UL_PAD_CSI_PIXCLK__GPIO4_IO18 0x14 /* SODIMM 96 */
MX6UL_PAD_CSI_DATA05__GPIO4_IO26 0x14 /* SODIMM 98 */
>;
};
pinctrl_gpio3: gpio3-grp { /* CAN2 */
fsl,pins = <
MX6UL_PAD_ENET1_RX_EN__GPIO2_IO02 0x14 /* SODIMM 178 */
MX6UL_PAD_ENET1_TX_DATA0__GPIO2_IO03 0x14 /* SODIMM 188 */
>;
};
pinctrl_gpio4: gpio4-grp {
fsl,pins = <
MX6UL_PAD_CSI_DATA07__GPIO4_IO28 0x74 /* SODIMM 65 */
>;
};
pinctrl_gpio5: gpio5-grp { /* ATMEL MXT TOUCH */
fsl,pins = <
MX6UL_PAD_JTAG_MOD__GPIO1_IO10 0x74 /* SODIMM 106 */
>;
};
pinctrl_gpio6: gpio6-grp { /* Wifi pins */
fsl,pins = <
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x14 /* SODIMM 89 */
MX6UL_PAD_CSI_DATA02__GPIO4_IO23 0x14 /* SODIMM 79 */
MX6UL_PAD_CSI_VSYNC__GPIO4_IO19 0x14 /* SODIMM 81 */
MX6UL_PAD_CSI_DATA03__GPIO4_IO24 0x14 /* SODIMM 97 */
MX6UL_PAD_CSI_DATA00__GPIO4_IO21 0x14 /* SODIMM 101 */
MX6UL_PAD_CSI_DATA01__GPIO4_IO22 0x14 /* SODIMM 103 */
MX6UL_PAD_CSI_HSYNC__GPIO4_IO20 0x14 /* SODIMM 94 */
>;
};
pinctrl_can_int: canint-grp {
fsl,pins = <
MX6UL_PAD_ENET1_TX_DATA1__GPIO2_IO04 0X14 /* SODIMM 73 */
>;
};
pinctrl_enet2: enet2-grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0
MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0
MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0
MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0
MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN 0x1b0b0
MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER 0x1b0b0
MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031
MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0
MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0
MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN 0x1b0b0
>;
};
pinctrl_ecspi1_cs: ecspi1-cs-grp {
fsl,pins = <
MX6UL_PAD_LCD_DATA21__GPIO3_IO26 0x000a0
>;
};
pinctrl_ecspi1: ecspi1-grp {
fsl,pins = <
MX6UL_PAD_LCD_DATA20__ECSPI1_SCLK 0x000a0
MX6UL_PAD_LCD_DATA22__ECSPI1_MOSI 0x000a0
MX6UL_PAD_LCD_DATA23__ECSPI1_MISO 0x100a0
>;
};
pinctrl_flexcan2: flexcan2-grp {
fsl,pins = <
MX6UL_PAD_ENET1_TX_DATA0__FLEXCAN2_RX 0x1b020
MX6UL_PAD_ENET1_RX_EN__FLEXCAN2_TX 0x1b020
>;
};
pinctrl_gpio_bl_on: gpio-bl-on-grp {
fsl,pins = <
MX6UL_PAD_JTAG_TMS__GPIO1_IO11 0x000a0
>;
};
pinctrl_gpmi_nand: gpmi-nand-grp {
fsl,pins = <
MX6UL_PAD_NAND_DATA00__RAWNAND_DATA00 0x100a9
MX6UL_PAD_NAND_DATA01__RAWNAND_DATA01 0x100a9
MX6UL_PAD_NAND_DATA02__RAWNAND_DATA02 0x100a9
MX6UL_PAD_NAND_DATA03__RAWNAND_DATA03 0x100a9
MX6UL_PAD_NAND_DATA04__RAWNAND_DATA04 0x100a9
MX6UL_PAD_NAND_DATA05__RAWNAND_DATA05 0x100a9
MX6UL_PAD_NAND_DATA06__RAWNAND_DATA06 0x100a9
MX6UL_PAD_NAND_DATA07__RAWNAND_DATA07 0x100a9
MX6UL_PAD_NAND_CLE__RAWNAND_CLE 0x100a9
MX6UL_PAD_NAND_ALE__RAWNAND_ALE 0x100a9
MX6UL_PAD_NAND_RE_B__RAWNAND_RE_B 0x100a9
MX6UL_PAD_NAND_WE_B__RAWNAND_WE_B 0x100a9
MX6UL_PAD_NAND_CE0_B__RAWNAND_CE0_B 0x100a9
MX6UL_PAD_NAND_READY_B__RAWNAND_READY_B 0x100a9
>;
};
pinctrl_i2c1: i2c1-grp {
fsl,pins = <
MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
>;
};
pinctrl_i2c1_gpio: i2c1-gpio-grp {
fsl,pins = <
MX6UL_PAD_UART4_TX_DATA__GPIO1_IO28 0x4001b8b0
MX6UL_PAD_UART4_RX_DATA__GPIO1_IO29 0x4001b8b0
>;
};
pinctrl_i2c2: i2c2-grp {
fsl,pins = <
MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0
MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0
>;
};
pinctrl_i2c2_gpio: i2c2-gpio-grp {
fsl,pins = <
MX6UL_PAD_UART5_TX_DATA__GPIO1_IO30 0x4001b8b0
MX6UL_PAD_UART5_RX_DATA__GPIO1_IO31 0x4001b8b0
>;
};
pinctrl_lcdif_dat: lcdif-dat-grp {
fsl,pins = <
MX6UL_PAD_LCD_DATA00__LCDIF_DATA00 0x00079
MX6UL_PAD_LCD_DATA01__LCDIF_DATA01 0x00079
MX6UL_PAD_LCD_DATA02__LCDIF_DATA02 0x00079
MX6UL_PAD_LCD_DATA03__LCDIF_DATA03 0x00079
MX6UL_PAD_LCD_DATA04__LCDIF_DATA04 0x00079
MX6UL_PAD_LCD_DATA05__LCDIF_DATA05 0x00079
MX6UL_PAD_LCD_DATA06__LCDIF_DATA06 0x00079
MX6UL_PAD_LCD_DATA07__LCDIF_DATA07 0x00079
MX6UL_PAD_LCD_DATA08__LCDIF_DATA08 0x00079
MX6UL_PAD_LCD_DATA09__LCDIF_DATA09 0x00079
MX6UL_PAD_LCD_DATA10__LCDIF_DATA10 0x00079
MX6UL_PAD_LCD_DATA11__LCDIF_DATA11 0x00079
MX6UL_PAD_LCD_DATA12__LCDIF_DATA12 0x00079
MX6UL_PAD_LCD_DATA13__LCDIF_DATA13 0x00079
MX6UL_PAD_LCD_DATA14__LCDIF_DATA14 0x00079
MX6UL_PAD_LCD_DATA15__LCDIF_DATA15 0x00079
MX6UL_PAD_LCD_DATA16__LCDIF_DATA16 0x00079
MX6UL_PAD_LCD_DATA17__LCDIF_DATA17 0x00079
>;
};
pinctrl_lcdif_ctrl: lcdif-ctrl-grp {
fsl,pins = <
MX6UL_PAD_LCD_CLK__LCDIF_CLK 0x00079
MX6UL_PAD_LCD_ENABLE__LCDIF_ENABLE 0x00079
MX6UL_PAD_LCD_HSYNC__LCDIF_HSYNC 0x00079
MX6UL_PAD_LCD_VSYNC__LCDIF_VSYNC 0x00079
>;
};
pinctrl_pwm4: pwm4-grp {
fsl,pins = <
MX6UL_PAD_NAND_WP_B__PWM4_OUT 0x00079
>;
};
pinctrl_pwm5: pwm5-grp {
fsl,pins = <
MX6UL_PAD_NAND_DQS__PWM5_OUT 0x00079
>;
};
pinctrl_pwm6: pwm6-grp {
fsl,pins = <
MX6UL_PAD_ENET1_TX_EN__PWM6_OUT 0x00079
>;
};
pinctrl_pwm7: pwm7-grp {
fsl,pins = <
MX6UL_PAD_ENET1_TX_CLK__PWM7_OUT 0x00079
>;
};
pinctrl_uart1: uart1-grp {
fsl,pins = <
MX6UL_PAD_UART1_TX_DATA__UART1_DTE_RX 0x1b0b1
MX6UL_PAD_UART1_RX_DATA__UART1_DTE_TX 0x1b0b1
MX6UL_PAD_UART1_RTS_B__UART1_DTE_CTS 0x1b0b1
MX6UL_PAD_UART1_CTS_B__UART1_DTE_RTS 0x1b0b1
>;
};
pinctrl_uart1_ctrl1: uart1-ctrl1-grp { /* Additional DTR, DCD */
fsl,pins = <
MX6UL_PAD_JTAG_TDI__GPIO1_IO13 0x1b0b1 /* DCD */
MX6UL_PAD_LCD_DATA18__GPIO3_IO23 0x1b0b1 /* DSR */
MX6UL_PAD_JTAG_TDO__GPIO1_IO12 0x1b0b1 /* DTR */
MX6UL_PAD_LCD_DATA19__GPIO3_IO24 0x1b0b1 /* RI */
>;
};
pinctrl_uart2: uart2-grp {
fsl,pins = <
MX6UL_PAD_UART2_TX_DATA__UART2_DTE_RX 0x1b0b1
MX6UL_PAD_UART2_RX_DATA__UART2_DTE_TX 0x1b0b1
MX6UL_PAD_UART2_CTS_B__UART2_DTE_RTS 0x1b0b1
MX6UL_PAD_UART2_RTS_B__UART2_DTE_CTS 0x1b0b1
>;
};
pinctrl_uart5: uart5-grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO04__UART5_DTE_RX 0x1b0b1
MX6UL_PAD_GPIO1_IO05__UART5_DTE_TX 0x1b0b1
>;
};
pinctrl_usbh_reg: gpio-usbh-reg {
fsl,pins = <
MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0x1b0b1 /* SODIMM 129 USBH PEN */
>;
};
pinctrl_usdhc1: usdhc1-grp {
fsl,pins = <
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x17059
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x10059
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
>;
};
pinctrl_usdhc1_100mhz: usdhc1-100mhz-grp {
fsl,pins = <
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x170b9
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x100b9
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
>;
};
pinctrl_usdhc1_200mhz: usdhc1-200mhz-grp {
fsl,pins = <
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x170f9
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x100f9
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
>;
};
pinctrl_usdhc2: usdhc2-grp {
fsl,pins = <
MX6UL_PAD_CSI_DATA00__USDHC2_DATA0 0x17059
MX6UL_PAD_CSI_DATA01__USDHC2_DATA1 0x17059
MX6UL_PAD_CSI_DATA02__USDHC2_DATA2 0x17059
MX6UL_PAD_CSI_DATA03__USDHC2_DATA3 0x17059
MX6UL_PAD_CSI_HSYNC__USDHC2_CMD 0x17059
MX6UL_PAD_CSI_VSYNC__USDHC2_CLK 0x17059
>;
};
};
&iomuxc_snvs {
pinctrl_snvs_gpio1: snvs-gpio1-grp {
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER6__GPIO5_IO06 0x14 /* SODIMM 93 */
MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x14 /* SODIMM 95 */
MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10 0x74 /* SODIMM 105 */
MX6ULL_PAD_SNVS_TAMPER5__GPIO5_IO05 0x14 /* SODIMM 131 USBH OC */
MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x74 /* SODIMM 138 */
>;
};
pinctrl_snvs_gpio2: snvs-gpio2-grp { /* ATMEL MXT TOUCH */
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x74 /* SODIMM 107 */
>;
};
pinctrl_snvs_gpio3: snvs-gpio3-grp { /* Wifi pins */
fsl,pins = <
MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11 0x14 /* SODIMM 127 */
>;
};
pinctrl_snvs_ad7879_int: snvs-ad7879-int { /* TOUCH Interrupt */
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x1b0b0
>;
};
pinctrl_snvs_reg_sd: snvs-reg-sd-grp {
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x4001b8b0
>;
};
pinctrl_snvs_usbc_det: snvs-usbc-det-grp {
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x1b0b0
>;
};
pinctrl_snvs_gpiokeys: snvs-gpiokeys-grp {
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x130b0
>;
};
pinctrl_snvs_usdhc1_cd: snvs-usdhc1-cd-grp {
fsl,pins = <
MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00 0x1b0b0 /* CD */
>;
};
pinctrl_snvs_wifi_pdn: snvs-wifi-pdn-grp {
fsl,pins = <
MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11 0x14
>;
};
};

View File

@ -190,7 +190,7 @@
}; };
gpmi: gpmi-nand@01806000{ gpmi: gpmi-nand@01806000{
compatible = "fsl,imx6ull-gpmi-nand", "fsl, imx6ul-gpmi-nand"; compatible = "fsl,imx6q-gpmi-nand";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
reg = <0x01806000 0x2000>, <0x01808000 0x4000>; reg = <0x01806000 0x2000>, <0x01808000 0x4000>;

View File

@ -359,7 +359,12 @@ struct cspi_regs {
#define IMX_IIM_BASE (0x53FF0000) #define IMX_IIM_BASE (0x53FF0000)
#define IIM_BASE_ADDR IMX_IIM_BASE #define IIM_BASE_ADDR IMX_IIM_BASE
#define IMX_USB_BASE (0x53FF4000) #define IMX_USB_BASE (0x53FF4000)
#define IMX_USB_PORT_OFFSET 0x200 /*
* This is in contradiction to the imx25 reference manual, which says that
* port 1's registers start at 0x53FF4200. The correct base address for
* port 1 is 0x53FF4400. The kernel uses 0x53FF4400 as well.
*/
#define IMX_USB_PORT_OFFSET 0x400
#define IMX_CSI_BASE (0x53FF8000) #define IMX_CSI_BASE (0x53FF8000)
#define IMX_DRYICE_BASE (0x53FFC000) #define IMX_DRYICE_BASE (0x53FFC000)

View File

@ -996,5 +996,12 @@ struct pwm_regs {
u32 pr; u32 pr;
u32 cnr; u32 cnr;
}; };
/*
* If ROM fail back to USB recover mode, USBPH0_PWD will be clear to use USB
* If boot from the other mode, USB0_PWD will keep reset value
*/
#define is_boot_from_usb(void) (!(readl(USB_PHY0_BASE_ADDR) & (1<<20)))
#endif /* __ASSEMBLER__*/ #endif /* __ASSEMBLER__*/
#endif /* __ASM_ARCH_MX6_IMX_REGS_H__ */ #endif /* __ASM_ARCH_MX6_IMX_REGS_H__ */

View File

@ -163,6 +163,14 @@ typedef u64 iomux_v3_cfg_t;
#define PAD_CTL_DSE_40ohm (6 << 3) #define PAD_CTL_DSE_40ohm (6 << 3)
#define PAD_CTL_DSE_34ohm (7 << 3) #define PAD_CTL_DSE_34ohm (7 << 3)
#define PAD_CTL_DSE_260ohm (1 << 3)
#define PAD_CTL_DSE_130ohm (2 << 3)
#define PAD_CTL_DSE_88ohm (3 << 3)
#define PAD_CTL_DSE_65ohm (4 << 3)
#define PAD_CTL_DSE_52ohm (5 << 3)
#define PAD_CTL_DSE_43ohm (6 << 3)
#define PAD_CTL_DSE_37ohm (7 << 3)
/* i.MX6SL/SLL */ /* i.MX6SL/SLL */
#define PAD_CTL_LVE (1 << 1) #define PAD_CTL_LVE (1 << 1)
#define PAD_CTL_LVE_BIT (1 << 22) #define PAD_CTL_LVE_BIT (1 << 22)

View File

@ -46,7 +46,7 @@ config SECURE_BOOT
config CMD_BMODE config CMD_BMODE
bool "Support the 'bmode' command" bool "Support the 'bmode' command"
default y default y
depends on ARCH_MX7 || ARCH_MX6 || ARCH_MX5 depends on ARCH_MX6 || ARCH_MX5
help help
This enables the 'bmode' (bootmode) command for forcing This enables the 'bmode' (bootmode) command for forcing
a boot from specific media. a boot from specific media.

View File

@ -148,6 +148,13 @@ config TARGET_COLIBRI_IMX6
select DM_SERIAL select DM_SERIAL
select DM_THERMAL select DM_THERMAL
config TARGET_COLIBRI_IMX6ULL
bool "Toradex Colibri iMX6ULL"
select BOARD_LATE_INIT
select DM
select DM_THERMAL
select MX6ULL
config TARGET_DHCOMIMX6 config TARGET_DHCOMIMX6
bool "dh_imx6" bool "dh_imx6"
select MX6QDL select MX6QDL
@ -198,6 +205,8 @@ config TARGET_MX6CUBOXI
config TARGET_MX6LOGICPD config TARGET_MX6LOGICPD
bool "Logic PD i.MX6 SOM" bool "Logic PD i.MX6 SOM"
select MX6Q
select SUPPORT_SPL
select BOARD_EARLY_INIT_F select BOARD_EARLY_INIT_F
select BOARD_LATE_INIT select BOARD_LATE_INIT
select DM select DM
@ -206,7 +215,6 @@ config TARGET_MX6LOGICPD
select DM_I2C select DM_I2C
select DM_MMC select DM_MMC
select DM_PMIC select DM_PMIC
select DM_REGULATOR
select OF_CONTROL select OF_CONTROL
config TARGET_MX6MEMCAL config TARGET_MX6MEMCAL
@ -530,6 +538,7 @@ source "board/tbs/tbs2910/Kconfig"
source "board/tqc/tqma6/Kconfig" source "board/tqc/tqma6/Kconfig"
source "board/toradex/apalis_imx6/Kconfig" source "board/toradex/apalis_imx6/Kconfig"
source "board/toradex/colibri_imx6/Kconfig" source "board/toradex/colibri_imx6/Kconfig"
source "board/toradex/colibri-imx6ull/Kconfig"
source "board/k+p/kp_imx6q_tpc/Kconfig" source "board/k+p/kp_imx6q_tpc/Kconfig"
source "board/udoo/Kconfig" source "board/udoo/Kconfig"
source "board/udoo/neo/Kconfig" source "board/udoo/neo/Kconfig"

View File

@ -548,9 +548,11 @@ const struct boot_mode soc_boot_modes[] = {
void reset_misc(void) void reset_misc(void)
{ {
#ifndef CONFIG_SPL_BUILD
#ifdef CONFIG_VIDEO_MXS #ifdef CONFIG_VIDEO_MXS
lcdif_power_down(); lcdif_power_down();
#endif #endif
#endif
} }
void s_init(void) void s_init(void)
@ -649,6 +651,11 @@ void imx_setup_hdmi(void)
} }
#endif #endif
/*
* gpr_init() function is common for boards using MX6S, MX6DL, MX6D,
* MX6Q and MX6QP processors
*/
void gpr_init(void) void gpr_init(void)
{ {
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;

View File

@ -40,6 +40,7 @@ config TARGET_PICO_IMX7D
select MX7D select MX7D
select DM select DM
select DM_THERMAL select DM_THERMAL
select SUPPORT_SPL
config TARGET_WARP7 config TARGET_WARP7
bool "warp7" bool "warp7"
@ -50,7 +51,6 @@ config TARGET_WARP7
config TARGET_COLIBRI_IMX7 config TARGET_COLIBRI_IMX7
bool "Support Colibri iMX7S/iMX7D modules" bool "Support Colibri iMX7S/iMX7D modules"
select BOARD_LATE_INIT
select DM select DM
select DM_SERIAL select DM_SERIAL
select DM_THERMAL select DM_THERMAL

View File

@ -4,7 +4,4 @@
# #
obj-y := soc.o clock.o clock_slice.o ddr.o snvs.o obj-y := soc.o clock.o clock_slice.o ddr.o snvs.o
obj-$(CONFIG_ARMV7_PSCI) += psci-mx7.o
ifdef CONFIG_ARMV7_PSCI
obj-y += psci-mx7.o psci.o
endif

View File

@ -8,13 +8,16 @@
#include <asm/psci.h> #include <asm/psci.h>
#include <asm/secure.h> #include <asm/secure.h>
#include <asm/arch/imx-regs.h> #include <asm/arch/imx-regs.h>
#include <linux/bitops.h>
#include <common.h> #include <common.h>
#include <fsl_wdog.h> #include <fsl_wdog.h>
#define GPC_CPU_PGC_SW_PDN_REQ 0xfc #define GPC_CPU_PGC_SW_PDN_REQ 0xfc
#define GPC_CPU_PGC_SW_PUP_REQ 0xf0 #define GPC_CPU_PGC_SW_PUP_REQ 0xf0
#define GPC_PGC_C0 0x800
#define GPC_PGC_C1 0x840 #define GPC_PGC_C1 0x840
#define BM_CPU_PGC_SW_PDN_PUP_REQ_CORE0_A7 0x1
#define BM_CPU_PGC_SW_PDN_PUP_REQ_CORE1_A7 0x2 #define BM_CPU_PGC_SW_PDN_PUP_REQ_CORE1_A7 0x2
/* below is for i.MX7D */ /* below is for i.MX7D */
@ -34,27 +37,47 @@
#define CCM_ROOT_WDOG 0xbb80 #define CCM_ROOT_WDOG 0xbb80
#define CCM_CCGR_WDOG1 0x49c0 #define CCM_CCGR_WDOG1 0x49c0
#define MPIDR_AFF0 GENMASK(7, 0)
#define IMX7D_PSCI_NR_CPUS 2
#if IMX7D_PSCI_NR_CPUS > CONFIG_ARMV7_PSCI_NR_CPUS
#error "invalid value for CONFIG_ARMV7_PSCI_NR_CPUS"
#endif
u8 psci_state[IMX7D_PSCI_NR_CPUS] __secure_data = {
PSCI_AFFINITY_LEVEL_ON,
PSCI_AFFINITY_LEVEL_OFF};
static inline void psci_set_state(int cpu, u8 state)
{
psci_state[cpu] = state;
dsb();
isb();
}
static inline void imx_gpcv2_set_m_core_pgc(bool enable, u32 offset) static inline void imx_gpcv2_set_m_core_pgc(bool enable, u32 offset)
{ {
writel(enable, GPC_IPS_BASE_ADDR + offset); writel(enable, GPC_IPS_BASE_ADDR + offset);
} }
__secure void imx_gpcv2_set_core1_power(bool pdn) __secure void imx_gpcv2_set_core_power(int cpu, bool pdn)
{ {
u32 reg = pdn ? GPC_CPU_PGC_SW_PUP_REQ : GPC_CPU_PGC_SW_PDN_REQ; u32 reg = pdn ? GPC_CPU_PGC_SW_PUP_REQ : GPC_CPU_PGC_SW_PDN_REQ;
u32 pgc = cpu ? GPC_PGC_C1 : GPC_PGC_C0;
u32 pdn_pup_req = cpu ? BM_CPU_PGC_SW_PDN_PUP_REQ_CORE1_A7 :
BM_CPU_PGC_SW_PDN_PUP_REQ_CORE0_A7;
u32 val; u32 val;
imx_gpcv2_set_m_core_pgc(true, GPC_PGC_C1); imx_gpcv2_set_m_core_pgc(true, pgc);
val = readl(GPC_IPS_BASE_ADDR + reg); val = readl(GPC_IPS_BASE_ADDR + reg);
val |= BM_CPU_PGC_SW_PDN_PUP_REQ_CORE1_A7; val |= pdn_pup_req;
writel(val, GPC_IPS_BASE_ADDR + reg); writel(val, GPC_IPS_BASE_ADDR + reg);
while ((readl(GPC_IPS_BASE_ADDR + reg) & while ((readl(GPC_IPS_BASE_ADDR + reg) & pdn_pup_req) != 0)
BM_CPU_PGC_SW_PDN_PUP_REQ_CORE1_A7) != 0)
; ;
imx_gpcv2_set_m_core_pgc(false, GPC_PGC_C1); imx_gpcv2_set_m_core_pgc(false, pgc);
} }
__secure void imx_enable_cpu_ca7(int cpu, bool enable) __secure void imx_enable_cpu_ca7(int cpu, bool enable)
@ -67,23 +90,60 @@ __secure void imx_enable_cpu_ca7(int cpu, bool enable)
writel(val, SRC_BASE_ADDR + SRC_A7RCR1); writel(val, SRC_BASE_ADDR + SRC_A7RCR1);
} }
__secure int imx_cpu_on(int fn, int cpu, int pc) __secure void psci_arch_cpu_entry(void)
{ {
writel(pc, SRC_BASE_ADDR + cpu * 8 + SRC_GPR1_MX7D); u32 cpu = psci_get_cpu_id();
imx_gpcv2_set_core1_power(true);
psci_set_state(cpu, PSCI_AFFINITY_LEVEL_ON);
}
__secure s32 psci_cpu_on(u32 __always_unused function_id, u32 mpidr, u32 ep,
u32 context_id)
{
u32 cpu = mpidr & MPIDR_AFF0;
if (mpidr & ~MPIDR_AFF0)
return ARM_PSCI_RET_INVAL;
if (cpu >= IMX7D_PSCI_NR_CPUS)
return ARM_PSCI_RET_INVAL;
if (psci_state[cpu] == PSCI_AFFINITY_LEVEL_ON)
return ARM_PSCI_RET_ALREADY_ON;
if (psci_state[cpu] == PSCI_AFFINITY_LEVEL_ON_PENDING)
return ARM_PSCI_RET_ON_PENDING;
psci_save(cpu, ep, context_id);
writel((u32)psci_cpu_entry, SRC_BASE_ADDR + cpu * 8 + SRC_GPR1_MX7D);
psci_set_state(cpu, PSCI_AFFINITY_LEVEL_ON_PENDING);
imx_gpcv2_set_core_power(cpu, true);
imx_enable_cpu_ca7(cpu, true); imx_enable_cpu_ca7(cpu, true);
return 0;
return ARM_PSCI_RET_SUCCESS;
} }
__secure int imx_cpu_off(int cpu) __secure s32 psci_cpu_off(void)
{ {
int cpu;
cpu = psci_get_cpu_id();
psci_cpu_off_common();
psci_set_state(cpu, PSCI_AFFINITY_LEVEL_OFF);
imx_enable_cpu_ca7(cpu, false); imx_enable_cpu_ca7(cpu, false);
imx_gpcv2_set_core1_power(false); imx_gpcv2_set_core_power(cpu, false);
writel(0, SRC_BASE_ADDR + cpu * 8 + SRC_GPR1_MX7D + 4); writel(0, SRC_BASE_ADDR + cpu * 8 + SRC_GPR1_MX7D + 4);
return 0;
while (1)
wfi();
} }
__secure void imx_system_reset(void) __secure void psci_system_reset(void)
{ {
struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR; struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
@ -91,9 +151,12 @@ __secure void imx_system_reset(void)
writel(0x1 << 28, CCM_BASE_ADDR + CCM_ROOT_WDOG); writel(0x1 << 28, CCM_BASE_ADDR + CCM_ROOT_WDOG);
writel(0x3, CCM_BASE_ADDR + CCM_CCGR_WDOG1); writel(0x3, CCM_BASE_ADDR + CCM_CCGR_WDOG1);
writew(WCR_WDE, &wdog->wcr); writew(WCR_WDE, &wdog->wcr);
while (1)
wfi();
} }
__secure void imx_system_off(void) __secure void psci_system_off(void)
{ {
u32 val; u32 val;
@ -103,4 +166,59 @@ __secure void imx_system_off(void)
val = readl(SNVS_BASE_ADDR + SNVS_LPCR); val = readl(SNVS_BASE_ADDR + SNVS_LPCR);
val |= BP_SNVS_LPCR_DP_EN | BP_SNVS_LPCR_TOP; val |= BP_SNVS_LPCR_DP_EN | BP_SNVS_LPCR_TOP;
writel(val, SNVS_BASE_ADDR + SNVS_LPCR); writel(val, SNVS_BASE_ADDR + SNVS_LPCR);
while (1)
wfi();
}
__secure u32 psci_version(void)
{
return ARM_PSCI_VER_1_0;
}
__secure s32 psci_cpu_suspend(u32 __always_unused function_id, u32 power_state,
u32 entry_point_address,
u32 context_id)
{
return ARM_PSCI_RET_INVAL;
}
__secure s32 psci_affinity_info(u32 __always_unused function_id,
u32 target_affinity,
u32 lowest_affinity_level)
{
u32 cpu = target_affinity & MPIDR_AFF0;
if (lowest_affinity_level > 0)
return ARM_PSCI_RET_INVAL;
if (target_affinity & ~MPIDR_AFF0)
return ARM_PSCI_RET_INVAL;
if (cpu >= IMX7D_PSCI_NR_CPUS)
return ARM_PSCI_RET_INVAL;
return psci_state[cpu];
}
__secure s32 psci_migrate_info_type(u32 function_id)
{
/* Trusted OS is either not present or does not require migration */
return 2;
}
__secure s32 psci_features(u32 __always_unused function_id, u32 psci_fid)
{
switch (psci_fid) {
case ARM_PSCI_0_2_FN_PSCI_VERSION:
case ARM_PSCI_0_2_FN_CPU_OFF:
case ARM_PSCI_0_2_FN_CPU_ON:
case ARM_PSCI_0_2_FN_AFFINITY_INFO:
case ARM_PSCI_0_2_FN_MIGRATE_INFO_TYPE:
case ARM_PSCI_0_2_FN_SYSTEM_OFF:
case ARM_PSCI_0_2_FN_SYSTEM_RESET:
case ARM_PSCI_1_0_FN_PSCI_FEATURES:
return 0x0;
}
return ARM_PSCI_RET_NI;
} }

View File

@ -1,60 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright (C) 2015-2016 Freescale Semiconductor, Inc.
* Copyright 2017 NXP
*/
#include <config.h>
#include <linux/linkage.h>
#include <asm/armv7.h>
#include <asm/arch-armv7/generictimer.h>
#include <asm/psci.h>
.pushsection ._secure.text, "ax"
.arch_extension sec
.globl psci_cpu_on
psci_cpu_on:
push {r4, r5, lr}
mov r4, r0
mov r5, r1
mov r0, r1
mov r1, r2
mov r2, r3
bl psci_save
mov r0, r4
mov r1, r5
ldr r2, =psci_cpu_entry
bl imx_cpu_on
pop {r4, r5, pc}
.globl psci_cpu_off
psci_cpu_off:
bl psci_cpu_off_common
bl psci_get_cpu_id
bl imx_cpu_off
1: wfi
b 1b
.globl psci_system_reset
psci_system_reset:
bl imx_system_reset
2: wfi
b 2b
.globl psci_system_off
psci_system_off:
bl imx_system_off
3: wfi
b 3b
.popsection

View File

@ -8,7 +8,6 @@
#include <asm/arch/imx-regs.h> #include <asm/arch/imx-regs.h>
#include <asm/arch/clock.h> #include <asm/arch/clock.h>
#include <asm/arch/sys_proto.h> #include <asm/arch/sys_proto.h>
#include <asm/mach-imx/boot_mode.h>
#include <asm/mach-imx/dma.h> #include <asm/mach-imx/dma.h>
#include <asm/mach-imx/hab.h> #include <asm/mach-imx/hab.h>
#include <asm/mach-imx/rdc-sema.h> #include <asm/mach-imx/rdc-sema.h>
@ -254,30 +253,6 @@ void set_wdog_reset(struct wdog_regs *wdog)
writew(reg, &wdog->wcr); writew(reg, &wdog->wcr);
} }
/*
* cfg_val will be used for
* Boot_cfg4[7:0]:Boot_cfg3[7:0]:Boot_cfg2[7:0]:Boot_cfg1[7:0]
* After reset, if GPR10[28] is 1, ROM will copy GPR9[25:0]
* to SBMR1, which will determine the boot device.
*/
const struct boot_mode soc_boot_modes[] = {
{"ecspi1:0", MAKE_CFGVAL(0x00, 0x60, 0x00, 0x00)},
{"ecspi1:1", MAKE_CFGVAL(0x40, 0x62, 0x00, 0x00)},
{"ecspi1:2", MAKE_CFGVAL(0x80, 0x64, 0x00, 0x00)},
{"ecspi1:3", MAKE_CFGVAL(0xc0, 0x66, 0x00, 0x00)},
{"weim", MAKE_CFGVAL(0x00, 0x50, 0x00, 0x00)},
{"qspi1", MAKE_CFGVAL(0x10, 0x40, 0x00, 0x00)},
/* 4 bit bus width */
{"usdhc1", MAKE_CFGVAL(0x10, 0x10, 0x00, 0x00)},
{"usdhc2", MAKE_CFGVAL(0x10, 0x14, 0x00, 0x00)},
{"usdhc3", MAKE_CFGVAL(0x10, 0x18, 0x00, 0x00)},
{"mmc1", MAKE_CFGVAL(0x10, 0x20, 0x00, 0x00)},
{"mmc2", MAKE_CFGVAL(0x10, 0x24, 0x00, 0x00)},
{"mmc3", MAKE_CFGVAL(0x10, 0x28, 0x00, 0x00)},
{NULL, 0},
};
void s_init(void) void s_init(void)
{ {
/* clock configuration. */ /* clock configuration. */

View File

@ -136,7 +136,31 @@ static const struct mx6sdl_iomux_grp_regs dhcom6sdl_grp_ioregs = {
.grp_b7ds = 0x00000030, .grp_b7ds = 0x00000030,
}; };
static const struct mx6_mmdc_calibration dhcom_mmdc_calib = { static const struct mx6_mmdc_calibration dhcom_mmdc_calib_4x4g_1066 = {
.p0_mpwldectrl0 = 0x00150019,
.p0_mpwldectrl1 = 0x001C000B,
.p1_mpwldectrl0 = 0x00020018,
.p1_mpwldectrl1 = 0x0002000C,
.p0_mpdgctrl0 = 0x43140320,
.p0_mpdgctrl1 = 0x03080304,
.p1_mpdgctrl0 = 0x43180320,
.p1_mpdgctrl1 = 0x03100254,
.p0_mprddlctl = 0x4830383C,
.p1_mprddlctl = 0x3836323E,
.p0_mpwrdlctl = 0x3E444642,
.p1_mpwrdlctl = 0x42344442,
};
static const struct mx6_mmdc_calibration dhcom_mmdc_calib_2x4g_800 = {
.p0_mpwldectrl0 = 0x0040003C,
.p0_mpwldectrl1 = 0x0032003E,
.p0_mpdgctrl0 = 0x42350231,
.p0_mpdgctrl1 = 0x021A0218,
.p0_mprddlctl = 0x4B4B4E49,
.p0_mpwrdlctl = 0x3F3F3035,
};
static const struct mx6_mmdc_calibration dhcom_mmdc_calib_4x2g_1066 = {
.p0_mpwldectrl0 = 0x0011000E, .p0_mpwldectrl0 = 0x0011000E,
.p0_mpwldectrl1 = 0x000E001B, .p0_mpwldectrl1 = 0x000E001B,
.p1_mpwldectrl0 = 0x00190015, .p1_mpwldectrl0 = 0x00190015,
@ -151,23 +175,89 @@ static const struct mx6_mmdc_calibration dhcom_mmdc_calib = {
.p1_mpwrdlctl = 0x473E4A3B, .p1_mpwrdlctl = 0x473E4A3B,
}; };
static const struct mx6_ddr3_cfg dhcom_mem_ddr = { static const struct mx6_mmdc_calibration dhcom_mmdc_calib_4x2g_800 = {
.p0_mpwldectrl0 = 0x003A003A,
.p0_mpwldectrl1 = 0x0030002F,
.p1_mpwldectrl0 = 0x002F0038,
.p1_mpwldectrl1 = 0x00270039,
.p0_mpdgctrl0 = 0x420F020F,
.p0_mpdgctrl1 = 0x01760175,
.p1_mpdgctrl0 = 0x41640171,
.p1_mpdgctrl1 = 0x015E0160,
.p0_mprddlctl = 0x45464B4A,
.p1_mprddlctl = 0x49484A46,
.p0_mpwrdlctl = 0x40402E32,
.p1_mpwrdlctl = 0x3A3A3231,
};
static const struct mx6_mmdc_calibration dhcom_mmdc_calib_2x2g_800 = {
.p0_mpwldectrl0 = 0x0040003C,
.p0_mpwldectrl1 = 0x0032003E,
.p0_mpdgctrl0 = 0x42350231,
.p0_mpdgctrl1 = 0x021A0218,
.p0_mprddlctl = 0x4B4B4E49,
.p0_mpwrdlctl = 0x3F3F3035,
};
/*
* 2 Gbit DDR3 memory
* - NANYA #NT5CC128M16IP-DII
* - NANYA #NT5CB128M16FP-DII
*/
static const struct mx6_ddr3_cfg dhcom_mem_ddr_2g = {
.mem_speed = 1600, .mem_speed = 1600,
.density = 2, .density = 2,
.width = 64, .width = 16,
.banks = 8, .banks = 8,
.rowaddr = 14, .rowaddr = 14,
.coladdr = 10, .coladdr = 10,
.pagesz = 2, .pagesz = 2,
.trcd = 1312, .trcd = 1375,
.trcmin = 5863, .trcmin = 5863,
.trasmin = 3750, .trasmin = 3750,
}; };
static const struct mx6_ddr_sysinfo dhcom_ddr_info = { /*
* 4 Gbit DDR3 memory
* - Intelligent Memory #IM4G16D3EABG-125I
*/
static const struct mx6_ddr3_cfg dhcom_mem_ddr_4g = {
.mem_speed = 1600,
.density = 4,
.width = 16,
.banks = 8,
.rowaddr = 15,
.coladdr = 10,
.pagesz = 2,
.trcd = 1375,
.trcmin = 4875,
.trasmin = 3500,
};
/* DDR3 64bit */
static const struct mx6_ddr_sysinfo dhcom_ddr_64bit = {
/* width of data bus:0=16,1=32,2=64 */ /* width of data bus:0=16,1=32,2=64 */
.dsize = 2, .dsize = 2,
.cs_density = 16, .cs_density = 32,
.ncs = 1, /* single chip select */
.cs1_mirror = 1,
.rtt_wr = 1, /* DDR3_RTT_60_OHM, RTT_Wr = RZQ/4 */
.rtt_nom = 1, /* DDR3_RTT_60_OHM, RTT_Nom = RZQ/4 */
.walat = 1, /* Write additional latency */
.ralat = 5, /* Read additional latency */
.mif3_mode = 3, /* Command prediction working mode */
.bi_on = 1, /* Bank interleaving enabled */
.sde_to_rst = 0x10, /* 14 cycles, 200us (JEDEC default) */
.rst_to_cke = 0x23, /* 33 cycles, 500us (JEDEC default) */
.refsel = 1, /* Refresh cycles at 32KHz */
.refr = 3, /* 4 refresh commands per refresh cycle */
};
/* DDR3 32bit */
static const struct mx6_ddr_sysinfo dhcom_ddr_32bit = {
/* width of data bus:0=16,1=32,2=64 */
.dsize = 1,
.cs_density = 32,
.ncs = 1, /* single chip select */ .ncs = 1, /* single chip select */
.cs1_mirror = 1, .cs1_mirror = 1,
.rtt_wr = 1, /* DDR3_RTT_60_OHM, RTT_Wr = RZQ/4 */ .rtt_wr = 1, /* DDR3_RTT_60_OHM, RTT_Wr = RZQ/4 */
@ -208,6 +298,45 @@ static void setup_iomux_boardid(void)
SETUP_IOMUX_PADS(hwcode_pads); SETUP_IOMUX_PADS(hwcode_pads);
} }
/* DDR Code */
static iomux_v3_cfg_t const ddrcode_pads[] = {
IOMUX_PADS(PAD_EIM_A16__GPIO2_IO22 | MUX_PAD_CTRL(GPIO_PAD_CTRL)),
IOMUX_PADS(PAD_EIM_A17__GPIO2_IO21 | MUX_PAD_CTRL(GPIO_PAD_CTRL)),
};
static void setup_iomux_ddrcode(void)
{
/* ddr code pins */
SETUP_IOMUX_PADS(ddrcode_pads);
}
enum dhcom_ddr3_code {
DH_DDR3_SIZE_256MIB = 0x00,
DH_DDR3_SIZE_512MIB = 0x01,
DH_DDR3_SIZE_1GIB = 0x02,
DH_DDR3_SIZE_2GIB = 0x03
};
#define DDR3_CODE_BIT_0 IMX_GPIO_NR(2, 22)
#define DDR3_CODE_BIT_1 IMX_GPIO_NR(2, 21)
enum dhcom_ddr3_code dhcom_get_ddr3_code(void)
{
enum dhcom_ddr3_code ddr3_code;
gpio_request(DDR3_CODE_BIT_0, "DDR3_CODE_BIT_0");
gpio_request(DDR3_CODE_BIT_1, "DDR3_CODE_BIT_1");
gpio_direction_input(DDR3_CODE_BIT_0);
gpio_direction_input(DDR3_CODE_BIT_1);
/* 256MB = 0b00; 512MB = 0b01; 1GB = 0b10; 2GB = 0b11 */
ddr3_code = (!!gpio_get_value(DDR3_CODE_BIT_1) << 1)
| (!!gpio_get_value(DDR3_CODE_BIT_0));
return ddr3_code;
}
/* GPIO */ /* GPIO */
static iomux_v3_cfg_t const gpio_pads[] = { static iomux_v3_cfg_t const gpio_pads[] = {
IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | MUX_PAD_CTRL(GPIO_PAD_CTRL)), IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | MUX_PAD_CTRL(GPIO_PAD_CTRL)),
@ -353,6 +482,81 @@ static void setup_iomux_usb(void)
SETUP_IOMUX_PADS(usb_pads); SETUP_IOMUX_PADS(usb_pads);
} }
/* DRAM */
static void dhcom_spl_dram_init(void)
{
enum dhcom_ddr3_code ddr3_code = dhcom_get_ddr3_code();
if (is_mx6dq()) {
mx6dq_dram_iocfg(64, &dhcom6dq_ddr_ioregs,
&dhcom6dq_grp_ioregs);
switch (ddr3_code) {
default:
printf("imx6qd: unsupported ddr3 code %d\n", ddr3_code);
printf(" choosing 1024 MB\n");
/* fall through */
case DH_DDR3_SIZE_1GIB:
mx6_dram_cfg(&dhcom_ddr_64bit,
&dhcom_mmdc_calib_4x2g_1066,
&dhcom_mem_ddr_2g);
break;
case DH_DDR3_SIZE_2GIB:
mx6_dram_cfg(&dhcom_ddr_64bit,
&dhcom_mmdc_calib_4x4g_1066,
&dhcom_mem_ddr_4g);
break;
}
/* Perform DDR DRAM calibration */
udelay(100);
mmdc_do_dqs_calibration(&dhcom_ddr_64bit);
} else if (is_cpu_type(MXC_CPU_MX6DL)) {
mx6sdl_dram_iocfg(64, &dhcom6sdl_ddr_ioregs,
&dhcom6sdl_grp_ioregs);
switch (ddr3_code) {
default:
printf("imx6dl: unsupported ddr3 code %d\n", ddr3_code);
printf(" choosing 1024 MB\n");
/* fall through */
case DH_DDR3_SIZE_1GIB:
mx6_dram_cfg(&dhcom_ddr_64bit,
&dhcom_mmdc_calib_4x2g_800,
&dhcom_mem_ddr_2g);
break;
}
/* Perform DDR DRAM calibration */
udelay(100);
mmdc_do_dqs_calibration(&dhcom_ddr_64bit);
} else if (is_cpu_type(MXC_CPU_MX6SOLO)) {
mx6sdl_dram_iocfg(32, &dhcom6sdl_ddr_ioregs,
&dhcom6sdl_grp_ioregs);
switch (ddr3_code) {
default:
printf("imx6s: unsupported ddr3 code %d\n", ddr3_code);
printf(" choosing 512 MB\n");
/* fall through */
case DH_DDR3_SIZE_512MIB:
mx6_dram_cfg(&dhcom_ddr_32bit,
&dhcom_mmdc_calib_2x2g_800,
&dhcom_mem_ddr_2g);
break;
case DH_DDR3_SIZE_1GIB:
mx6_dram_cfg(&dhcom_ddr_32bit,
&dhcom_mmdc_calib_2x4g_800,
&dhcom_mem_ddr_4g);
break;
}
/* Perform DDR DRAM calibration */
udelay(100);
mmdc_do_dqs_calibration(&dhcom_ddr_32bit);
}
}
void board_init_f(ulong dummy) void board_init_f(ulong dummy)
{ {
/* setup AIPS and disable watchdog */ /* setup AIPS and disable watchdog */
@ -365,6 +569,7 @@ void board_init_f(ulong dummy)
timer_init(); timer_init();
setup_iomux_boardid(); setup_iomux_boardid();
setup_iomux_ddrcode();
setup_iomux_gpio(); setup_iomux_gpio();
setup_iomux_enet(); setup_iomux_enet();
setup_iomux_sd(); setup_iomux_sd();
@ -375,14 +580,8 @@ void board_init_f(ulong dummy)
/* UART clocks enabled and gd valid - init serial console */ /* UART clocks enabled and gd valid - init serial console */
preloader_console_init(); preloader_console_init();
/* Start the DDR DRAM */ /* DDR3 initialization */
if (is_mx6dq()) dhcom_spl_dram_init();
mx6dq_dram_iocfg(dhcom_mem_ddr.width, &dhcom6dq_ddr_ioregs,
&dhcom6dq_grp_ioregs);
else
mx6sdl_dram_iocfg(dhcom_mem_ddr.width, &dhcom6sdl_ddr_ioregs,
&dhcom6sdl_grp_ioregs);
mx6_dram_cfg(&dhcom_ddr_info, &dhcom_mmdc_calib, &dhcom_mem_ddr);
/* Clear the BSS. */ /* Clear the BSS. */
memset(__bss_start, 0, __bss_end - __bss_start); memset(__bss_start, 0, __bss_end - __bss_start);

View File

@ -414,7 +414,8 @@ void board_init_f(ulong dummy)
/* setup AIPS and disable watchdog */ /* setup AIPS and disable watchdog */
arch_cpu_init(); arch_cpu_init();
gpr_init(); if (!(is_mx6ul()))
gpr_init();
/* iomux */ /* iomux */
SETUP_IOMUX_PADS(uart_pads); SETUP_IOMUX_PADS(uart_pads);

View File

@ -182,3 +182,144 @@ int board_late_init(void)
return 0; return 0;
} }
#ifdef CONFIG_SPL_BUILD
#include <asm/arch/mx6-ddr.h>
#include <asm/arch/mx6q-ddr.h>
#include <spl.h>
#include <linux/libfdt.h>
#ifdef CONFIG_SPL_OS_BOOT
int spl_start_uboot(void)
{
/* break into full u-boot on 'c' */
if (serial_tstc() && serial_getc() == 'c')
return 1;
return 0;
}
#endif
static void ccgr_init(void)
{
struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
writel(0x00C03F3F, &ccm->CCGR0);
writel(0x0030FC03, &ccm->CCGR1);
writel(0x0FFFC000, &ccm->CCGR2);
writel(0x3FF00000, &ccm->CCGR3);
writel(0xFFFFF300, &ccm->CCGR4);
writel(0x0F0000F3, &ccm->CCGR5);
writel(0x00000FFF, &ccm->CCGR6);
}
static int mx6q_dcd_table[] = {
MX6_IOM_GRP_DDR_TYPE, 0x000C0000,
MX6_IOM_GRP_DDRPKE, 0x00000000,
MX6_IOM_DRAM_SDCLK_0, 0x00000030,
MX6_IOM_DRAM_SDCLK_1, 0x00000030,
MX6_IOM_DRAM_CAS, 0x00000030,
MX6_IOM_DRAM_RAS, 0x00000030,
MX6_IOM_GRP_ADDDS, 0x00000030,
MX6_IOM_DRAM_RESET, 0x00000030,
MX6_IOM_DRAM_SDBA2, 0x00000000,
MX6_IOM_DRAM_SDODT0, 0x00000030,
MX6_IOM_DRAM_SDODT1, 0x00000030,
MX6_IOM_GRP_CTLDS, 0x00000030,
MX6_IOM_DDRMODE_CTL, 0x00020000,
MX6_IOM_DRAM_SDQS0, 0x00000030,
MX6_IOM_DRAM_SDQS1, 0x00000030,
MX6_IOM_DRAM_SDQS2, 0x00000030,
MX6_IOM_DRAM_SDQS3, 0x00000030,
MX6_IOM_GRP_DDRMODE, 0x00020000,
MX6_IOM_GRP_B0DS, 0x00000030,
MX6_IOM_GRP_B1DS, 0x00000030,
MX6_IOM_GRP_B2DS, 0x00000030,
MX6_IOM_GRP_B3DS, 0x00000030,
MX6_IOM_DRAM_DQM0, 0x00000030,
MX6_IOM_DRAM_DQM1, 0x00000030,
MX6_IOM_DRAM_DQM2, 0x00000030,
MX6_IOM_DRAM_DQM3, 0x00000030,
MX6_MMDC_P0_MDSCR, 0x00008000,
MX6_MMDC_P0_MPZQHWCTRL, 0xA1390003,
MX6_MMDC_P0_MPWLDECTRL0, 0x002D003A,
MX6_MMDC_P0_MPWLDECTRL1, 0x0038002B,
MX6_MMDC_P0_MPDGCTRL0, 0x03340338,
MX6_MMDC_P0_MPDGCTRL1, 0x0334032C,
MX6_MMDC_P0_MPRDDLCTL, 0x4036383C,
MX6_MMDC_P0_MPWRDLCTL, 0x2E384038,
MX6_MMDC_P0_MPRDDQBY0DL, 0x33333333,
MX6_MMDC_P0_MPRDDQBY1DL, 0x33333333,
MX6_MMDC_P0_MPRDDQBY2DL, 0x33333333,
MX6_MMDC_P0_MPRDDQBY3DL, 0x33333333,
MX6_MMDC_P0_MPMUR0, 0x00000800,
MX6_MMDC_P0_MDPDC, 0x00020036,
MX6_MMDC_P0_MDOTC, 0x09444040,
MX6_MMDC_P0_MDCFG0, 0xB8BE7955,
MX6_MMDC_P0_MDCFG1, 0xFF328F64,
MX6_MMDC_P0_MDCFG2, 0x01FF00DB,
MX6_MMDC_P0_MDMISC, 0x00011740,
MX6_MMDC_P0_MDSCR, 0x00008000,
MX6_MMDC_P0_MDRWD, 0x000026D2,
MX6_MMDC_P0_MDOR, 0x00BE1023,
MX6_MMDC_P0_MDASP, 0x00000047,
MX6_MMDC_P0_MDCTL, 0x85190000,
MX6_MMDC_P0_MDSCR, 0x00888032,
MX6_MMDC_P0_MDSCR, 0x00008033,
MX6_MMDC_P0_MDSCR, 0x00008031,
MX6_MMDC_P0_MDSCR, 0x19408030,
MX6_MMDC_P0_MDSCR, 0x04008040,
MX6_MMDC_P0_MDREF, 0x00007800,
MX6_MMDC_P0_MPODTCTRL, 0x00000007,
MX6_MMDC_P0_MDPDC, 0x00025576,
MX6_MMDC_P0_MAPSR, 0x00011006,
MX6_MMDC_P0_MDSCR, 0x00000000,
/* enable AXI cache for VDOA/VPU/IPU */
MX6_IOMUXC_GPR4, 0xF00000CF,
/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
MX6_IOMUXC_GPR6, 0x007F007F,
MX6_IOMUXC_GPR7, 0x007F007F,
};
static void ddr_init(int *table, int size)
{
int i;
for (i = 0; i < size / 2 ; i++)
writel(table[2 * i + 1], table[2 * i]);
}
static void spl_dram_init(void)
{
if (is_mx6dq())
ddr_init(mx6q_dcd_table, ARRAY_SIZE(mx6q_dcd_table));
}
void board_init_f(ulong dummy)
{
/* DDR initialization */
spl_dram_init();
/* setup AIPS and disable watchdog */
arch_cpu_init();
ccgr_init();
gpr_init();
/* iomux and setup of uart and NAND pins */
board_early_init_f();
/* setup GP timer */
timer_init();
/* UART clocks enabled and gd valid - init serial console */
preloader_console_init();
/* Clear the BSS. */
memset(__bss_start, 0, __bss_end - __bss_start);
/* load/boot image from boot device */
board_init_r(NULL, 0);
}
#endif

View File

@ -1,111 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright (C) 2017 Logic PD, Inc.
* Adam Ford <aford173@gmail.com>
*
* Refer doc/README.imximage for more details about how-to configure
* and create imximage boot image
*
* The syntax is taken as close as possible with the kwbimage
*/
#include <asm/mach-imx/imximage.cfg>
/* image version */
IMAGE_VERSION 2
BOOT_OFFSET FLASH_OFFSET_STANDARD
/*
* Device Configuration Data (DCD)
*
* Each entry must have the format:
* Addr-type Address Value
*
* where:
* Addr-type register length (1,2 or 4 bytes)
* Address absolute address of the register
* value value to be stored in the register
*/
#define __ASSEMBLY__
#include <config.h>
#include "asm/arch-mx6/mx6-ddr.h"
#include "asm/arch-mx6/iomux.h"
#include "asm/arch-mx6/crm_regs.h"
DATA 4, MX6_IOM_GRP_DDR_TYPE, 0x000C0000
DATA 4, MX6_IOM_GRP_DDRPKE, 0x00000000
DATA 4, MX6_IOM_DRAM_SDCLK_0, 0x00000030
DATA 4, MX6_IOM_DRAM_SDCLK_1, 0x00000030
DATA 4, MX6_IOM_DRAM_CAS, 0x00000030
DATA 4, MX6_IOM_DRAM_RAS, 0x00000030
DATA 4, MX6_IOM_GRP_ADDDS, 0x00000030
DATA 4, MX6_IOM_DRAM_RESET, 0x00000030
DATA 4, MX6_IOM_DRAM_SDBA2, 0x00000000
DATA 4, MX6_IOM_DRAM_SDODT0, 0x00000030
DATA 4, MX6_IOM_DRAM_SDODT1, 0x00000030
DATA 4, MX6_IOM_GRP_CTLDS, 0x00000030
DATA 4, MX6_IOM_DDRMODE_CTL, 0x00020000
DATA 4, MX6_IOM_DRAM_SDQS0, 0x00000030
DATA 4, MX6_IOM_DRAM_SDQS1, 0x00000030
DATA 4, MX6_IOM_DRAM_SDQS2, 0x00000030
DATA 4, MX6_IOM_DRAM_SDQS3, 0x00000030
DATA 4, MX6_IOM_GRP_DDRMODE, 0x00020000
DATA 4, MX6_IOM_GRP_B0DS, 0x00000030
DATA 4, MX6_IOM_GRP_B1DS, 0x00000030
DATA 4, MX6_IOM_GRP_B2DS, 0x00000030
DATA 4, MX6_IOM_GRP_B3DS, 0x00000030
DATA 4, MX6_IOM_DRAM_DQM0, 0x00000030
DATA 4, MX6_IOM_DRAM_DQM1, 0x00000030
DATA 4, MX6_IOM_DRAM_DQM2, 0x00000030
DATA 4, MX6_IOM_DRAM_DQM3, 0x00000030
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008000
DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xA1390003
DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x002D003A
DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x0038002B
DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x03340338
DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x0334032C
DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x4036383C
DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x2E384038
DATA 4, MX6_MMDC_P0_MPRDDQBY0DL, 0x33333333
DATA 4, MX6_MMDC_P0_MPRDDQBY1DL, 0x33333333
DATA 4, MX6_MMDC_P0_MPRDDQBY2DL, 0x33333333
DATA 4, MX6_MMDC_P0_MPRDDQBY3DL, 0x33333333
DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800
DATA 4, MX6_MMDC_P0_MDPDC, 0x00020036
DATA 4, MX6_MMDC_P0_MDOTC, 0x09444040
DATA 4, MX6_MMDC_P0_MDCFG0, 0xB8BE7955
DATA 4, MX6_MMDC_P0_MDCFG1, 0xFF328F64
DATA 4, MX6_MMDC_P0_MDCFG2, 0x01FF00DB
DATA 4, MX6_MMDC_P0_MDMISC, 0x00011740
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008000
DATA 4, MX6_MMDC_P0_MDRWD, 0x000026D2
DATA 4, MX6_MMDC_P0_MDOR, 0x00BE1023
DATA 4, MX6_MMDC_P0_MDASP, 0x00000047
DATA 4, MX6_MMDC_P0_MDCTL, 0x85190000
DATA 4, MX6_MMDC_P0_MDSCR, 0x00888032
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008031
DATA 4, MX6_MMDC_P0_MDSCR, 0x19408030
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040
DATA 4, MX6_MMDC_P0_MDREF, 0x00007800
DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00000007
DATA 4, MX6_MMDC_P0_MDPDC, 0x00025576
DATA 4, MX6_MMDC_P0_MAPSR, 0x00011006
DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000
/* set the default clock gate to save power */
DATA 4, CCM_CCGR0, 0x00C03F3F
DATA 4, CCM_CCGR1, 0x0030FC03
DATA 4, CCM_CCGR2, 0x0FFFC000
DATA 4, CCM_CCGR3, 0x3FF00000
DATA 4, CCM_CCGR4, 0xFFFFF300
DATA 4, CCM_CCGR5, 0x0F0000F3
DATA 4, CCM_CCGR6, 0x00000FFF
/* enable AXI cache for VDOA/VPU/IPU */
DATA 4 MX6_IOMUXC_GPR4 0xF00000CF
/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */
DATA 4 MX6_IOMUXC_GPR6 0x007F007F
DATA 4 MX6_IOMUXC_GPR7 0x007F007F

View File

@ -126,6 +126,20 @@ static iomux_v3_cfg_t const usdhc2_pads[] = {
IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
}; };
static iomux_v3_cfg_t const usdhc3_pads[] = {
IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
IOMUX_PADS(PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
};
static iomux_v3_cfg_t const board_detect[] = { static iomux_v3_cfg_t const board_detect[] = {
/* These pins are for sensing if it is a CuBox-i or a HummingBoard */ /* These pins are for sensing if it is a CuBox-i or a HummingBoard */
IOMUX_PADS(PAD_KEY_ROW1__GPIO4_IO09 | MUX_PAD_CTRL(UART_PAD_CTRL)), IOMUX_PADS(PAD_KEY_ROW1__GPIO4_IO09 | MUX_PAD_CTRL(UART_PAD_CTRL)),
@ -148,23 +162,95 @@ static void setup_iomux_uart(void)
SETUP_IOMUX_PADS(uart1_pads); SETUP_IOMUX_PADS(uart1_pads);
} }
static struct fsl_esdhc_cfg usdhc_cfg[1] = { static struct fsl_esdhc_cfg usdhc_cfg = {
{USDHC2_BASE_ADDR}, .esdhc_base = USDHC2_BASE_ADDR,
.max_bus_width = 4,
}; };
static struct fsl_esdhc_cfg emmc_cfg = {
.esdhc_base = USDHC3_BASE_ADDR,
.max_bus_width = 8,
};
int board_mmc_get_env_dev(int devno)
{
return devno - 1;
}
#define USDHC2_CD_GPIO IMX_GPIO_NR(1, 4)
int board_mmc_getcd(struct mmc *mmc) int board_mmc_getcd(struct mmc *mmc)
{ {
return 1; /* uSDHC2 is always present */ struct fsl_esdhc_cfg *cfg = mmc->priv;
int ret = 0;
switch (cfg->esdhc_base) {
case USDHC2_BASE_ADDR:
ret = !gpio_get_value(USDHC2_CD_GPIO);
break;
case USDHC3_BASE_ADDR:
ret = (mmc_get_op_cond(mmc) < 0) ? 0 : 1; /* eMMC/uSDHC3 has no CD GPIO */
break;
}
return ret;
}
static int mmc_init_main(bd_t *bis)
{
int ret;
/*
* Following map is done:
* (U-Boot device node) (Physical Port)
* mmc0 Carrier board MicroSD
* mmc1 SOM eMMC
*/
SETUP_IOMUX_PADS(usdhc2_pads);
usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
ret = fsl_esdhc_initialize(bis, &usdhc_cfg);
if (ret)
return ret;
SETUP_IOMUX_PADS(usdhc3_pads);
emmc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
return fsl_esdhc_initialize(bis, &emmc_cfg);
}
static int mmc_init_spl(bd_t *bis)
{
struct src *psrc = (struct src *)SRC_BASE_ADDR;
unsigned reg = readl(&psrc->sbmr1) >> 11;
/*
* Upon reading BOOT_CFG register the following map is done:
* Bit 11 and 12 of BOOT_CFG register can determine the current
* mmc port
* 0x1 SD2
* 0x2 SD3
*/
switch (reg & 0x3) {
case 0x1:
SETUP_IOMUX_PADS(usdhc2_pads);
usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
gd->arch.sdhc_clk = usdhc_cfg.sdhc_clk;
return fsl_esdhc_initialize(bis, &usdhc_cfg);
case 0x2:
SETUP_IOMUX_PADS(usdhc3_pads);
emmc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
gd->arch.sdhc_clk = emmc_cfg.sdhc_clk;
return fsl_esdhc_initialize(bis, &emmc_cfg);
}
return -ENODEV;
} }
int board_mmc_init(bd_t *bis) int board_mmc_init(bd_t *bis)
{ {
SETUP_IOMUX_PADS(usdhc2_pads); if (IS_ENABLED(CONFIG_SPL_BUILD))
usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR; return mmc_init_spl(bis);
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk;
return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); return mmc_init_main(bis);
} }
static iomux_v3_cfg_t const enet_pads[] = { static iomux_v3_cfg_t const enet_pads[] = {
@ -441,6 +527,15 @@ static bool is_rev_15_som(void)
return false; return false;
} }
static bool has_emmc(void)
{
struct mmc *mmc;
mmc = find_mmc_device(1);
if (!mmc)
return 0;
return (mmc_get_op_cond(mmc) < 0) ? 0 : 1;
}
int checkboard(void) int checkboard(void)
{ {
switch (board_type()) { switch (board_type()) {
@ -493,6 +588,10 @@ int board_late_init(void)
if (is_rev_15_som()) if (is_rev_15_som())
env_set("som_rev", "V15"); env_set("som_rev", "V15");
if (has_emmc())
env_set("has_emmc", "yes");
#endif #endif
return 0; return 0;

View File

@ -1,4 +1,4 @@
# SPDX-License-Identifier: GPL-2.0+ # SPDX-License-Identifier: GPL-2.0+
# (C) Copyright 2017 NXP Semiconductors # (C) Copyright 2017 NXP Semiconductors
obj-y := pico-imx7d.o obj-y := pico-imx7d.o spl.o

View File

@ -35,32 +35,20 @@ Use the default environment variables:
=> env default -f -a => env default -f -a
=> saveenv => saveenv
Run the UMS command: Run the DFU agent so we can flash the new images using dfu-util tool:
=> ums 0 mmc 0
Transfer u-boot.imx to be flashed into the eMMC: => dfu 0 mmc 0
$ sudo dd if=u-boot.imx of=/dev/sdX bs=1K seek=1; sync Flash SPL into the eMMC:
$ sudo dfu-util -D SPL -a spl
Flash u-boot.img into the eMMC:
$ sudo dfu-util -D u-boot.img -a u-boot
Remove power from the pico board. Remove power from the pico board.
Put pico board into normal boot mode. Put pico board into normal boot mode.
Power up the board and the new updated U-Boot should boot from eMMC. Power up the board and the new updated U-Boot should boot from eMMC.
Building U-Boot to boot with NXP 4.1 kernel:
The NXP 4.1 kernel boots only in secure boot mode on mx7.
Follow the next steps to enable secure boot:
$ make mrproper
$ make pico-imx7d_defconfig
$ make menuconfig
-> ARM architecture
-> [*] Enable support for booting in non-secure mode
-> [*] Boot in secure mode by default
-> Exit
$ make
Flash u-boot.imx using the imx_usb_loader tool.

View File

@ -1,97 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright (C) 2017 Freescale Semiconductor, Inc.
*
* Refer docs/README.imxmage for more details about how-to configure
* and create imximage boot image
*
* The syntax is taken as close as possible with the kwbimage
*/
#define __ASSEMBLY__
#include <config.h>
/* image version */
IMAGE_VERSION 2
BOOT_FROM sd
/* Secure boot support */
#ifdef CONFIG_SECURE_BOOT
CSF CONFIG_CSF_SIZE
#endif
/*
* Device Configuration Data (DCD)
*
* Each entry must have the format:
* Addr-type Address Value
*
* where:
* Addr-type register length (1,2 or 4 bytes)
* Address absolute address of the register
* value value to be stored in the register
*/
DATA 4 0x30340004 0x4F400005
/* Clear then set bit30 to ensure exit from DDR retention */
DATA 4 0x30360388 0x40000000
DATA 4 0x30360384 0x40000000
DATA 4 0x30391000 0x00000002
DATA 4 0x307a0000 0x01040001
DATA 4 0x307a01a0 0x80400003
DATA 4 0x307a01a4 0x00100020
DATA 4 0x307a01a8 0x80100004
DATA 4 0x307a0064 0x00400046
DATA 4 0x307a0490 0x00000001
DATA 4 0x307a00d0 0x00020083
DATA 4 0x307a00d4 0x00690000
DATA 4 0x307a00dc 0x09300004
DATA 4 0x307a00e0 0x04080000
DATA 4 0x307a00e4 0x00100004
DATA 4 0x307a00f4 0x0000033f
DATA 4 0x307a0100 0x09081109
DATA 4 0x307a0104 0x0007020d
DATA 4 0x307a0108 0x03040407
DATA 4 0x307a010c 0x00002006
DATA 4 0x307a0110 0x04020205
DATA 4 0x307a0114 0x03030202
DATA 4 0x307a0120 0x00000803
DATA 4 0x307a0180 0x00800020
DATA 4 0x307a0184 0x02000100
DATA 4 0x307a0190 0x02098204
DATA 4 0x307a0194 0x00030303
DATA 4 0x307a0200 0x00000016
DATA 4 0x307a0204 0x00080808
DATA 4 0x307a0210 0x00000f0f
DATA 4 0x307a0214 0x07070707
DATA 4 0x307a0218 0x0f070707
DATA 4 0x307a0240 0x06000604
DATA 4 0x307a0244 0x00000001
DATA 4 0x30391000 0x00000000
DATA 4 0x30790000 0x17420f40
DATA 4 0x30790004 0x10210100
DATA 4 0x30790010 0x00060807
DATA 4 0x307900b0 0x1010007e
DATA 4 0x3079009c 0x00000b24
DATA 4 0x30790020 0x08080808
DATA 4 0x30790030 0x08080808
DATA 4 0x30790050 0x01000010
DATA 4 0x30790050 0x00000010
DATA 4 0x307900c0 0x0e407304
DATA 4 0x307900c0 0x0e447304
DATA 4 0x307900c0 0x0e447306
CHECK_BITS_SET 4 0x307900c4 0x1
DATA 4 0x307900c0 0x0e407304
DATA 4 0x30384130 0x00000000
DATA 4 0x30340020 0x00000178
DATA 4 0x30384130 0x00000002
DATA 4 0x30790018 0x0000000f
CHECK_BITS_SET 4 0x307a0004 0x1

View File

@ -58,7 +58,7 @@ static struct i2c_pads_info i2c_pad_info4 = {
int dram_init(void) int dram_init(void)
{ {
gd->ram_size = PHYS_SDRAM_SIZE; gd->ram_size = imx_ddr_size();
return 0; return 0;
} }

View File

@ -0,0 +1,122 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2018 Technexion Ltd.
*
* Author: Richard Hu <richard.hu@technexion.com>
*/
#include <asm/arch/imx-regs.h>
#include <asm/arch/crm_regs.h>
#include <asm/arch/sys_proto.h>
#include <asm/arch-mx7/mx7-ddr.h>
#include <asm/gpio.h>
#include <spl.h>
#if defined(CONFIG_SPL_BUILD)
#ifdef CONFIG_SPL_OS_BOOT
int spl_start_uboot(void)
{
return 0;
}
#endif
static struct ddrc ddrc_regs_val = {
.mstr = 0x01040001,
.rfshtmg = 0x00400046,
.init1 = 0x00690000,
.init0 = 0x00020083,
.init3 = 0x09300004,
.init4 = 0x04080000,
.init5 = 0x00100004,
.rankctl = 0x0000033F,
.dramtmg0 = 0x09081109,
.dramtmg1 = 0x0007020d,
.dramtmg2 = 0x03040407,
.dramtmg3 = 0x00002006,
.dramtmg4 = 0x04020205,
.dramtmg5 = 0x03030202,
.dramtmg8 = 0x00000803,
.zqctl0 = 0x00800020,
.dfitmg0 = 0x02098204,
.dfitmg1 = 0x00030303,
.dfiupd0 = 0x80400003,
.dfiupd1 = 0x00100020,
.dfiupd2 = 0x80100004,
.addrmap4 = 0x00000F0F,
.odtcfg = 0x06000604,
.odtmap = 0x00000001,
.rfshtmg = 0x00400046,
.dramtmg0 = 0x09081109,
.addrmap0 = 0x0000001f,
.addrmap1 = 0x00080808,
.addrmap4 = 0x00000f0f,
.addrmap5 = 0x07070707,
.addrmap6 = 0x0f0f0707,
};
static struct ddrc_mp ddrc_mp_val = {
.pctrl_0 = 0x00000001,
};
static struct ddr_phy ddr_phy_regs_val = {
.phy_con0 = 0x17420f40,
.phy_con1 = 0x10210100,
.phy_con4 = 0x00060807,
.mdll_con0 = 0x1010007e,
.drvds_con0 = 0x00000d6e,
.cmd_sdll_con0 = 0x00000010,
.offset_lp_con0 = 0x0000000f,
.offset_rd_con0 = 0x08080808,
.offset_wr_con0 = 0x08080808,
};
static struct mx7_calibration calib_param = {
.num_val = 5,
.values = {
0x0E407304,
0x0E447304,
0x0E447306,
0x0E447304,
0x0E447304,
},
};
static void gpr_init(void)
{
struct iomuxc_gpr_base_regs *gpr_regs =
(struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;
writel(0x4F400005, &gpr_regs->gpr[1]);
}
static bool is_1g(void)
{
gpio_direction_input(IMX_GPIO_NR(1, 12));
return !gpio_get_value(IMX_GPIO_NR(1, 12));
}
static void ddr_init(void)
{
if (is_1g())
ddrc_regs_val.addrmap6 = 0x0f070707;
mx7_dram_cfg(&ddrc_regs_val, &ddrc_mp_val, &ddr_phy_regs_val,
&calib_param);
}
void board_init_f(ulong dummy)
{
arch_cpu_init();
gpr_init();
board_early_init_f();
timer_init();
preloader_console_init();
ddr_init();
memset(__bss_start, 0, __bss_end - __bss_start);
board_init_r(NULL, 0);
}
void reset_cpu(ulong addr)
{
}
#endif

View File

@ -0,0 +1,29 @@
if TARGET_COLIBRI_IMX6ULL
config SYS_BOARD
default "colibri-imx6ull"
config SYS_VENDOR
default "toradex"
config SYS_CONFIG_NAME
default "colibri-imx6ull"
config TDX_CFG_BLOCK
default y
config TDX_HAVE_NAND
default y
config TDX_CFG_BLOCK_OFFSET
default "2048"
config TDX_CFG_BLOCK_OFFSET2
default "133120"
config TDX_CFG_BLOCK_2ND_ETHADDR
default y
source "board/toradex/common/Kconfig"
endif

View File

@ -0,0 +1,10 @@
Colibri iMX6ULL
M: Stefan Agner <stefan.agner@toradex.com>
M: Toradex ARM Support <support.arm@toradex.com>
W: http://developer.toradex.com/software/linux/linux-software
W: https://www.toradex.com/community
S: Maintained
F: arch/arm/dts/imx6ull-colibri.dts
F: board/toradex/colibri-imx6ull/
F: configs/colibri-imx6ull_defconfig
F: include/configs/colibri-imx6ull.h

View File

@ -0,0 +1,4 @@
# SPDX-License-Identifier: GPL-2.0+
# Copyright (C) 2018 Toradex AG
obj-y := colibri-imx6ull.o

View File

@ -0,0 +1,408 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright (C) 2018 Toradex AG
*/
#include <common.h>
#include <asm/arch/clock.h>
#include <asm/arch/crm_regs.h>
#include <asm/arch/imx-regs.h>
#include <asm/arch-mx6/clock.h>
#include <asm/arch-mx6/imx-regs.h>
#include <asm/arch-mx6/mx6ull_pins.h>
#include <asm/arch/sys_proto.h>
#include <asm/gpio.h>
#include <asm/mach-imx/boot_mode.h>
#include <asm/mach-imx/iomux-v3.h>
#include <asm/io.h>
#include <common.h>
#include <dm.h>
#include <dm/platform_data/serial_mxc.h>
#include <fdt_support.h>
#include <fsl_esdhc.h>
#include <imx_thermal.h>
#include <jffs2/load_kernel.h>
#include <linux/sizes.h>
#include <mmc.h>
#include <miiphy.h>
#include <mtd_node.h>
#include <netdev.h>
#include <usb.h>
#include <usb/ehci-ci.h>
#include "../common/tdx-common.h"
DECLARE_GLOBAL_DATA_PTR;
#define UART_PAD_CTRL (PAD_CTL_PUS_100K_UP | \
PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \
PAD_CTL_SRE_FAST | PAD_CTL_HYS)
#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP | \
PAD_CTL_SPEED_LOW | PAD_CTL_DSE_40ohm | \
PAD_CTL_SRE_FAST | PAD_CTL_HYS)
#define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | \
PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
#define ENET_PAD_CTRL_MII (PAD_CTL_DSE_40ohm)
#define ENET_RX_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_48ohm)
#define LCD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_100K_UP | \
PAD_CTL_DSE_48ohm)
#define NAND_PAD_CTRL (PAD_CTL_DSE_48ohm | PAD_CTL_SRE_SLOW | PAD_CTL_HYS)
#define NAND_PAD_READY0_CTRL (PAD_CTL_DSE_48ohm | PAD_CTL_PUS_22K_UP)
#define USB_CDET_GPIO IMX_GPIO_NR(7, 14)
int dram_init(void)
{
gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
return 0;
}
static iomux_v3_cfg_t const uart1_pads[] = {
MX6_PAD_UART1_TX_DATA__UART1_DTE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
MX6_PAD_UART1_RX_DATA__UART1_DTE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
MX6_PAD_UART1_RTS_B__UART1_DTE_CTS | MUX_PAD_CTRL(UART_PAD_CTRL),
MX6_PAD_UART1_CTS_B__UART1_DTE_RTS | MUX_PAD_CTRL(UART_PAD_CTRL),
};
#ifdef CONFIG_FSL_ESDHC
static iomux_v3_cfg_t const usdhc1_pads[] = {
MX6_PAD_SD1_CLK__USDHC1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD1_CMD__USDHC1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD1_DATA0__USDHC1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD1_DATA1__USDHC1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD1_DATA2__USDHC1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD1_DATA3__USDHC1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SNVS_TAMPER0__GPIO5_IO00 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
#endif
static iomux_v3_cfg_t const usb_cdet_pads[] = {
MX6_PAD_SNVS_TAMPER2__GPIO5_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
#ifdef CONFIG_NAND_MXS
static iomux_v3_cfg_t const gpmi_pads[] = {
MX6_PAD_NAND_DATA00__RAWNAND_DATA00 | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_DATA01__RAWNAND_DATA01 | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_DATA02__RAWNAND_DATA02 | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_DATA03__RAWNAND_DATA03 | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_DATA04__RAWNAND_DATA04 | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_DATA05__RAWNAND_DATA05 | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_DATA06__RAWNAND_DATA06 | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_DATA07__RAWNAND_DATA07 | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_CLE__RAWNAND_CLE | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_ALE__RAWNAND_ALE | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_RE_B__RAWNAND_RE_B | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_WE_B__RAWNAND_WE_B | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_CE0_B__RAWNAND_CE0_B | MUX_PAD_CTRL(NAND_PAD_CTRL),
MX6_PAD_NAND_READY_B__RAWNAND_READY_B | MUX_PAD_CTRL(NAND_PAD_READY0_CTRL),
};
static void setup_gpmi_nand(void)
{
imx_iomux_v3_setup_multiple_pads(gpmi_pads, ARRAY_SIZE(gpmi_pads));
setup_gpmi_io_clk((3 << MXC_CCM_CSCDR1_BCH_PODF_OFFSET) |
(3 << MXC_CCM_CSCDR1_GPMI_PODF_OFFSET));
}
#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_CLK__LCDIF_CLK | 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),
};
static iomux_v3_cfg_t const backlight_pads[] = {
/* Backlight On */
MX6_PAD_JTAG_TMS__GPIO1_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL),
/* Backlight PWM<A> (multiplexed pin) */
MX6_PAD_NAND_WP_B__GPIO4_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
#define GPIO_BL_ON IMX_GPIO_NR(1, 11)
#define GPIO_PWM_A IMX_GPIO_NR(4, 11)
static int setup_lcd(void)
{
imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));
imx_iomux_v3_setup_multiple_pads(backlight_pads, ARRAY_SIZE(backlight_pads));
/* Set BL_ON */
gpio_request(GPIO_BL_ON, "BL_ON");
gpio_direction_output(GPIO_BL_ON, 1);
/* Set PWM<A> to full brightness (assuming inversed polarity) */
gpio_request(GPIO_PWM_A, "PWM<A>");
gpio_direction_output(GPIO_PWM_A, 0);
return 0;
}
#endif
#ifdef CONFIG_FEC_MXC
static iomux_v3_cfg_t const fec2_pads[] = {
MX6_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 | MUX_PAD_CTRL(ENET_PAD_CTRL) | MUX_MODE_SION,
MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_MII),
MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL_MII),
MX6_PAD_ENET2_RX_DATA0__ENET2_RDATA00 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
MX6_PAD_ENET2_RX_DATA1__ENET2_RDATA01 | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_RX_PAD_CTRL),
MX6_PAD_ENET2_TX_DATA0__ENET2_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_TX_DATA1__ENET2_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),
MX6_PAD_ENET2_TX_EN__ENET2_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
};
static void setup_iomux_fec(void)
{
imx_iomux_v3_setup_multiple_pads(fec2_pads, ARRAY_SIZE(fec2_pads));
}
#endif
static void setup_iomux_uart(void)
{
imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
}
#ifdef CONFIG_FSL_ESDHC
#define USDHC1_CD_GPIO IMX_GPIO_NR(5, 0)
static struct fsl_esdhc_cfg usdhc_cfg[] = {
{USDHC1_BASE_ADDR, 0, 4},
};
int board_mmc_getcd(struct mmc *mmc)
{
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
int ret = 0;
switch (cfg->esdhc_base) {
case USDHC1_BASE_ADDR:
ret = !gpio_get_value(USDHC1_CD_GPIO);
break;
}
return ret;
}
int board_mmc_init(bd_t *bis)
{
int i, ret;
/* USDHC1 is mmc0 */
for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) {
switch (i) {
case 0:
imx_iomux_v3_setup_multiple_pads(usdhc1_pads,
ARRAY_SIZE(usdhc1_pads));
gpio_request(USDHC1_CD_GPIO, "usdhc1_cd");
gpio_direction_input(USDHC1_CD_GPIO);
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
break;
default:
printf("Warning: you configured more USDHC controllers"
"(%d) than supported by the board\n", i + 1);
return -EINVAL;
}
ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]);
if (ret)
return ret;
}
return 0;
}
#endif
#ifdef CONFIG_FEC_MXC
static int setup_fec(void)
{
struct iomuxc *iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
int ret;
setup_iomux_fec();
/* provide the PHY clock from the i.MX 6 */
ret = enable_fec_anatop_clock(1, ENET_50MHZ);
if (ret)
return ret;
/* Use 50M anatop REF_CLK and output it on the ENET2_TX_CLK */
clrsetbits_le32(&iomuxc_regs->gpr[1],
IOMUX_GPR1_FEC2_CLOCK_MUX2_SEL_MASK,
IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK);
return 0;
}
int board_phy_config(struct phy_device *phydev)
{
if (phydev->drv->config)
phydev->drv->config(phydev);
return 0;
}
#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();
#endif
#ifdef CONFIG_NAND_MXS
setup_gpmi_nand();
#endif
#ifdef CONFIG_VIDEO_MXS
setup_lcd();
#endif
#ifdef CONFIG_USB_EHCI_MX6
imx_iomux_v3_setup_multiple_pads(usb_cdet_pads, ARRAY_SIZE(usb_cdet_pads));
gpio_request(USB_CDET_GPIO, "usb-cdet-gpio");
#endif
return 0;
}
#ifdef CONFIG_CMD_BMODE
/* TODO */
static const struct boot_mode board_boot_modes[] = {
/* 4 bit bus width */
{"nand", MAKE_CFGVAL(0x40, 0x34, 0x00, 0x00)},
{"sd1", MAKE_CFGVAL(0x10, 0x10, 0x00, 0x00)},
{NULL, 0},
};
#endif
int board_late_init(void)
{
int minc, maxc;
if (get_cpu_temp_grade(&minc, &maxc) != TEMP_COMMERCIAL)
env_set("variant", "-wifi");
#ifdef CONFIG_CMD_BMODE
add_board_boot_modes(board_boot_modes);
#endif
#ifdef CONFIG_CMD_USB_SDP
if (is_boot_from_usb()) {
printf("Serial Downloader recovery mode, using sdp command\n");
env_set("bootdelay", "0");
env_set("bootcmd", "sdp 0");
}
#endif /* CONFIG_CMD_USB_SDP */
return 0;
}
int checkboard(void)
{
printf("Model: Toradex Colibri iMX6ULL\n");
return 0;
}
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
int ft_board_setup(void *blob, bd_t *bd)
{
#if defined(CONFIG_FDT_FIXUP_PARTITIONS)
static struct node_info nodes[] = {
{ "fsl,imx6ull-gpmi-nand", MTD_DEV_TYPE_NAND, },
{ "fsl,imx6q-gpmi-nand", MTD_DEV_TYPE_NAND, },
};
/* Update partition nodes using info from mtdparts env var */
puts(" Updating MTD partitions...\n");
fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
#endif
return ft_common_board_setup(blob, bd);
}
#endif
#ifdef CONFIG_USB_EHCI_MX6
static iomux_v3_cfg_t const usb_otg2_pads[] = {
MX6_PAD_GPIO1_IO02__GPIO1_IO02 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
int board_ehci_hcd_init(int port)
{
switch (port) {
case 0:
break;
case 1:
imx_iomux_v3_setup_multiple_pads(usb_otg2_pads,
ARRAY_SIZE(usb_otg2_pads));
break;
default:
return -EINVAL;
}
return 0;
}
int board_usb_phy_mode(int port)
{
switch (port) {
case 0:
if (gpio_get_value(USB_CDET_GPIO))
return USB_INIT_DEVICE;
else
return USB_INIT_HOST;
case 1:
default:
return USB_INIT_HOST;
}
}
#endif
static struct mxc_serial_platdata mxc_serial_plat = {
.reg = (struct mxc_uart *)UART1_BASE,
.use_dte = 1,
};
U_BOOT_DEVICE(mxc_serial) = {
.name = "serial_mxc",
.platdata = &mxc_serial_plat,
};

View File

@ -0,0 +1,106 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright (C) 2016 Freescale Semiconductor, Inc.
* Copyright (C) 2018 Toradex AG
*
* Refer doc/README.imximage for more details about how-to configure
* and create imximage boot image
*
* The syntax is taken as close as possible with the kwbimage
*/
#define __ASSEMBLY__
#include <config.h>
/* image version */
IMAGE_VERSION 2
/*
* Boot Device : nand
*/
BOOT_FROM nand
/*
* Secure boot support
*/
#ifdef CONFIG_SECURE_BOOT
CSF CONFIG_CSF_SIZE
#endif
/*
* Device Configuration Data (DCD)
*
* Each entry must have the format:
* Addr-type Address Value
*
* where:
* Addr-type register length (1,2 or 4 bytes)
* Address absolute address of the register
* value value to be stored in the register
*/
/* Enable all clocks */
DATA 4 0x020c4068 0xffffffff
DATA 4 0x020c406c 0xffffffff
DATA 4 0x020c4070 0xffffffff
DATA 4 0x020c4074 0xffffffff
DATA 4 0x020c4078 0xffffffff
DATA 4 0x020c407c 0xffffffff
DATA 4 0x020c4080 0xffffffff
DATA 4 0x020E04B4 0x000C0000
DATA 4 0x020E04AC 0x00000000
DATA 4 0x020E027C 0x00000030
DATA 4 0x020E0250 0x00000030
DATA 4 0x020E024C 0x00000030
DATA 4 0x020E0490 0x00000030
DATA 4 0x020E0288 0x000C0030
DATA 4 0x020E0270 0x00000000
DATA 4 0x020E0260 0x00000030
DATA 4 0x020E0264 0x00000030
DATA 4 0x020E04A0 0x00000030
DATA 4 0x020E0494 0x00020000
DATA 4 0x020E0280 0x00000030
DATA 4 0x020E0284 0x00000030
DATA 4 0x020E04B0 0x00020000
DATA 4 0x020E0498 0x00000030
DATA 4 0x020E04A4 0x00000030
DATA 4 0x020E0244 0x00000030
DATA 4 0x020E0248 0x00000030
DATA 4 0x021B001C 0x00008000
DATA 4 0x021B0800 0xA1390003
DATA 4 0x021B080C 0x00000004
DATA 4 0x021B083C 0x41640158
DATA 4 0x021B0848 0x40403237
DATA 4 0x021B0850 0x40403C33
DATA 4 0x021B081C 0x33333333
DATA 4 0x021B0820 0x33333333
DATA 4 0x021B082C 0xf3333333
DATA 4 0x021B0830 0xf3333333
DATA 4 0x021B08C0 0x00944009
DATA 4 0x021B08b8 0x00000800
DATA 4 0x021B0004 0x0002002D
DATA 4 0x021B0008 0x1B333030
DATA 4 0x021B000C 0x676B52F3
DATA 4 0x021B0010 0xB66D0B63
DATA 4 0x021B0014 0x01FF00DB
DATA 4 0x021B0018 0x00201740
DATA 4 0x021B001C 0x00008000
DATA 4 0x021B002C 0x000026D2
DATA 4 0x021B0030 0x006B1023
DATA 4 0x021B0040 0x0000004F
DATA 4 0x021B0000 0x84180000
DATA 4 0x021B0890 0x00400000
DATA 4 0x021B001C 0x02008032
DATA 4 0x021B001C 0x00008033
DATA 4 0x021B001C 0x00048031
DATA 4 0x021B001C 0x15208030
DATA 4 0x021B001C 0x04008040
DATA 4 0x021B0020 0x00000800
DATA 4 0x021B0818 0x00000227
DATA 4 0x021B0004 0x0002552D
DATA 4 0x021B0404 0x00011006
DATA 4 0x021B001C 0x00000000

View File

@ -9,7 +9,6 @@
#include <asm/arch/mx7-pins.h> #include <asm/arch/mx7-pins.h>
#include <asm/arch/sys_proto.h> #include <asm/arch/sys_proto.h>
#include <asm/gpio.h> #include <asm/gpio.h>
#include <asm/mach-imx/boot_mode.h>
#include <asm/mach-imx/iomux-v3.h> #include <asm/mach-imx/iomux-v3.h>
#include <asm/io.h> #include <asm/io.h>
#include <common.h> #include <common.h>
@ -322,24 +321,6 @@ int board_init(void)
return 0; return 0;
} }
#ifdef CONFIG_CMD_BMODE
static const struct boot_mode board_boot_modes[] = {
/* 4 bit bus width */
{"nand", MAKE_CFGVAL(0x40, 0x34, 0x00, 0x00)},
{"sd1", MAKE_CFGVAL(0x10, 0x10, 0x00, 0x00)},
{NULL, 0},
};
#endif
int board_late_init(void)
{
#ifdef CONFIG_CMD_BMODE
add_board_boot_modes(board_boot_modes);
#endif
return 0;
}
#ifdef CONFIG_DM_PMIC #ifdef CONFIG_DM_PMIC
int power_init_board(void) int power_init_board(void)
{ {
@ -410,6 +391,7 @@ int ft_board_setup(void *blob, bd_t *bd)
#if defined(CONFIG_FDT_FIXUP_PARTITIONS) #if defined(CONFIG_FDT_FIXUP_PARTITIONS)
static struct node_info nodes[] = { static struct node_info nodes[] = {
{ "fsl,imx7d-gpmi-nand", MTD_DEV_TYPE_NAND, }, /* NAND flash */ { "fsl,imx7d-gpmi-nand", MTD_DEV_TYPE_NAND, }, /* NAND flash */
{ "fsl,imx6q-gpmi-nand", MTD_DEV_TYPE_NAND, },
}; };
/* Update partition nodes using info from mtdparts env var */ /* Update partition nodes using info from mtdparts env var */

View File

@ -57,7 +57,7 @@ DATA 4 0x307a01a4 0x00100020
/* DDRC_DFIUPD2 */ /* DDRC_DFIUPD2 */
DATA 4 0x307a01a8 0x80100004 DATA 4 0x307a01a8 0x80100004
/* DDRC_RFSHTMG */ /* DDRC_RFSHTMG */
DATA 4 0x307a0064 0x00400045 DATA 4 0x307a0064 0x00400046
/* DDRC_MP_PCTRL_0 */ /* DDRC_MP_PCTRL_0 */
DATA 4 0x307a0490 0x00000001 DATA 4 0x307a0490 0x00000001
/* DDRC_INIT0 */ /* DDRC_INIT0 */
@ -73,15 +73,15 @@ DATA 4 0x307a00e4 0x00100004
/* DDRC_RANKCTL */ /* DDRC_RANKCTL */
DATA 4 0x307a00f4 0x0000033f DATA 4 0x307a00f4 0x0000033f
/* DDRC_DRAMTMG0 */ /* DDRC_DRAMTMG0 */
DATA 4 0x307a0100 0x090b090a DATA 4 0x307a0100 0x0910090a
/* DDRC_DRAMTMG1 */ /* DDRC_DRAMTMG1 */
DATA 4 0x307a0104 0x000d020d DATA 4 0x307a0104 0x000d020e
/* DDRC_DRAMTMG2 */ /* DDRC_DRAMTMG2 */
DATA 4 0x307a0108 0x03040307 DATA 4 0x307a0108 0x03040307
/* DDRC_DRAMTMG3 */ /* DDRC_DRAMTMG3 */
DATA 4 0x307a010c 0x00002006 DATA 4 0x307a010c 0x00002006
/* DDRC_DRAMTMG4 */ /* DDRC_DRAMTMG4 */
DATA 4 0x307a0110 0x04020205 DATA 4 0x307a0110 0x04020204
/* DDRC_DRAMTMG5 */ /* DDRC_DRAMTMG5 */
DATA 4 0x307a0114 0x03030202 DATA 4 0x307a0114 0x03030202
/* DDRC_DRAMTMG8 */ /* DDRC_DRAMTMG8 */
@ -105,7 +105,7 @@ DATA 4 0x307a0218 0x07070707
/* DDRC_ODTCFG */ /* DDRC_ODTCFG */
DATA 4 0x307a0240 0x06000601 DATA 4 0x307a0240 0x06000601
/* DDRC_ODTMAP */ /* DDRC_ODTMAP */
DATA 4 0x307a0244 0x00000011 DATA 4 0x307a0244 0x00000001
/* SRC_DDRC_RCR */ /* SRC_DDRC_RCR */
DATA 4 0x30391000 0x00000000 DATA 4 0x30391000 0x00000000
/* DDR_PHY_PHY_CON0 */ /* DDR_PHY_PHY_CON0 */

View File

@ -91,6 +91,13 @@ const char * const toradex_modules[] = {
[33] = "Colibri iMX7 Dual 512MB", [33] = "Colibri iMX7 Dual 512MB",
[34] = "Apalis TK1 2GB", [34] = "Apalis TK1 2GB",
[35] = "Apalis iMX6 Dual 1GB IT", [35] = "Apalis iMX6 Dual 1GB IT",
[36] = "Colibri iMX6ULL 256MB",
[37] = "Apalis iMX8 QuadMax 4GB Wi-Fi / Bluetooth",
[38] = "Colibri iMX8X",
[39] = "Colibri iMX7 Dual 1GB (eMMC)",
[40] = "Colibri iMX6ULL 512MB Wi-Fi / Bluetooth IT",
[41] = "Colibri iMX7 Dual 512MB EPDC",
[42] = "Apalis TK1 4GB",
}; };
#ifdef CONFIG_TDX_CFG_BLOCK_IS_IN_MMC #ifdef CONFIG_TDX_CFG_BLOCK_IS_IN_MMC

View File

@ -54,6 +54,13 @@ enum {
COLIBRI_IMX7D, COLIBRI_IMX7D,
APALIS_TK1_2GB, APALIS_TK1_2GB,
APALIS_IMX6D_IT, APALIS_IMX6D_IT,
COLIBRI_IMX6ULL,
APALIS_IMX8QM, /* 37 */
COLIBRI_IMX8X,
COLIBRI_IMX7D_EMMC,
COLIBRI_IMX6ULL_WIFI_BT_IT, /* 40 */
COLIBRI_IMX7D_EPDC,
APALIS_TK1_4GB,
}; };
extern const char * const toradex_modules[]; extern const char * const toradex_modules[];

View File

@ -46,7 +46,14 @@ CONFIG_CMD_FS_GENERIC=y
CONFIG_ENV_IS_IN_SPI_FLASH=y CONFIG_ENV_IS_IN_SPI_FLASH=y
CONFIG_FSL_ESDHC=y CONFIG_FSL_ESDHC=y
CONFIG_SPI_FLASH=y CONFIG_SPI_FLASH=y
CONFIG_SPI_FLASH_ATMEL=y
CONFIG_SPI_FLASH_EON=y
CONFIG_SPI_FLASH_GIGADEVICE=y
CONFIG_SPI_FLASH_MACRONIX=y
CONFIG_SPI_FLASH_SPANSION=y
CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_STMICRO=y
CONFIG_SPI_FLASH_SST=y
CONFIG_SPI_FLASH_WINBOND=y
CONFIG_SPI=y CONFIG_SPI=y
CONFIG_MXC_SPI=y CONFIG_MXC_SPI=y
CONFIG_USB=y CONFIG_USB=y

View File

@ -0,0 +1,78 @@
CONFIG_ARM=y
CONFIG_SYS_THUMB_BUILD=y
# CONFIG_SPL_SYS_THUMB_BUILD is not set
CONFIG_ARCH_MX6=y
CONFIG_SYS_TEXT_BASE=0x87800000
CONFIG_TARGET_COLIBRI_IMX6ULL=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-colibri"
CONFIG_DISTRO_DEFAULTS=y
CONFIG_FIT=y
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/toradex/colibri-imx6ull/imximage.cfg,MX6ULL,IMX_NAND"
CONFIG_BOOTDELAY=1
# CONFIG_USE_BOOTCOMMAND is not set
# CONFIG_CONSOLE_MUX is not set
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_VERSION_VARIABLE=y
# CONFIG_DISPLAY_BOARDINFO is not set
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_SYS_PROMPT="Colibri iMX6ULL # "
# CONFIG_CMD_IMI is not set
# CONFIG_CMD_XIMG is not set
CONFIG_CMD_ASKENV=y
CONFIG_CMD_MEMTEST=y
CONFIG_CMD_DFU=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
# CONFIG_RANDOM_UUID is not set
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_NAND_TRIMFFS=y
CONFIG_CMD_NAND_TORTURE=y
CONFIG_CMD_USB=y
CONFIG_CMD_USB_MASS_STORAGE=y
CONFIG_CMD_BMP=y
CONFIG_CMD_CACHE=y
CONFIG_MTDIDS_DEFAULT="nand0=gpmi-nand"
CONFIG_MTDPARTS_DEFAULT="mtdparts=gpmi-nand:512k(mx6ull-bcb),1536k(u-boot1)ro,1536k(u-boot2)ro,512k(u-boot-env),-(ubi)"
CONFIG_CMD_UBI=y
# CONFIG_ISO_PARTITION is not set
CONFIG_OF_CONTROL=y
CONFIG_ENV_IS_IN_NAND=y
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_DFU_MMC=y
CONFIG_DFU_NAND=y
CONFIG_DM_GPIO=y
CONFIG_DM_I2C=y
CONFIG_SYS_I2C_MXC=y
CONFIG_FSL_ESDHC=y
CONFIG_MTD=y
CONFIG_NAND=y
CONFIG_NAND_MXS=y
CONFIG_NAND_MXS_DT=y
CONFIG_MTD_UBI_FASTMAP=y
CONFIG_PHYLIB=y
CONFIG_PHY_ADDR_ENABLE=y
CONFIG_PHY_MICREL=y
CONFIG_PHY_MICREL_KSZ90X1=y
CONFIG_NETDEVICES=y
CONFIG_FEC_MXC=y
CONFIG_PINCTRL=y
CONFIG_PINCTRL_IMX6=y
CONFIG_DM_REGULATOR=y
# CONFIG_SPL_SERIAL_PRESENT is not set
CONFIG_DM_SERIAL=y
CONFIG_MXC_UART=y
CONFIG_USB=y
CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_MANUFACTURER="Toradex"
CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
CONFIG_CI_UDC=y
CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_USB_FUNCTION_SDP=y
CONFIG_VIDEO=y
CONFIG_OF_LIBFDT_OVERLAY=y
CONFIG_FDT_FIXUP_PARTITIONS=y
# CONFIG_EFI_LOADER is not set

View File

@ -39,7 +39,10 @@ CONFIG_BOOTCOUNT_LIMIT=y
CONFIG_SYS_BOOTCOUNT_ADDR=0x00900000 CONFIG_SYS_BOOTCOUNT_ADDR=0x00900000
CONFIG_FSL_ESDHC=y CONFIG_FSL_ESDHC=y
CONFIG_SPI_FLASH=y CONFIG_SPI_FLASH=y
CONFIG_SPI_FLASH_GIGADEVICE=y
CONFIG_SPI_FLASH_MACRONIX=y
CONFIG_SPI_FLASH_SPANSION=y CONFIG_SPI_FLASH_SPANSION=y
CONFIG_SPI_FLASH_WINBOND=y
CONFIG_PHYLIB=y CONFIG_PHYLIB=y
CONFIG_PHY_MICREL=y CONFIG_PHY_MICREL=y
CONFIG_PHY_MICREL_KSZ90X1=y CONFIG_PHY_MICREL_KSZ90X1=y

View File

@ -1,40 +1,75 @@
CONFIG_ARM=y CONFIG_ARM=y
CONFIG_ARCH_MX6=y CONFIG_ARCH_MX6=y
CONFIG_SYS_TEXT_BASE=0x17800000 CONFIG_SYS_TEXT_BASE=0x17800000
CONFIG_SPL_GPIO_SUPPORT=y
CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_TARGET_MX6LOGICPD=y CONFIG_TARGET_MX6LOGICPD=y
CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_SPL_SYS_MALLOC_F_LEN=0x400
CONFIG_SPL=y
CONFIG_DEFAULT_DEVICE_TREE="imx6q-logicpd" CONFIG_DEFAULT_DEVICE_TREE="imx6q-logicpd"
CONFIG_DISTRO_DEFAULTS=y CONFIG_DISTRO_DEFAULTS=y
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/logicpd/imx6/mx6q_2x_MT41K512M16HA.cfg,MX6Q" CONFIG_TPL_SYS_MALLOC_F_LEN=0x400
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
CONFIG_BOOTDELAY=3 CONFIG_BOOTDELAY=3
# CONFIG_USE_BOOTCOMMAND is not set # CONFIG_USE_BOOTCOMMAND is not set
CONFIG_SYS_CONSOLE_IS_IN_ENV=y CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
CONFIG_SPL_SEPARATE_BSS=y
CONFIG_SPL_DMA_SUPPORT=y
CONFIG_SPL_I2C_SUPPORT=y
CONFIG_SPL_NAND_SUPPORT=y
CONFIG_SPL_OS_BOOT=y
CONFIG_SPL_USB_HOST_SUPPORT=y
CONFIG_SPL_USB_GADGET_SUPPORT=y
CONFIG_SPL_USB_SDP_SUPPORT=y
CONFIG_SPL_WATCHDOG_SUPPORT=y
CONFIG_SYS_PROMPT="i.MX6 Logic # " CONFIG_SYS_PROMPT="i.MX6 Logic # "
CONFIG_CMD_SPL=y
CONFIG_CMD_SPL_WRITE_SIZE=0x20000
CONFIG_CMD_MEMTEST=y CONFIG_CMD_MEMTEST=y
# CONFIG_CMD_FLASH is not set # CONFIG_CMD_FLASH is not set
CONFIG_CMD_GPIO=y CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_NAND_TRIMFFS=y CONFIG_CMD_NAND_TRIMFFS=y
CONFIG_CMD_USB=y
CONFIG_CMD_USB_SDP=y
CONFIG_CMD_USB_MASS_STORAGE=y
CONFIG_CMD_CACHE=y CONFIG_CMD_CACHE=y
# CONFIG_CMD_LED is not set
CONFIG_CMD_PMIC=y CONFIG_CMD_PMIC=y
CONFIG_CMD_REGULATOR=y
CONFIG_CMD_EXT4_WRITE=y CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_MTDPARTS=y
CONFIG_MTDIDS_DEFAULT="nand0=gpmi-nand" CONFIG_MTDIDS_DEFAULT="nand0=gpmi-nand"
CONFIG_MTDPARTS_DEFAULT="mtdparts=gpmi-nand:4m(uboot),1m(env),16m(kernel),1m(dtb),-(fs)" CONFIG_MTDPARTS_DEFAULT="mtdparts=gpmi-nand:2m(spl),2m(uboot),1m(env),16m(kernel),1m(dtb),-(fs)"
CONFIG_CMD_UBI=y
CONFIG_SPL_OF_CONTROL=y
CONFIG_ENV_IS_IN_NAND=y CONFIG_ENV_IS_IN_NAND=y
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_SPL_DM=y
CONFIG_PCF8575_GPIO=y
CONFIG_SYS_I2C_MXC=y CONFIG_SYS_I2C_MXC=y
CONFIG_LED=y
CONFIG_LED_GPIO=y
CONFIG_FSL_ESDHC=y CONFIG_FSL_ESDHC=y
CONFIG_MTD_PARTITIONS=y CONFIG_MTD_PARTITIONS=y
CONFIG_NAND=y CONFIG_NAND=y
CONFIG_NAND_MXS=y CONFIG_NAND_MXS=y
CONFIG_PHYLIB=y CONFIG_PHYLIB=y
CONFIG_PHY_SMSC=y CONFIG_PHY_ATHEROS=y
CONFIG_FEC_MXC=y CONFIG_FEC_MXC=y
CONFIG_PINCTRL=y CONFIG_PINCTRL=y
CONFIG_SPL_PINCTRL=y
CONFIG_PINCTRL_IMX6=y CONFIG_PINCTRL_IMX6=y
CONFIG_DM_PMIC_PFUZE100=y CONFIG_DM_PMIC_PFUZE100=y
CONFIG_DM_REGULATOR_PFUZE100=y
CONFIG_MXC_UART=y CONFIG_MXC_UART=y
CONFIG_USB=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_USB_GADGET_DOWNLOAD=y

View File

@ -1,28 +1,50 @@
CONFIG_ARM=y CONFIG_ARM=y
CONFIG_ARCH_MX7=y CONFIG_ARCH_MX7=y
CONFIG_SYS_TEXT_BASE=0x87800000 CONFIG_SYS_TEXT_BASE=0x87800000
CONFIG_SPL_GPIO_SUPPORT=y
CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
CONFIG_TARGET_PICO_IMX7D=y CONFIG_TARGET_PICO_IMX7D=y
CONFIG_SPL_MMC_SUPPORT=y
CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_SPL=y
CONFIG_SPL_LIBDISK_SUPPORT=y
CONFIG_ARMV7_BOOT_SEC_DEFAULT=y
CONFIG_IMX_RDC=y CONFIG_IMX_RDC=y
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/technexion/pico-imx7d/imximage.cfg" CONFIG_IMX_BOOTAUX=y
CONFIG_HUSH_PARSER=y CONFIG_DISTRO_DEFAULTS=y
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
CONFIG_BOOTCOMMAND="run findfdt; run finduuid; run distro_bootcmd"
CONFIG_DEFAULT_FDT_FILE="ask"
CONFIG_SPL_I2C_SUPPORT=y
CONFIG_SPL_USB_HOST_SUPPORT=y
CONFIG_SPL_USB_GADGET_SUPPORT=y
CONFIG_SPL_USB_SDP_SUPPORT=y
# CONFIG_CMD_BOOTD is not set # CONFIG_CMD_BOOTD is not set
CONFIG_CMD_BOOTZ=y CONFIG_CMD_BOOTMENU=y
# CONFIG_CMD_IMI is not set # CONFIG_CMD_IMI is not set
# CONFIG_CMD_XIMG is not set # CONFIG_CMD_XIMG is not set
CONFIG_CMD_SPL=y
CONFIG_CMD_SPL_WRITE_SIZE=0x20000
CONFIG_CMD_DFU=y
CONFIG_CMD_GPIO=y CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
CONFIG_CMD_I2C=y CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y CONFIG_CMD_MMC=y
CONFIG_CMD_PART=y
CONFIG_CMD_USB=y CONFIG_CMD_USB=y
CONFIG_CMD_USB_SDP=y
CONFIG_CMD_USB_MASS_STORAGE=y CONFIG_CMD_USB_MASS_STORAGE=y
# CONFIG_CMD_SETEXPR is not set # CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_DHCP=y # CONFIG_CMD_MII is not set
CONFIG_CMD_CACHE=y CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_EXT4_WRITE=y CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_FAT=y CONFIG_DFU_MMC=y
CONFIG_CMD_FS_GENERIC=y CONFIG_USB_FUNCTION_FASTBOOT=y
CONFIG_FASTBOOT_BUF_ADDR=0x82000000
CONFIG_FASTBOOT_BUF_SIZE=0x10000000
CONFIG_FASTBOOT_FLASH=y
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
CONFIG_FSL_ESDHC=y CONFIG_FSL_ESDHC=y
CONFIG_PHYLIB=y CONFIG_PHYLIB=y
CONFIG_USB=y CONFIG_USB=y
@ -34,5 +56,4 @@ CONFIG_USB_GADGET_MANUFACTURER="FSL"
CONFIG_USB_GADGET_VENDOR_NUM=0x0525 CONFIG_USB_GADGET_VENDOR_NUM=0x0525
CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
CONFIG_CI_UDC=y CONFIG_CI_UDC=y
CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_OF_LIBFDT=y CONFIG_OF_LIBFDT=y

View File

@ -0,0 +1,59 @@
CONFIG_ARM=y
CONFIG_ARCH_MX7=y
CONFIG_SYS_TEXT_BASE=0x87800000
CONFIG_SPL_GPIO_SUPPORT=y
CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
CONFIG_TARGET_PICO_IMX7D=y
CONFIG_SPL_MMC_SUPPORT=y
CONFIG_SPL_SERIAL_SUPPORT=y
CONFIG_SPL=y
CONFIG_SPL_LIBDISK_SUPPORT=y
CONFIG_ARMV7_BOOT_SEC_DEFAULT=y
CONFIG_IMX_RDC=y
CONFIG_IMX_BOOTAUX=y
CONFIG_DISTRO_DEFAULTS=y
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg"
CONFIG_BOOTCOMMAND="run findfdt; run finduuid; run distro_bootcmd"
CONFIG_DEFAULT_FDT_FILE="imx7d-pico-pi.dtb"
CONFIG_SPL_I2C_SUPPORT=y
CONFIG_SPL_USB_HOST_SUPPORT=y
CONFIG_SPL_USB_GADGET_SUPPORT=y
CONFIG_SPL_USB_SDP_SUPPORT=y
# CONFIG_CMD_BOOTD is not set
CONFIG_CMD_BOOTMENU=y
# CONFIG_CMD_IMI is not set
# CONFIG_CMD_XIMG is not set
CONFIG_CMD_SPL=y
CONFIG_CMD_SPL_WRITE_SIZE=0x20000
CONFIG_CMD_DFU=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_USB=y
CONFIG_CMD_USB_SDP=y
CONFIG_CMD_USB_MASS_STORAGE=y
# CONFIG_CMD_SETEXPR is not set
# CONFIG_CMD_MII is not set
CONFIG_CMD_CACHE=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_DFU_MMC=y
CONFIG_USB_FUNCTION_FASTBOOT=y
CONFIG_FASTBOOT_BUF_ADDR=0x82000000
CONFIG_FASTBOOT_BUF_SIZE=0x10000000
CONFIG_FASTBOOT_FLASH=y
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
CONFIG_FSL_ESDHC=y
CONFIG_PHYLIB=y
CONFIG_USB=y
CONFIG_USB_EHCI_HCD=y
CONFIG_MXC_USB_OTG_HACTIVE=y
CONFIG_USB_STORAGE=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_OF_LIBFDT=y

View File

@ -18,6 +18,9 @@ __weak void bootcount_store(ulong a)
raw_bootcount_store(reg, a); raw_bootcount_store(reg, a);
raw_bootcount_store(reg + 4, BOOTCOUNT_MAGIC); raw_bootcount_store(reg + 4, BOOTCOUNT_MAGIC);
#endif /* defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD */ #endif /* defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD */
flush_dcache_range(CONFIG_SYS_BOOTCOUNT_ADDR,
CONFIG_SYS_BOOTCOUNT_ADDR +
CONFIG_SYS_CACHELINE_SIZE);
} }
__weak ulong bootcount_load(void) __weak ulong bootcount_load(void)

View File

@ -2491,36 +2491,11 @@ static int mmc_power_cycle(struct mmc *mmc)
return mmc_power_on(mmc); return mmc_power_on(mmc);
} }
int mmc_start_init(struct mmc *mmc) int mmc_get_op_cond(struct mmc *mmc)
{ {
bool no_card;
bool uhs_en = supports_uhs(mmc->cfg->host_caps); bool uhs_en = supports_uhs(mmc->cfg->host_caps);
int err; int err;
/*
* all hosts are capable of 1 bit bus-width and able to use the legacy
* timings.
*/
mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
#if !defined(CONFIG_MMC_BROKEN_CD)
/* we pretend there's no card when init is NULL */
no_card = mmc_getcd(mmc) == 0;
#else
no_card = 0;
#endif
#if !CONFIG_IS_ENABLED(DM_MMC)
no_card = no_card || (mmc->cfg->ops->init == NULL);
#endif
if (no_card) {
mmc->has_init = 0;
#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
pr_err("MMC: no card present\n");
#endif
return -ENOMEDIUM;
}
if (mmc->has_init) if (mmc->has_init)
return 0; return 0;
@ -2597,6 +2572,40 @@ retry:
} }
} }
return err;
}
int mmc_start_init(struct mmc *mmc)
{
bool no_card;
int err = 0;
/*
* all hosts are capable of 1 bit bus-width and able to use the legacy
* timings.
*/
mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
#if !defined(CONFIG_MMC_BROKEN_CD)
/* we pretend there's no card when init is NULL */
no_card = mmc_getcd(mmc) == 0;
#else
no_card = 0;
#endif
#if !CONFIG_IS_ENABLED(DM_MMC)
no_card = no_card || (mmc->cfg->ops->init == NULL);
#endif
if (no_card) {
mmc->has_init = 0;
#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
pr_err("MMC: no card present\n");
#endif
return -ENOMEDIUM;
}
err = mmc_get_op_cond(mmc);
if (!err) if (!err)
mmc->init_in_progress = 1; mmc->init_in_progress = 1;

View File

@ -21,11 +21,19 @@ struct mxs_nand_dt_data {
unsigned int max_ecc_strength_supported; unsigned int max_ecc_strength_supported;
}; };
static const struct mxs_nand_dt_data mxs_nand_imx6q_data = {
.max_ecc_strength_supported = 40,
};
static const struct mxs_nand_dt_data mxs_nand_imx7d_data = { static const struct mxs_nand_dt_data mxs_nand_imx7d_data = {
.max_ecc_strength_supported = 62, .max_ecc_strength_supported = 62,
}; };
static const struct udevice_id mxs_nand_dt_ids[] = { static const struct udevice_id mxs_nand_dt_ids[] = {
{
.compatible = "fsl,imx6q-gpmi-nand",
.data = (unsigned long)&mxs_nand_imx6q_data,
},
{ {
.compatible = "fsl,imx7d-gpmi-nand", .compatible = "fsl,imx7d-gpmi-nand",
.data = (unsigned long)&mxs_nand_imx7d_data, .data = (unsigned long)&mxs_nand_imx7d_data,

View File

@ -15,7 +15,6 @@
#include <miiphy.h> #include <miiphy.h>
#include <net.h> #include <net.h>
#include <netdev.h> #include <netdev.h>
#include "fec_mxc.h"
#include <asm/io.h> #include <asm/io.h>
#include <linux/errno.h> #include <linux/errno.h>
@ -24,6 +23,9 @@
#include <asm/arch/clock.h> #include <asm/arch/clock.h>
#include <asm/arch/imx-regs.h> #include <asm/arch/imx-regs.h>
#include <asm/mach-imx/sys_proto.h> #include <asm/mach-imx/sys_proto.h>
#include <asm-generic/gpio.h>
#include "fec_mxc.h"
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -1245,6 +1247,19 @@ static int fec_phy_init(struct fec_priv *priv, struct udevice *dev)
return 0; return 0;
} }
#ifdef CONFIG_DM_GPIO
/* FEC GPIO reset */
static void fec_gpio_reset(struct fec_priv *priv)
{
debug("fec_gpio_reset: fec_gpio_reset(dev)\n");
if (dm_gpio_is_valid(&priv->phy_reset_gpio)) {
dm_gpio_set_value(&priv->phy_reset_gpio, 1);
udelay(priv->reset_delay);
dm_gpio_set_value(&priv->phy_reset_gpio, 0);
}
}
#endif
static int fecmxc_probe(struct udevice *dev) static int fecmxc_probe(struct udevice *dev)
{ {
struct eth_pdata *pdata = dev_get_platdata(dev); struct eth_pdata *pdata = dev_get_platdata(dev);
@ -1257,6 +1272,9 @@ static int fecmxc_probe(struct udevice *dev)
if (ret) if (ret)
return ret; return ret;
#ifdef CONFIG_DM_GPIO
fec_gpio_reset(priv);
#endif
/* Reset chip. */ /* Reset chip. */
writel(readl(&priv->eth->ecntrl) | FEC_ECNTRL_RESET, writel(readl(&priv->eth->ecntrl) | FEC_ECNTRL_RESET,
&priv->eth->ecntrl); &priv->eth->ecntrl);
@ -1314,6 +1332,7 @@ static int fecmxc_remove(struct udevice *dev)
static int fecmxc_ofdata_to_platdata(struct udevice *dev) static int fecmxc_ofdata_to_platdata(struct udevice *dev)
{ {
int ret = 0;
struct eth_pdata *pdata = dev_get_platdata(dev); struct eth_pdata *pdata = dev_get_platdata(dev);
struct fec_priv *priv = dev_get_priv(dev); struct fec_priv *priv = dev_get_priv(dev);
const char *phy_mode; const char *phy_mode;
@ -1331,12 +1350,24 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev)
return -EINVAL; return -EINVAL;
} }
/* TODO #ifdef CONFIG_DM_GPIO
* Need to get the reset-gpio and related properties from DT ret = gpio_request_by_name(dev, "phy-reset-gpios", 0,
* and implemet the enet reset code on .probe call &priv->phy_reset_gpio, GPIOD_IS_OUT);
*/ if (ret == 0) {
ret = dev_read_u32_array(dev, "phy-reset-duration",
&priv->reset_delay, 1);
} else if (ret == -ENOENT) {
priv->reset_delay = 1000;
ret = 0;
}
return 0; if (priv->reset_delay > 1000) {
printf("FEX MXC: gpio reset timeout should be less the 1000\n");
priv->reset_delay = 1000;
}
#endif
return ret;
} }
static const struct udevice_id fecmxc_ids[] = { static const struct udevice_id fecmxc_ids[] = {

View File

@ -250,7 +250,10 @@ struct fec_priv {
int phy_id; int phy_id;
int (*mii_postcall)(int); int (*mii_postcall)(int);
#endif #endif
#ifdef CONFIG_DM_GPIO
struct gpio_desc phy_reset_gpio;
uint32_t reset_delay;
#endif
#ifdef CONFIG_DM_ETH #ifdef CONFIG_DM_ETH
u32 interface; u32 interface;
#endif #endif

View File

@ -0,0 +1,188 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copyright 2018 Toradex AG
*
* Configuration settings for the Colibri iMX6ULL module.
*
* based on colibri_imx7.h
*/
#ifndef __COLIBRI_IMX6ULL_CONFIG_H
#define __COLIBRI_IMX6ULL_CONFIG_H
#include "mx6_common.h"
#define CONFIG_IOMUX_LPSR
/* #define CONFIG_DBG_MONITOR*/
#define PHYS_SDRAM_SIZE SZ_512M
/* Size of malloc() pool */
#define CONFIG_SYS_MALLOC_LEN (32 * SZ_1M)
/* Network */
#define CONFIG_MII
#define CONFIG_FEC_XCV_TYPE RMII
#define CONFIG_ETHPRIME "FEC"
#define CONFIG_FEC_MXC_PHYADDR 0
#define CONFIG_IP_DEFRAG
#define CONFIG_TFTP_BLOCKSIZE 16352
#define CONFIG_TFTP_TSIZE
/* ENET1 */
#define IMX_FEC_BASE ENET2_BASE_ADDR
/* MMC Config*/
#define CONFIG_SYS_FSL_ESDHC_ADDR 0
#define CONFIG_SYS_FSL_USDHC_NUM 1
#undef CONFIG_BOOTM_PLAN9
#undef CONFIG_BOOTM_RTEMS
/* I2C configs */
#define CONFIG_SYS_I2C_SPEED 100000
#define CONFIG_IPADDR 192.168.10.2
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_SERVERIP 192.168.10.1
#define FDT_FILE "imx6ull-colibri${variant}-${fdt_board}.dtb"
#define MEM_LAYOUT_ENV_SETTINGS \
"bootm_size=0x10000000\0" \
"fdt_addr_r=0x82000000\0" \
"fdt_high=0xffffffff\0" \
"initrd_high=0xffffffff\0" \
"kernel_addr_r=0x81000000\0" \
"pxefile_addr_r=0x87100000\0" \
"ramdisk_addr_r=0x82100000\0" \
"scriptaddr=0x87000000\0"
#define NFS_BOOTCMD \
"nfsargs=ip=:::::eth0: root=/dev/nfs\0" \
"nfsboot=run setup; " \
"setenv bootargs ${defargs} ${nfsargs} " \
"${setupargs} ${vidargs}; echo Booting from NFS...;" \
"dhcp ${kernel_addr_r} && " \
"tftp ${fdt_addr_r} " FDT_FILE " && " \
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0" \
#define SD_BOOTCMD \
"sdargs=root=/dev/mmcblk0p2 ro rootwait\0" \
"sdboot=run setup; setenv bootargs ${defargs} ${sdargs} " \
"${setupargs} ${vidargs}; echo Booting from MMC/SD card...; " \
"load mmc 0:1 ${kernel_addr_r} ${kernel_file} && " \
"load mmc 0:1 ${fdt_addr_r} " FDT_FILE " && " \
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0" \
#define UBI_BOOTCMD \
"ubiargs=ubi.mtd=ubi root=ubi0:rootfs rw rootfstype=ubifs " \
"ubi.fm_autoconvert=1\0" \
"ubiboot=run setup; " \
"setenv bootargs ${defargs} ${ubiargs} " \
"${setupargs} ${vidargs}; echo Booting from NAND...; " \
"ubi part ubi &&" \
"ubi read ${kernel_addr_r} kernel && " \
"ubi read ${fdt_addr_r} dtb && " \
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0" \
#define CONFIG_BOOTCOMMAND "run ubiboot; " \
"setenv fdtfile " FDT_FILE " && run distro_bootcmd;"
#define BOOT_TARGET_DEVICES(func) \
func(MMC, mmc, 0) \
func(USB, usb, 0) \
func(DHCP, dhcp, na)
#include <config_distro_bootcmd.h>
#define DFU_ALT_NAND_INFO "imx6ull-bcb part 0,1;u-boot1 part 0,2;u-boot2 part 0,3;u-boot-env part 0,4;ubi partubi 0,5"
#define CONFIG_EXTRA_ENV_SETTINGS \
BOOTENV \
MEM_LAYOUT_ENV_SETTINGS \
NFS_BOOTCMD \
SD_BOOTCMD \
UBI_BOOTCMD \
"console=ttymxc0\0" \
"defargs=user_debug=30\0" \
"dfu_alt_info=" DFU_ALT_NAND_INFO "\0" \
"fdt_board=eval-v3\0" \
"fdt_fixup=;\0" \
"ip_dyn=yes\0" \
"kernel_file=zImage\0" \
"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0" \
"setethupdate=if env exists ethaddr; then; else setenv ethaddr " \
"00:14:2d:00:00:00; fi; tftpboot ${loadaddr} " \
"${board}/flash_eth.img && source ${loadaddr}\0" \
"setsdupdate=mmc rescan && setenv interface mmc && " \
"fatload ${interface} 0:1 ${loadaddr} " \
"${board}/flash_blk.img && source ${loadaddr}\0" \
"setup=setenv setupargs " \
"console=tty1 console=${console}" \
",${baudrate}n8 ${memargs} consoleblank=0\0" \
"setupdate=run setsdupdate || run setusbupdate || run setethupdate\0" \
"setusbupdate=usb start && setenv interface usb && " \
"fatload ${interface} 0:1 ${loadaddr} " \
"${board}/flash_blk.img && source ${loadaddr}\0" \
"splashpos=m,m\0" \
"videomode=video=ctfb:x:640,y:480,depth:18,pclk:39722,le:48,ri:16,up:33,lo:10,hs:96,vs:2,sync:0,vmode:0\0" \
"vidargs=video=mxsfb:640x480-16@60"
#define CONFIG_SYS_MEMTEST_START 0x80000000
#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x08000000)
#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
/* Physical Memory Map */
#define CONFIG_NR_DRAM_BANKS 1
#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE
#define CONFIG_SYS_INIT_SP_OFFSET \
(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
#define CONFIG_SYS_INIT_SP_ADDR \
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
#if defined(CONFIG_ENV_IS_IN_NAND)
#define CONFIG_ENV_SECT_SIZE (128 * 1024)
#define CONFIG_ENV_OFFSET (28 * CONFIG_ENV_SECT_SIZE)
#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
#endif
/* NAND stuff */
#define CONFIG_SYS_MAX_NAND_DEVICE 1
/* used to initialize CONFIG_SYS_NAND_BASE_LIST which is unused */
#define CONFIG_SYS_NAND_BASE -1
#define CONFIG_SYS_NAND_ONFI_DETECTION
#define CONFIG_SYS_NAND_USE_FLASH_BBT
/* USB Configs */
#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
#define CONFIG_MXC_USB_FLAGS 0
#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
#define CONFIG_IMX_THERMAL
#define CONFIG_USBD_HS
/* USB Device Firmware Update support */
#define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_16M
#define DFU_DEFAULT_POLL_TIMEOUT 300
#ifdef CONFIG_VIDEO
#define CONFIG_VIDEO_MXS
#define MXS_LCDIF_BASE MX6UL_LCDIF1_BASE_ADDR
#define CONFIG_VIDEO_LOGO
#define CONFIG_SPLASH_SCREEN
#define CONFIG_SPLASH_SCREEN_ALIGN
#define CONFIG_BMP_16BPP
#define CONFIG_VIDEO_BMP_RLE8
#define CONFIG_VIDEO_BMP_LOGO
#endif
#endif

View File

@ -11,6 +11,10 @@
#define CONFIG_MXC_UART_BASE UART1_BASE #define CONFIG_MXC_UART_BASE UART1_BASE
#define CONSOLE_DEV "ttymxc0" #define CONSOLE_DEV "ttymxc0"
#ifdef CONFIG_SPL
#include "imx6_spl.h"
#endif
#include "mx6_common.h" #include "mx6_common.h"
/* Size of malloc() pool */ /* Size of malloc() pool */
@ -31,10 +35,8 @@
"script=boot.scr\0" \ "script=boot.scr\0" \
"image=zImage\0" \ "image=zImage\0" \
"bootm_size=0x10000000\0" \ "bootm_size=0x10000000\0" \
"fdt_addr_r=0x18000000\0" \ "fdt_addr_r=0x13000000\0" \
"fdt_addr=0x18000000\0" \ "ramdisk_addr_r=0x14000000\0" \
"ramdisk_addr_r=0x13000000\0" \
"ramdiskaddr=0x13000000\0" \
"kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \ "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
"ramdisk_file=rootfs.cpio.uboot\0" \ "ramdisk_file=rootfs.cpio.uboot\0" \
"boot_fdt=try\0" \ "boot_fdt=try\0" \
@ -56,25 +58,25 @@
" source\0" \ " source\0" \
"loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image};" \ "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image};" \
" setenv kernelsize ${filesize}\0" \ " setenv kernelsize ${filesize}\0" \
"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr_r} ${fdt_file}\0" \
"loadramdisk=fatload mmc ${mmcdev}:${mmcpart} ${ramdiskaddr}" \ "loadramdisk=fatload mmc ${mmcdev}:${mmcpart} ${ramdisk_addr_r}" \
" ${ramdisk_file}; setenv ramdisksize ${filesize}\0" \ " ${ramdisk_file}; setenv ramdisksize ${filesize}\0" \
"mmcboot=echo Booting from mmc...; run mmcargs; run loadimage;" \ "mmcboot=echo Booting from mmc...; run mmcargs; run loadimage;" \
" run loadfdt; bootz ${loadaddr} - ${fdt_addr}\0" \ " run loadfdt; bootz ${loadaddr} - ${fdt_addr_r}\0" \
"mmcramboot=run ramargs; run loadimage;" \ "mmcramboot=run ramargs; run loadimage;" \
" run loadfdt; run loadramdisk;" \ " run loadfdt; run loadramdisk;" \
" bootz ${loadaddr} ${ramdiskaddr} ${fdt_addr}\0" \ " bootz ${loadaddr} ${ramdisk_addr_r} ${fdt_addr_r}\0" \
"nandboot=echo Booting from nand ...; " \ "nandboot=echo Booting from nand ...; " \
" run nandargs;" \ " run nandargs;" \
" nand read ${loadaddr} kernel ${kernelsize};" \ " nand read ${loadaddr} kernel ${kernelsize};" \
" nand read ${fdt_addr} dtb;" \ " nand read ${fdt_addr} dtb;" \
" bootz ${loadaddr} - ${fdt_addr}\0" \ " bootz ${loadaddr} - ${fdt_addr}\0" \
"nandramboot=echo Booting RAMdisk from nand ...; " \ "nandramboot=echo Booting RAMdisk from nand ...; " \
" nand read ${ramdiskaddr} fs ${ramdisksize};" \ " nand read ${ramdisk_addr_r} fs ${ramdisksize};" \
" nand read ${loadaddr} kernel ${kernelsize};" \ " nand read ${loadaddr} kernel ${kernelsize};" \
" nand read ${fdt_addr} dtb;" \ " nand read ${fdt_addr_r} dtb;" \
" run ramargs;" \ " run ramargs;" \
" bootz ${loadaddr} ${ramdiskaddr} ${fdt_addr}\0" \ " bootz ${loadaddr} ${ramdisk_addr_r} ${fdt_addr_r}\0" \
"netargs=setenv bootargs console=${console},${baudrate} " \ "netargs=setenv bootargs console=${console},${baudrate} " \
"root=/dev/nfs" \ "root=/dev/nfs" \
" ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \ " ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
@ -132,7 +134,7 @@
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET) (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
/* Environment organization */ /* Environment organization */
#define CONFIG_ENV_SIZE (8 * 1024) #define CONFIG_ENV_SIZE (1024 * 1024)
#define CONFIG_ENV_OFFSET 0x400000 #define CONFIG_ENV_OFFSET 0x400000
#define CONFIG_ENV_SECT_SIZE CONFIG_ENV_SIZE #define CONFIG_ENV_SECT_SIZE CONFIG_ENV_SIZE
@ -143,7 +145,7 @@
#define CONFIG_SYS_NAND_ONFI_DETECTION #define CONFIG_SYS_NAND_ONFI_DETECTION
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x200000 #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x200000
#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x00500000
/* MTD device */ /* MTD device */
/* DMA stuff, needed for GPMI/MXS NAND support */ /* DMA stuff, needed for GPMI/MXS NAND support */
@ -151,4 +153,22 @@
/* EEPROM contains serial no, MAC addr and other Logic PD info */ /* EEPROM contains serial no, MAC addr and other Logic PD info */
#define CONFIG_I2C_EEPROM #define CONFIG_I2C_EEPROM
/* USB Configs */
#ifdef CONFIG_CMD_USB
#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
#define CONFIG_MXC_USB_FLAGS 0
#define CONFIG_USB_MAX_CONTROLLER_COUNT 1 /* Enabled USB controller number */
#endif
/* Falcon Mode */
#define CONFIG_SPL_FS_LOAD_ARGS_NAME "args"
#define CONFIG_SPL_FS_LOAD_KERNEL_NAME "uImage"
#define CONFIG_SYS_SPL_ARGS_ADDR 0x15000000
/* Falcon Mode - MMC support: args@1MB kernel@2MB */
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x800 /* 1MB */
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS (CONFIG_CMD_SPL_WRITE_SIZE / 512)
#define CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 0x1000 /* 2MB */
#endif /* __IMX6LOGIC_CONFIG_H */ #endif /* __IMX6LOGIC_CONFIG_H */

View File

@ -67,11 +67,12 @@
#define CONFIG_MXC_UART_BASE UART1_BASE #define CONFIG_MXC_UART_BASE UART1_BASE
#define CONSOLE_DEV "ttymxc0" #define CONSOLE_DEV "ttymxc0"
#define CONFIG_SYS_FSL_USDHC_NUM 1
#define CONFIG_SYS_MMC_ENV_DEV 0 /* SDHC2 */ #define CONFIG_SYS_MMC_ENV_DEV 0 /* SDHC2 */
#ifndef CONFIG_SPL_BUILD #ifndef CONFIG_SPL_BUILD
#define CONFIG_EXTRA_ENV_SETTINGS \ #define CONFIG_EXTRA_ENV_SETTINGS \
"som_rev=undefined\0" \
"has_emmc=undefined\0" \
"fdtfile=undefined\0" \ "fdtfile=undefined\0" \
"fdt_addr_r=0x18000000\0" \ "fdt_addr_r=0x18000000\0" \
"fdt_addr=0x18000000\0" \ "fdt_addr=0x18000000\0" \
@ -101,19 +102,21 @@
"fi; " \ "fi; " \
"fi\0" \ "fi\0" \
"findfdt="\ "findfdt="\
"if test $board_rev = MX6Q ; then " \ "if test ${board_rev} = MX6Q; then " \
"setenv fdtprefix imx6q; fi; " \ "setenv fdtprefix imx6q; fi; " \
"if test $board_rev = MX6DL ; then " \ "if test ${board_rev} = MX6DL; then " \
"setenv fdtprefix imx6dl; fi; " \ "setenv fdtprefix imx6dl; fi; " \
"if test $som_rev = V15 ; then " \ "if test ${som_rev} = V15; then " \
"setenv fdtsuffix -som-v15; fi; " \ "setenv fdtsuffix -som-v15; fi; " \
"if test $board_name = HUMMINGBOARD2 ; then " \ "if test ${has_emmc} = yes; then " \
"setenv fdtfile ${fdtprefix}-hummingboard2${fdtsuffix}.dtb; fi; " \ "setenv emmcsuffix -emmc; fi; " \
"if test $board_name = HUMMINGBOARD ; then " \ "if test ${board_name} = HUMMINGBOARD2 ; then " \
"setenv fdtfile ${fdtprefix}-hummingboard${fdtsuffix}.dtb; fi; " \ "setenv fdtfile ${fdtprefix}-hummingboard2${emmcsuffix}${fdtsuffix}.dtb; fi; " \
"if test $board_name = CUBOXI ; then " \ "if test ${board_name} = HUMMINGBOARD ; then " \
"setenv fdtfile ${fdtprefix}-cubox-i${fdtsuffix}.dtb; fi; " \ "setenv fdtfile ${fdtprefix}-hummingboard${emmcsuffix}${fdtsuffix}.dtb; fi; " \
"if test $fdtfile = undefined; then " \ "if test ${board_name} = CUBOXI ; then " \
"setenv fdtfile ${fdtprefix}-cubox-i${emmcsuffix}${fdtsuffix}.dtb; fi; " \
"if test ${fdtfile} = undefined; then " \
"echo WARNING: Could not determine dtb to use; fi; \0" \ "echo WARNING: Could not determine dtb to use; fi; \0" \
BOOTENV BOOTENV
@ -143,6 +146,6 @@
/* Environment organization */ /* Environment organization */
#define CONFIG_ENV_SIZE (8 * 1024) #define CONFIG_ENV_SIZE (8 * 1024)
#define CONFIG_ENV_OFFSET (8 * 64 * 1024) #define CONFIG_ENV_OFFSET (SZ_1M - CONFIG_ENV_SIZE)
#endif /* __MX6CUBOXI_CONFIG_H */ #endif /* __MX6CUBOXI_CONFIG_H */

View File

@ -10,7 +10,19 @@
#include "mx7_common.h" #include "mx7_common.h"
#define PHYS_SDRAM_SIZE SZ_1G #include "imx7_spl.h"
#ifdef CONFIG_SPL_OS_BOOT
/* Falcon Mode */
#define CONFIG_SPL_FS_LOAD_ARGS_NAME "args"
#define CONFIG_SPL_FS_LOAD_KERNEL_NAME "uImage"
#define CONFIG_SYS_SPL_ARGS_ADDR 0x88000000
/* Falcon Mode - MMC support: args@1MB kernel@2MB */
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x800 /* 1MB */
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS (CONFIG_CMD_SPL_WRITE_SIZE / 512)
#define CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 0x1000 /* 2MB */
#endif
/* Size of malloc() pool */ /* Size of malloc() pool */
#define CONFIG_SYS_MALLOC_LEN (32 * SZ_1M) #define CONFIG_SYS_MALLOC_LEN (32 * SZ_1M)
@ -32,6 +44,18 @@
/* MMC Config */ /* MMC Config */
#define CONFIG_SYS_FSL_ESDHC_ADDR 0 #define CONFIG_SYS_FSL_ESDHC_ADDR 0
#define CONFIG_DFU_ENV_SETTINGS \
"dfu_alt_info=" \
"spl raw 0x2 0x400 mmcpart 1;" \
"u-boot raw 0x8a 0x400 mmcpart 1;" \
"/boot/zImage ext4 0 1;" \
"/boot/imx7d-pico-pi.dtb ext4 0 1;" \
"rootfs part 0 1\0" \
#define BOOTMENU_ENV \
"bootmenu_0=Boot using PICO-PI baseboard=" \
"setenv fdtfile imx7d-pico-pi.dtb\0" \
#define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */ #define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */
#define CONFIG_SYS_MMC_IMG_LOAD_PART 1 #define CONFIG_SYS_MMC_IMG_LOAD_PART 1
@ -41,48 +65,34 @@
"console=ttymxc4\0" \ "console=ttymxc4\0" \
"fdt_high=0xffffffff\0" \ "fdt_high=0xffffffff\0" \
"initrd_high=0xffffffff\0" \ "initrd_high=0xffffffff\0" \
"fdt_file=imx7d-pico-pi.dtb\0" \ "fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
BOOTMENU_ENV \
"fdt_addr=0x83000000\0" \ "fdt_addr=0x83000000\0" \
"ip_dyn=yes\0" \ "fdt_addr_r=0x83000000\0" \
"mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \ "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \ "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
"finduuid=part uuid mmc 0:2 uuid\0" \ "ramdisk_addr_r=0x83000000\0" \
"mmcargs=setenv bootargs console=${console},${baudrate} " \ "ramdiskaddr=0x83000000\0" \
"root=PARTUUID=${uuid} rootwait rw\0" \ "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \
"loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ CONFIG_DFU_ENV_SETTINGS \
"loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ "findfdt=" \
"mmcboot=echo Booting from mmc ...; " \ "if test $fdtfile = ask ; then " \
"run finduuid; " \ "bootmenu -1; fi;" \
"run mmcargs; " \ "if test $fdtfile != ask ; then " \
"if run loadfdt; then " \ "saveenv; fi;\0" \
"bootz ${loadaddr} - ${fdt_addr}; " \ "finduuid=part uuid mmc 0:1 uuid\0" \
"else " \ "partitions=" \
"echo WARN: Cannot load the DT; " \ "uuid_disk=${uuid_gpt_disk};" \
"fi;\0" \ "name=rootfs,size=0,uuid=${uuid_gpt_rootfs}\0" \
"netargs=setenv bootargs console=${console},${baudrate} " \ "fastboot_partition_alias_system=rootfs\0" \
"root=/dev/nfs " \ "setup_emmc=mmc dev 0; gpt write mmc 0 $partitions; reset;\0" \
"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \ BOOTENV
"netboot=echo Booting from net ...; " \
"run netargs; " \
"if test ${ip_dyn} = yes; then " \
"setenv get_cmd dhcp; " \
"else " \
"setenv get_cmd tftp; " \
"fi; " \
"${get_cmd} ${image}; " \
"if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
"bootz ${loadaddr} - ${fdt_addr}; " \
"else " \
"echo WARN: Cannot load the DT; " \
"fi;\0"
#define CONFIG_BOOTCOMMAND \ #define BOOT_TARGET_DEVICES(func) \
"if mmc rescan; then " \ func(MMC, mmc, 0) \
"if run loadimage; then " \ func(DHCP, dhcp, na)
"run mmcboot; " \
"else run netboot; " \ #include <config_distro_bootcmd.h>
"fi; " \
"else run netboot; fi"
#define CONFIG_SYS_MEMTEST_START 0x80000000 #define CONFIG_SYS_MEMTEST_START 0x80000000
#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x20000000) #define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x20000000)

View File

@ -752,6 +752,16 @@ int mmc_rpmb_write(struct mmc *mmc, void *addr, unsigned short blk,
int mmc_set_bkops_enable(struct mmc *mmc); int mmc_set_bkops_enable(struct mmc *mmc);
#endif #endif
/**
* Start device initialization and return immediately; it does not block on
* polling OCR (operation condition register) status. Useful for checking
* the presence of SD/eMMC when no card detect logic is available.
*
* @param mmc Pointer to a MMC device struct
* @return 0 on success, <0 on error.
*/
int mmc_get_op_cond(struct mmc *mmc);
/** /**
* Start device initialization and return immediately; it does not block on * Start device initialization and return immediately; it does not block on
* polling OCR (operation condition register) status. Then you should call * polling OCR (operation condition register) status. Then you should call
@ -759,7 +769,7 @@ int mmc_set_bkops_enable(struct mmc *mmc);
* initializatin. * initializatin.
* *
* @param mmc Pointer to a MMC device struct * @param mmc Pointer to a MMC device struct
* @return 0 on success, IN_PROGRESS on waiting for OCR status, <0 on error. * @return 0 on success, <0 on error.
*/ */
int mmc_start_init(struct mmc *mmc); int mmc_start_init(struct mmc *mmc);

View File

@ -506,8 +506,7 @@ static void print_hdr_v2(struct imx_header *imx_hdr)
genimg_print_size(hdr_v2->boot_data.size); genimg_print_size(hdr_v2->boot_data.size);
printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr); printf("Load Address: %08x\n", (uint32_t)fhdr_v2->boot_data_ptr);
printf("Entry Point: %08x\n", (uint32_t)fhdr_v2->entry); printf("Entry Point: %08x\n", (uint32_t)fhdr_v2->entry);
if (fhdr_v2->csf && (imximage_ivt_offset != UNDEFINED) && if (fhdr_v2->csf) {
(imximage_csf_size != UNDEFINED)) {
uint16_t dcdlen; uint16_t dcdlen;
int offs; int offs;
@ -515,10 +514,16 @@ static void print_hdr_v2(struct imx_header *imx_hdr)
offs = (char *)&hdr_v2->data.dcd_table offs = (char *)&hdr_v2->data.dcd_table
- (char *)hdr_v2; - (char *)hdr_v2;
/*
* The HAB block is the first part of the image, from
* start of IVT header (fhdr_v2->self) to the start of
* the CSF block (fhdr_v2->csf). So HAB size is
* calculated as:
* HAB_size = fhdr_v2->csf - fhdr_v2->self
*/
printf("HAB Blocks: 0x%08x 0x%08x 0x%08x\n", printf("HAB Blocks: 0x%08x 0x%08x 0x%08x\n",
(uint32_t)fhdr_v2->self, 0, (uint32_t)fhdr_v2->self, 0,
hdr_v2->boot_data.size - imximage_ivt_offset - (uint32_t)(fhdr_v2->csf - fhdr_v2->self));
imximage_csf_size);
printf("DCD Blocks: 0x00910000 0x%08x 0x%08x\n", printf("DCD Blocks: 0x00910000 0x%08x 0x%08x\n",
offs, be16_to_cpu(dcdlen)); offs, be16_to_cpu(dcdlen));
} }