imx: Add support for Ronetix's iMX7-CM board
authorIlko Iliev <iliev@ronetix.at>
Fri, 16 Apr 2021 13:48:13 +0000 (15:48 +0200)
committerStefano Babic <sbabic@denx.de>
Sun, 2 May 2021 10:46:54 +0000 (12:46 +0200)
Console boot log:

U-Boot SPL 2021.04-00836-ga6232e065d-dirty (Apr 16 2021 - 15:16:35 +0200)
Trying to boot from MMC1

U-Boot 2021.04-00836-ga6232e065d-dirty (Apr 16 2021 - 15:16:35 +0200)

CPU:   Freescale i.MX7D rev1.3 1000 MHz (running at 792 MHz)
CPU:   Commercial temperature grade (0C to 95C) at 44C
Reset cause: POR
Model: Ronetix iMX7-CM Board
Board: iMX7-CM
DRAM:  512 MiB
PMIC:  PFUZE3000 DEV_ID=0x30 REV_ID=0x11
MMC:   FSL_SDHC: 0, FSL_SDHC: 2
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Net:
Warning: ethernet@30be0000 (eth0) using random MAC address - fe:be:37:01:5a:3f
eth0: ethernet@30be0000
Hit any key to stop autoboot:  0

Signed-off-by: Ilko Iliev <iliev@ronetix.at>
12 files changed:
arch/arm/dts/Makefile
arch/arm/dts/imx7-cm-u-boot.dtsi [new file with mode: 0644]
arch/arm/dts/imx7-cm.dts [new file with mode: 0644]
arch/arm/mach-imx/mx7/Kconfig
board/ronetix/imx7-cm/Kconfig [new file with mode: 0644]
board/ronetix/imx7-cm/MAINTAINERS [new file with mode: 0644]
board/ronetix/imx7-cm/Makefile [new file with mode: 0644]
board/ronetix/imx7-cm/README [new file with mode: 0644]
board/ronetix/imx7-cm/imx7-cm.c [new file with mode: 0644]
board/ronetix/imx7-cm/spl.c [new file with mode: 0644]
configs/imx7_cm_defconfig [new file with mode: 0644]
include/configs/imx7-cm.h [new file with mode: 0644]

index a8d42d7..88c7c89 100644 (file)
@@ -811,6 +811,7 @@ dtb-$(CONFIG_ARCH_MX6) += \
 
 dtb-$(CONFIG_MX7) += imx7d-sdb.dtb \
        imx7d-sdb-qspi.dtb \
+       imx7-cm.dtb \
        imx7-colibri-emmc.dtb \
        imx7-colibri-rawnand.dtb \
        imx7s-warp.dtb \
