Merge tag 'u-boot-imx-master-20240108' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx
- Removed fdt_addr from verdin-imx8mm to fix booting via bootefi. - Support Ethernet PHY autodection on Data Modul i.MX8M Mini/Plus eDM SBC - Add i.MX93 binman support - Add support for imx93-var-som
This commit is contained in:
commit
c5e461fbf7
|
@ -1125,7 +1125,8 @@ dtb-$(CONFIG_ARCH_IMX8M) += \
|
||||||
imx8mq-librem5-r4.dtb
|
imx8mq-librem5-r4.dtb
|
||||||
|
|
||||||
dtb-$(CONFIG_ARCH_IMX9) += \
|
dtb-$(CONFIG_ARCH_IMX9) += \
|
||||||
imx93-11x11-evk.dtb
|
imx93-11x11-evk.dtb \
|
||||||
|
imx93-var-som-symphony.dtb
|
||||||
|
|
||||||
dtb-$(CONFIG_ARCH_IMXRT) += imxrt1050-evk.dtb \
|
dtb-$(CONFIG_ARCH_IMXRT) += imxrt1050-evk.dtb \
|
||||||
imxrt1020-evk.dtb \
|
imxrt1020-evk.dtb \
|
||||||
|
|
|
@ -51,12 +51,6 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&eqos {
|
|
||||||
/delete-property/ assigned-clocks;
|
|
||||||
/delete-property/ assigned-clock-parents;
|
|
||||||
/delete-property/ assigned-clock-rates;
|
|
||||||
};
|
|
||||||
|
|
||||||
&gpio1 {
|
&gpio1 {
|
||||||
bootph-pre-ram;
|
bootph-pre-ram;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
* Copyright 2022 NXP
|
* Copyright 2022 NXP
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "imx93-u-boot.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
wdt-reboot {
|
wdt-reboot {
|
||||||
compatible = "wdt-reboot";
|
compatible = "wdt-reboot";
|
||||||
|
|
88
arch/arm/dts/imx93-u-boot.dtsi
Normal file
88
arch/arm/dts/imx93-u-boot.dtsi
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
binman: binman {
|
||||||
|
multiple-images;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&binman {
|
||||||
|
u-boot-spl-ddr {
|
||||||
|
align = <4>;
|
||||||
|
align-size = <4>;
|
||||||
|
filename = "u-boot-spl-ddr.bin";
|
||||||
|
pad-byte = <0xff>;
|
||||||
|
|
||||||
|
u-boot-spl {
|
||||||
|
align-end = <4>;
|
||||||
|
filename = "u-boot-spl.bin";
|
||||||
|
};
|
||||||
|
|
||||||
|
ddr-1d-imem-fw {
|
||||||
|
filename = "lpddr4_imem_1d_v202201.bin";
|
||||||
|
align-end = <4>;
|
||||||
|
type = "blob-ext";
|
||||||
|
};
|
||||||
|
|
||||||
|
ddr-1d-dmem-fw {
|
||||||
|
filename = "lpddr4_dmem_1d_v202201.bin";
|
||||||
|
align-end = <4>;
|
||||||
|
type = "blob-ext";
|
||||||
|
};
|
||||||
|
|
||||||
|
ddr-2d-imem-fw {
|
||||||
|
filename = "lpddr4_imem_2d_v202201.bin";
|
||||||
|
align-end = <4>;
|
||||||
|
type = "blob-ext";
|
||||||
|
};
|
||||||
|
|
||||||
|
ddr-2d-dmem-fw {
|
||||||
|
filename = "lpddr4_dmem_2d_v202201.bin";
|
||||||
|
align-end = <4>;
|
||||||
|
type = "blob-ext";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spl {
|
||||||
|
filename = "spl.bin";
|
||||||
|
|
||||||
|
mkimage {
|
||||||
|
args = "-n spl/u-boot-spl.cfgout -T imx8image -e 0x2049A000";
|
||||||
|
|
||||||
|
blob {
|
||||||
|
filename = "u-boot-spl-ddr.bin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
u-boot-container {
|
||||||
|
filename = "u-boot-container.bin";
|
||||||
|
|
||||||
|
mkimage {
|
||||||
|
args = "-n u-boot-container.cfgout -T imx8image -e 0x0";
|
||||||
|
|
||||||
|
blob {
|
||||||
|
filename = "u-boot.bin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
imx-boot {
|
||||||
|
filename = "flash.bin";
|
||||||
|
pad-byte = <0x00>;
|
||||||
|
|
||||||
|
spl: blob-ext@1 {
|
||||||
|
filename = "spl.bin";
|
||||||
|
offset = <0x0>;
|
||||||
|
align-size = <0x400>;
|
||||||
|
align = <0x400>;
|
||||||
|
};
|
||||||
|
|
||||||
|
uboot: blob-ext@2 {
|
||||||
|
filename = "u-boot-container.bin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
266
arch/arm/dts/imx93-var-som-symphony-u-boot.dtsi
Normal file
266
arch/arm/dts/imx93-var-som-symphony-u-boot.dtsi
Normal file
|
@ -0,0 +1,266 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2022 NXP
|
||||||
|
* Copyright 2023 Variscite Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "imx93-u-boot.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
wdt-reboot {
|
||||||
|
compatible = "wdt-reboot";
|
||||||
|
wdt = <&wdog3>;
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
ethernet0 = &eqos;
|
||||||
|
ethernet1 = &fec;
|
||||||
|
};
|
||||||
|
|
||||||
|
firmware {
|
||||||
|
optee {
|
||||||
|
compatible = "linaro,optee-tz";
|
||||||
|
method = "smc";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&{/soc@0} {
|
||||||
|
bootph-all;
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&aips1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-all;
|
||||||
|
};
|
||||||
|
|
||||||
|
&aips2 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&aips3 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&iomuxc {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
®_usdhc2_vmmc {
|
||||||
|
u-boot,off-on-delay-us = <20000>;
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_reg_usdhc2_vmmc {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_uart1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_usdhc2 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio2 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio3 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio4 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpuart1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usdhc1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usdhc2 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
fsl,signal-voltage-switch-extra-delay-ms = <8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ðphy0 {
|
||||||
|
reset-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
|
||||||
|
reset-assert-us = <15000>;
|
||||||
|
reset-deassert-us = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ðphy1 {
|
||||||
|
reset-gpios = <&pca9534 5 GPIO_ACTIVE_LOW>;
|
||||||
|
reset-assert-us = <15000>;
|
||||||
|
reset-deassert-us = <100000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&s4muap {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&clk {
|
||||||
|
bootph-all;
|
||||||
|
bootph-pre-ram;
|
||||||
|
/delete-property/ assigned-clocks;
|
||||||
|
/delete-property/ assigned-clock-rates;
|
||||||
|
};
|
||||||
|
|
||||||
|
&osc_32k {
|
||||||
|
bootph-all;
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&osc_24m {
|
||||||
|
bootph-all;
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&clk_ext1 {
|
||||||
|
bootph-all;
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The two nodes below won't be needed once nxp,pca9451a
|
||||||
|
* support is added to the Linux kernel.
|
||||||
|
*/
|
||||||
|
&iomuxc {
|
||||||
|
pinctrl_lpi2c3: lpi2c3grp {
|
||||||
|
bootph-pre-ram;
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_GPIO_IO28__LPI2C3_SDA 0x40000b9e
|
||||||
|
MX93_PAD_GPIO_IO29__LPI2C3_SCL 0x40000b9e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpi2c3 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
clock-frequency = <400000>;
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
pinctrl-0 = <&pinctrl_lpi2c3>;
|
||||||
|
pinctrl-1 = <&pinctrl_lpi2c3>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pmic@25 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
bootph-some-ram;
|
||||||
|
compatible = "nxp,pca9451a";
|
||||||
|
reg = <0x25>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
|
||||||
|
regulators {
|
||||||
|
bootph-pre-ram;
|
||||||
|
buck1: BUCK1 {
|
||||||
|
regulator-name = "BUCK1";
|
||||||
|
regulator-min-microvolt = <600000>;
|
||||||
|
regulator-max-microvolt = <2187500>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-ramp-delay = <3125>;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck2: BUCK2 {
|
||||||
|
regulator-name = "BUCK2";
|
||||||
|
regulator-min-microvolt = <600000>;
|
||||||
|
regulator-max-microvolt = <2187500>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-ramp-delay = <3125>;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck4: BUCK4{
|
||||||
|
regulator-name = "BUCK4";
|
||||||
|
regulator-min-microvolt = <600000>;
|
||||||
|
regulator-max-microvolt = <3400000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck5: BUCK5{
|
||||||
|
regulator-name = "BUCK5";
|
||||||
|
regulator-min-microvolt = <600000>;
|
||||||
|
regulator-max-microvolt = <3400000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
buck6: BUCK6 {
|
||||||
|
regulator-name = "BUCK6";
|
||||||
|
regulator-min-microvolt = <600000>;
|
||||||
|
regulator-max-microvolt = <3400000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo1: LDO1 {
|
||||||
|
regulator-name = "LDO1";
|
||||||
|
regulator-min-microvolt = <1600000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo2: LDO2 {
|
||||||
|
regulator-name = "LDO2";
|
||||||
|
regulator-min-microvolt = <800000>;
|
||||||
|
regulator-max-microvolt = <1150000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo3: LDO3 {
|
||||||
|
regulator-name = "LDO3";
|
||||||
|
regulator-min-microvolt = <800000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo4: LDO4 {
|
||||||
|
regulator-name = "LDO4";
|
||||||
|
regulator-min-microvolt = <800000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
ldo5: LDO5 {
|
||||||
|
regulator-name = "LDO5";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
305
arch/arm/dts/imx93-var-som-symphony.dts
Normal file
305
arch/arm/dts/imx93-var-som-symphony.dts
Normal file
|
@ -0,0 +1,305 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||||
|
/*
|
||||||
|
* Copyright 2021 NXP
|
||||||
|
* Copyright 2023 Variscite Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "imx93-var-som.dtsi"
|
||||||
|
|
||||||
|
/{
|
||||||
|
model = "Variscite VAR-SOM-MX93 on Symphony evaluation board";
|
||||||
|
compatible = "variscite,var-som-mx93-symphony",
|
||||||
|
"variscite,var-som-mx93", "fsl,imx93";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
ethernet0 = &eqos;
|
||||||
|
ethernet1 = &fec;
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
stdout-path = &lpuart1;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Needed only for Symphony <= v1.5
|
||||||
|
*/
|
||||||
|
reg_fec_phy: regulator-fec-phy {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "fec-phy";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-enable-ramp-delay = <20000>;
|
||||||
|
gpio = <&pca9534 7 GPIO_ACTIVE_HIGH>;
|
||||||
|
enable-active-high;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
reg_usdhc2_vmmc: regulator-usdhc2 {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_reg_usdhc2_vmmc>;
|
||||||
|
regulator-name = "VSD_3V3";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
gpio = <&gpio2 18 GPIO_ACTIVE_HIGH>;
|
||||||
|
off-on-delay-us = <20000>;
|
||||||
|
enable-active-high;
|
||||||
|
};
|
||||||
|
|
||||||
|
reg_vref_1v8: regulator-adc-vref {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "vref_1v8";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
reserved-memory {
|
||||||
|
#address-cells = <2>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
ranges;
|
||||||
|
|
||||||
|
ethosu_mem: ethosu-region@88000000 {
|
||||||
|
compatible = "shared-dma-pool";
|
||||||
|
reusable;
|
||||||
|
reg = <0x0 0x88000000 0x0 0x8000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdev0vring0: vdev0vring0@87ee0000 {
|
||||||
|
reg = <0 0x87ee0000 0 0x8000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdev0vring1: vdev0vring1@87ee8000 {
|
||||||
|
reg = <0 0x87ee8000 0 0x8000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdev1vring0: vdev1vring0@87ef0000 {
|
||||||
|
reg = <0 0x87ef0000 0 0x8000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdev1vring1: vdev1vring1@87ef8000 {
|
||||||
|
reg = <0 0x87ef8000 0 0x8000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
rsc_table: rsc-table@2021f000 {
|
||||||
|
reg = <0 0x2021f000 0 0x1000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
vdevbuffer: vdevbuffer@87f00000 {
|
||||||
|
compatible = "shared-dma-pool";
|
||||||
|
reg = <0 0x87f00000 0 0x100000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
ele_reserved: ele-reserved@87de0000 {
|
||||||
|
compatible = "shared-dma-pool";
|
||||||
|
reg = <0 0x87de0000 0 0x100000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Use external instead of internal RTC*/
|
||||||
|
&bbnsm_rtc {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&eqos {
|
||||||
|
mdio {
|
||||||
|
ethphy1: ethernet-phy@5 {
|
||||||
|
compatible = "ethernet-phy-ieee802.3-c22";
|
||||||
|
reg = <5>;
|
||||||
|
qca,disable-smarteee;
|
||||||
|
eee-broken-1000t;
|
||||||
|
reset-gpios = <&pca9534 5 GPIO_ACTIVE_LOW>;
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
reset-deassert-us = <20000>;
|
||||||
|
vddio-supply = <&vddio1>;
|
||||||
|
|
||||||
|
vddio1: vddio-regulator {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&fec {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_fec>;
|
||||||
|
phy-mode = "rgmii";
|
||||||
|
phy-handle = <ðphy1>;
|
||||||
|
phy-supply = <®_fec_phy>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&flexcan1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_flexcan1>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&iomuxc {
|
||||||
|
pinctrl_fec: fecgrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_ENET2_RD0__ENET1_RGMII_RD0 0x57e
|
||||||
|
MX93_PAD_ENET2_RD1__ENET1_RGMII_RD1 0x57e
|
||||||
|
MX93_PAD_ENET2_RD2__ENET1_RGMII_RD2 0x57e
|
||||||
|
MX93_PAD_ENET2_RD3__ENET1_RGMII_RD3 0x57e
|
||||||
|
MX93_PAD_ENET2_RXC__ENET1_RGMII_RXC 0x5fe
|
||||||
|
MX93_PAD_ENET2_RX_CTL__ENET1_RGMII_RX_CTL 0x57e
|
||||||
|
MX93_PAD_ENET2_TD0__ENET1_RGMII_TD0 0x57e
|
||||||
|
MX93_PAD_ENET2_TD1__ENET1_RGMII_TD1 0x57e
|
||||||
|
MX93_PAD_ENET2_TD2__ENET1_RGMII_TD2 0x57e
|
||||||
|
MX93_PAD_ENET2_TD3__ENET1_RGMII_TD3 0x57e
|
||||||
|
MX93_PAD_ENET2_TXC__ENET1_RGMII_TXC 0x5fe
|
||||||
|
MX93_PAD_ENET2_TX_CTL__ENET1_RGMII_TX_CTL 0x57e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_flexcan1: flexcan1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_PDM_CLK__CAN1_TX 0x139e
|
||||||
|
MX93_PAD_PDM_BIT_STREAM0__CAN1_RX 0x139e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_lpi2c1: lpi2c1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_I2C1_SCL__LPI2C1_SCL 0x40000b9e
|
||||||
|
MX93_PAD_I2C1_SDA__LPI2C1_SDA 0x40000b9e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_lpi2c1_gpio: lpi2c1gpiogrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_I2C1_SCL__GPIO1_IO00 0x31e
|
||||||
|
MX93_PAD_I2C1_SDA__GPIO1_IO01 0x31e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_lpi2c5: lpi2c5grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_GPIO_IO23__LPI2C5_SCL 0x40000b9e
|
||||||
|
MX93_PAD_GPIO_IO22__LPI2C5_SDA 0x40000b9e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_lpi2c5_gpio: lpi2c5gpiogrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_GPIO_IO23__GPIO2_IO23 0x31e
|
||||||
|
MX93_PAD_GPIO_IO22__GPIO2_IO22 0x31e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_pca9534: pca9534grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_CCM_CLKO1__GPIO3_IO26 0x31e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_uart1: uart1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_UART1_RXD__LPUART1_RX 0x31e
|
||||||
|
MX93_PAD_UART1_TXD__LPUART1_TX 0x31e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_reg_usdhc2_vmmc: regusdhc2vmmcgrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_GPIO_IO18__GPIO2_IO18 0x31e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc2: usdhc2grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_SD2_CLK__USDHC2_CLK 0x15fe
|
||||||
|
MX93_PAD_SD2_CMD__USDHC2_CMD 0x13fe
|
||||||
|
MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x13fe
|
||||||
|
MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x13fe
|
||||||
|
MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x13fe
|
||||||
|
MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x13fe
|
||||||
|
MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc2_gpio: usdhc2gpiogrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_SD2_CD_B__GPIO3_IO00 0x31e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpi2c1 {
|
||||||
|
clock-frequency = <400000>;
|
||||||
|
pinctrl-names = "default", "sleep", "gpio";
|
||||||
|
pinctrl-0 = <&pinctrl_lpi2c1>;
|
||||||
|
pinctrl-1 = <&pinctrl_lpi2c1_gpio>;
|
||||||
|
pinctrl-2 = <&pinctrl_lpi2c1_gpio>;
|
||||||
|
scl-gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
|
||||||
|
sda-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
/* DS1337 RTC module */
|
||||||
|
rtc@68 {
|
||||||
|
compatible = "dallas,ds1337";
|
||||||
|
reg = <0x68>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpi2c5 {
|
||||||
|
clock-frequency = <400000>;
|
||||||
|
pinctrl-names = "default", "sleep", "gpio";
|
||||||
|
pinctrl-0 = <&pinctrl_lpi2c5>;
|
||||||
|
pinctrl-1 = <&pinctrl_lpi2c5_gpio>;
|
||||||
|
pinctrl-2 = <&pinctrl_lpi2c5_gpio>;
|
||||||
|
scl-gpios = <&gpio2 23 GPIO_ACTIVE_HIGH>;
|
||||||
|
sda-gpios = <&gpio2 22 GPIO_ACTIVE_HIGH>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pca9534: gpio@20 {
|
||||||
|
compatible = "nxp,pca9534";
|
||||||
|
reg = <0x20>;
|
||||||
|
gpio-controller;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_pca9534>;
|
||||||
|
interrupt-parent = <&gpio3>;
|
||||||
|
interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
wakeup-source;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Console */
|
||||||
|
&lpuart1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_uart1>;
|
||||||
|
clocks = <&clk IMX93_CLK_LPUART1_GATE>, <&clk IMX93_CLK_LPUART1_GATE>;
|
||||||
|
clock-names = "ipg", "per";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SD */
|
||||||
|
&usdhc2 {
|
||||||
|
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||||
|
pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
|
||||||
|
pinctrl-1 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
|
||||||
|
pinctrl-2 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
|
||||||
|
cd-gpios = <&gpio3 00 GPIO_ACTIVE_LOW>;
|
||||||
|
vmmc-supply = <®_usdhc2_vmmc>;
|
||||||
|
bus-width = <4>;
|
||||||
|
status = "okay";
|
||||||
|
no-sdio;
|
||||||
|
no-mmc;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Watchdog */
|
||||||
|
&wdog3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
111
arch/arm/dts/imx93-var-som.dtsi
Normal file
111
arch/arm/dts/imx93-var-som.dtsi
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||||
|
/*
|
||||||
|
* Copyright 2022 NXP
|
||||||
|
* Copyright 2023 Variscite Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "imx93.dtsi"
|
||||||
|
|
||||||
|
/{
|
||||||
|
model = "Variscite VAR-SOM-MX93 module";
|
||||||
|
compatible = "variscite,var-som-mx93", "fsl,imx93";
|
||||||
|
|
||||||
|
mmc_pwrseq: mmc-pwrseq {
|
||||||
|
compatible = "mmc-pwrseq-simple";
|
||||||
|
post-power-on-delay-ms = <100>;
|
||||||
|
power-off-delay-us = <10000>;
|
||||||
|
reset-gpios = <&gpio4 14 GPIO_ACTIVE_LOW>, /* WIFI_RESET */
|
||||||
|
<&gpio3 7 GPIO_ACTIVE_LOW>; /* WIFI_PWR_EN */
|
||||||
|
};
|
||||||
|
|
||||||
|
reg_eqos_phy: regulator-eqos-phy {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_reg_eqos_phy>;
|
||||||
|
regulator-name = "eth_phy_pwr";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
|
||||||
|
enable-active-high;
|
||||||
|
startup-delay-us = <100000>;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&eqos {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_eqos>;
|
||||||
|
phy-mode = "rgmii";
|
||||||
|
phy-handle = <ðphy0>;
|
||||||
|
phy-supply = <®_eqos_phy>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
compatible = "snps,dwmac-mdio";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
clock-frequency = <1000000>;
|
||||||
|
|
||||||
|
ethphy0: ethernet-phy@0 {
|
||||||
|
compatible = "ethernet-phy-ieee802.3-c22";
|
||||||
|
reg = <0>;
|
||||||
|
eee-broken-1000t;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&iomuxc {
|
||||||
|
pinctrl_eqos: eqosgrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_ENET1_MDC__ENET_QOS_MDC 0x57e
|
||||||
|
MX93_PAD_ENET1_MDIO__ENET_QOS_MDIO 0x57e
|
||||||
|
MX93_PAD_ENET1_RD0__ENET_QOS_RGMII_RD0 0x57e
|
||||||
|
MX93_PAD_ENET1_RD1__ENET_QOS_RGMII_RD1 0x57e
|
||||||
|
MX93_PAD_ENET1_RD2__ENET_QOS_RGMII_RD2 0x57e
|
||||||
|
MX93_PAD_ENET1_RD3__ENET_QOS_RGMII_RD3 0x57e
|
||||||
|
MX93_PAD_ENET1_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK 0x5fe
|
||||||
|
MX93_PAD_ENET1_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x57e
|
||||||
|
MX93_PAD_ENET1_TD0__ENET_QOS_RGMII_TD0 0x57e
|
||||||
|
MX93_PAD_ENET1_TD1__ENET_QOS_RGMII_TD1 0x57e
|
||||||
|
MX93_PAD_ENET1_TD2__ENET_QOS_RGMII_TD2 0x57e
|
||||||
|
MX93_PAD_ENET1_TD3__ENET_QOS_RGMII_TD3 0x57e
|
||||||
|
MX93_PAD_ENET1_TXC__CCM_ENET_QOS_CLOCK_GENERATE_TX_CLK 0x5fe
|
||||||
|
MX93_PAD_ENET1_TX_CTL__ENET_QOS_RGMII_TX_CTL 0x57e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_reg_eqos_phy: regeqosgrp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_UART2_TXD__GPIO1_IO07 0x51e
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl_usdhc1: usdhc1grp {
|
||||||
|
fsl,pins = <
|
||||||
|
MX93_PAD_SD1_CLK__USDHC1_CLK 0x15fe
|
||||||
|
MX93_PAD_SD1_CMD__USDHC1_CMD 0x13fe
|
||||||
|
MX93_PAD_SD1_DATA0__USDHC1_DATA0 0x13fe
|
||||||
|
MX93_PAD_SD1_DATA1__USDHC1_DATA1 0x13fe
|
||||||
|
MX93_PAD_SD1_DATA2__USDHC1_DATA2 0x13fe
|
||||||
|
MX93_PAD_SD1_DATA3__USDHC1_DATA3 0x13fe
|
||||||
|
MX93_PAD_SD1_DATA4__USDHC1_DATA4 0x13fe
|
||||||
|
MX93_PAD_SD1_DATA5__USDHC1_DATA5 0x13fe
|
||||||
|
MX93_PAD_SD1_DATA6__USDHC1_DATA6 0x13fe
|
||||||
|
MX93_PAD_SD1_DATA7__USDHC1_DATA7 0x13fe
|
||||||
|
MX93_PAD_SD1_STROBE__USDHC1_STROBE 0x15fe
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* eMMC */
|
||||||
|
&usdhc1 {
|
||||||
|
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||||
|
pinctrl-0 = <&pinctrl_usdhc1>;
|
||||||
|
pinctrl-1 = <&pinctrl_usdhc1>;
|
||||||
|
pinctrl-2 = <&pinctrl_usdhc1>;
|
||||||
|
bus-width = <8>;
|
||||||
|
non-removable;
|
||||||
|
status = "okay";
|
||||||
|
};
|
|
@ -222,6 +222,7 @@ u32 mxc_get_clock(enum mxc_clock clk);
|
||||||
void dram_pll_init(ulong pll_val);
|
void dram_pll_init(ulong pll_val);
|
||||||
void dram_enable_bypass(ulong clk_val);
|
void dram_enable_bypass(ulong clk_val);
|
||||||
void dram_disable_bypass(void);
|
void dram_disable_bypass(void);
|
||||||
|
void set_arm_core_max_clk(void);
|
||||||
|
|
||||||
int configure_intpll(enum ccm_clk_src pll, u32 freq);
|
int configure_intpll(enum ccm_clk_src pll, u32 freq);
|
||||||
|
|
||||||
|
|
|
@ -129,6 +129,9 @@ DEPFILE_EXISTS := $(shell $(CPP) $(cpp_flags) -x c -o u-boot-dtb.cfgout $(srctre
|
||||||
else ifeq ($(CONFIG_ARCH_IMX8M), y)
|
else ifeq ($(CONFIG_ARCH_IMX8M), y)
|
||||||
IMAGE_TYPE := imx8mimage
|
IMAGE_TYPE := imx8mimage
|
||||||
DEPFILE_EXISTS := 0
|
DEPFILE_EXISTS := 0
|
||||||
|
else ifeq ($(CONFIG_ARCH_IMX9), y)
|
||||||
|
IMAGE_TYPE := imx8image
|
||||||
|
DEPFILE_EXISTS := 0
|
||||||
else
|
else
|
||||||
IMAGE_TYPE := imximage
|
IMAGE_TYPE := imximage
|
||||||
DEPFILE_EXISTS := 0
|
DEPFILE_EXISTS := 0
|
||||||
|
@ -213,7 +216,29 @@ endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARCH_IMX9), y)
|
ifeq ($(CONFIG_ARCH_IMX9), y)
|
||||||
SPL:
|
|
||||||
|
quiet_cmd_imx9_check = CHECK $@
|
||||||
|
cmd_imx9_check = $(srctree)/tools/imx9_image.sh $@
|
||||||
|
|
||||||
|
SPL: spl/u-boot-spl.bin spl/u-boot-spl.cfgout u-boot-container.cfgout FORCE
|
||||||
|
|
||||||
|
MKIMAGEFLAGS_flash.bin = -n spl/u-boot-spl.cfgout -T $(IMAGE_TYPE) -e $(CONFIG_SPL_TEXT_BASE)
|
||||||
|
flash.bin: MKIMAGEOUTPUT = flash.log
|
||||||
|
|
||||||
|
spl/u-boot-spl.cfgout: $(IMX_CONFIG) FORCE
|
||||||
|
$(Q)mkdir -p $(dir $@)
|
||||||
|
$(call if_changed_dep,cpp_cfg)
|
||||||
|
$(call if_changed,imx9_check)
|
||||||
|
|
||||||
|
spl/u-boot-spl-ddr.bin: spl/u-boot-spl.bin spl/u-boot-spl.cfgout FORCE
|
||||||
|
|
||||||
|
u-boot-container.cfgout: $(IMX_CONTAINER_CFG) FORCE
|
||||||
|
$(Q)mkdir -p $(dir $@)
|
||||||
|
$(call if_changed_dep,cpp_cfg)
|
||||||
|
$(call if_changed,imx9_check)
|
||||||
|
|
||||||
|
flash.bin: spl/u-boot-spl-ddr.bin container.cfgout FORCE
|
||||||
|
$(call if_changed,mkimage)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
|
@ -29,11 +29,19 @@ choice
|
||||||
|
|
||||||
config TARGET_IMX93_11X11_EVK
|
config TARGET_IMX93_11X11_EVK
|
||||||
bool "imx93_11x11_evk"
|
bool "imx93_11x11_evk"
|
||||||
|
select BINMAN
|
||||||
select IMX93
|
select IMX93
|
||||||
|
|
||||||
|
config TARGET_IMX93_VAR_SOM
|
||||||
|
bool "imx93_var_som"
|
||||||
|
select BINMAN
|
||||||
|
select IMX93
|
||||||
|
select IMX9_LPDDR4X
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
source "board/freescale/imx93_evk/Kconfig"
|
source "board/freescale/imx93_evk/Kconfig"
|
||||||
|
source "board/variscite/imx93_var_som/Kconfig"
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
10
arch/arm/mach-imx/imx9/container.cfg
Normal file
10
arch/arm/mach-imx/imx9/container.cfg
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright 2023 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOT_FROM SD 0x400
|
||||||
|
SOC_TYPE IMX9
|
||||||
|
CONTAINER
|
||||||
|
IMAGE A55 bl31.bin 0x204E0000
|
||||||
|
IMAGE A55 u-boot.bin CONFIG_TEXT_BASE
|
10
arch/arm/mach-imx/imx9/imximage.cfg
Normal file
10
arch/arm/mach-imx/imx9/imximage.cfg
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright 2023 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOT_FROM SD 0x400
|
||||||
|
SOC_TYPE IMX9
|
||||||
|
APPEND mx93a0-ahab-container.img
|
||||||
|
CONTAINER
|
||||||
|
IMAGE A55 u-boot-spl-ddr.bin 0x2049A000
|
|
@ -5,9 +5,11 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/arch/clock.h>
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/imx8mm_pins.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <dm/device-internal.h>
|
#include <dm/device-internal.h>
|
||||||
|
#include <linux/bitfield.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
|
|
||||||
|
@ -34,3 +36,43 @@ int board_late_init(void)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fdtdec_board_setup(const void *fdt_blob)
|
||||||
|
{
|
||||||
|
const void __iomem *mux = (void __iomem *)IOMUXC_BASE_ADDR +
|
||||||
|
FIELD_GET(MUX_CTRL_OFS_MASK, IMX8MM_PAD_ENET_MDC_GPIO1_IO16);
|
||||||
|
const char *phy_compat = "ethernet-phy-ieee802.3-c22";
|
||||||
|
bool is_bcmphy;
|
||||||
|
int phy_node;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Do nothing if not i.MX8MM eDM SBC */
|
||||||
|
ret = fdt_node_check_compatible(fdt_blob, 0, "dmo,imx8mm-data-modul-edm-sbc");
|
||||||
|
if (ret)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If GPIO1_16 RGMII_MDC is HIGH, then R530 is populated.
|
||||||
|
* R530 is populated only on boards with AR8031 PHY.
|
||||||
|
*
|
||||||
|
* If GPIO1_16 RGMII_MDC is LOW, then the in-SoM pull down
|
||||||
|
* is the dominant pull resistor. This is the case on boards
|
||||||
|
* with BCM54213PE PHY.
|
||||||
|
*/
|
||||||
|
setbits_le32(mux, IOMUX_CONFIG_SION);
|
||||||
|
is_bcmphy = !(readl(GPIO1_BASE_ADDR) & BIT(16));
|
||||||
|
clrbits_le32(mux, IOMUX_CONFIG_SION);
|
||||||
|
|
||||||
|
phy_node = fdt_node_offset_by_compatible(fdt_blob, -1, phy_compat);
|
||||||
|
if (phy_node < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update PHY MDC address in control DT based on the populated
|
||||||
|
* PHY type. AR8031 is at address 0, BCM54213PE is at address 1.
|
||||||
|
*/
|
||||||
|
fdt_setprop_inplace_u32((void *)fdt_blob, phy_node,
|
||||||
|
"reg", is_bcmphy ? 1 : 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -5,11 +5,13 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <asm/arch/clock.h>
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/imx8mp_pins.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <dm/device-internal.h>
|
#include <dm/device-internal.h>
|
||||||
#include <env.h>
|
#include <env.h>
|
||||||
#include <env_internal.h>
|
#include <env_internal.h>
|
||||||
|
#include <linux/bitfield.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <net.h>
|
#include <net.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
|
@ -65,3 +67,51 @@ int board_late_init(void)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fdtdec_board_setup(const void *fdt_blob)
|
||||||
|
{
|
||||||
|
const void __iomem *mux = (void __iomem *)IOMUXC_BASE_ADDR +
|
||||||
|
FIELD_GET(MUX_CTRL_OFS_MASK, MX8MP_PAD_ENET_MDC__ENET_QOS_MDC);
|
||||||
|
const char *phy_compat = "ethernet-phy-ieee802.3-c22";
|
||||||
|
bool is_bcmphy;
|
||||||
|
int phy_node;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Do nothing if not i.MX8MP eDM SBC */
|
||||||
|
ret = fdt_node_check_compatible(fdt_blob, 0, "dmo,imx8mp-data-modul-edm-sbc");
|
||||||
|
if (ret)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If GPIO1_16 RGMII_MDC is HIGH, then R390 is populated.
|
||||||
|
* R390 is populated only on boards with AR8031 PHY.
|
||||||
|
*
|
||||||
|
* If GPIO1_16 RGMII_MDC is LOW, then the in-SoM pull down
|
||||||
|
* is the dominant pull resistor. This is the case on boards
|
||||||
|
* with BCM54213PE PHY.
|
||||||
|
*/
|
||||||
|
setbits_le32(mux, IOMUX_CONFIG_SION);
|
||||||
|
is_bcmphy = !(readl(GPIO1_BASE_ADDR) & BIT(16));
|
||||||
|
clrbits_le32(mux, IOMUX_CONFIG_SION);
|
||||||
|
|
||||||
|
phy_node = fdt_node_offset_by_compatible(fdt_blob, -1, phy_compat);
|
||||||
|
if (phy_node < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update PHY MDC address in control DT based on the populated
|
||||||
|
* PHY type. AR8031 is at address 0, BCM54213PE is at address 1.
|
||||||
|
*/
|
||||||
|
fdt_setprop_inplace_u32((void *)fdt_blob, phy_node,
|
||||||
|
"reg", is_bcmphy ? 1 : 0);
|
||||||
|
|
||||||
|
/* Apply the same modification to EQoS PHY */
|
||||||
|
phy_node = fdt_node_offset_by_compatible(fdt_blob, phy_node, phy_compat);
|
||||||
|
if (phy_node < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fdt_setprop_inplace_u32((void *)fdt_blob, phy_node,
|
||||||
|
"reg", is_bcmphy ? 1 : 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
58
board/variscite/common/eth.c
Normal file
58
board/variscite/common/eth.c
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2023 Variscite Ltd.
|
||||||
|
*/
|
||||||
|
#include <net.h>
|
||||||
|
#include <miiphy.h>
|
||||||
|
#include <env.h>
|
||||||
|
#include "../common/imx9_eeprom.h"
|
||||||
|
|
||||||
|
#define CHAR_BIT 8
|
||||||
|
|
||||||
|
static u64 mac2int(const u8 hwaddr[])
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u64 ret = 0;
|
||||||
|
const u8 *p = hwaddr;
|
||||||
|
|
||||||
|
for (i = 6; i > 0; i--)
|
||||||
|
ret |= (u64)*p++ << (CHAR_BIT * (i - 1));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void int2mac(const u64 mac, u8 *hwaddr)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 *p = hwaddr;
|
||||||
|
|
||||||
|
for (i = 6; i > 0; i--)
|
||||||
|
*p++ = mac >> (CHAR_BIT * (i - 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
int var_setup_mac(struct var_eeprom *eeprom)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
unsigned char enetaddr[6];
|
||||||
|
u64 addr;
|
||||||
|
unsigned char enet1addr[6];
|
||||||
|
|
||||||
|
ret = eth_env_get_enetaddr("ethaddr", enetaddr);
|
||||||
|
if (ret)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ret = var_eeprom_get_mac(eeprom, enetaddr);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (!is_valid_ethaddr(enetaddr))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
eth_env_set_enetaddr("ethaddr", enetaddr);
|
||||||
|
|
||||||
|
addr = mac2int(enetaddr);
|
||||||
|
int2mac(addr + 1, enet1addr);
|
||||||
|
eth_env_set_enetaddr("eth1addr", enet1addr);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
12
board/variscite/common/eth.h
Normal file
12
board/variscite/common/eth.h
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Variscite Ltd.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MX9_ETH_H_
|
||||||
|
#define _MX9_ETH_H_
|
||||||
|
|
||||||
|
int var_setup_mac(struct var_eeprom *eeprom);
|
||||||
|
|
||||||
|
#endif /* _MX9_ETH_H_ */
|
190
board/variscite/common/imx9_eeprom.c
Normal file
190
board/variscite/common/imx9_eeprom.c
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Variscite Ltd.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <command.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <i2c.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <cpu_func.h>
|
||||||
|
#include <u-boot/crc.h>
|
||||||
|
#include <asm/arch-imx9/ddr.h>
|
||||||
|
|
||||||
|
#include "imx9_eeprom.h"
|
||||||
|
|
||||||
|
static int var_eeprom_get_dev(struct udevice **devp)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct udevice *bus;
|
||||||
|
|
||||||
|
ret = uclass_get_device_by_name(UCLASS_I2C, VAR_SOM_EEPROM_I2C_NAME, &bus);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: No EEPROM I2C bus '%s'\n", __func__,
|
||||||
|
VAR_SOM_EEPROM_I2C_NAME);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = dm_i2c_probe(bus, VAR_SOM_EEPROM_I2C_ADDR, 0, devp);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: I2C EEPROM probe failed\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_set_chip_offset_len(*devp, 1);
|
||||||
|
i2c_set_chip_addr_offset_mask(*devp, 1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int var_eeprom_read_header(struct var_eeprom *e)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct udevice *dev;
|
||||||
|
|
||||||
|
ret = var_eeprom_get_dev(&dev);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: Failed to detect I2C EEPROM\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read EEPROM header to memory */
|
||||||
|
ret = dm_i2c_read(dev, 0, (void *)e, sizeof(*e));
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: EEPROM read failed, ret=%d\n", __func__, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int var_eeprom_get_mac(struct var_eeprom *ep, u8 *mac)
|
||||||
|
{
|
||||||
|
flush_dcache_all();
|
||||||
|
if (!var_eeprom_is_valid(ep))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
memcpy(mac, ep->mac, sizeof(ep->mac));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int var_eeprom_get_dram_size(struct var_eeprom *ep, phys_size_t *size)
|
||||||
|
{
|
||||||
|
/* No data in EEPROM - return default DRAM size */
|
||||||
|
if (!var_eeprom_is_valid(ep)) {
|
||||||
|
*size = DEFAULT_SDRAM_SIZE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
*size = (ep->dramsize * 128UL) << 20;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void var_eeprom_print_prod_info(struct var_eeprom *ep)
|
||||||
|
{
|
||||||
|
if (IS_ENABLED(CONFIG_SPL_BUILD))
|
||||||
|
return;
|
||||||
|
|
||||||
|
flush_dcache_all();
|
||||||
|
|
||||||
|
if (!var_eeprom_is_valid(ep))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_TARGET_IMX93_VAR_SOM))
|
||||||
|
printf("\nPart number: VSM-MX93-%.*s\n",
|
||||||
|
(int)sizeof(ep->partnum), ep->partnum);
|
||||||
|
|
||||||
|
printf("Assembly: AS%.*s\n", (int)sizeof(ep->assembly), (char *)ep->assembly);
|
||||||
|
|
||||||
|
printf("Production date: %.*s %.*s %.*s\n",
|
||||||
|
4, /* YYYY */
|
||||||
|
(char *)ep->date,
|
||||||
|
3, /* MMM */
|
||||||
|
((char *)ep->date) + 4,
|
||||||
|
2, /* DD */
|
||||||
|
((char *)ep->date) + 4 + 3);
|
||||||
|
|
||||||
|
printf("Serial Number: %02x:%02x:%02x:%02x:%02x:%02x\n",
|
||||||
|
ep->mac[0], ep->mac[1], ep->mac[2], ep->mac[3], ep->mac[4], ep->mac[5]);
|
||||||
|
|
||||||
|
debug("EEPROM version: 0x%x\n", ep->version);
|
||||||
|
debug("SOM features: 0x%x\n", ep->features);
|
||||||
|
printf("SOM revision: 0x%x\n", ep->somrev);
|
||||||
|
printf("DRAM PN: VIC-%04d\n", ep->ddr_vic);
|
||||||
|
debug("DRAM size: %d GiB\n\n", (ep->dramsize * 128) / 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
int var_carrier_eeprom_read(const char *bus_name, int addr, struct var_carrier_eeprom *ep)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct udevice *bus;
|
||||||
|
struct udevice *dev;
|
||||||
|
|
||||||
|
ret = uclass_get_device_by_name(UCLASS_I2C, bus_name, &bus);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: No bus '%s'\n", __func__, bus_name);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = dm_i2c_probe(bus, addr, 0, &dev);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: Carrier EEPROM I2C probe failed\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read EEPROM to memory */
|
||||||
|
ret = dm_i2c_read(dev, 0, (void *)ep, sizeof(*ep));
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: Carrier EEPROM read failed, ret=%d\n", __func__, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int var_carrier_eeprom_is_valid(struct var_carrier_eeprom *ep)
|
||||||
|
{
|
||||||
|
u32 crc, crc_offset = offsetof(struct var_carrier_eeprom, crc);
|
||||||
|
|
||||||
|
if (htons(ep->magic) != VAR_CARRIER_EEPROM_MAGIC) {
|
||||||
|
printf("Invalid carrier EEPROM magic 0x%x, expected 0x%x\n",
|
||||||
|
htons(ep->magic), VAR_CARRIER_EEPROM_MAGIC);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ep->struct_ver < 1) {
|
||||||
|
printf("Invalid carrier EEPROM version 0x%x\n", ep->struct_ver);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ep->struct_ver == 1)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Only EEPROM structure above version 1 has CRC field */
|
||||||
|
crc = crc32(0, (void *)ep, crc_offset);
|
||||||
|
|
||||||
|
if (crc != ep->crc) {
|
||||||
|
printf("Carrier EEPROM CRC mismatch (%08x != %08x)\n",
|
||||||
|
crc, be32_to_cpu(ep->crc));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns carrier board revision string via 'rev' argument. For legacy
|
||||||
|
* carrier board revisions the "legacy" string is returned. For new carrier
|
||||||
|
* board revisions the actual carrier revision is returned. Symphony-Board
|
||||||
|
* 1.4 and below are legacy, 1.4a and above are new. DT8MCustomBoard 1.4 and
|
||||||
|
* below are legacy, 2.0 and above are new.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void var_carrier_eeprom_get_revision(struct var_carrier_eeprom *ep, char *rev, size_t size)
|
||||||
|
{
|
||||||
|
if (var_carrier_eeprom_is_valid(ep))
|
||||||
|
strlcpy(rev, (const char *)ep->carrier_rev, size);
|
||||||
|
else
|
||||||
|
strlcpy(rev, "legacy", size);
|
||||||
|
}
|
83
board/variscite/common/imx9_eeprom.h
Normal file
83
board/variscite/common/imx9_eeprom.h
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 Variscite Ltd.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MX9_VAR_EEPROM_H_
|
||||||
|
#define _MX9_VAR_EEPROM_H_
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_IMX9
|
||||||
|
#include <asm/arch-imx9/ddr.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define VAR_SOM_EEPROM_MAGIC 0x4D58 /* == HEX("MX") */
|
||||||
|
|
||||||
|
#define VAR_SOM_EEPROM_I2C_ADDR 0x52
|
||||||
|
|
||||||
|
/* Optional SOM features */
|
||||||
|
#define VAR_EEPROM_F_WIFI BIT(0)
|
||||||
|
#define VAR_EEPROM_F_ETH BIT(1)
|
||||||
|
#define VAR_EEPROM_F_AUDIO BIT(2)
|
||||||
|
|
||||||
|
/* SOM storage types */
|
||||||
|
enum som_storage {
|
||||||
|
SOM_STORAGE_EMMC,
|
||||||
|
SOM_STORAGE_NAND,
|
||||||
|
SOM_STORAGE_UNDEFINED,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Number of DRAM adjustment tables */
|
||||||
|
#define DRAM_TABLE_NUM 7
|
||||||
|
|
||||||
|
struct __packed var_eeprom
|
||||||
|
{
|
||||||
|
u16 magic; /* 00-0x00 - magic number */
|
||||||
|
u8 partnum[8]; /* 02-0x02 - part number */
|
||||||
|
u8 assembly[10]; /* 10-0x0a - assembly number */
|
||||||
|
u8 date[9]; /* 20-0x14 - build date */
|
||||||
|
u8 mac[6]; /* 29-0x1d - MAC address */
|
||||||
|
u8 somrev; /* 35-0x23 - SOM revision */
|
||||||
|
u8 version; /* 36-0x24 - EEPROM version */
|
||||||
|
u8 features; /* 37-0x25 - SOM features */
|
||||||
|
u8 dramsize; /* 38-0x26 - DRAM size */
|
||||||
|
u8 reserved[5]; /* 39 0x27 - reserved */
|
||||||
|
u32 ddr_crc32; /* 44-0x2c - CRC32 of DDR DATAi */
|
||||||
|
u16 ddr_vic; /* 48-0x30 - DDR VIC PN */
|
||||||
|
u16 off[DRAM_TABLE_NUM + 1]; /* 50-0x32 - DRAM table offsets */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define VAR_EEPROM_DATA ((struct var_eeprom *)VAR_EEPROM_DRAM_START)
|
||||||
|
|
||||||
|
#define VAR_CARRIER_EEPROM_MAGIC 0x5643 /* == HEX("VC") */
|
||||||
|
|
||||||
|
#define CARRIER_REV_LEN 16
|
||||||
|
struct __packed var_carrier_eeprom
|
||||||
|
{
|
||||||
|
u16 magic; /* 00-0x00 - magic number */
|
||||||
|
u8 struct_ver; /* 01-0x01 - EEPROM structure version */
|
||||||
|
u8 carrier_rev[CARRIER_REV_LEN]; /* 02-0x02 - carrier board revision */
|
||||||
|
u32 crc; /* 10-0x0a - checksum */
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline int var_eeprom_is_valid(struct var_eeprom *ep)
|
||||||
|
{
|
||||||
|
if (htons(ep->magic) != VAR_SOM_EEPROM_MAGIC) {
|
||||||
|
debug("Invalid EEPROM magic 0x%x, expected 0x%x\n",
|
||||||
|
htons(ep->magic), VAR_SOM_EEPROM_MAGIC);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int var_eeprom_read_header(struct var_eeprom *e);
|
||||||
|
int var_eeprom_get_dram_size(struct var_eeprom *e, phys_size_t *size);
|
||||||
|
int var_eeprom_get_mac(struct var_eeprom *e, u8 *mac);
|
||||||
|
void var_eeprom_print_prod_info(struct var_eeprom *e);
|
||||||
|
|
||||||
|
int var_carrier_eeprom_read(const char *bus_name, int addr, struct var_carrier_eeprom *ep);
|
||||||
|
int var_carrier_eeprom_is_valid(struct var_carrier_eeprom *ep);
|
||||||
|
void var_carrier_eeprom_get_revision(struct var_carrier_eeprom *ep, char *rev, size_t size);
|
||||||
|
|
||||||
|
#endif /* _MX9_VAR_EEPROM_H_ */
|
47
board/variscite/common/mmc.c
Normal file
47
board/variscite/common/mmc.c
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2016 Freescale Semiconductor, Inc.
|
||||||
|
* Copyright 2018 NXP
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <command.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <mmc.h>
|
||||||
|
#include <vsprintf.h>
|
||||||
|
#include <env.h>
|
||||||
|
|
||||||
|
static int check_mmc_autodetect(void)
|
||||||
|
{
|
||||||
|
char *autodetect_str = env_get("mmcautodetect");
|
||||||
|
|
||||||
|
if (autodetect_str && (strcmp(autodetect_str, "yes") == 0))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This should be defined for each board */
|
||||||
|
__weak int mmc_map_to_kernel_blk(int dev_no)
|
||||||
|
{
|
||||||
|
return dev_no;
|
||||||
|
}
|
||||||
|
|
||||||
|
void board_late_mmc_env_init(void)
|
||||||
|
{
|
||||||
|
char cmd[32];
|
||||||
|
u32 dev_no = mmc_get_env_dev();
|
||||||
|
|
||||||
|
if (!check_mmc_autodetect())
|
||||||
|
return;
|
||||||
|
|
||||||
|
env_set_ulong("mmcdev", dev_no);
|
||||||
|
|
||||||
|
/* Set mmcblk env */
|
||||||
|
env_set_ulong("mmcblk", mmc_map_to_kernel_blk(dev_no));
|
||||||
|
|
||||||
|
sprintf(cmd, "mmc dev %d", dev_no);
|
||||||
|
run_command(cmd, 0);
|
||||||
|
}
|
12
board/variscite/imx93_var_som/Kconfig
Normal file
12
board/variscite/imx93_var_som/Kconfig
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
if TARGET_IMX93_VAR_SOM
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "imx93_var_som"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "variscite"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "imx93_var_som"
|
||||||
|
|
||||||
|
endif
|
7
board/variscite/imx93_var_som/MAINTAINERS
Normal file
7
board/variscite/imx93_var_som/MAINTAINERS
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
ARM i.MX93 VARISCITE VAR-SOM-MX93 MODULE
|
||||||
|
M: Mathieu Othacehe <m.othacehe@gmail.com>
|
||||||
|
S: Maintained
|
||||||
|
F: arch/arm/dts/imx93-var-som*
|
||||||
|
F: board/variscite/imx93_var_som/
|
||||||
|
F: configs/imx93_var_som_defconfig
|
||||||
|
F: include/configs/imx93_var_som.h
|
17
board/variscite/imx93_var_som/Makefile
Normal file
17
board/variscite/imx93_var_som/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#
|
||||||
|
# Copyright 2022 NXP
|
||||||
|
# Copyright 2023 Variscite Ltd.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y += imx93_var_som.o
|
||||||
|
obj-$(CONFIG_TARGET_IMX93_VAR_SOM) += ../common/imx9_eeprom.o
|
||||||
|
|
||||||
|
ifdef CONFIG_SPL_BUILD
|
||||||
|
obj-y += spl.o
|
||||||
|
obj-$(CONFIG_TARGET_IMX93_VAR_SOM) += lpddr4x_timing.o
|
||||||
|
else
|
||||||
|
obj-y += ../common/eth.o
|
||||||
|
obj-y += ../common/mmc.o
|
||||||
|
endif
|
126
board/variscite/imx93_var_som/imx93_var_som.c
Normal file
126
board/variscite/imx93_var_som/imx93_var_som.c
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2022 NXP
|
||||||
|
* Copyright 2023 Variscite Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <env.h>
|
||||||
|
#include <init.h>
|
||||||
|
#include <miiphy.h>
|
||||||
|
#include <netdev.h>
|
||||||
|
#include <asm/global_data.h>
|
||||||
|
#include <asm/arch-imx9/ccm_regs.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/arch-imx9/imx93_pins.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <power/pmic.h>
|
||||||
|
#include <dm/device.h>
|
||||||
|
#include <dm/uclass.h>
|
||||||
|
|
||||||
|
#include "../common/imx9_eeprom.h"
|
||||||
|
#include "../common/eth.h"
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
#define CARRIER_EEPROM_ADDR 0x54
|
||||||
|
|
||||||
|
#define UART_PAD_CTRL (PAD_CTL_DSE(6) | PAD_CTL_FSEL2)
|
||||||
|
#define WDOG_PAD_CTRL (PAD_CTL_DSE(6) | PAD_CTL_ODE | PAD_CTL_PUE | PAD_CTL_PE)
|
||||||
|
|
||||||
|
static const iomux_v3_cfg_t uart_pads[] = {
|
||||||
|
MX93_PAD_UART1_RXD__LPUART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||||
|
MX93_PAD_UART1_TXD__LPUART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||||
|
};
|
||||||
|
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
|
||||||
|
|
||||||
|
init_uart_clk(LPUART1_CLK_ROOT);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_phys_sdram_size(phys_size_t *size)
|
||||||
|
{
|
||||||
|
struct var_eeprom *ep = VAR_EEPROM_DATA;
|
||||||
|
|
||||||
|
var_eeprom_get_dram_size(ep, size);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_phy_config(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
if (phydev->drv->config)
|
||||||
|
phydev->drv->config(phydev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int setup_eqos(void)
|
||||||
|
{
|
||||||
|
struct blk_ctrl_wakeupmix_regs *bctrl =
|
||||||
|
(struct blk_ctrl_wakeupmix_regs *)BLK_CTRL_WAKEUPMIX_BASE_ADDR;
|
||||||
|
|
||||||
|
/* set INTF as RGMII, enable RGMII TXC clock */
|
||||||
|
clrsetbits_le32(&bctrl->eqos_gpr,
|
||||||
|
BCTRL_GPR_ENET_QOS_INTF_MODE_MASK,
|
||||||
|
BCTRL_GPR_ENET_QOS_INTF_SEL_RGMII | BCTRL_GPR_ENET_QOS_CLK_GEN_EN);
|
||||||
|
|
||||||
|
return set_clk_eqos(ENET_125MHZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_init(void)
|
||||||
|
{
|
||||||
|
set_clk_enet(ENET_125MHZ);
|
||||||
|
|
||||||
|
if (CONFIG_IS_ENABLED(DWC_ETH_QOS))
|
||||||
|
setup_eqos();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SDRAM_SIZE_STR_LEN 5
|
||||||
|
|
||||||
|
int board_late_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct var_eeprom *ep = VAR_EEPROM_DATA;
|
||||||
|
char sdram_size_str[SDRAM_SIZE_STR_LEN];
|
||||||
|
struct var_carrier_eeprom carrier_eeprom;
|
||||||
|
char carrier_rev[CARRIER_REV_LEN] = {0};
|
||||||
|
char som_rev[CARRIER_REV_LEN] = {0};
|
||||||
|
|
||||||
|
var_setup_mac(ep);
|
||||||
|
var_eeprom_print_prod_info(ep);
|
||||||
|
|
||||||
|
/* SDRAM ENV */
|
||||||
|
snprintf(sdram_size_str, SDRAM_SIZE_STR_LEN, "%d",
|
||||||
|
(int)(gd->ram_size / 1024 / 1024));
|
||||||
|
env_set("sdram_size", sdram_size_str);
|
||||||
|
|
||||||
|
/* Carrier Board ENV */
|
||||||
|
ret = var_carrier_eeprom_read(VAR_CARRIER_EEPROM_I2C_NAME,
|
||||||
|
CARRIER_EEPROM_ADDR, &carrier_eeprom);
|
||||||
|
if (!ret) {
|
||||||
|
var_carrier_eeprom_get_revision(&carrier_eeprom, carrier_rev,
|
||||||
|
sizeof(carrier_rev));
|
||||||
|
env_set("carrier_rev", carrier_rev);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SoM Rev ENV */
|
||||||
|
snprintf(som_rev, CARRIER_REV_LEN, "som_rev1%d", ep->somrev);
|
||||||
|
env_set("som_rev", som_rev);
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC))
|
||||||
|
board_late_mmc_env_init();
|
||||||
|
|
||||||
|
env_set("sec_boot", "no");
|
||||||
|
if (IS_ENABLED(CONFIG_AHAB_BOOT))
|
||||||
|
env_set("sec_boot", "yes");
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG))
|
||||||
|
env_set("board_name", "VAR-SOM-MX93");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
99
board/variscite/imx93_var_som/imx93_var_som.env
Normal file
99
board/variscite/imx93_var_som/imx93_var_som.env
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
initrd_addr=0x83800000
|
||||||
|
image=Image.gz
|
||||||
|
img_addr=0x82000000
|
||||||
|
console=ttyLP0,115200
|
||||||
|
fdt_addr_r=0x83000000
|
||||||
|
fdt_addr=0x83000000
|
||||||
|
cntr_addr=0x98000000
|
||||||
|
cntr_file=os_cntr_signed.bin
|
||||||
|
boot_fit=no
|
||||||
|
bootdir=/boot
|
||||||
|
fdt_file=undefined
|
||||||
|
bootm_size=0x10000000
|
||||||
|
mmcdev=0
|
||||||
|
mmcpart=1
|
||||||
|
mmcautodetect=yes
|
||||||
|
optargs=setenv bootargs ${bootargs} ${kernelargs};
|
||||||
|
mmcroot=root=/dev/mmcblk0p1
|
||||||
|
mmcargs=setenv bootargs ${jh_clk} console=${console} ${mmcroot} rootwait rw
|
||||||
|
loadbootscript=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bootdir}/${script};
|
||||||
|
bootscript=echo Running bootscript from mmc ...; source
|
||||||
|
loadimage=load mmc ${mmcdev}:${mmcpart} ${img_addr} ${bootdir}/${image};
|
||||||
|
unzip ${img_addr} ${loadaddr}
|
||||||
|
findfdt=if test $fdt_file = undefined; then
|
||||||
|
setenv fdt_file CONFIG_DEFAULT_FDT_FILE ;
|
||||||
|
fi;
|
||||||
|
echo fdt_file=${fdt_file};
|
||||||
|
loadfdt=run findfdt;load mmc ${mmcdev}:${mmcpart} ${fdt_addr_r} ${bootdir}/${fdt_file}
|
||||||
|
loadcntr=fatload mmc ${mmcdev}:${mmcpart} ${cntr_addr} ${cntr_file}
|
||||||
|
auth_os=auth_cntr ${cntr_addr}
|
||||||
|
boot_os=booti ${loadaddr} - ${fdt_addr_r};
|
||||||
|
mmcboot=echo Booting from mmc ...;
|
||||||
|
run mmcargs;
|
||||||
|
run optargs;
|
||||||
|
if test ${sec_boot} = yes; then
|
||||||
|
if run auth_os; then
|
||||||
|
"run boot_os;
|
||||||
|
else
|
||||||
|
"echo ERR: failed to authenticate;
|
||||||
|
fi;
|
||||||
|
else
|
||||||
|
if test ${boot_fit} = yes || test ${boot_fit} = try; then
|
||||||
|
bootm ${loadaddr};
|
||||||
|
else
|
||||||
|
if run loadfdt; then
|
||||||
|
run boot_os;
|
||||||
|
else
|
||||||
|
echo WARN: Cannot load the DT;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
netargs=setenv bootargs ${jh_clk} console=${console}
|
||||||
|
root=/dev/nfs
|
||||||
|
ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
|
||||||
|
etboot=echo Booting from net ...;
|
||||||
|
run netargs;
|
||||||
|
run optargs;
|
||||||
|
if test ${ip_dyn} = yes; then
|
||||||
|
setenv get_cmd dhcp;
|
||||||
|
else
|
||||||
|
setenv get_cmd tftp;
|
||||||
|
fi;
|
||||||
|
if test ${sec_boot} = yes; then
|
||||||
|
${get_cmd} ${cntr_addr} ${cntr_file};
|
||||||
|
if run auth_os; then
|
||||||
|
"run boot_os;
|
||||||
|
else
|
||||||
|
"echo ERR: failed to authenticate;
|
||||||
|
fi;
|
||||||
|
else
|
||||||
|
${get_cmd} ${img_addr} ${image}; unzip ${img_addr} ${loadaddr};
|
||||||
|
if test ${boot_fit} = yes || test ${boot_fit} = try; then
|
||||||
|
bootm ${loadaddr};
|
||||||
|
else
|
||||||
|
run findfdt;
|
||||||
|
if ${get_cmd} ${fdt_addr_r} ${fdt_file}; then
|
||||||
|
run boot_os;
|
||||||
|
else
|
||||||
|
echo WARN: Cannot load the DT;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
bsp_bootcmd=echo Running BSP bootcmd ...;
|
||||||
|
mmc dev ${mmcdev}; if mmc rescan; then
|
||||||
|
if run loadbootscript; then
|
||||||
|
run bootscript;
|
||||||
|
else
|
||||||
|
if test ${sec_boot} = yes; then
|
||||||
|
if run loadcntr; then
|
||||||
|
run mmcboot;
|
||||||
|
else run netboot;
|
||||||
|
fi;
|
||||||
|
else
|
||||||
|
if run loadimage; then
|
||||||
|
run mmcboot;
|
||||||
|
else run netboot;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
fi;
|
1488
board/variscite/imx93_var_som/lpddr4x_timing.c
Normal file
1488
board/variscite/imx93_var_som/lpddr4x_timing.c
Normal file
File diff suppressed because it is too large
Load Diff
143
board/variscite/imx93_var_som/spl.c
Normal file
143
board/variscite/imx93_var_som/spl.c
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2022 NXP
|
||||||
|
* Copyright 2023 Variscite Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <command.h>
|
||||||
|
#include <cpu_func.h>
|
||||||
|
#include <image.h>
|
||||||
|
#include <init.h>
|
||||||
|
#include <log.h>
|
||||||
|
#include <spl.h>
|
||||||
|
#include <asm/global_data.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/imx93_pins.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/mach-imx/boot_mode.h>
|
||||||
|
#include <asm/mach-imx/mxc_i2c.h>
|
||||||
|
#include <asm/arch-mx7ulp/gpio.h>
|
||||||
|
#include <asm/sections.h>
|
||||||
|
#include <asm/mach-imx/syscounter.h>
|
||||||
|
#include <dm/uclass.h>
|
||||||
|
#include <dm/device.h>
|
||||||
|
#include <dm/uclass-internal.h>
|
||||||
|
#include <dm/device-internal.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/ccm_regs.h>
|
||||||
|
#include <asm/arch/ddr.h>
|
||||||
|
#include <power/pmic.h>
|
||||||
|
#include <power/pca9450.h>
|
||||||
|
#include <asm/arch/trdc.h>
|
||||||
|
|
||||||
|
#include "../common/imx9_eeprom.h"
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
static struct var_eeprom eeprom = {0};
|
||||||
|
|
||||||
|
int spl_board_boot_device(enum boot_device boot_dev_spl)
|
||||||
|
{
|
||||||
|
return BOOT_DEVICE_BOOTROM;
|
||||||
|
}
|
||||||
|
|
||||||
|
void spl_board_init(void)
|
||||||
|
{
|
||||||
|
struct var_eeprom *ep = VAR_EEPROM_DATA;
|
||||||
|
|
||||||
|
puts("Normal Boot\n");
|
||||||
|
|
||||||
|
/* Copy EEPROM contents to DRAM */
|
||||||
|
memcpy(ep, &eeprom, sizeof(*ep));
|
||||||
|
}
|
||||||
|
|
||||||
|
void spl_dram_init(void)
|
||||||
|
{
|
||||||
|
/* EEPROM initialization */
|
||||||
|
var_eeprom_read_header(&eeprom);
|
||||||
|
|
||||||
|
ddr_init(&dram_timing);
|
||||||
|
}
|
||||||
|
|
||||||
|
int power_init_board(void)
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_SPL_DM_PMIC_PCA9450)) {
|
||||||
|
ret = pmic_get("pmic@25", &dev);
|
||||||
|
if (ret == -ENODEV) {
|
||||||
|
puts("No pca9450@25\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* BUCKxOUT_DVS0/1 control BUCK123 output */
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK123_DVS, 0x29);
|
||||||
|
|
||||||
|
/* enable DVS control through PMIC_STBY_REQ */
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK1CTRL, 0x59);
|
||||||
|
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x18);
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x18);
|
||||||
|
|
||||||
|
/* set standby voltage to 0.65V */
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x4);
|
||||||
|
|
||||||
|
/* I2C_LT_EN*/
|
||||||
|
pmic_reg_write(dev, 0xa, 0x3);
|
||||||
|
|
||||||
|
/* set WDOG_B_CFG to cold reset */
|
||||||
|
pmic_reg_write(dev, PCA9450_RESET_CTRL, 0xA1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void board_init_f(ulong dummy)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Clear the BSS. */
|
||||||
|
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||||
|
|
||||||
|
timer_init();
|
||||||
|
|
||||||
|
arch_cpu_init();
|
||||||
|
|
||||||
|
board_early_init_f();
|
||||||
|
|
||||||
|
spl_early_init();
|
||||||
|
|
||||||
|
preloader_console_init();
|
||||||
|
|
||||||
|
ret = arch_cpu_init();
|
||||||
|
if (ret) {
|
||||||
|
printf("Fail to init Sentinel API\n");
|
||||||
|
} else {
|
||||||
|
printf("SOC: 0x%x\n", gd->arch.soc_rev);
|
||||||
|
printf("LC: 0x%x\n", gd->arch.lifecycle);
|
||||||
|
}
|
||||||
|
power_init_board();
|
||||||
|
|
||||||
|
set_arm_core_max_clk();
|
||||||
|
|
||||||
|
/* Init power of mix */
|
||||||
|
soc_power_init();
|
||||||
|
|
||||||
|
/* Setup TRDC for DDR access */
|
||||||
|
trdc_init();
|
||||||
|
|
||||||
|
/* DDR initialization */
|
||||||
|
spl_dram_init();
|
||||||
|
|
||||||
|
/* Put M33 into CPUWAIT for following kick */
|
||||||
|
ret = m33_prepare();
|
||||||
|
if (!ret)
|
||||||
|
printf("M33 prepare ok\n");
|
||||||
|
|
||||||
|
board_init_r(NULL, 0);
|
||||||
|
}
|
|
@ -207,7 +207,7 @@ config SPL_BINMAN_SYMBOLS
|
||||||
config SPL_BINMAN_UBOOT_SYMBOLS
|
config SPL_BINMAN_UBOOT_SYMBOLS
|
||||||
bool "Declare binman symbols for U-Boot phases in SPL"
|
bool "Declare binman symbols for U-Boot phases in SPL"
|
||||||
depends on SPL_BINMAN_SYMBOLS
|
depends on SPL_BINMAN_SYMBOLS
|
||||||
default n if ARCH_IMX8M
|
default n if ARCH_IMX8M || ARCH_IMX9
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This enables use of symbols in SPL which refer to U-Boot phases,
|
This enables use of symbols in SPL which refer to U-Boot phases,
|
||||||
|
|
|
@ -23,7 +23,7 @@ config TPL_BINMAN_SYMBOLS
|
||||||
config TPL_BINMAN_UBOOT_SYMBOLS
|
config TPL_BINMAN_UBOOT_SYMBOLS
|
||||||
bool "Declare binman symbols for U-Boot phases in TPL"
|
bool "Declare binman symbols for U-Boot phases in TPL"
|
||||||
depends on TPL_BINMAN_SYMBOLS
|
depends on TPL_BINMAN_SYMBOLS
|
||||||
default n if ARCH_IMX8M
|
default n if ARCH_IMX8M || ARCH_IMX9
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This enables use of symbols in TPL which refer to U-Boot phases,
|
This enables use of symbols in TPL which refer to U-Boot phases,
|
||||||
|
|
|
@ -243,7 +243,7 @@ config VPL_BINMAN_SYMBOLS
|
||||||
config VPL_BINMAN_UBOOT_SYMBOLS
|
config VPL_BINMAN_UBOOT_SYMBOLS
|
||||||
bool "Declare binman symbols for U-Boot phases in VPL"
|
bool "Declare binman symbols for U-Boot phases in VPL"
|
||||||
depends on VPL_BINMAN_SYMBOLS
|
depends on VPL_BINMAN_SYMBOLS
|
||||||
default n if ARCH_IMX8M
|
default n if ARCH_IMX8M || ARCH_IMX9
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This enables use of symbols in VPL which refer to U-Boot phases,
|
This enables use of symbols in VPL which refer to U-Boot phases,
|
||||||
|
|
|
@ -195,6 +195,7 @@ CONFIG_SPI_FLASH_WINBOND=y
|
||||||
CONFIG_SPI_FLASH_MTD=y
|
CONFIG_SPI_FLASH_MTD=y
|
||||||
CONFIG_PHYLIB=y
|
CONFIG_PHYLIB=y
|
||||||
CONFIG_PHY_ATHEROS=y
|
CONFIG_PHY_ATHEROS=y
|
||||||
|
CONFIG_PHY_BROADCOM=y
|
||||||
CONFIG_DM_MDIO=y
|
CONFIG_DM_MDIO=y
|
||||||
CONFIG_DM_ETH_PHY=y
|
CONFIG_DM_ETH_PHY=y
|
||||||
CONFIG_FEC_MXC=y
|
CONFIG_FEC_MXC=y
|
||||||
|
|
|
@ -207,6 +207,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT=y
|
||||||
CONFIG_SPI_FLASH_WINBOND=y
|
CONFIG_SPI_FLASH_WINBOND=y
|
||||||
CONFIG_SPI_FLASH_MTD=y
|
CONFIG_SPI_FLASH_MTD=y
|
||||||
CONFIG_PHY_ATHEROS=y
|
CONFIG_PHY_ATHEROS=y
|
||||||
|
CONFIG_PHY_BROADCOM=y
|
||||||
CONFIG_PHY_MICREL=y
|
CONFIG_PHY_MICREL=y
|
||||||
CONFIG_PHY_MICREL_KSZ90X1=y
|
CONFIG_PHY_MICREL_KSZ90X1=y
|
||||||
CONFIG_DM_MDIO=y
|
CONFIG_DM_MDIO=y
|
||||||
|
|
|
@ -8,6 +8,8 @@ CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||||
CONFIG_NR_DRAM_BANKS=2
|
CONFIG_NR_DRAM_BANKS=2
|
||||||
CONFIG_ENV_SIZE=0x4000
|
CONFIG_ENV_SIZE=0x4000
|
||||||
CONFIG_ENV_OFFSET=0x700000
|
CONFIG_ENV_OFFSET=0x700000
|
||||||
|
CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/imximage.cfg"
|
||||||
|
CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx9/container.cfg"
|
||||||
CONFIG_DM_GPIO=y
|
CONFIG_DM_GPIO=y
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="imx93-11x11-evk"
|
CONFIG_DEFAULT_DEVICE_TREE="imx93-11x11-evk"
|
||||||
CONFIG_SPL_TEXT_BASE=0x2049A000
|
CONFIG_SPL_TEXT_BASE=0x2049A000
|
||||||
|
|
|
@ -8,6 +8,8 @@ CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||||
CONFIG_NR_DRAM_BANKS=2
|
CONFIG_NR_DRAM_BANKS=2
|
||||||
CONFIG_ENV_SIZE=0x4000
|
CONFIG_ENV_SIZE=0x4000
|
||||||
CONFIG_ENV_OFFSET=0x400000
|
CONFIG_ENV_OFFSET=0x400000
|
||||||
|
CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/imximage.cfg"
|
||||||
|
CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx9/container.cfg"
|
||||||
CONFIG_DM_GPIO=y
|
CONFIG_DM_GPIO=y
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="imx93-11x11-evk"
|
CONFIG_DEFAULT_DEVICE_TREE="imx93-11x11-evk"
|
||||||
CONFIG_SPL_TEXT_BASE=0x2049A000
|
CONFIG_SPL_TEXT_BASE=0x2049A000
|
||||||
|
|
156
configs/imx93_var_som_defconfig
Normal file
156
configs/imx93_var_som_defconfig
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
CONFIG_ARM=y
|
||||||
|
CONFIG_ARCH_IMX9=y
|
||||||
|
CONFIG_TEXT_BASE=0x80200000
|
||||||
|
CONFIG_SYS_MALLOC_LEN=0x2000000
|
||||||
|
CONFIG_SYS_MALLOC_F_LEN=0x18000
|
||||||
|
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||||
|
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||||
|
CONFIG_NR_DRAM_BANKS=2
|
||||||
|
CONFIG_SYS_MEMTEST_START=0x80000000
|
||||||
|
CONFIG_SYS_MEMTEST_END=0x90000000
|
||||||
|
CONFIG_ENV_SIZE=0x4000
|
||||||
|
CONFIG_ENV_OFFSET=0x700000
|
||||||
|
CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/imximage.cfg"
|
||||||
|
CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx9/container.cfg"
|
||||||
|
CONFIG_DM_GPIO=y
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="imx93-var-som-symphony"
|
||||||
|
CONFIG_SPL_TEXT_BASE=0x2049A000
|
||||||
|
CONFIG_TARGET_IMX93_VAR_SOM=y
|
||||||
|
CONFIG_SPL_SERIAL=y
|
||||||
|
CONFIG_SPL_DRIVERS_MISC=y
|
||||||
|
CONFIG_SPL_STACK=0x20519dd0
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_CMD_DEKBLOB=y
|
||||||
|
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x88000000
|
||||||
|
CONFIG_SPL_LOAD_IMX_CONTAINER=y
|
||||||
|
CONFIG_DISTRO_DEFAULTS=y
|
||||||
|
CONFIG_REMAKE_ELF=y
|
||||||
|
CONFIG_SYS_LOAD_ADDR=0x80400000
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_FIT_VERBOSE=y
|
||||||
|
CONFIG_OF_SYSTEM_SETUP=y
|
||||||
|
CONFIG_BOOTDELAY=1
|
||||||
|
CONFIG_BOOTCOMMAND="run bsp_bootcmd"
|
||||||
|
CONFIG_DEFAULT_FDT_FILE="imx93-var-som-symphony.dtb"
|
||||||
|
CONFIG_BOARD_EARLY_INIT_F=y
|
||||||
|
CONFIG_BOARD_LATE_INIT=y
|
||||||
|
CONFIG_SPL_MAX_SIZE=0x26000
|
||||||
|
CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
|
||||||
|
CONFIG_SPL_BSS_START_ADDR=0x2051a000
|
||||||
|
CONFIG_SPL_BSS_MAX_SIZE=0x2000
|
||||||
|
CONFIG_SPL_BOARD_INIT=y
|
||||||
|
CONFIG_SPL_BOOTROM_SUPPORT=y
|
||||||
|
# CONFIG_SPL_SHARES_INIT_SP_ADDR is not set
|
||||||
|
CONFIG_SYS_SPL_MALLOC=y
|
||||||
|
CONFIG_HAS_CUSTOM_SPL_MALLOC_START=y
|
||||||
|
CONFIG_CUSTOM_SYS_SPL_MALLOC_ADDR=0x83200000
|
||||||
|
CONFIG_SYS_SPL_MALLOC_SIZE=0x80000
|
||||||
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
|
||||||
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1040
|
||||||
|
CONFIG_SPL_I2C=y
|
||||||
|
CONFIG_SPL_POWER=y
|
||||||
|
CONFIG_SPL_WATCHDOG=y
|
||||||
|
CONFIG_SYS_PROMPT="u-boot=> "
|
||||||
|
CONFIG_SYS_MAXARGS=64
|
||||||
|
CONFIG_SYS_CBSIZE=2048
|
||||||
|
CONFIG_SYS_PBSIZE=2074
|
||||||
|
CONFIG_CMD_ERASEENV=y
|
||||||
|
CONFIG_CMD_NVEDIT_EFI=y
|
||||||
|
CONFIG_CMD_NET=y
|
||||||
|
CONFIG_CRC32_VERIFY=y
|
||||||
|
CONFIG_CMD_EEPROM=y
|
||||||
|
CONFIG_SYS_I2C_EEPROM_BUS=3
|
||||||
|
CONFIG_SYS_EEPROM_SIZE=512
|
||||||
|
CONFIG_SYS_EEPROM_PAGE_WRITE_BITS=4
|
||||||
|
CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS=100
|
||||||
|
CONFIG_CMD_MEMTEST=y
|
||||||
|
CONFIG_CMD_CLK=y
|
||||||
|
CONFIG_CMD_DFU=y
|
||||||
|
CONFIG_CMD_FUSE=y
|
||||||
|
CONFIG_CMD_GPIO=y
|
||||||
|
CONFIG_CMD_I2C=y
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_POWEROFF=y
|
||||||
|
CONFIG_BOOTP_PREFER_SERVERIP=y
|
||||||
|
CONFIG_CMD_SNTP=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_CMD_EFIDEBUG=y
|
||||||
|
CONFIG_CMD_RTC=y
|
||||||
|
CONFIG_CMD_TIME=y
|
||||||
|
CONFIG_CMD_GETTIME=y
|
||||||
|
CONFIG_CMD_TIMER=y
|
||||||
|
CONFIG_CMD_REGULATOR=y
|
||||||
|
CONFIG_CMD_HASH=y
|
||||||
|
CONFIG_CMD_EXT4_WRITE=y
|
||||||
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
|
CONFIG_ENV_OVERWRITE=y
|
||||||
|
CONFIG_ENV_IS_NOWHERE=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_SPL_DM=y
|
||||||
|
CONFIG_SYSCON=y
|
||||||
|
CONFIG_SPL_CLK_IMX93=y
|
||||||
|
CONFIG_CLK_IMX93=y
|
||||||
|
CONFIG_DFU_MMC=y
|
||||||
|
CONFIG_DFU_RAM=y
|
||||||
|
CONFIG_FASTBOOT_BUF_ADDR=0x82800000
|
||||||
|
CONFIG_FASTBOOT_BUF_SIZE=0x20000000
|
||||||
|
CONFIG_FASTBOOT_FLASH=y
|
||||||
|
CONFIG_FASTBOOT_UUU_SUPPORT=y
|
||||||
|
CONFIG_FASTBOOT_FLASH_MMC_DEV=1
|
||||||
|
CONFIG_GPIO_HOG=y
|
||||||
|
CONFIG_IMX_RGPIO2P=y
|
||||||
|
CONFIG_DM_PCA953X=y
|
||||||
|
CONFIG_DM_I2C=y
|
||||||
|
CONFIG_SYS_I2C_IMX_LPI2C=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_PHY_ADIN=y
|
||||||
|
CONFIG_PHY_ATHEROS=y
|
||||||
|
CONFIG_PHY_REALTEK=y
|
||||||
|
CONFIG_DM_ETH=y
|
||||||
|
CONFIG_DM_ETH_PHY=y
|
||||||
|
CONFIG_PHY_GIGE=y
|
||||||
|
CONFIG_DWC_ETH_QOS=y
|
||||||
|
CONFIG_DWC_ETH_QOS_IMX=y
|
||||||
|
CONFIG_FEC_MXC=y
|
||||||
|
CONFIG_MII=y
|
||||||
|
CONFIG_MIPI_DPHY_HELPERS=y
|
||||||
|
CONFIG_PHY_IMX93_MIPI_DPHY=y
|
||||||
|
CONFIG_PINCTRL=y
|
||||||
|
CONFIG_SPL_PINCTRL=y
|
||||||
|
CONFIG_PINCTRL_IMX93=y
|
||||||
|
CONFIG_POWER_DOMAIN=y
|
||||||
|
CONFIG_IMX93_BLK_CTRL=y
|
||||||
|
CONFIG_DM_PMIC=y
|
||||||
|
CONFIG_SPL_DM_PMIC_PCA9450=y
|
||||||
|
CONFIG_DM_REGULATOR=y
|
||||||
|
CONFIG_DM_REGULATOR_FIXED=y
|
||||||
|
CONFIG_DM_REGULATOR_GPIO=y
|
||||||
|
CONFIG_DM_RTC=y
|
||||||
|
CONFIG_RTC_EMULATION=y
|
||||||
|
CONFIG_DM_SERIAL=y
|
||||||
|
CONFIG_FSL_LPUART=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
|
CONFIG_IMX_TMU=y
|
||||||
|
CONFIG_CI_UDC=y
|
||||||
|
CONFIG_ULP_WATCHDOG=y
|
||||||
|
CONFIG_LZO=y
|
||||||
|
CONFIG_BZIP2=y
|
||||||
|
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||||
|
CONFIG_WATCHDOG=y
|
||||||
|
CONFIG_WDT=y
|
||||||
|
CONFIG_CMD_WDT=y
|
||||||
|
CONFIG_ETHPRIME="eth0"
|
||||||
|
CONFIG_SYS_I2C_SPEED=100000
|
||||||
|
CONFIG_IMX_BOOTAUX=y
|
||||||
|
CONFIG_CMD_READ=y
|
||||||
|
CONFIG_SERIAL_TAG=y
|
68
doc/board/nxp/imx93_11x11_evk.rst
Normal file
68
doc/board/nxp/imx93_11x11_evk.rst
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
imx93_11x11_evk
|
||||||
|
=======================
|
||||||
|
|
||||||
|
U-Boot for the NXP i.MX93 EVK on the 11x11mm board
|
||||||
|
|
||||||
|
Quick Start
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- Get and Build the ARM Trusted firmware
|
||||||
|
- Get the DDR firmware
|
||||||
|
- Get ahab-container.img
|
||||||
|
- Build U-Boot
|
||||||
|
- Boot
|
||||||
|
|
||||||
|
Get and Build the ARM Trusted firmware
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Note: srctree is U-Boot source directory
|
||||||
|
Get ATF from: https://github.com/nxp-imx/imx-atf/
|
||||||
|
branch: lf_v2.8
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ unset LDFLAGS
|
||||||
|
$ make PLAT=imx93 bl31
|
||||||
|
$ cp build/imx93/release/bl31.bin $(srctree)
|
||||||
|
|
||||||
|
Get the DDR firmware
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.21.bin
|
||||||
|
$ chmod +x firmware-imx-8.21.bin
|
||||||
|
$ ./firmware-imx-8.21.bin
|
||||||
|
$ cp firmware-imx-8.21/firmware/ddr/synopsys/lpddr4*.bin $(srctree)
|
||||||
|
|
||||||
|
Get ahab-container.img
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-sentinel-0.10.bin
|
||||||
|
$ chmod +x firmware-sentinel-0.10.bin
|
||||||
|
$ ./firmware-sentinel-0.10.bin
|
||||||
|
$ cp firmware-sentinel-0.10/mx93a0-ahab-container.img $(srctree)
|
||||||
|
|
||||||
|
Build U-Boot
|
||||||
|
------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ export CROSS_COMPILE=aarch64-poky-linux-
|
||||||
|
$ make imx93_11x11_evk_defconfig
|
||||||
|
$ make
|
||||||
|
|
||||||
|
Burn the flash.bin to MicroSD card offset 32KB:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ dd if=flash.bin of=/dev/sd[x] bs=1024 seek=32 conv=notrunc
|
||||||
|
|
||||||
|
Boot
|
||||||
|
----
|
||||||
|
|
||||||
|
Set Boot switch to SD boot
|
|
@ -11,6 +11,7 @@ NXP Semiconductors
|
||||||
imx8mp_evk
|
imx8mp_evk
|
||||||
imx8mq_evk
|
imx8mq_evk
|
||||||
imx8qxp_mek
|
imx8qxp_mek
|
||||||
|
imx93_11x11_evk
|
||||||
imxrt1020-evk
|
imxrt1020-evk
|
||||||
imxrt1050-evk
|
imxrt1050-evk
|
||||||
ls1046ardb
|
ls1046ardb
|
||||||
|
|
68
doc/board/variscite/imx93_var_som.rst
Normal file
68
doc/board/variscite/imx93_var_som.rst
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
imx93_var_som
|
||||||
|
=======================
|
||||||
|
|
||||||
|
U-Boot for the Variscite VAR-SOM-MX93 Symphony evaluation board
|
||||||
|
|
||||||
|
Quick Start
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- Get and Build the ARM Trusted firmware
|
||||||
|
- Get the DDR firmware
|
||||||
|
- Get ahab-container.img
|
||||||
|
- Build U-Boot
|
||||||
|
- Boot
|
||||||
|
|
||||||
|
Get and Build the ARM Trusted firmware
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Note: srctree is U-Boot source directory
|
||||||
|
Get ATF from: https://github.com/nxp-imx/imx-atf/
|
||||||
|
branch: lf_v2.8
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ unset LDFLAGS
|
||||||
|
$ make PLAT=imx93 bl31
|
||||||
|
$ cp build/imx93/release/bl31.bin $(srctree)
|
||||||
|
|
||||||
|
Get the DDR firmware
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.21.bin
|
||||||
|
$ chmod +x firmware-imx-8.21.bin
|
||||||
|
$ ./firmware-imx-8.21.bin
|
||||||
|
$ cp firmware-imx-8.21/firmware/ddr/synopsys/lpddr4*.bin $(srctree)
|
||||||
|
|
||||||
|
Get ahab-container.img
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-sentinel-0.10.bin
|
||||||
|
$ chmod +x firmware-sentinel-0.10.bin
|
||||||
|
$ ./firmware-sentinel-0.10.bin
|
||||||
|
$ cp firmware-sentinel-0.10/mx93a0-ahab-container.img $(srctree)
|
||||||
|
|
||||||
|
Build U-Boot
|
||||||
|
------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ export CROSS_COMPILE=aarch64-poky-linux-
|
||||||
|
$ make imx93_var_som_defconfig
|
||||||
|
$ make
|
||||||
|
|
||||||
|
Burn the flash.bin to MicroSD card offset 32KB:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ dd if=flash.bin of=/dev/sd[x] bs=1024 seek=32 conv=notrunc
|
||||||
|
|
||||||
|
Boot
|
||||||
|
----
|
||||||
|
|
||||||
|
Set Boot switch to SD boot
|
|
@ -7,3 +7,4 @@ Variscite
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
imx8mn_var_som
|
imx8mn_var_som
|
||||||
|
imx93_var_som
|
||||||
|
|
48
include/configs/imx93_var_som.h
Normal file
48
include/configs/imx93_var_som.h
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright 2022 NXP
|
||||||
|
* Copyright 2023 Variscite Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __IMX93_VAR_SOM_H
|
||||||
|
#define __IMX93_VAR_SOM_H
|
||||||
|
|
||||||
|
#include <linux/sizes.h>
|
||||||
|
#include <linux/stringify.h>
|
||||||
|
#include <asm/arch/imx-regs.h>
|
||||||
|
|
||||||
|
#define CFG_SYS_SDRAM_BASE 0x80000000
|
||||||
|
#define CFG_SYS_UBOOT_BASE \
|
||||||
|
(QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512)
|
||||||
|
|
||||||
|
#define BOOT_TARGET_DEVICES(func) \
|
||||||
|
func(MMC, mmc, 0) \
|
||||||
|
func(MMC, mmc, 1)
|
||||||
|
|
||||||
|
#include <config_distro_bootcmd.h>
|
||||||
|
|
||||||
|
/* Initial environment variables */
|
||||||
|
#define CFG_EXTRA_ENV_SETTINGS BOOTENV
|
||||||
|
|
||||||
|
#define CFG_SYS_INIT_RAM_ADDR 0x80000000
|
||||||
|
#define CFG_SYS_INIT_RAM_SIZE 0x200000
|
||||||
|
|
||||||
|
#define CFG_SYS_SDRAM_BASE 0x80000000
|
||||||
|
#define PHYS_SDRAM 0x80000000
|
||||||
|
#define PHYS_SDRAM_SIZE 0x80000000 /* 2GB DDR */
|
||||||
|
|
||||||
|
#define DEFAULT_SDRAM_SIZE (512 * SZ_1M) /* 512MB Minimum DDR4, see get_dram_size */
|
||||||
|
#define VAR_EEPROM_DRAM_START (PHYS_SDRAM + (DEFAULT_SDRAM_SIZE >> 1))
|
||||||
|
#define VAR_SOM_EEPROM_I2C_NAME "i2c@42530000"
|
||||||
|
#define VAR_CARRIER_EEPROM_I2C_NAME "i2c@44340000"
|
||||||
|
|
||||||
|
#define CFG_SYS_FSL_USDHC_NUM 2
|
||||||
|
|
||||||
|
/* Using ULP WDOG for reset */
|
||||||
|
#define WDOG_BASE_ADDR WDG3_BASE_ADDR
|
||||||
|
|
||||||
|
#if defined(CONFIG_CMD_NET)
|
||||||
|
#define PHY_ANEG_TIMEOUT 20000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -40,7 +40,6 @@
|
||||||
"boot_file=Image\0" \
|
"boot_file=Image\0" \
|
||||||
"boot_script_dhcp=boot.scr\0" \
|
"boot_script_dhcp=boot.scr\0" \
|
||||||
"console=ttymxc0\0" \
|
"console=ttymxc0\0" \
|
||||||
"fdt_addr=0x43000000\0" \
|
|
||||||
"fdt_board=dev\0" \
|
"fdt_board=dev\0" \
|
||||||
"initrd_addr=0x43800000\0" \
|
"initrd_addr=0x43800000\0" \
|
||||||
"initrd_high=0xffffffffffffffff\0" \
|
"initrd_high=0xffffffffffffffff\0" \
|
||||||
|
|
31
tools/imx9_image.sh
Executable file
31
tools/imx9_image.sh
Executable file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
# Script to check whether the file exists in mkimage cfg files for the i.MX9.
|
||||||
|
#
|
||||||
|
# usage: $0 <file.cfg>
|
||||||
|
|
||||||
|
file=$1
|
||||||
|
|
||||||
|
blobs=`awk '/^APPEND/ {print $2} /^IMAGE/ || /^DATA/ {print $3}' $file`
|
||||||
|
for f in $blobs; do
|
||||||
|
tmp=$srctree/$f
|
||||||
|
if [ $f = "u-boot-spl-ddr.bin" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f $f ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f $tmp ]; then
|
||||||
|
echo "WARNING '$tmp' not found, resulting binary is not-functional" >&2
|
||||||
|
|
||||||
|
# Comment-out the lines for un-existing files. This way,
|
||||||
|
# mkimage can keep working. This allows CI tests to pass even
|
||||||
|
# if the resulting binary won't boot.
|
||||||
|
sed -in "/$f/ s/./#&/" $file
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
Loading…
Reference in New Issue
Block a user