mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-06-09 23:36:03 +09:00
ARM:imx:imx8mq-cm: Add support for Ronetix iMX8MQ-CM
Supported peripherals: Ethernet, eMMC, Serial. U-Boot SPL 2021.04-00911-g5fa1e2ffeb-dirty (Apr 23 2021 - 09:11:14 +0200) Normal Boot Trying to boot from MMC2 U-Boot 2021.04-00911-g5fa1e2ffeb-dirty (Apr 23 2021 - 09:11:14 +0200) CPU: Freescale i.MX8MQ rev2.1 at 1000 MHz Reset cause: POR Model: Ronetix iMX8M-CM SoM DRAM: 1 GiB WDT: Started with servicing (60s timeout) MMC: FSL_SDHC: 0, FSL_SDHC: 1 Loading Environment from MMC... OK In: serial Out: serial Err: serial Net: Warning: ethernet@30be0000 (eth0) using random MAC address - 42:0d:e7:78:da:53 eth0: ethernet@30be0000 Hit any key to stop autoboot: 0 u-boot=> Signed-off-by: Ilko Iliev <iliev@ronetix.at>
This commit is contained in:
parent
fdd2f359e4
commit
7666cccf4f
|
@ -845,6 +845,7 @@ dtb-$(CONFIG_ARCH_IMX8M) += \
|
||||||
imx8mm-verdin.dtb \
|
imx8mm-verdin.dtb \
|
||||||
phycore-imx8mm.dtb \
|
phycore-imx8mm.dtb \
|
||||||
imx8mn-ddr4-evk.dtb \
|
imx8mn-ddr4-evk.dtb \
|
||||||
|
imx8mq-cm.dtb \
|
||||||
imx8mn-evk.dtb \
|
imx8mn-evk.dtb \
|
||||||
imx8mq-evk.dtb \
|
imx8mq-evk.dtb \
|
||||||
imx8mm-beacon-kit.dtb \
|
imx8mm-beacon-kit.dtb \
|
||||||
|
|
111
arch/arm/dts/imx8mq-cm-u-boot.dtsi
Normal file
111
arch/arm/dts/imx8mq-cm-u-boot.dtsi
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2019 NXP
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
binman: binman {
|
||||||
|
multiple-images;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&binman {
|
||||||
|
u-boot-spl-ddr {
|
||||||
|
filename = "u-boot-spl-ddr.bin";
|
||||||
|
pad-byte = <0xff>;
|
||||||
|
align-size = <4>;
|
||||||
|
align = <4>;
|
||||||
|
|
||||||
|
u-boot-spl {
|
||||||
|
align-end = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
blob_1: blob-ext@1 {
|
||||||
|
filename = "lpddr4_pmu_train_1d_imem.bin";
|
||||||
|
size = <0x8000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
blob_2: blob-ext@2 {
|
||||||
|
filename = "lpddr4_pmu_train_1d_dmem.bin";
|
||||||
|
size = <0x4000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
blob_3: blob-ext@3 {
|
||||||
|
filename = "lpddr4_pmu_train_2d_imem.bin";
|
||||||
|
size = <0x8000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
blob_4: blob-ext@4 {
|
||||||
|
filename = "lpddr4_pmu_train_2d_dmem.bin";
|
||||||
|
size = <0x4000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
flash {
|
||||||
|
mkimage {
|
||||||
|
args = "-n spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000";
|
||||||
|
|
||||||
|
blob {
|
||||||
|
filename = "u-boot-spl-ddr.bin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
itb {
|
||||||
|
filename = "u-boot.itb";
|
||||||
|
|
||||||
|
fit {
|
||||||
|
description = "Configuration to load ATF before U-Boot";
|
||||||
|
#address-cells = <1>;
|
||||||
|
fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>;
|
||||||
|
|
||||||
|
images {
|
||||||
|
uboot {
|
||||||
|
description = "U-Boot (64-bit)";
|
||||||
|
type = "standalone";
|
||||||
|
arch = "arm64";
|
||||||
|
compression = "none";
|
||||||
|
load = <CONFIG_SYS_TEXT_BASE>;
|
||||||
|
|
||||||
|
uboot_blob: blob-ext {
|
||||||
|
filename = "u-boot-nodtb.bin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
atf {
|
||||||
|
description = "ARM Trusted Firmware";
|
||||||
|
type = "firmware";
|
||||||
|
arch = "arm64";
|
||||||
|
compression = "none";
|
||||||
|
load = <0x910000>;
|
||||||
|
entry = <0x910000>;
|
||||||
|
|
||||||
|
atf_blob: blob-ext {
|
||||||
|
filename = "bl31.bin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fdt {
|
||||||
|
description = "NAME";
|
||||||
|
type = "flat_dt";
|
||||||
|
compression = "none";
|
||||||
|
|
||||||
|
uboot_fdt_blob: blob-ext {
|
||||||
|
filename = "u-boot.dtb";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
default = "conf";
|
||||||
|
|
||||||
|
conf {
|
||||||
|
description = "NAME";
|
||||||
|
firmware = "uboot";
|
||||||
|
loadables = "atf";
|
||||||
|
fdt = "fdt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
535
arch/arm/dts/imx8mq-cm.dts
Normal file
535
arch/arm/dts/imx8mq-cm.dts
Normal file
|
@ -0,0 +1,535 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||||
|
/*
|
||||||
|
* Copyright 2017 NXP
|
||||||
|
* Copyright (C) 2021 Ronetix, Ilko Iliev <iliev@ronetix.at>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "imx8mq.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Ronetix iMX8M-CM SoM";
|
||||||
|
compatible = "ronetix,imx8mq-cm", "fsl,imx8mq";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
stdout-path = &uart1;
|
||||||
|
};
|
||||||
|
|
||||||
|
memory@40000000 {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0x00000000 0x40000000 0 0x40000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pcie0_refclk: pcie0-refclk {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <100000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pmic_osc: clock-pmic {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <32768>;
|
||||||
|
clock-output-names = "pmic_osc";
|
||||||
|
};
|
||||||
|
|
||||||
|
osc_32k: clock-osc-32k {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <32768>;
|
||||||
|
clock-output-names = "osc_32k";
|
||||||
|
};
|
||||||
|
|
||||||
|
reg_usdhc2_vmmc: regulator-vsd-3v3 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_reg_usdhc2>;
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "VSD_3V3";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
gpio = <&gpio2 19 GPIO_ACTIVE_HIGH>;
|
||||||
|
enable-active-high;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&A53_0 {
|
||||||
|
cpu-supply = <&buck2_reg>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&A53_1 {
|
||||||
|
cpu-supply = <&buck2_reg>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&A53_2 {
|
||||||
|
cpu-supply = <&buck2_reg>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&A53_3 {
|
||||||
|
cpu-supply = <&buck2_reg>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&ddrc {
|
||||||
|
operating-points-v2 = <&ddrc_opp_table>;
|
||||||
|
|
||||||
|
ddrc_opp_table: opp-table {
|
||||||
|
compatible = "operating-points-v2";
|
||||||
|
|
||||||
|
opp-25M {
|
||||||
|
opp-hz = /bits/ 64 <25000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
opp-100M {
|
||||||
|
opp-hz = /bits/ 64 <100000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On imx8mq B0 PLL can't be bypassed so low bus is 166M
|
||||||
|
*/
|
||||||
|
opp-166M {
|
||||||
|
opp-hz = /bits/ 64 <166935483>;
|
||||||
|
};
|
||||||
|
|
||||||
|
opp-800M {
|
||||||
|
opp-hz = /bits/ 64 <800000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&dphy {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&fec1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_fec1>;
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
phy-handle = <ðphy0>;
|
||||||
|
fsl,magic-packet;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ethphy0: ethernet-phy@0 {
|
||||||
|
compatible = "ethernet-phy-ieee802.3-c22";
|
||||||
|
reg = <0>;
|
||||||
|
reset-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_i2c1>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c2 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_i2c2>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pmic@4b {
|
||||||
|
compatible = "rohm,bd71837";
|
||||||
|
reg = <0x4b>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_pmic>;
|
||||||
|
interrupt-parent = <&gpio1>;
|
||||||
|
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
rohm,reset-snvs-powered;
|
||||||
|
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clocks = <&osc_32k 0>;
|
||||||
|
clock-output-names = "clk-32k-out";
|
||||||
|
|
||||||
|
regulators {
|
||||||
|
buck1_reg: BUCK1 {
|
||||||
|
regulator-name = "buck1";
|
||||||
|
regulator-min-microvolt = <700000>;
|
||||||
|
regulator-max-microvolt = <1300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-ramp-delay = <1250>;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck2_reg: BUCK2 {
|
||||||
|
regulator-name = "buck2";
|
||||||
|
regulator-min-microvolt = <700000>;
|
||||||
|
regulator-max-microvolt = <1300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-ramp-delay = <1250>;
|
||||||
|
rohm,dvs-run-voltage = <1000000>;
|
||||||
|
rohm,dvs-idle-voltage = <900000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck3_reg: BUCK3 {
|
||||||
|
// BUCK5 in datasheet
|
||||||
|
regulator-name = "buck3";
|
||||||
|
regulator-min-microvolt = <700000>;
|
||||||
|
regulator-max-microvolt = <1350000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck4_reg: BUCK4 {
|
||||||
|
// BUCK6 in datasheet
|
||||||
|
regulator-name = "buck4";
|
||||||
|
regulator-min-microvolt = <3000000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck5_reg: BUCK5 {
|
||||||
|
// BUCK7 in datasheet
|
||||||
|
regulator-name = "buck5";
|
||||||
|
regulator-min-microvolt = <1605000>;
|
||||||
|
regulator-max-microvolt = <1995000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck6_reg: BUCK6 {
|
||||||
|
// BUCK8 in datasheet
|
||||||
|
regulator-name = "buck6";
|
||||||
|
regulator-min-microvolt = <800000>;
|
||||||
|
regulator-max-microvolt = <1400000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck7_reg: BUCK7 {
|
||||||
|
regulator-name = "buck7";
|
||||||
|
regulator-min-microvolt = <1605000>;
|
||||||
|
regulator-max-microvolt = <1995000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck8_reg: BUCK8 {
|
||||||
|
regulator-name = "buck8";
|
||||||
|
regulator-min-microvolt = <800000>;
|
||||||
|
regulator-max-microvolt = <1400000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo1_reg: LDO1 {
|
||||||
|
regulator-name = "ldo1";
|
||||||
|
regulator-min-microvolt = <1600000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo2_reg: LDO2 {
|
||||||
|
regulator-name = "ldo2";
|
||||||
|
regulator-min-microvolt = <800000>;
|
||||||
|
regulator-max-microvolt = <900000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo3_reg: LDO3 {
|
||||||
|
regulator-name = "ldo3";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo4_reg: LDO4 {
|
||||||
|
regulator-name = "ldo4";
|
||||||
|
regulator-min-microvolt = <900000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo6_reg: LDO6 {
|
||||||
|
regulator-name = "ldo6";
|
||||||
|
regulator-min-microvolt = <900000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c_eeprom: i2c_eeprom@50 {
|
||||||
|
compatible = "microchip,24lc512";
|
||||||
|
reg = <0x50>;
|
||||||
|
pagesize = <128>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&lcdif {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pcie0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_pcie0>;
|
||||||
|
reset-gpio = <&gpio5 28 GPIO_ACTIVE_LOW>;
|
||||||
|
clocks = <&clk IMX8MQ_CLK_PCIE1_ROOT>,
|
||||||
|
<&clk IMX8MQ_CLK_PCIE1_AUX>,
|
||||||
|
<&clk IMX8MQ_CLK_PCIE1_PHY>,
|
||||||
|
<&pcie0_refclk>;
|
||||||
|
clock-names = "pcie", "pcie_aux", "pcie_phy", "pcie_bus";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pgc_gpu {
|
||||||
|
power-supply = <&buck3_reg>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&qspi0 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_qspi>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
mx25l51245g: flash@0 {
|
||||||
|
reg = <0>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "jedec,spi-nor";
|
||||||
|
spi-max-frequency = <29000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&snvs_pwrkey {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_uart1>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3_phy1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb_dwc3_1 {
|
||||||
|
dr_mode = "host";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usdhc1 {
|
||||||
|
assigned-clocks = <&clk IMX8MQ_CLK_USDHC1>;
|
||||||
|
assigned-clock-rates = <400000000>;
|
||||||
|
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||||
|
pinctrl-0 = <&pinctrl_usdhc1>;
|
||||||
|
pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
|
||||||
|
pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
|
||||||
|
vqmmc-supply = <&buck7_reg>;
|
||||||
|
bus-width = <8>;
|
||||||
|
non-removable;
|
||||||
|
no-sd;
|
||||||
|
no-sdio;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usdhc2 {
|
||||||
|
assigned-clocks = <&clk IMX8MQ_CLK_USDHC2>;
|
||||||
|
assigned-clock-rates = <200000000>;
|
||||||
|
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||||
|
pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
|
||||||
|
pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
|
||||||
|
pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
|
||||||
|
cd-gpios = <&gpio2 12 GPIO_ACTIVE_HIGH>;
|
||||||
|
vmmc-supply = <®_usdhc2_vmmc>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&wdog1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_wdog>;
|
||||||
|
fsl,ext-reset-output;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&iomuxc {
|
||||||
|
pinctrl_buck2: vddarmgrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_GPIO1_IO13_GPIO1_IO13 0x19
|
||||||
|
>;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_fec1: fec1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_ENET_MDC_ENET1_MDC 0x3
|
||||||
|
MX8MQ_IOMUXC_ENET_MDIO_ENET1_MDIO 0x23
|
||||||
|
MX8MQ_IOMUXC_ENET_TD3_ENET1_RGMII_TD3 0x1f
|
||||||
|
MX8MQ_IOMUXC_ENET_TD2_ENET1_RGMII_TD2 0x1f
|
||||||
|
MX8MQ_IOMUXC_ENET_TD1_ENET1_RGMII_TD1 0x1f
|
||||||
|
MX8MQ_IOMUXC_ENET_TD0_ENET1_RGMII_TD0 0x1f
|
||||||
|
MX8MQ_IOMUXC_ENET_RD3_ENET1_RGMII_RD3 0x91
|
||||||
|
MX8MQ_IOMUXC_ENET_RD2_ENET1_RGMII_RD2 0x91
|
||||||
|
MX8MQ_IOMUXC_ENET_RD1_ENET1_RGMII_RD1 0x91
|
||||||
|
MX8MQ_IOMUXC_ENET_RD0_ENET1_RGMII_RD0 0x91
|
||||||
|
MX8MQ_IOMUXC_ENET_TXC_ENET1_RGMII_TXC 0x1f
|
||||||
|
MX8MQ_IOMUXC_ENET_RXC_ENET1_RGMII_RXC 0x91
|
||||||
|
MX8MQ_IOMUXC_ENET_RX_CTL_ENET1_RGMII_RX_CTL 0x91
|
||||||
|
MX8MQ_IOMUXC_ENET_TX_CTL_ENET1_RGMII_TX_CTL 0x1f
|
||||||
|
MX8MQ_IOMUXC_GPIO1_IO09_GPIO1_IO9 0x19
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_i2c1: i2c1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_I2C1_SCL_I2C1_SCL 0x4000007f
|
||||||
|
MX8MQ_IOMUXC_I2C1_SDA_I2C1_SDA 0x4000007f
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_i2c2: i2c2grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_I2C2_SCL_I2C2_SCL 0x40000067
|
||||||
|
MX8MQ_IOMUXC_I2C2_SDA_I2C2_SDA 0x40000067
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_pcie0: pcie0grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_I2C4_SCL_PCIE1_CLKREQ_B 0x76
|
||||||
|
MX8MQ_IOMUXC_UART4_RXD_GPIO5_IO28 0x16
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_pmic: pmicgrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_GPIO1_IO07_GPIO1_IO7 0x80 /* PMIC intr */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_qspi: qspigrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_NAND_ALE_QSPI_A_SCLK 0x82
|
||||||
|
MX8MQ_IOMUXC_NAND_CE0_B_QSPI_A_SS0_B 0x82
|
||||||
|
MX8MQ_IOMUXC_NAND_DATA00_QSPI_A_DATA0 0x82
|
||||||
|
MX8MQ_IOMUXC_NAND_DATA01_QSPI_A_DATA1 0x82
|
||||||
|
MX8MQ_IOMUXC_NAND_DATA02_QSPI_A_DATA2 0x82
|
||||||
|
MX8MQ_IOMUXC_NAND_DATA03_QSPI_A_DATA3 0x82
|
||||||
|
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_reg_usdhc2: regusdhc2gpiogrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_SD2_RESET_B_GPIO2_IO19 0x41
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_uart1: uart1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_UART1_RXD_UART1_DCE_RX 0x49
|
||||||
|
MX8MQ_IOMUXC_UART1_TXD_UART1_DCE_TX 0x49
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc1: usdhc1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x83
|
||||||
|
MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x83
|
||||||
|
MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc1_100mhz: usdhc1-100grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x8d
|
||||||
|
MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xcd
|
||||||
|
MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x8d
|
||||||
|
MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc1_200mhz: usdhc1-200grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_SD1_CLK_USDHC1_CLK 0x9f
|
||||||
|
MX8MQ_IOMUXC_SD1_CMD_USDHC1_CMD 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA0_USDHC1_DATA0 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA1_USDHC1_DATA1 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA2_USDHC1_DATA2 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA3_USDHC1_DATA3 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA4_USDHC1_DATA4 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA5_USDHC1_DATA5 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA6_USDHC1_DATA6 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_DATA7_USDHC1_DATA7 0xdf
|
||||||
|
MX8MQ_IOMUXC_SD1_STROBE_USDHC1_STROBE 0x9f
|
||||||
|
MX8MQ_IOMUXC_SD1_RESET_B_USDHC1_RESET_B 0xc1
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc2_gpio: usdhc2grpgpiogrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_SD2_CD_B_GPIO2_IO12 0x41
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc2: usdhc2grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x83
|
||||||
|
MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xc3
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xc3
|
||||||
|
MX8MQ_IOMUXC_GPIO1_IO04_USDHC2_VSELECT 0xc1
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc2_100mhz: usdhc2-100grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x85
|
||||||
|
MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xc5
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xc5
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xc5
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xc5
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xc5
|
||||||
|
MX8MQ_IOMUXC_GPIO1_IO04_USDHC2_VSELECT 0xc1
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc2_200mhz: usdhc2-200grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_SD2_CLK_USDHC2_CLK 0x87
|
||||||
|
MX8MQ_IOMUXC_SD2_CMD_USDHC2_CMD 0xc7
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA0_USDHC2_DATA0 0xc7
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA1_USDHC2_DATA1 0xc7
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA2_USDHC2_DATA2 0xc7
|
||||||
|
MX8MQ_IOMUXC_SD2_DATA3_USDHC2_DATA3 0xc7
|
||||||
|
MX8MQ_IOMUXC_GPIO1_IO04_USDHC2_VSELECT 0xc1
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_wdog: wdog1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX8MQ_IOMUXC_GPIO1_IO02_WDOG1_WDOG_B 0xc6
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -28,6 +28,12 @@ choice
|
||||||
prompt "NXP i.MX8M board select"
|
prompt "NXP i.MX8M board select"
|
||||||
optional
|
optional
|
||||||
|
|
||||||
|
config TARGET_IMX8MQ_CM
|
||||||
|
bool "Ronetix iMX8MQ-CM SoM"
|
||||||
|
select BINMAN
|
||||||
|
select IMX8MQ
|
||||||
|
select IMX8M_LPDDR4
|
||||||
|
|
||||||
config TARGET_IMX8MQ_EVK
|
config TARGET_IMX8MQ_EVK
|
||||||
bool "imx8mq_evk"
|
bool "imx8mq_evk"
|
||||||
select IMX8MQ
|
select IMX8MQ
|
||||||
|
@ -133,6 +139,9 @@ config TARGET_IMX8MM_CL_IOT_GATE
|
||||||
select IMX8M_LPDDR4
|
select IMX8M_LPDDR4
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
source "board/beacon/imx8mm/Kconfig"
|
||||||
|
source "board/beacon/imx8mn/Kconfig"
|
||||||
|
source "board/compulab/imx8mm-cl-iot-gate/Kconfig"
|
||||||
source "board/engicam/imx8mm/Kconfig"
|
source "board/engicam/imx8mm/Kconfig"
|
||||||
source "board/freescale/imx8mq_evk/Kconfig"
|
source "board/freescale/imx8mq_evk/Kconfig"
|
||||||
source "board/freescale/imx8mm_evk/Kconfig"
|
source "board/freescale/imx8mm_evk/Kconfig"
|
||||||
|
@ -140,12 +149,10 @@ source "board/freescale/imx8mn_evk/Kconfig"
|
||||||
source "board/freescale/imx8mp_evk/Kconfig"
|
source "board/freescale/imx8mp_evk/Kconfig"
|
||||||
source "board/gateworks/venice/Kconfig"
|
source "board/gateworks/venice/Kconfig"
|
||||||
source "board/google/imx8mq_phanbell/Kconfig"
|
source "board/google/imx8mq_phanbell/Kconfig"
|
||||||
source "board/technexion/pico-imx8mq/Kconfig"
|
|
||||||
source "board/toradex/verdin-imx8mm/Kconfig"
|
|
||||||
source "board/beacon/imx8mm/Kconfig"
|
|
||||||
source "board/beacon/imx8mn/Kconfig"
|
|
||||||
source "board/phytec/phycore_imx8mm/Kconfig"
|
source "board/phytec/phycore_imx8mm/Kconfig"
|
||||||
source "board/phytec/phycore_imx8mp/Kconfig"
|
source "board/phytec/phycore_imx8mp/Kconfig"
|
||||||
source "board/compulab/imx8mm-cl-iot-gate/Kconfig"
|
source "board/ronetix/imx8mq-cm/Kconfig"
|
||||||
|
source "board/technexion/pico-imx8mq/Kconfig"
|
||||||
|
source "board/toradex/verdin-imx8mm/Kconfig"
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
12
board/ronetix/imx8mq-cm/Kconfig
Normal file
12
board/ronetix/imx8mq-cm/Kconfig
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
if TARGET_IMX8MQ_CM
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "imx8mq-cm"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "ronetix"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "imx8mq_cm"
|
||||||
|
|
||||||
|
endif
|
6
board/ronetix/imx8mq-cm/MAINTAINERS
Normal file
6
board/ronetix/imx8mq-cm/MAINTAINERS
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
i.MX8MQ-CM BOARD
|
||||||
|
M: Ilko Iliev <iliev@ronetix.at>
|
||||||
|
S: Maintained
|
||||||
|
F: board/ronetix/imx8mq-cm/
|
||||||
|
F: include/configs/imx8mq_cm.h
|
||||||
|
F: configs/imx8mq_cm_defconfig
|
12
board/ronetix/imx8mq-cm/Makefile
Normal file
12
board/ronetix/imx8mq-cm/Makefile
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#
|
||||||
|
# Copyright 2017 NXP
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y += imx8mq_cm.o
|
||||||
|
|
||||||
|
ifdef CONFIG_SPL_BUILD
|
||||||
|
obj-y += spl.o
|
||||||
|
obj-$(CONFIG_IMX8M_LPDDR4) += lpddr4_timing.o
|
||||||
|
endif
|
42
board/ronetix/imx8mq-cm/README
Normal file
42
board/ronetix/imx8mq-cm/README
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
U-Boot for the Ronetix i.MX8MQ-CM board
|
||||||
|
|
||||||
|
Quick Start
|
||||||
|
===========
|
||||||
|
- Build the ARM Trusted firmware binary
|
||||||
|
- Get ddr firmware
|
||||||
|
- Build U-Boot
|
||||||
|
- Boot
|
||||||
|
|
||||||
|
Get and Build the ARM Trusted firmware
|
||||||
|
======================================
|
||||||
|
$ git clone https://source.codeaurora.org/external/imx/imx-atf
|
||||||
|
$ cd imx-atf
|
||||||
|
$ git checkout imx_4.19.35_1.0.0
|
||||||
|
$ make PLAT=imx8mq bl31
|
||||||
|
$ cd ..
|
||||||
|
$ cp imx-atf/build/imx8mq/release/bl31.bin .
|
||||||
|
|
||||||
|
Get the ddr firmware
|
||||||
|
====================
|
||||||
|
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.9.bin
|
||||||
|
$ chmod +x firmware-imx-8.9.bin
|
||||||
|
$ ./firmware-imx-8.9.bin
|
||||||
|
$ cp firmware-imx-8.9/firmware/ddr/synopsys/lpddr4*.bin .
|
||||||
|
|
||||||
|
Build U-Boot
|
||||||
|
============
|
||||||
|
$ /opt/cross/aarch64-ronetix-linux-9.2/bin/aarch64-ronetix-linux-gnu-
|
||||||
|
$ make imx8mq_cm_defconfig
|
||||||
|
$ make
|
||||||
|
|
||||||
|
Burn the flash.bin to MicroSD card offset 33KB
|
||||||
|
==============================================
|
||||||
|
$sudo dd if=flash.bin of=/dev/sd[x] bs=1024 seek=33 conv=sync
|
||||||
|
$sudo dd if=u-boot.itb of=/dev/sd[x] bs=1024 seek=384 conv=sync
|
||||||
|
|
||||||
|
Boot
|
||||||
|
====
|
||||||
|
Set Boot switch on base board iMX8M-MB to SD boot:
|
||||||
|
SW1[8:1]: OFF OFF OFF ON - OFF ON OFF OFF
|
||||||
|
SW4[2:1]: OFF OFF
|
||||||
|
J4: 1,2 - open; 3,4 - close; 5,6 - open
|
84
board/ronetix/imx8mq-cm/imx8mq_cm.c
Normal file
84
board/ronetix/imx8mq-cm/imx8mq_cm.c
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2018 NXP
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <miiphy.h>
|
||||||
|
#include <asm-generic/gpio.h>
|
||||||
|
#include <asm/arch/imx8mq_pins.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
#define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1)
|
||||||
|
|
||||||
|
#define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE)
|
||||||
|
|
||||||
|
static iomux_v3_cfg_t const wdog_pads[] = {
|
||||||
|
IMX8MQ_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
|
||||||
|
};
|
||||||
|
|
||||||
|
static iomux_v3_cfg_t const uart_pads[] = {
|
||||||
|
IMX8MQ_PAD_UART1_RXD__UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_UART1_TXD__UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||||
|
};
|
||||||
|
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
|
||||||
|
|
||||||
|
imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
|
||||||
|
set_wdog_reset(wdog);
|
||||||
|
|
||||||
|
imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int setup_fec(void)
|
||||||
|
{
|
||||||
|
struct iomuxc_gpr_base_regs *gpr =
|
||||||
|
(struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;
|
||||||
|
|
||||||
|
/* Use 125M anatop REF_CLK1 for ENET1, not from external */
|
||||||
|
clrsetbits_le32(&gpr->gpr[1], BIT(13) | BIT(17), 0);
|
||||||
|
return set_clk_enet(ENET_125MHZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_phy_config(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
/* enable rgmii rxc skew and phy mode select to RGMII copper */
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f);
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8);
|
||||||
|
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
|
||||||
|
phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100);
|
||||||
|
|
||||||
|
if (phydev->drv->config)
|
||||||
|
phydev->drv->config(phydev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_init(void)
|
||||||
|
{
|
||||||
|
setup_fec();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_mmc_get_env_dev(int devno)
|
||||||
|
{
|
||||||
|
return devno;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_late_init(void)
|
||||||
|
{
|
||||||
|
if (IS_ENABLED(CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG)) {
|
||||||
|
env_set("board_name", "imx8mq-cm");
|
||||||
|
env_set("board_rev", "v2.0");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
9
board/ronetix/imx8mq-cm/imximage-8mq-lpddr4.cfg
Normal file
9
board/ronetix/imx8mq-cm/imximage-8mq-lpddr4.cfg
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright 2021 NXP
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define __ASSEMBLY__
|
||||||
|
|
||||||
|
BOOT_FROM sd
|
||||||
|
LOADER mkimage.flash.mkimage 0x7E1000
|
1866
board/ronetix/imx8mq-cm/lpddr4_timing.c
Normal file
1866
board/ronetix/imx8mq-cm/lpddr4_timing.c
Normal file
File diff suppressed because it is too large
Load Diff
165
board/ronetix/imx8mq-cm/spl.c
Normal file
165
board/ronetix/imx8mq-cm/spl.c
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2018 NXP
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <hang.h>
|
||||||
|
#include <init.h>
|
||||||
|
#include <asm/arch/ddr.h>
|
||||||
|
#include <asm/arch/imx8mq_pins.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/mach-imx/gpio.h>
|
||||||
|
#include <asm/mach-imx/mxc_i2c.h>
|
||||||
|
#include <fsl_esdhc_imx.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <spl.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
static void spl_dram_init(void)
|
||||||
|
{
|
||||||
|
/* ddr init */
|
||||||
|
ddr_init(&dram_timing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define USDHC2_CD_GPIO IMX_GPIO_NR(2, 12)
|
||||||
|
#define USDHC1_PWR_GPIO IMX_GPIO_NR(2, 10)
|
||||||
|
#define USDHC2_PWR_GPIO IMX_GPIO_NR(2, 19)
|
||||||
|
|
||||||
|
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 = 1;
|
||||||
|
break;
|
||||||
|
case USDHC2_BASE_ADDR:
|
||||||
|
ret = gpio_get_value(USDHC2_CD_GPIO);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define USDHC_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE | \
|
||||||
|
PAD_CTL_FSEL2)
|
||||||
|
#define USDHC_GPIO_PAD_CTRL (PAD_CTL_PUE | PAD_CTL_DSE1)
|
||||||
|
|
||||||
|
static iomux_v3_cfg_t const usdhc1_pads[] = {
|
||||||
|
IMX8MQ_PAD_SD1_CLK__USDHC1_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_CMD__USDHC1_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_DATA0__USDHC1_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_DATA1__USDHC1_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_DATA2__USDHC1_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_DATA3__USDHC1_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_DATA4__USDHC1_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_DATA5__USDHC1_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_DATA6__USDHC1_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_DATA7__USDHC1_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD1_RESET_B__GPIO2_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL),
|
||||||
|
};
|
||||||
|
|
||||||
|
static iomux_v3_cfg_t const usdhc2_pads[] = {
|
||||||
|
IMX8MQ_PAD_SD2_CLK__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD2_CMD__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD2_DATA0__USDHC2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD2_DATA1__USDHC2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD2_DATA2__USDHC2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD2_DATA3__USDHC2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD2_CD_B__GPIO2_IO12 | MUX_PAD_CTRL(USDHC_GPIO_PAD_CTRL),
|
||||||
|
IMX8MQ_PAD_SD2_RESET_B__GPIO2_IO19 | MUX_PAD_CTRL(USDHC_GPIO_PAD_CTRL),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct fsl_esdhc_cfg usdhc_cfg[2] = {
|
||||||
|
{USDHC1_BASE_ADDR, 0, 8},
|
||||||
|
{USDHC2_BASE_ADDR, 0, 4},
|
||||||
|
};
|
||||||
|
|
||||||
|
int board_mmc_init(struct bd_info *bis)
|
||||||
|
{
|
||||||
|
int i, ret;
|
||||||
|
/*
|
||||||
|
* According to the board_mmc_init() the following map is done:
|
||||||
|
* (U-Boot device node) (Physical Port)
|
||||||
|
* mmc0 USDHC1
|
||||||
|
* mmc1 USDHC2
|
||||||
|
*/
|
||||||
|
for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) {
|
||||||
|
switch (i) {
|
||||||
|
case 0:
|
||||||
|
init_clk_usdhc(0);
|
||||||
|
usdhc_cfg[0].sdhc_clk = mxc_get_clock(USDHC1_CLK_ROOT);
|
||||||
|
imx_iomux_v3_setup_multiple_pads(usdhc1_pads,
|
||||||
|
ARRAY_SIZE(usdhc1_pads));
|
||||||
|
gpio_request(USDHC1_PWR_GPIO, "usdhc1_reset");
|
||||||
|
gpio_direction_output(USDHC1_PWR_GPIO, 0);
|
||||||
|
udelay(500);
|
||||||
|
gpio_direction_output(USDHC1_PWR_GPIO, 1);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
init_clk_usdhc(1);
|
||||||
|
usdhc_cfg[1].sdhc_clk = mxc_get_clock(USDHC2_CLK_ROOT);
|
||||||
|
imx_iomux_v3_setup_multiple_pads(usdhc2_pads,
|
||||||
|
ARRAY_SIZE(usdhc2_pads));
|
||||||
|
gpio_request(USDHC2_PWR_GPIO, "usdhc2_reset");
|
||||||
|
gpio_direction_output(USDHC2_PWR_GPIO, 0);
|
||||||
|
udelay(500);
|
||||||
|
gpio_direction_output(USDHC2_PWR_GPIO, 1);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
void spl_board_init(void)
|
||||||
|
{
|
||||||
|
puts("Normal Boot\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void board_init_f(ulong dummy)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Clear global data */
|
||||||
|
memset((void *)gd, 0, sizeof(gd_t));
|
||||||
|
|
||||||
|
arch_cpu_init();
|
||||||
|
|
||||||
|
init_uart_clk(0);
|
||||||
|
|
||||||
|
board_early_init_f();
|
||||||
|
|
||||||
|
timer_init();
|
||||||
|
|
||||||
|
preloader_console_init();
|
||||||
|
|
||||||
|
/* Clear the BSS. */
|
||||||
|
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||||
|
|
||||||
|
ret = spl_init();
|
||||||
|
if (ret) {
|
||||||
|
debug("spl_init() failed: %d\n", ret);
|
||||||
|
hang();
|
||||||
|
}
|
||||||
|
|
||||||
|
enable_tzc380();
|
||||||
|
|
||||||
|
/* DDR initialization */
|
||||||
|
spl_dram_init();
|
||||||
|
|
||||||
|
board_init_r(NULL, 0);
|
||||||
|
}
|
82
configs/imx8mq_cm_defconfig
Normal file
82
configs/imx8mq_cm_defconfig
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
CONFIG_ARM=y
|
||||||
|
CONFIG_ARCH_IMX8M=y
|
||||||
|
CONFIG_SYS_TEXT_BASE=0x40200000
|
||||||
|
CONFIG_SPL_GPIO_SUPPORT=y
|
||||||
|
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||||
|
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||||
|
CONFIG_ENV_SIZE=0x1000
|
||||||
|
CONFIG_ENV_OFFSET=0x400000
|
||||||
|
CONFIG_SYS_I2C_MXC_I2C1=y
|
||||||
|
CONFIG_SYS_I2C_MXC_I2C2=y
|
||||||
|
CONFIG_SYS_I2C_MXC_I2C3=y
|
||||||
|
CONFIG_DM_GPIO=y
|
||||||
|
CONFIG_SPL_TEXT_BASE=0x7E1000
|
||||||
|
CONFIG_TARGET_IMX8MQ_CM=y
|
||||||
|
CONFIG_SPL_MMC_SUPPORT=y
|
||||||
|
CONFIG_SPL_SERIAL_SUPPORT=y
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="imx8mq-cm"
|
||||||
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_SPL_FIT_PRINT=y
|
||||||
|
CONFIG_SPL_LOAD_FIT=y
|
||||||
|
# CONFIG_USE_SPL_FIT_GENERATOR is not set
|
||||||
|
CONFIG_OF_SYSTEM_SETUP=y
|
||||||
|
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/ronetix/imx8mq-cm/imximage-8mq-lpddr4.cfg"
|
||||||
|
CONFIG_BOARD_LATE_INIT=y
|
||||||
|
CONFIG_SPL_BOARD_INIT=y
|
||||||
|
CONFIG_SPL_SEPARATE_BSS=y
|
||||||
|
CONFIG_SPL_I2C_SUPPORT=y
|
||||||
|
CONFIG_SYS_PROMPT="u-boot=> "
|
||||||
|
CONFIG_CMD_FUSE=y
|
||||||
|
CONFIG_CMD_GPIO=y
|
||||||
|
CONFIG_CMD_I2C=y
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_CMD_REGULATOR=y
|
||||||
|
CONFIG_CMD_EXT4_WRITE=y
|
||||||
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
|
CONFIG_ENV_OVERWRITE=y
|
||||||
|
CONFIG_ENV_IS_IN_MMC=y
|
||||||
|
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||||
|
CONFIG_SYS_MMC_ENV_DEV=1
|
||||||
|
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
|
CONFIG_SAVED_DRAM_TIMING_BASE=0x40000000
|
||||||
|
CONFIG_MXC_GPIO=y
|
||||||
|
CONFIG_DM_I2C=y
|
||||||
|
CONFIG_SYS_I2C_MXC=y
|
||||||
|
CONFIG_DM_MMC=y
|
||||||
|
CONFIG_SUPPORT_EMMC_BOOT=y
|
||||||
|
CONFIG_MMC_IO_VOLTAGE=y
|
||||||
|
CONFIG_MMC_UHS_SUPPORT=y
|
||||||
|
CONFIG_MMC_HS400_ES_SUPPORT=y
|
||||||
|
CONFIG_MMC_HS400_SUPPORT=y
|
||||||
|
CONFIG_FSL_USDHC=y
|
||||||
|
CONFIG_MTD=y
|
||||||
|
CONFIG_DM_MTD=y
|
||||||
|
CONFIG_DM_SPI_FLASH=y
|
||||||
|
CONFIG_SPI_FLASH_MACRONIX=y
|
||||||
|
CONFIG_SPI_FLASH_SPANSION=y
|
||||||
|
CONFIG_SPI_FLASH_STMICRO=y
|
||||||
|
CONFIG_PHYLIB=y
|
||||||
|
CONFIG_PHY_ATHEROS=y
|
||||||
|
CONFIG_DM_ETH=y
|
||||||
|
CONFIG_PHY_GIGE=y
|
||||||
|
CONFIG_FEC_MXC=y
|
||||||
|
CONFIG_MII=y
|
||||||
|
CONFIG_PINCTRL=y
|
||||||
|
CONFIG_PINCTRL_IMX8M=y
|
||||||
|
CONFIG_DM_PMIC=y
|
||||||
|
CONFIG_DM_PMIC_BD71837=y
|
||||||
|
CONFIG_DM_REGULATOR=y
|
||||||
|
CONFIG_DM_REGULATOR_FIXED=y
|
||||||
|
CONFIG_DM_REGULATOR_GPIO=y
|
||||||
|
CONFIG_MXC_UART=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_DM_SPI=y
|
||||||
|
CONFIG_FSL_QSPI=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
|
CONFIG_IMX_WATCHDOG=y
|
||||||
|
CONFIG_WDT=y
|
104
include/configs/imx8mq_cm.h
Normal file
104
include/configs/imx8mq_cm.h
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright 2018 NXP
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __IMX8M_CM_H
|
||||||
|
#define __IMX8M_CM_H
|
||||||
|
|
||||||
|
#include <linux/sizes.h>
|
||||||
|
#include <linux/stringify.h>
|
||||||
|
#include <asm/arch/imx-regs.h>
|
||||||
|
|
||||||
|
#define CONFIG_SYS_BOOTM_LEN (32 * SZ_1M)
|
||||||
|
|
||||||
|
#define CONFIG_SPL_MAX_SIZE (124 * 1024)
|
||||||
|
#define CONFIG_SYS_MONITOR_LEN (512 * 1024)
|
||||||
|
#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
|
||||||
|
#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x300
|
||||||
|
|
||||||
|
#ifdef CONFIG_SPL_BUILD
|
||||||
|
#define CONFIG_SPL_STACK 0x187FF0
|
||||||
|
#define CONFIG_SPL_BSS_START_ADDR 0x00180000
|
||||||
|
#define CONFIG_SPL_BSS_MAX_SIZE 0x2000 /* 8 KB */
|
||||||
|
#define CONFIG_SYS_SPL_MALLOC_START 0x42200000
|
||||||
|
#define CONFIG_SYS_SPL_MALLOC_SIZE 0x80000 /* 512 KB */
|
||||||
|
#define CONFIG_SYS_SPL_PTE_RAM_BASE 0x41580000
|
||||||
|
|
||||||
|
/* malloc f used before GD_FLG_FULL_MALLOC_INIT set */
|
||||||
|
#define CONFIG_MALLOC_F_ADDR 0x182000
|
||||||
|
/* For RAW image gives a error info not panic */
|
||||||
|
#define CONFIG_SPL_ABORT_ON_RAW_IMAGE
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CONFIG_REMAKE_ELF
|
||||||
|
|
||||||
|
/* ENET Config */
|
||||||
|
/* ENET1 */
|
||||||
|
#if defined(CONFIG_CMD_NET)
|
||||||
|
#define CONFIG_ETHPRIME "FEC"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_SPL_BUILD
|
||||||
|
#define BOOT_TARGET_DEVICES(func) \
|
||||||
|
func(MMC, mmc, 0) \
|
||||||
|
func(MMC, mmc, 1) \
|
||||||
|
func(DHCP, dhcp, na)
|
||||||
|
|
||||||
|
#include <config_distro_bootcmd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Initial environment variables */
|
||||||
|
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||||
|
BOOTENV \
|
||||||
|
"scriptaddr=0x43500000\0" \
|
||||||
|
"kernel_addr_r=0x40880000\0" \
|
||||||
|
"image=Image\0" \
|
||||||
|
"console=ttymxc0,115200\0" \
|
||||||
|
"fdt_addr=0x43000000\0" \
|
||||||
|
"boot_fdt=try\0" \
|
||||||
|
"fdt_file=imx8mq-cm.dtb\0" \
|
||||||
|
"initrd_addr=0x43800000\0" \
|
||||||
|
"bootm_size=0x10000000\0" \
|
||||||
|
"mmcpart=" __stringify(CONFIG_SYS_MMC_IMG_LOAD_PART) "\0" \
|
||||||
|
"mmcroot=" CONFIG_MMCROOT " rootwait rw\0" \
|
||||||
|
|
||||||
|
/* Link Definitions */
|
||||||
|
#define CONFIG_LOADADDR 0x40480000
|
||||||
|
|
||||||
|
#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
|
||||||
|
|
||||||
|
#define CONFIG_SYS_INIT_RAM_ADDR 0x40000000
|
||||||
|
#define CONFIG_SYS_INIT_RAM_SIZE 0x80000
|
||||||
|
#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)
|
||||||
|
|
||||||
|
#define CONFIG_MMCROOT "/dev/mmcblk1p2" /* USDHC2 */
|
||||||
|
|
||||||
|
/* Size of malloc() pool */
|
||||||
|
#define CONFIG_SYS_MALLOC_LEN ((CONFIG_ENV_SIZE + (2 * 1024)) * 1024)
|
||||||
|
|
||||||
|
#define CONFIG_SYS_SDRAM_BASE 0x40000000
|
||||||
|
#define PHYS_SDRAM 0x40000000
|
||||||
|
#define PHYS_SDRAM_SIZE 0x40000000 /* 1 GB DDR */
|
||||||
|
|
||||||
|
#define CONFIG_MXC_UART_BASE UART1_BASE_ADDR
|
||||||
|
|
||||||
|
/* Monitor Command Prompt */
|
||||||
|
#define CONFIG_SYS_CBSIZE 1024
|
||||||
|
#define CONFIG_SYS_MAXARGS 64
|
||||||
|
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
|
||||||
|
#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
|
||||||
|
sizeof(CONFIG_SYS_PROMPT) + 16)
|
||||||
|
|
||||||
|
#define CONFIG_IMX_BOOTAUX
|
||||||
|
|
||||||
|
#define CONFIG_SYS_FSL_USDHC_NUM 2
|
||||||
|
#define CONFIG_SYS_FSL_ESDHC_ADDR 0
|
||||||
|
|
||||||
|
#define CONFIG_SYS_MMC_IMG_LOAD_PART 1
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user