diff --git a/arch/arm/dts/imx7-cm-u-boot.dtsi b/arch/arm/dts/imx7-cm-u-boot.dtsi
new file mode 100644 (file)
index 0000000..c6970c5
--- /dev/null
@@ -0,0 +1,17 @@
+/{
+    aliases {
+        mmc0 = &usdhc1;
+    };
+};
+
+&usdhc1 {
+       u-boot,dm-spl;
+};
+
+&i2c1 {
+       u-boot,dm-spl;
+};
+
+&pinctrl_i2c1 {
+       u-boot,dm-spl;
+};
diff --git a/arch/arm/dts/imx7-cm.dts b/arch/arm/dts/imx7-cm.dts
new file mode 100644 (file)
index 0000000..da20a63
--- /dev/null
@@ -0,0 +1,432 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+//
+// Copyright 2021 Ronetix GmbH
+
+/dts-v1/;
+
+#include "imx7d.dtsi"
+
+/ {
+       model = "Ronetix iMX7-CM Board";
+       compatible = "ronetix,imx7-cm", "fsl,imx7d";
+
+       chosen {
+               stdout-path = &uart1;
+       };
+
+       /* DRAM size runtime extracted from the DDRC registers */
+       memory@80000000 {
+               device_type = "memory";
+               reg = <0x80000000 0>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_gpio_leds>;
+
+               led {
+                       label = "gpio-led";
+                       gpios = <&gpio2 7 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       reg_sd1_vmmc: regulator-sd1-vmmc {
+               compatible = "regulator-fixed";
+               regulator-name = "VDD_SD1";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>;
+               startup-delay-us = <200000>;
+               off-on-delay-us = <20000>;
+               enable-active-high;
+       };
+
+       reg_usb_otg1_vbus: regulator-usb-otg1-vbus {
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_usbotg1_pwr>;
+               compatible = "regulator-fixed";
+               regulator-name = "usb_otg1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio1 5 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+
+       reg_usb_otg2_vbus: regulator-usb-otg2-vbus {
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_usbotg2_pwr>;
+               compatible = "regulator-fixed";
+               regulator-name = "usb_otg2_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+       };
+};
+
+&clks {
+       assigned-clocks = <&clks IMX7D_CLKO2_ROOT_SRC>,
+                         <&clks IMX7D_CLKO2_ROOT_DIV>;
+       assigned-clock-parents = <&clks IMX7D_CKIL>;
+       assigned-clock-rates = <0>, <32768>;
+};
+
+&fec1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_enet1>;
+       phy-mode = "rgmii-id";
+       phy-handle = <&ethphy0>;
+       fsl,magic-packet;
+       status = "okay";
+
+       mdio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ethphy0: ethernet-phy@1 {
+                       compatible = "ethernet-phy-ieee802.3-c22";
+                       reg = <1>;
+                       reset-gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
+                       reset-assert-us = <10000>;
+               };
+       };
+};
+
+&qspi1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_qspi1_1>;
+       status = "okay";
+       ddrsmp=<0>;
+
+       flash0: mx25l25645g@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               spi-max-frequency = <29000000>;
+               reg = <0>;
+       };
+};
+
+&i2c1 {
+       clock-frequency = <100000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+
+       pmic@8 {
+               compatible = "fsl,pfuze3000";
+               reg = <0x08>;
+
+               regulators {
+                       sw1a_reg: sw1a {
+                               regulator-min-microvolt = <700000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                               regulator-ramp-delay = <6250>;
+                       };
+                       /* use sw1c_reg to align with pfuze100/pfuze200 */
+                       sw1c_reg: sw1b {
+                               regulator-min-microvolt = <700000>;
+                               regulator-max-microvolt = <1475000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                               regulator-ramp-delay = <6250>;
+                       };
+
+                       sw2_reg: sw2 {
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1850000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       sw3a_reg: sw3 {
+                               regulator-min-microvolt = <900000>;
+                               regulator-max-microvolt = <1650000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       swbst_reg: swbst {
+                               regulator-min-microvolt = <5000000>;
+                               regulator-max-microvolt = <5150000>;
+                       };
+
+                       snvs_reg: vsnvs {
+                               regulator-min-microvolt = <1000000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       vref_reg: vrefddr {
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+
+                       vgen1_reg: vldo1 {
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                       };
+
+                       vgen2_reg: vldo2 {
+                               regulator-min-microvolt = <800000>;
+                               regulator-max-microvolt = <1550000>;
+                       };
+
+                       vgen3_reg: vccsd {
+                               regulator-min-microvolt = <2850000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                       };
+
+                       vgen4_reg: v33 {
+                               regulator-min-microvolt = <2850000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                       };
+
+                       vgen5_reg: vldo3 {
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                       };
+
+                       vgen6_reg: vldo4 {
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                       };
+               };
+       };
+};
+
+&i2c2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_i2c2>;
+       status = "okay";
+};
+
+&uart1 { /* console */
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_uart1>;
+       status = "okay";
+};
+
+&usbotg1 {
+       vbus-supply = <&reg_usb_otg1_vbus>;
+       status = "okay";
+};
+
+&usbotg2 {
+       vbus-supply = <&reg_usb_otg2_vbus>;
+       dr_mode = "host";
+       status = "okay";
+};
+
+/* SD card */
+&usdhc1 {
+       pinctrl-names = "default", "state_100mhz", "state_200mhz";
+       pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_usdhc1_gpio>;
+       pinctrl-1 = <&pinctrl_usdhc1_100mhz>, <&pinctrl_usdhc1_gpio>;
+       pinctrl-2 = <&pinctrl_usdhc1_200mhz>, <&pinctrl_usdhc1_gpio>;
+       cd-gpios = <&gpio5 0 GPIO_ACTIVE_HIGH>;
+       bus-width = <4>;
+       tuning-step = <2>;
+       vmmc-supply = <&reg_sd1_vmmc>;
+       wakeup-source;
+       no-1-8-v;
+       keep-power-in-suspend;
+       status = "okay";
+};
+
+/* eMMC */
+&usdhc3 {
+       pinctrl-names = "default", "state_100mhz", "state_200mhz";
+       pinctrl-0 = <&pinctrl_usdhc3>;
+       pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
+       pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
+       assigned-clocks = <&clks IMX7D_USDHC3_ROOT_CLK>;
+       assigned-clock-rates = <400000000>;
+       bus-width = <8>;
+       no-1-8-v;
+       fsl,tuning-step = <2>;
+       non-removable;
+       status = "okay";
+};
+
+&wdog1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_wdog>;
+       fsl,ext-reset-output;
+       status = "okay";
+};
+
+&iomuxc {
+       pinctrl_i2c1: i2c1grp {
+               fsl,pins = <
+                       MX7D_PAD_I2C1_SCL__I2C1_SCL     0x4000007f
+                       MX7D_PAD_I2C1_SDA__I2C1_SDA     0x4000007f
+               >;
+       };
+
+       pinctrl_i2c2: i2c2grp {
+               fsl,pins = <
+                       MX7D_PAD_I2C2_SCL__I2C2_SCL     0x4000007f
+                       MX7D_PAD_I2C2_SDA__I2C2_SDA     0x4000007f
+               >;
+       };
+
+       pinctrl_enet1: enet1grp {
+               fsl,pins = <
+                       MX7D_PAD_GPIO1_IO10__ENET1_MDIO                         0x3
+                       MX7D_PAD_GPIO1_IO11__ENET1_MDC                          0x3
+                       MX7D_PAD_ENET1_RGMII_TXC__ENET1_RGMII_TXC       0x1
+                       MX7D_PAD_ENET1_RGMII_TD0__ENET1_RGMII_TD0       0x1
+                       MX7D_PAD_ENET1_RGMII_TD1__ENET1_RGMII_TD1       0x1
+                       MX7D_PAD_ENET1_RGMII_TD2__ENET1_RGMII_TD2       0x1
+                       MX7D_PAD_ENET1_RGMII_TD3__ENET1_RGMII_TD3       0x1
+                       MX7D_PAD_ENET1_RGMII_TX_CTL__ENET1_RGMII_TX_CTL 0x1
+                       MX7D_PAD_ENET1_RGMII_RXC__ENET1_RGMII_RXC       0x1
+                       MX7D_PAD_ENET1_RGMII_RD0__ENET1_RGMII_RD0       0x1
+                       MX7D_PAD_ENET1_RGMII_RD1__ENET1_RGMII_RD1       0x1
+                       MX7D_PAD_ENET1_RGMII_RD2__ENET1_RGMII_RD2       0x1
+                       MX7D_PAD_ENET1_RGMII_RD3__ENET1_RGMII_RD3       0x1
+                       MX7D_PAD_ENET1_RGMII_RX_CTL__ENET1_RGMII_RX_CTL 0x1
+                       MX7D_PAD_EPDC_DATA04__GPIO2_IO4 0x14    /* ETH_RESET */
+               >;
+       };
+
+       pinctrl_gpio_leds: gpioledsgrp {
+               fsl,pins = <
+                       MX7D_PAD_EPDC_DATA07__GPIO2_IO7         0x14
+               >;
+       };
+
+       pinctrl_uart1: uart1grp {
+               fsl,pins = <
+                       MX7D_PAD_UART1_RX_DATA__UART1_DCE_RX    0x59
+                       MX7D_PAD_UART1_TX_DATA__UART1_DCE_TX    0x59
+               >;
+       };
+
+       pinctrl_usbotg1_pwr: usbotg_pwr {
+               fsl,pins = <
+                       MX7D_PAD_LPSR_GPIO1_IO05__GPIO1_IO5     0x14
+               >;
+       };
+
+       pinctrl_usbotg2_pwr: usbotg_pwr {
+               fsl,pins = <
+                       MX7D_PAD_LPSR_GPIO1_IO07__GPIO1_IO7     0x14
+               >;
+       };
+
+       pinctrl_usdhc1_gpio: usdhc1_gpiogrp {
+               fsl,pins = <
+                       MX7D_PAD_SD1_CD_B__GPIO5_IO0            0x15 /* CD */
+                       MX7D_PAD_SD1_RESET_B__GPIO5_IO2         0x59 /* Vmmc */
+                       MX7D_PAD_GPIO1_IO08__SD1_VSELECT        0x59 /* VSELECT */
+               >;
+       };
+
+       pinctrl_usdhc1: usdhc1grp {
+               fsl,pins = <
+                       MX7D_PAD_SD1_CMD__SD1_CMD                       0x59
+                       MX7D_PAD_SD1_CLK__SD1_CLK                       0x19
+                       MX7D_PAD_SD1_DATA0__SD1_DATA0           0x59
+                       MX7D_PAD_SD1_DATA1__SD1_DATA1           0x59
+                       MX7D_PAD_SD1_DATA2__SD1_DATA2           0x59
+                       MX7D_PAD_SD1_DATA3__SD1_DATA3           0x59
+               >;
+       };
+
+       pinctrl_usdhc1_100mhz: usdhc1grp_100mhz {
+               fsl,pins = <
+                       MX7D_PAD_SD1_CMD__SD1_CMD                       0x5a
+                       MX7D_PAD_SD1_CLK__SD1_CLK                       0x1a
+                       MX7D_PAD_SD1_DATA0__SD1_DATA0           0x5a
+                       MX7D_PAD_SD1_DATA1__SD1_DATA1           0x5a
+                       MX7D_PAD_SD1_DATA2__SD1_DATA2           0x5a
+                       MX7D_PAD_SD1_DATA3__SD1_DATA3           0x5a
+               >;
+       };
+
+       pinctrl_usdhc1_200mhz: usdhc1grp_200mhz {
+               fsl,pins = <
+                       MX7D_PAD_SD1_CMD__SD1_CMD                       0x5b
+                       MX7D_PAD_SD1_CLK__SD1_CLK                       0x1b
+                       MX7D_PAD_SD1_DATA0__SD1_DATA0           0x5b
+                       MX7D_PAD_SD1_DATA1__SD1_DATA1           0x5b
+                       MX7D_PAD_SD1_DATA2__SD1_DATA2           0x5b
+                       MX7D_PAD_SD1_DATA3__SD1_DATA3           0x5b
+               >;
+       };
+
+       pinctrl_usdhc3: usdhc3grp {
+               fsl,pins = <
+                       MX7D_PAD_SD3_CMD__SD3_CMD               0x59
+                       MX7D_PAD_SD3_CLK__SD3_CLK               0x19
+                       MX7D_PAD_SD3_DATA0__SD3_DATA0           0x59
+                       MX7D_PAD_SD3_DATA1__SD3_DATA1           0x59
+                       MX7D_PAD_SD3_DATA2__SD3_DATA2           0x59
+                       MX7D_PAD_SD3_DATA3__SD3_DATA3           0x59
+                       MX7D_PAD_SD3_DATA4__SD3_DATA4           0x59
+                       MX7D_PAD_SD3_DATA5__SD3_DATA5           0x59
+                       MX7D_PAD_SD3_DATA6__SD3_DATA6           0x59
+                       MX7D_PAD_SD3_DATA7__SD3_DATA7           0x59
+               >;
+       };
+
+       pinctrl_usdhc3_100mhz: usdhc3grp_100mhz {
+               fsl,pins = <
+                       MX7D_PAD_SD3_CMD__SD3_CMD               0x5a
+                       MX7D_PAD_SD3_CLK__SD3_CLK               0x1a
+                       MX7D_PAD_SD3_DATA0__SD3_DATA0           0x5a
+                       MX7D_PAD_SD3_DATA1__SD3_DATA1           0x5a
+                       MX7D_PAD_SD3_DATA2__SD3_DATA2           0x5a
+                       MX7D_PAD_SD3_DATA3__SD3_DATA3           0x5a
+                       MX7D_PAD_SD3_DATA4__SD3_DATA4           0x5a
+                       MX7D_PAD_SD3_DATA5__SD3_DATA5           0x5a
+                       MX7D_PAD_SD3_DATA6__SD3_DATA6           0x5a
+                       MX7D_PAD_SD3_DATA7__SD3_DATA7           0x5a
+               >;
+       };
+
+       pinctrl_usdhc3_200mhz: usdhc3grp_200mhz {
+               fsl,pins = <
+                       MX7D_PAD_SD3_CMD__SD3_CMD               0x5b
+                       MX7D_PAD_SD3_CLK__SD3_CLK               0x1b
+                       MX7D_PAD_SD3_DATA0__SD3_DATA0           0x5b
+                       MX7D_PAD_SD3_DATA1__SD3_DATA1           0x5b
+                       MX7D_PAD_SD3_DATA2__SD3_DATA2           0x5b
+                       MX7D_PAD_SD3_DATA3__SD3_DATA3           0x5b
+                       MX7D_PAD_SD3_DATA4__SD3_DATA4           0x5b
+                       MX7D_PAD_SD3_DATA5__SD3_DATA5           0x5b
+                       MX7D_PAD_SD3_DATA6__SD3_DATA6           0x5b
+                       MX7D_PAD_SD3_DATA7__SD3_DATA7           0x5b
+               >;
+       };
+
+       pinctrl_qspi1_1: qspi1grp_1 {
+                       fsl,pins = <
+                               MX7D_PAD_EPDC_DATA00__QSPI_A_DATA0      0x51
+                               MX7D_PAD_EPDC_DATA01__QSPI_A_DATA1      0x51
+                               MX7D_PAD_EPDC_DATA02__QSPI_A_DATA2      0x51
+                               MX7D_PAD_EPDC_DATA03__QSPI_A_DATA3      0x51
+                               MX7D_PAD_EPDC_DATA05__QSPI_A_SCLK       0x51
+                               MX7D_PAD_EPDC_DATA06__QSPI_A_SS0_B      0x51
+                       >;
+               };
+};
+
+&iomuxc_lpsr {
+       pinctrl_wdog: wdoggrp {
+               fsl,pins = <
+                       MX7D_PAD_LPSR_GPIO1_IO00__WDOG1_WDOG_B  0x74
+               >;
+       };
+};
index c8146c3..5c6fe42 100644 (file)
@@ -35,6 +35,15 @@ config TARGET_CL_SOM_IMX7
        select SUPPORT_SPL
        imply CMD_DM
 
+config TARGET_IMX7_CM
+       bool "Ronetix iMX7-CM"
+       select BOARD_LATE_INIT
+       select DM
+       select DM_THERMAL
+       select MX7D
+       select SUPPORT_SPL
+       imply CMD_DM
+
 config TARGET_MEERKAT96
        bool "NovTech Meerkat96 board"
        select BOARD_LATE_INIT
@@ -82,6 +91,7 @@ config SYS_SOC
        default "mx7"
 
 source "board/compulab/cl-som-imx7/Kconfig"
+source "board/ronetix/imx7-cm/Kconfig"
 source "board/freescale/mx7dsabresd/Kconfig"
 source "board/novtech/meerkat96/Kconfig"
 source "board/technexion/pico-imx7d/Kconfig"
diff --git a/board/ronetix/imx7-cm/Kconfig b/board/ronetix/imx7-cm/Kconfig
new file mode 100644 (file)
index 0000000..a4bc48f
--- /dev/null
@@ -0,0 +1,15 @@
+if TARGET_IMX7_CM
+
+config SYS_BOARD
+       default "imx7-cm"
+
+config SYS_VENDOR
+       default "ronetix"
+
+config SYS_SOC
+       default "mx7"
+
+config SYS_CONFIG_NAME
+       default "imx7-cm"
+
+endif
diff --git a/board/ronetix/imx7-cm/MAINTAINERS b/board/ronetix/imx7-cm/MAINTAINERS
new file mode 100644 (file)
index 0000000..184c887
--- /dev/null
@@ -0,0 +1,6 @@
+i.MX7-CM BOARD
+M:     Ilko Iliev <iliev@ronetix.com>
+S:     Maintained
+F:     board/ronetix/imx7_cm/
+F:     include/configs/imx7_cm.h
+F:     configs/imx7_cm_defconfig
\ No newline at end of file
diff --git a/board/ronetix/imx7-cm/Makefile b/board/ronetix/imx7-cm/Makefile
new file mode 100644 (file)
index 0000000..7e08f23
--- /dev/null
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0+
+# (C) Copyright 2017 NXP Semiconductors
+
+ifdef CONFIG_SPL_BUILD
+obj-y  += spl.o
+else
+obj-y  += imx7-cm.o
+endif
diff --git a/board/ronetix/imx7-cm/README b/board/ronetix/imx7-cm/README
new file mode 100644 (file)
index 0000000..43e8c4f
--- /dev/null
@@ -0,0 +1,11 @@
+U-Boot for the Ronetix i.MX7-CM board
+
+Build U-Boot
+============
+$ make imx7_cm_defconfig
+$ make
+
+Burn the images to a SD card
+============================
+$ sudo dd if=SPL of=/dev/sdX bs=1k seek=1; sync
+$ sudo dd if=u-boot-dtb.img  of=/dev/sdX bs=1k seek=69; sync
diff --git a/board/ronetix/imx7-cm/imx7-cm.c b/board/ronetix/imx7-cm/imx7-cm.c
new file mode 100644 (file)
index 0000000..c23097f
--- /dev/null
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2021 Ronetix GmbH
+ */
+
+#include <init.h>
+#include <net.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/crm_regs.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/mx7-pins.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/global_data.h>
+#include <asm/gpio.h>
+#include <asm/mach-imx/iomux-v3.h>
+#include <asm/mach-imx/mxc_i2c.h>
+#include <asm/io.h>
+#include <common.h>
+#include <i2c.h>
+#include <miiphy.h>
+#include <power/pmic.h>
+#include <power/pfuze3000_pmic.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int dram_init(void)
+{
+       gd->ram_size = imx_ddr_size();
+       return 0;
+}
+
+int power_init_board(void)
+{
+       struct udevice *dev;
+       int ret;
+       unsigned int reg, rev;
+
+       ret = pmic_get("pmic@8", &dev);
+       if (ret == -ENODEV) {
+               puts("No pmic\n");
+               return 0;
+       }
+       if (ret != 0)
+               return ret;
+
+       reg = pmic_reg_read(dev, PFUZE3000_DEVICEID);
+       rev = pmic_reg_read(dev, PFUZE3000_REVID);
+       printf("PMIC:  PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n", reg, rev);
+
+       /* disable Low Power Mode during standby mode */
+       reg = pmic_reg_read(dev, PFUZE3000_LDOGCTL);
+       reg |= 0x1;
+       pmic_reg_write(dev, PFUZE3000_LDOGCTL, reg);
+
+       /* SW1A/1B mode set to APS/APS */
+       reg = 0x8;
+       pmic_reg_write(dev, PFUZE3000_SW1AMODE, reg);
+       pmic_reg_write(dev, PFUZE3000_SW1BMODE, reg);
+
+       /* SW1A/1B standby voltage set to 1.025V */
+       reg = 0xd;
+       pmic_reg_write(dev, PFUZE3000_SW1ASTBY, reg);
+       pmic_reg_write(dev, PFUZE3000_SW1BSTBY, reg);
+
+       /* decrease SW1B normal voltage to 0.975V */
+       reg = pmic_reg_read(dev, PFUZE3000_SW1BVOLT);
+       reg &= ~0x1f;
+       reg |= PFUZE3000_SW1AB_SETP(975);
+       pmic_reg_write(dev, PFUZE3000_SW1BVOLT, reg);
+
+       return 0;
+}
+
+static int setup_fec(void)
+{
+       return set_clk_enet(ENET_125MHZ);
+}
+
+int board_init(void)
+{
+       /* address of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+       setup_fec();
+
+       return 0;
+}
+
+int board_late_init(void)
+{
+       return 0;
+}
+
+int checkboard(void)
+{
+       puts("Board: iMX7-CM\n");
+       return 0;
+}
diff --git a/board/ronetix/imx7-cm/spl.c b/board/ronetix/imx7-cm/spl.c
new file mode 100644 (file)
index 0000000..d36f734
--- /dev/null
@@ -0,0 +1,156 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2021 Ronetix GmbH
+ *
+ * Author: Ilko Iliev <iliev@ronetix.at>
+ */
+
+#include <common.h>
+#include <cpu_func.h>
+#include <init.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/crm_regs.h>
+#include <asm/arch/mx7-pins.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch-mx7/mx7-ddr.h>
+#include <asm/mach-imx/iomux-v3.h>
+#include <asm/gpio.h>
+#include <fsl_esdhc_imx.h>
+#include <spl.h>
+
+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 = 0x0a0a0a0a,
+       .offset_wr_con0 = 0x06060606,
+};
+
+static struct mx7_calibration calib_param = {
+       .num_val        = 5,
+       .values         = {
+               0x0E407304,
+               0x0E447304,
+               0x0E447306,
+               0x0E447304,
+               0x0E447304,
+       },
+};
+
+static void ddr_init(void)
+{
+       mx7_dram_cfg(&ddrc_regs_val, &ddrc_mp_val, &ddr_phy_regs_val, &calib_param);
+}
+
+#define UART_PAD_CTRL          (PAD_CTL_DSE_3P3V_49OHM | \
+                               PAD_CTL_PUS_PU100KOHM | PAD_CTL_HYS)
+
+static iomux_v3_cfg_t const uart1_pads[] = {
+       MX7D_PAD_UART1_TX_DATA__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
+       MX7D_PAD_UART1_RX_DATA__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
+};
+
+void uart1_pads_set(void)
+{
+       imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
+}
+
+void board_init_f(ulong dummy)
+{
+       arch_cpu_init();
+
+       uart1_pads_set();
+
+       timer_init();
+
+       preloader_console_init();
+
+       ddr_init();
+
+       memset(__bss_start, 0, __bss_end - __bss_start);
+
+       board_init_r(NULL, 0);
+}
+
+void reset_cpu(void)
+{
+}
+
+#define USDHC_PAD_CTRL         (PAD_CTL_DSE_3P3V_32OHM | PAD_CTL_SRE_SLOW | \
+                               PAD_CTL_HYS | PAD_CTL_PUE | \
+                               PAD_CTL_PUS_PU47KOHM)
+
+static iomux_v3_cfg_t const usdhc1_pads[] = {
+       MX7D_PAD_SD1_CLK__SD1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX7D_PAD_SD1_CMD__SD1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX7D_PAD_SD1_DATA0__SD1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX7D_PAD_SD1_DATA1__SD1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX7D_PAD_SD1_DATA2__SD1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+       MX7D_PAD_SD1_DATA3__SD1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+
+       MX7D_PAD_SD1_CD_B__GPIO5_IO0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
+};
+
+void usdhc1_pads_set(void)
+{
+       imx_iomux_v3_setup_multiple_pads(usdhc1_pads, ARRAY_SIZE(usdhc1_pads));
+}
+
+static struct fsl_esdhc_cfg usdhc_cfg = {
+       USDHC1_BASE_ADDR, 0, 4
+};
+
+int board_mmc_init(struct bd_info *bis)
+{
+       usdhc1_pads_set();
+       usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
+       return fsl_esdhc_initialize(bis, &usdhc_cfg);
+}
+
+int board_mmc_getcd(struct mmc *mmc)
+{
+       return 1;
+}
diff --git a/configs/imx7_cm_defconfig b/configs/imx7_cm_defconfig
new file mode 100644 (file)
index 0000000..c62b5e0
--- /dev/null
@@ -0,0 +1,110 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX7=y
+CONFIG_SPL_GPIO_SUPPORT=y
+CONFIG_SPL_LIBCOMMON_SUPPORT=y
+CONFIG_SPL_LIBGENERIC_SUPPORT=y
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_ENV_SIZE=0x2000
+CONFIG_ENV_OFFSET=0xC0000
+CONFIG_SYS_I2C_MXC_I2C1=y
+CONFIG_SYS_I2C_MXC_I2C2=y
+CONFIG_SYS_I2C_MXC_I2C3=y
+CONFIG_SYS_I2C_MXC_I2C4=y
+CONFIG_DM_GPIO=y
+CONFIG_TARGET_IMX7_CM=y
+CONFIG_SPL_MMC_SUPPORT=y
+CONFIG_SPL_SERIAL_SUPPORT=y
+CONFIG_SPL=y
+CONFIG_ARMV7_BOOT_SEC_DEFAULT=y
+CONFIG_IMX_RDC=y
+CONFIG_IMX_BOOTAUX=y
+CONFIG_DEFAULT_DEVICE_TREE="imx7-cm"
+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_BOARD_EARLY_INIT_F is not set
+CONFIG_SPL_I2C_SUPPORT=y
+CONFIG_SPL_USB_HOST_SUPPORT=y
+CONFIG_SPL_USB_GADGET=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_MEMTEST=y
+CONFIG_SYS_ALT_MEMTEST=y
+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_BMP=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_PMIC=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_OF_CONTROL=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_BOUNCE_BUFFER=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_DM_I2C=y
+CONFIG_SYS_I2C_MXC=y
+CONFIG_DM_MMC=y
+CONFIG_SUPPORT_EMMC_BOOT=y
+CONFIG_FSL_USDHC=y
+CONFIG_MTD=y
+CONFIG_DM_SPI_FLASH=y
+# CONFIG_SPI_FLASH_BAR is not set
+CONFIG_SPI_FLASH_EON=y
+CONFIG_SPI_FLASH_MACRONIX=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_PHYLIB=y
+CONFIG_PHY_MICREL=y
+CONFIG_PHY_MICREL_KSZ90X1=y
+CONFIG_DM_ETH=y
+CONFIG_DM_MDIO=y
+CONFIG_DM_MDIO_MUX=y
+CONFIG_DM_ETH_PHY=y
+CONFIG_FEC_MXC=y
+CONFIG_RGMII=y
+CONFIG_MII=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_IMX7=y
+CONFIG_DM_PMIC=y
+CONFIG_DM_PMIC_PFUZE100=y
+CONFIG_MXC_UART=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_FSL_QSPI=y
+# CONFIG_FSL_QSPI_AHB_FULL_MAP is not set
+CONFIG_IMX_THERMAL=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_MXC_USB_OTG_HACTIVE=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_DM_VIDEO=y
+CONFIG_SYS_WHITE_ON_BLACK=y
+CONFIG_SPLASH_SCREEN=y
+CONFIG_SPLASH_SCREEN_ALIGN=y
+CONFIG_VIDEO_BMP_RLE8=y
+CONFIG_BMP_16BPP=y
diff --git a/include/configs/imx7-cm.h b/include/configs/imx7-cm.h
new file mode 100644 (file)
index 0000000..4a3706d
--- /dev/null
@@ -0,0 +1,110 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2021 Ronetix GmbH
+ *
+ * Configuration settings for the Ronetix's iMX7-CM System-on-Module.
+ */
+
+#ifndef __IMX7_CM_CONFIG_H
+#define __IMX7_CM_CONFIG_H
+
+#include "mx7_common.h"
+
+#define CONFIG_MXC_UART_BASE            UART1_IPS_BASE_ADDR
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN          (32 * SZ_1M)
+
+#define CONFIG_ETHPRIME                 "FEC"
+
+#undef CONFIG_SYS_AUTOLOAD
+#undef CONFIG_EXTRA_ENV_SETTINGS
+#undef CONFIG_BOOTCOMMAND
+
+/*
+ * Use:
+ *             boot-mode=mix
+ *             boot-mode=sd
+ *             boot-mode=net
+ */
+#define MY_CONFIG_BOOT_MODE    "boot-mode=sd\0"
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       MY_CONFIG_BOOT_MODE \
+       "image=zImage\0" \
+       "console=ttymxc0\0" \
+       "fdt_file=imx7-cm.dtb\0" \
+       "fdt_addr=0x83000000\0" \
+       "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
+       "mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
+       "mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
+       "mmcargs=setenv bootargs console=${console},${baudrate} " \
+               "root=${mmcroot}\0" \
+               "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
+               "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
+       \
+       "bootsd=" \
+               "echo Booting from SD card ...; " \
+               "run mmcargs; " \
+               "mmc dev ${mmcdev};" \
+               "run loadimage; " \
+               "run loadfdt; " \
+               "bootz ${loadaddr} - ${fdt_addr}; " \
+               "\0" \
+       \
+       "bootmix=" \
+               "echo Boot Kernel and FDT from TFTP, RootFs from SD card ...; " \
+               "run mmcargs; " \
+               "mmc dev ${mmcdev};" \
+               "tftp ${fdt_addr} ${fdt_file}; " \
+               "tftp ${image}; " \
+               "bootz ${loadaddr} - ${fdt_addr}; " \
+               "\0" \
+       \
+       "netargs=setenv bootargs console=${console},${baudrate} " \
+               "root=/dev/nfs " \
+               "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp" \
+               "\0" \
+       "bootnet=" \
+               "echo Booting from net ...; " \
+               "run netargs; " \
+               "tftp ${image}; " \
+               "tftp ${fdt_addr} ${fdt_file}; " \
+               "bootz ${loadaddr} - ${fdt_addr}; " \
+               "\0"
+
+#define CONFIG_BOOTCOMMAND "run boot${boot-mode}"
+
+#define CONFIG_SYS_LOAD_ADDR           CONFIG_LOADADDR
+#define CONFIG_SYS_HZ                          1000
+
+/* Physical Memory Map */
+#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)
+
+/* MMC Config*/
+#define CONFIG_SYS_FSL_ESDHC_ADDR       USDHC1_BASE_ADDR
+#define CONFIG_SYS_FSL_USDHC_NUM               2
+
+#define CONFIG_SYS_MMC_ENV_DEV                 0   /* USDHC1 */
+#define CONFIG_SYS_MMC_ENV_PART                        0       /* user area */
+#define CONFIG_SYS_MMC_IMG_LOAD_PART   1
+#define CONFIG_MMCROOT                                 "/dev/mmcblk0p2"  /* USDHC1 */
+
+/* USB Configs */
+#define CONFIG_MXC_USB_PORTSC  (PORT_PTS_UTMI | PORT_PTS_PTW)
+
+#define CONFIG_USBD_HS
+
+/* SPL */
+#include "imx7_spl.h"
+
+#endif /* __CONFIG_H */