mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
Merge tag 'u-boot-imx-master-20240208' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx
- Add USB support for phycore-imx8mp - Fix environment corruption, reset on mx6sabresd - Print reset cause on imx8 - Extend mkimage to support generating an image for i.MXRT FlexSPI - Add new apalis and colibri variants - Add support for phyBOARD-Segin-i.MX93 support - Fix when FEC is primarily used instead of EQOS on i.MX93.
This commit is contained in:
@@ -1131,7 +1131,8 @@ dtb-$(CONFIG_ARCH_IMX8M) += \
|
||||
|
||||
dtb-$(CONFIG_ARCH_IMX9) += \
|
||||
imx93-11x11-evk.dtb \
|
||||
imx93-var-som-symphony.dtb
|
||||
imx93-var-som-symphony.dtb \
|
||||
imx93-phyboard-segin.dtb
|
||||
|
||||
dtb-$(CONFIG_ARCH_IMXRT) += imxrt1050-evk.dtb \
|
||||
imxrt1020-evk.dtb \
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
aliases {
|
||||
mmc1 = &usdhc3;
|
||||
};
|
||||
wdt-reboot {
|
||||
compatible = "wdt-reboot";
|
||||
wdt = <&wdog2>;
|
||||
bootph-pre-ram;
|
||||
};
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
@@ -18,3 +23,7 @@
|
||||
&pinctrl_usdhc3 {
|
||||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
&wdog2 {
|
||||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
@@ -70,6 +70,10 @@
|
||||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
&usb_dwc3_0 {
|
||||
dr_mode = "peripheral";
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
@@ -19,6 +19,36 @@
|
||||
stdout-path = &uart1;
|
||||
};
|
||||
|
||||
reg_can1_stby: regulator-can1-stby {
|
||||
compatible = "regulator-fixed";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexcan1_reg>;
|
||||
gpio = <&gpio3 20 GPIO_ACTIVE_LOW>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-name = "can1-stby";
|
||||
};
|
||||
|
||||
reg_can2_stby: regulator-can2-stby {
|
||||
compatible = "regulator-fixed";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexcan2_reg>;
|
||||
gpio = <&gpio3 21 GPIO_ACTIVE_LOW>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-name = "can2-stby";
|
||||
};
|
||||
|
||||
reg_usb1_vbus: regulator-usb1-vbus {
|
||||
compatible = "regulator-fixed";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usb1_vbus>;
|
||||
gpio = <&gpio1 12 GPIO_ACTIVE_LOW>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-name = "usb1_host_vbus";
|
||||
};
|
||||
|
||||
reg_usdhc2_vmmc: regulator-usdhc2 {
|
||||
compatible = "regulator-fixed";
|
||||
pinctrl-names = "default";
|
||||
@@ -57,6 +87,21 @@
|
||||
};
|
||||
};
|
||||
|
||||
/* CAN FD */
|
||||
&flexcan1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexcan1>;
|
||||
xceiver-supply = <®_can1_stby>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&flexcan2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexcan2>;
|
||||
xceiver-supply = <®_can2_stby>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-names = "default", "gpio";
|
||||
@@ -76,15 +121,15 @@
|
||||
compatible = "nxp,pca9533";
|
||||
reg = <0x62>;
|
||||
|
||||
led1 {
|
||||
led-1 {
|
||||
type = <PCA9532_TYPE_LED>;
|
||||
};
|
||||
|
||||
led2 {
|
||||
led-2 {
|
||||
type = <PCA9532_TYPE_LED>;
|
||||
};
|
||||
|
||||
led3 {
|
||||
led-3 {
|
||||
type = <PCA9532_TYPE_LED>;
|
||||
};
|
||||
};
|
||||
@@ -101,8 +146,51 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* USB1 Host mode Type-A */
|
||||
&usb3_phy0 {
|
||||
vbus-supply = <®_usb1_vbus>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb3_0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_dwc3_0 {
|
||||
dr_mode = "host";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* USB2 4-port USB3.0 HUB */
|
||||
&usb3_phy1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb3_1 {
|
||||
fsl,permanently-attached;
|
||||
fsl,disable-port-power-control;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_dwc3_1 {
|
||||
dr_mode = "host";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* RS232/RS485 */
|
||||
&uart2 {
|
||||
assigned-clocks = <&clk IMX8MP_CLK_UART2>;
|
||||
assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
uart-has-rtscts;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* SD-Card */
|
||||
&usdhc2 {
|
||||
assigned-clocks = <&clk IMX8MP_CLK_USDHC2>;
|
||||
assigned-clock-rates = <200000000>;
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_pins>;
|
||||
pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_pins>;
|
||||
@@ -113,6 +201,33 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
gpio-line-names = "", "", "X_PMIC_WDOG_B", "",
|
||||
"PMIC_SD_VSEL", "", "", "", "", "",
|
||||
"", "", "USB1_OTG_PWR", "", "", "X_nETHPHY_INT";
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
gpio-line-names = "", "", "", "",
|
||||
"", "", "", "", "", "",
|
||||
"", "", "X_SD2_CD_B", "", "", "",
|
||||
"", "", "", "SD2_RESET_B";
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
gpio-line-names = "", "", "", "",
|
||||
"", "", "", "", "", "",
|
||||
"", "", "", "", "", "",
|
||||
"", "", "", "", "nCAN1_EN", "nCAN2_EN";
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
gpio-line-names = "", "", "", "",
|
||||
"", "", "", "", "", "",
|
||||
"", "", "", "", "", "",
|
||||
"", "", "X_PMIC_IRQ_B", "", "nENET0_INT_PWDN";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl_eqos: eqosgrp {
|
||||
fsl,pins = <
|
||||
@@ -134,6 +249,32 @@
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexcan1: flexcan1grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI5_RXD2__CAN1_RX 0x154
|
||||
MX8MP_IOMUXC_SAI5_RXD1__CAN1_TX 0x154
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexcan2: flexcan2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI5_MCLK__CAN2_RX 0x154
|
||||
MX8MP_IOMUXC_SAI5_RXD3__CAN2_TX 0x154
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexcan1_reg: flexcan1reggrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI5_RXC__GPIO3_IO20 0x154
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexcan2_reg: flexcan2reggrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI5_RXD0__GPIO3_IO21 0x154
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_I2C2_SCL__I2C2_SCL 0x400001c2
|
||||
@@ -161,6 +302,21 @@
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usb1_vbus: usb1vbusgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_GPIO1_IO12__GPIO1_IO12 0x10
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_UART2_RXD__UART2_DCE_RX 0x140
|
||||
MX8MP_IOMUXC_UART2_TXD__UART2_DCE_TX 0x140
|
||||
MX8MP_IOMUXC_SAI3_RXC__UART2_DCE_CTS 0x140
|
||||
MX8MP_IOMUXC_SAI3_RXD__UART2_DCE_RTS 0x140
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_pins: usdhc2-gpiogrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SD2_CD_B__GPIO2_IO12 0x1c4
|
||||
|
||||
293
arch/arm/dts/imx93-phyboard-segin-u-boot.dtsi
Normal file
293
arch/arm/dts/imx93-phyboard-segin-u-boot.dtsi
Normal file
@@ -0,0 +1,293 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
||||
* Christoph Stoidner <c.stoidner@phytec.de>
|
||||
*
|
||||
* Product homepage:
|
||||
* phyBOARD-Segin carrier board is reused for the i.MX93 design.
|
||||
* https://www.phytec.eu/en/produkte/single-board-computer/phyboard-segin-imx6ul/
|
||||
*/
|
||||
|
||||
#include "imx93-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
wdt-reboot {
|
||||
compatible = "wdt-reboot";
|
||||
wdt = <&wdog3>;
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
};
|
||||
|
||||
aliases {
|
||||
ethernet0 = &fec;
|
||||
ethernet1 = &eqos;
|
||||
};
|
||||
|
||||
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_usdhc1 {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2_cd {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2_default {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2_100mhz {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2_200mhz {
|
||||
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>;
|
||||
};
|
||||
|
||||
&lpi2c1 {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
};
|
||||
|
||||
&lpi2c2 {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
};
|
||||
|
||||
&lpi2c3 {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
};
|
||||
|
||||
&s4muap {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&clk {
|
||||
bootph-all;
|
||||
bootph-pre-ram;
|
||||
/delete-property/ assigned-clocks;
|
||||
/delete-property/ assigned-clock-rates;
|
||||
/delete-property/ assigned-clock-parents;
|
||||
};
|
||||
|
||||
&osc_32k {
|
||||
bootph-all;
|
||||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
&osc_24m {
|
||||
bootph-all;
|
||||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
&clk_ext1 {
|
||||
bootph-all;
|
||||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
&wdog3 {
|
||||
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
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pmic: pmicgrp {
|
||||
bootph-pre-ram;
|
||||
fsl,pins = <
|
||||
MX93_PAD_ENET2_RD3__GPIO4_IO27 0x31e
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&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";
|
||||
pinctrl-0 = <&pinctrl_pmic>;
|
||||
interrupt-parent = <&gpio4>;
|
||||
interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
|
||||
|
||||
regulators {
|
||||
bootph-pre-ram;
|
||||
bootph-some-ram;
|
||||
buck1: BUCK1 {
|
||||
regulator-name = "VDD_SOC";
|
||||
regulator-min-microvolt = <610000>;
|
||||
regulator-max-microvolt = <950000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
regulator-ramp-delay = <3125>;
|
||||
};
|
||||
|
||||
buck2: BUCK2 {
|
||||
regulator-name = "VDDQ_0V6";
|
||||
regulator-min-microvolt = <600000>;
|
||||
regulator-max-microvolt = <600000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
buck4: BUCK4 {
|
||||
regulator-name = "VDD_3V3_BUCK";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
buck5: BUCK5 {
|
||||
regulator-name = "VDD_1V8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
buck6: BUCK6 {
|
||||
regulator-name = "VDD_1V1";
|
||||
regulator-min-microvolt = <1100000>;
|
||||
regulator-max-microvolt = <1100000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
ldo1: LDO1 {
|
||||
regulator-name = "PMIC_SNVS_1V8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
ldo4: LDO4 {
|
||||
regulator-name = "VDD_0V8";
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <800000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
ldo5: LDO5 {
|
||||
regulator-name = "NVCC_SD2";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
117
arch/arm/dts/imx93-phyboard-segin.dts
Normal file
117
arch/arm/dts/imx93-phyboard-segin.dts
Normal file
@@ -0,0 +1,117 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
||||
* Author: Wadim Egorov <w.egorov@phytec.de>, Christoph Stoidner <c.stoidner@phytec.de>
|
||||
* Copyright (C) 2024 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
*
|
||||
* Product homepage:
|
||||
* phyBOARD-Segin carrier board is reused for the i.MX93 design.
|
||||
* https://www.phytec.eu/en/produkte/single-board-computer/phyboard-segin-imx6ul/
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "imx93-phycore-som.dtsi"
|
||||
|
||||
/{
|
||||
model = "PHYTEC phyBOARD-Segin-i.MX93";
|
||||
compatible = "phytec,imx93-phyboard-segin", "phytec,imx93-phycore-som",
|
||||
"fsl,imx93";
|
||||
|
||||
chosen {
|
||||
stdout-path = &lpuart1;
|
||||
};
|
||||
|
||||
reg_usdhc2_vmmc: regulator-usdhc2 {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpio = <&gpio3 7 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_reg_usdhc2_vmmc>;
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-name = "VCC_SD";
|
||||
};
|
||||
};
|
||||
|
||||
/* Console */
|
||||
&lpuart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* eMMC */
|
||||
&usdhc1 {
|
||||
no-1-8-v;
|
||||
};
|
||||
|
||||
/* SD-Card */
|
||||
&usdhc2 {
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc2_default>, <&pinctrl_usdhc2_cd>;
|
||||
pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_cd>;
|
||||
pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_cd>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
|
||||
no-mmc;
|
||||
no-sdio;
|
||||
vmmc-supply = <®_usdhc2_vmmc>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_UART1_RXD__LPUART1_RX 0x31e
|
||||
MX93_PAD_UART1_TXD__LPUART1_TX 0x30e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_reg_usdhc2_vmmc: regusdhc2vmmcgrp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD2_RESET_B__GPIO3_IO07 0x31e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_cd: usdhc2cdgrp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD2_CD_B__GPIO3_IO00 0x31e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_default: usdhc2grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD2_CLK__USDHC2_CLK 0x179e
|
||||
MX93_PAD_SD2_CMD__USDHC2_CMD 0x139e
|
||||
MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x138e
|
||||
MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x138e
|
||||
MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x138e
|
||||
MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x139e
|
||||
MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_100mhz: usdhc2grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD2_CLK__USDHC2_CLK 0x179e
|
||||
MX93_PAD_SD2_CMD__USDHC2_CMD 0x139e
|
||||
MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x138e
|
||||
MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x138e
|
||||
MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x139e
|
||||
MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x139e
|
||||
MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_200mhz: usdhc2grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD2_CLK__USDHC2_CLK 0x178e
|
||||
MX93_PAD_SD2_CMD__USDHC2_CMD 0x139e
|
||||
MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x139e
|
||||
MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x139e
|
||||
MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x139e
|
||||
MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x139e
|
||||
MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
|
||||
>;
|
||||
};
|
||||
};
|
||||
126
arch/arm/dts/imx93-phycore-som.dtsi
Normal file
126
arch/arm/dts/imx93-phycore-som.dtsi
Normal file
@@ -0,0 +1,126 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
||||
* Author: Wadim Egorov <w.egorov@phytec.de>, Christoph Stoidner <c.stoidner@phytec.de>
|
||||
* Copyright (C) 2024 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
*
|
||||
* Product homepage:
|
||||
* https://www.phytec.eu/en/produkte/system-on-modules/phycore-imx-91-93/
|
||||
*/
|
||||
|
||||
#include <dt-bindings/leds/common.h>
|
||||
|
||||
#include "imx93.dtsi"
|
||||
|
||||
/{
|
||||
model = "PHYTEC phyCORE-i.MX93";
|
||||
compatible = "phytec,imx93-phycore-som", "fsl,imx93";
|
||||
|
||||
reserved-memory {
|
||||
ranges;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
linux,cma {
|
||||
compatible = "shared-dma-pool";
|
||||
reusable;
|
||||
alloc-ranges = <0 0x80000000 0 0x40000000>;
|
||||
size = <0 0x10000000>;
|
||||
linux,cma-default;
|
||||
};
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_leds>;
|
||||
|
||||
led-0 {
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
function = LED_FUNCTION_HEARTBEAT;
|
||||
gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* Ethernet */
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec>;
|
||||
phy-mode = "rmii";
|
||||
phy-handle = <ðphy1>;
|
||||
fsl,magic-packet;
|
||||
assigned-clocks = <&clk IMX93_CLK_ENET_TIMER1>,
|
||||
<&clk IMX93_CLK_ENET_REF>,
|
||||
<&clk IMX93_CLK_ENET_REF_PHY>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>,
|
||||
<&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>,
|
||||
<&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>;
|
||||
assigned-clock-rates = <100000000>, <50000000>, <50000000>;
|
||||
status = "okay";
|
||||
|
||||
mdio: mdio {
|
||||
clock-frequency = <5000000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ethphy1: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* eMMC */
|
||||
&usdhc1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usdhc1>;
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* Watchdog */
|
||||
&wdog3 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl_fec: fecgrp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_ENET2_MDC__ENET1_MDC 0x50e
|
||||
MX93_PAD_ENET2_MDIO__ENET1_MDIO 0x502
|
||||
MX93_PAD_ENET2_RD0__ENET1_RGMII_RD0 0x57e
|
||||
MX93_PAD_ENET2_RD1__ENET1_RGMII_RD1 0x57e
|
||||
MX93_PAD_ENET2_RXC__ENET1_RX_ER 0x5fe
|
||||
MX93_PAD_ENET2_RX_CTL__ENET1_RGMII_RX_CTL 0x57e
|
||||
MX93_PAD_ENET2_TD0__ENET1_RGMII_TD0 0x50e
|
||||
MX93_PAD_ENET2_TD1__ENET1_RGMII_TD1 0x50e
|
||||
MX93_PAD_ENET2_TX_CTL__ENET1_RGMII_TX_CTL 0x50e
|
||||
MX93_PAD_ENET2_TD2__ENET1_TX_CLK 0x4000050e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_leds: ledsgrp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_I2C1_SDA__GPIO1_IO01 0x31e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1: usdhc1grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD1_CLK__USDHC1_CLK 0x179e
|
||||
MX93_PAD_SD1_CMD__USDHC1_CMD 0x1386
|
||||
MX93_PAD_SD1_DATA0__USDHC1_DATA0 0x138e
|
||||
MX93_PAD_SD1_DATA1__USDHC1_DATA1 0x1386
|
||||
MX93_PAD_SD1_DATA2__USDHC1_DATA2 0x138e
|
||||
MX93_PAD_SD1_DATA3__USDHC1_DATA3 0x1386
|
||||
MX93_PAD_SD1_DATA4__USDHC1_DATA4 0x1386
|
||||
MX93_PAD_SD1_DATA5__USDHC1_DATA5 0x1386
|
||||
MX93_PAD_SD1_DATA6__USDHC1_DATA6 0x1386
|
||||
MX93_PAD_SD1_DATA7__USDHC1_DATA7 0x1386
|
||||
MX93_PAD_SD1_STROBE__USDHC1_STROBE 0x179e
|
||||
>;
|
||||
};
|
||||
};
|
||||
@@ -45,6 +45,45 @@ struct pass_over_info_t *get_pass_over_info(void)
|
||||
return p;
|
||||
}
|
||||
|
||||
static char *get_reset_cause(void)
|
||||
{
|
||||
sc_pm_reset_reason_t reason;
|
||||
|
||||
if (sc_pm_reset_reason(-1, &reason) != SC_ERR_NONE)
|
||||
return "Unknown reset";
|
||||
|
||||
switch (reason) {
|
||||
case SC_PM_RESET_REASON_POR:
|
||||
return "POR";
|
||||
case SC_PM_RESET_REASON_JTAG:
|
||||
return "JTAG reset ";
|
||||
case SC_PM_RESET_REASON_SW:
|
||||
return "Software reset";
|
||||
case SC_PM_RESET_REASON_WDOG:
|
||||
return "Watchdog reset";
|
||||
case SC_PM_RESET_REASON_LOCKUP:
|
||||
return "SCU lockup reset";
|
||||
case SC_PM_RESET_REASON_SNVS:
|
||||
return "SNVS reset";
|
||||
case SC_PM_RESET_REASON_TEMP:
|
||||
return "Temp panic reset";
|
||||
case SC_PM_RESET_REASON_MSI:
|
||||
return "MSI reset";
|
||||
case SC_PM_RESET_REASON_UECC:
|
||||
return "ECC reset";
|
||||
case SC_PM_RESET_REASON_SCFW_WDOG:
|
||||
return "SCFW watchdog reset";
|
||||
case SC_PM_RESET_REASON_ROM_WDOG:
|
||||
return "SCU ROM watchdog reset";
|
||||
case SC_PM_RESET_REASON_SECO:
|
||||
return "SECO reset";
|
||||
case SC_PM_RESET_REASON_SCFW_FAULT:
|
||||
return "SCFW fault reset";
|
||||
default:
|
||||
return "Unknown reset";
|
||||
}
|
||||
}
|
||||
|
||||
int arch_cpu_init(void)
|
||||
{
|
||||
#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_RECOVER_DATA_SECTION)
|
||||
@@ -322,6 +361,8 @@ int print_bootinfo(void)
|
||||
break;
|
||||
}
|
||||
|
||||
printf("Reset cause: %s\n", get_reset_cause());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,9 +37,15 @@ config TARGET_IMX93_VAR_SOM
|
||||
select IMX93
|
||||
select IMX9_LPDDR4X
|
||||
|
||||
config TARGET_PHYCORE_IMX93
|
||||
bool "phycore_imx93"
|
||||
select IMX93
|
||||
select IMX9_LPDDR4X
|
||||
|
||||
endchoice
|
||||
|
||||
source "board/freescale/imx93_evk/Kconfig"
|
||||
source "board/phytec/phycore_imx93/Kconfig"
|
||||
source "board/variscite/imx93_var_som/Kconfig"
|
||||
|
||||
endif
|
||||
|
||||
@@ -882,6 +882,11 @@ int board_interface_eth_init(struct udevice *dev, phy_interface_t interface_type
|
||||
device_is_compatible(dev, "nxp,imx93-dwmac-eqos"))
|
||||
return imx93_eqos_interface_init(dev, interface_type);
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX93) &&
|
||||
IS_ENABLED(CONFIG_FEC_MXC) &&
|
||||
device_is_compatible(dev, "fsl,imx93-fec"))
|
||||
return 0;
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
#include <image.h>
|
||||
#include <init.h>
|
||||
#include <net.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
@@ -254,39 +253,6 @@ int board_mmc_init(struct bd_info *bis)
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ar8031_phy_fixup(struct phy_device *phydev)
|
||||
{
|
||||
unsigned short val;
|
||||
|
||||
/* To enable AR8031 ouput a 125MHz clk from CLK_25M */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x7);
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
|
||||
|
||||
val = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
|
||||
val &= 0xffe3;
|
||||
val |= 0x18;
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0xe, val);
|
||||
|
||||
/* introduce tx clock delay */
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x5);
|
||||
val = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
|
||||
val |= 0x0100;
|
||||
phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
{
|
||||
ar8031_phy_fixup(phydev);
|
||||
|
||||
if (phydev->drv->config)
|
||||
phydev->drv->config(phydev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_VIDEO_IPUV3)
|
||||
static void disable_lvds(struct display_info_t const *dev)
|
||||
{
|
||||
|
||||
@@ -46,6 +46,10 @@ int board_late_init(void)
|
||||
case MMC3_BOOT:
|
||||
env_set_ulong("mmcdev", 2);
|
||||
break;
|
||||
case USB_BOOT:
|
||||
printf("Detect USB boot. Will enter fastboot mode!\n");
|
||||
env_set_ulong("dofastboot", 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
13
board/phytec/phycore_imx93/Kconfig
Normal file
13
board/phytec/phycore_imx93/Kconfig
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
if TARGET_PHYCORE_IMX93
|
||||
|
||||
config SYS_BOARD
|
||||
default "phycore_imx93"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "phytec"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "phycore_imx93"
|
||||
|
||||
endif
|
||||
10
board/phytec/phycore_imx93/MAINTAINERS
Normal file
10
board/phytec/phycore_imx93/MAINTAINERS
Normal file
@@ -0,0 +1,10 @@
|
||||
phyCORE-i.MX93
|
||||
M: Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
W: https://www.phytec.eu/en/produkte/system-on-modules/phycore-imx-91-93/
|
||||
S: Maintained
|
||||
F: arch/arm/dts/imx93-phyboard-segin.dts
|
||||
F: arch/arm/dts/imx93-phycore-som.dtsi
|
||||
F: arch/arm/dts/imx93-phyboard-segin-u-boot.dtsi
|
||||
F: board/phytec/phycore_imx93/
|
||||
F: configs/imx93-phyboard-segin_defconfig
|
||||
F: include/configs/phycore_imx93.h
|
||||
14
board/phytec/phycore_imx93/Makefile
Normal file
14
board/phytec/phycore_imx93/Makefile
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# Copyright 2022 NXP
|
||||
# Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
||||
# Christoph Stoidner <c.stoidner@phytec.de>
|
||||
# Copyright (C) 2024 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += phycore-imx93.o
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
obj-y += spl.o lpddr4_timing.o
|
||||
endif
|
||||
1546
board/phytec/phycore_imx93/lpddr4_timing.c
Normal file
1546
board/phytec/phycore_imx93/lpddr4_timing.c
Normal file
File diff suppressed because it is too large
Load Diff
42
board/phytec/phycore_imx93/phycore-imx93.c
Normal file
42
board/phytec/phycore_imx93/phycore-imx93.c
Normal file
@@ -0,0 +1,42 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
||||
* Author: Christoph Stoidner <c.stoidner@phytec.de>
|
||||
* Copyright (C) 2024 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
*/
|
||||
|
||||
#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 <asm/global_data.h>
|
||||
#include <asm/mach-imx/boot_mode.h>
|
||||
#include <env.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_mmc_get_env_dev(int devno)
|
||||
{
|
||||
return devno;
|
||||
}
|
||||
|
||||
int board_late_init(void)
|
||||
{
|
||||
switch (get_boot_device()) {
|
||||
case SD2_BOOT:
|
||||
env_set_ulong("mmcdev", 1);
|
||||
break;
|
||||
case MMC1_BOOT:
|
||||
env_set_ulong("mmcdev", 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
73
board/phytec/phycore_imx93/phycore_imx93.env
Normal file
73
board/phytec/phycore_imx93/phycore_imx93.env
Normal file
@@ -0,0 +1,73 @@
|
||||
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
||||
|
||||
image=Image
|
||||
console=ttyLP0
|
||||
fdt_addr=0x83000000
|
||||
fdto_addr=0x830c0000
|
||||
bootenv_addr=0x83500000
|
||||
fdt_file=CONFIG_DEFAULT_FDT_FILE
|
||||
ip_dyn=yes
|
||||
bootenv=bootenv.txt
|
||||
mmc_load_bootenv=fatload mmc ${mmcdev}:${mmcpart} ${bootenv_addr} ${bootenv}
|
||||
mmcdev=CONFIG_SYS_MMC_ENV_DEV
|
||||
mmcpart=1
|
||||
mmcroot=2
|
||||
mmcautodetect=yes
|
||||
mmcargs=setenv bootargs console=${console},${baudrate} earlycon
|
||||
root=/dev/mmcblk${mmcdev}p${mmcroot} ${raucargs} rootwait rw
|
||||
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
|
||||
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
|
||||
mmc_load_overlay=fatload mmc ${mmcdev}:${mmcpart} ${fdto_addr} ${overlay}
|
||||
mmc_apply_overlays=
|
||||
fdt address ${fdt_addr};
|
||||
for overlay in ${overlays};
|
||||
do;
|
||||
if run mmc_load_overlay; then
|
||||
fdt resize ${filesize};
|
||||
fdt apply ${fdto_addr};
|
||||
fi;
|
||||
done;
|
||||
mmcboot=
|
||||
echo Booting from mmc ...;
|
||||
if run mmc_load_bootenv; then
|
||||
env import -t ${bootenv_addr} ${filesize};
|
||||
fi;
|
||||
run mmcargs;
|
||||
if run loadfdt; then
|
||||
run mmc_apply_overlays;
|
||||
booti ${loadaddr} - ${fdt_addr};
|
||||
else
|
||||
echo WARN: Cannot load the DT;
|
||||
fi;
|
||||
nfsroot=/nfs
|
||||
netargs=setenv bootargs console=${console},${baudrate} earlycon
|
||||
root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
|
||||
net_load_bootenv=${get_cmd} ${bootenv_addr} ${bootenv}
|
||||
net_load_overlay=${get_cmd} ${fdto_addr} ${overlay}
|
||||
net_apply_overlays=
|
||||
fdt address ${fdt_addr};
|
||||
for overlay in ${overlays};
|
||||
do;
|
||||
if run net_load_overlay; then
|
||||
fdt resize ${filesize};
|
||||
fdt apply ${fdto_addr};
|
||||
fi;
|
||||
done;
|
||||
netboot=
|
||||
echo Booting from net ...;
|
||||
run netargs;
|
||||
if test ${ip_dyn} = yes; then
|
||||
setenv get_cmd dhcp;
|
||||
else
|
||||
setenv get_cmd tftp;
|
||||
fi;
|
||||
if run net_load_bootenv; then
|
||||
env import -t ${bootenv_addr} ${filesize};
|
||||
fi;
|
||||
${get_cmd} ${loadaddr} ${image};
|
||||
if ${get_cmd} ${fdt_addr} ${fdt_file}; then
|
||||
run net_apply_overlays;
|
||||
booti ${loadaddr} - ${fdt_addr};
|
||||
else
|
||||
echo WARN: Cannot load the DT;
|
||||
fi;
|
||||
148
board/phytec/phycore_imx93/spl.c
Normal file
148
board/phytec/phycore_imx93/spl.c
Normal file
@@ -0,0 +1,148 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
||||
* Author: Christoph Stoidner <c.stoidner@phytec.de>
|
||||
* Copyright (C) 2024 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
*/
|
||||
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/ddr.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch/trdc.h>
|
||||
#include <asm/mach-imx/boot_mode.h>
|
||||
#include <asm/sections.h>
|
||||
#include <hang.h>
|
||||
#include <init.h>
|
||||
#include <log.h>
|
||||
#include <power/pmic.h>
|
||||
#include <power/pca9450.h>
|
||||
#include <spl.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/*
|
||||
* Will be part of drivers/power/regulator/pca9450.c
|
||||
* when pca9451a support is added.
|
||||
*/
|
||||
#define PCA9450_REG_PWRCTRL_TOFF_DEB BIT(5)
|
||||
|
||||
int spl_board_boot_device(enum boot_device boot_dev_spl)
|
||||
{
|
||||
return BOOT_DEVICE_BOOTROM;
|
||||
}
|
||||
|
||||
void spl_board_init(void)
|
||||
{
|
||||
puts("Normal Boot\n");
|
||||
}
|
||||
|
||||
void spl_dram_init(void)
|
||||
{
|
||||
ddr_init(&dram_timing);
|
||||
}
|
||||
|
||||
int power_init_board(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
unsigned int val = 0;
|
||||
|
||||
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);
|
||||
|
||||
ret = pmic_reg_read(dev, PCA9450_PWR_CTRL);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
val = ret;
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE)) {
|
||||
/* 0.8v for Low drive mode */
|
||||
if (val & PCA9450_REG_PWRCTRL_TOFF_DEB) {
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x0c);
|
||||
pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x0c);
|
||||
} else {
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x10);
|
||||
pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x10);
|
||||
}
|
||||
} else {
|
||||
/* 0.9v for Over drive mode */
|
||||
if (val & PCA9450_REG_PWRCTRL_TOFF_DEB) {
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x14);
|
||||
pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x14);
|
||||
} else {
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x18);
|
||||
pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x18);
|
||||
}
|
||||
}
|
||||
|
||||
/* set standby voltage to 0.65v */
|
||||
if (val & PCA9450_REG_PWRCTRL_TOFF_DEB)
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x0);
|
||||
else
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x4);
|
||||
|
||||
/* I2C_LT_EN*/
|
||||
pmic_reg_write(dev, 0xa, 0x3);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int imx9_probe_mu(void *ctx, struct event *event);
|
||||
void board_init_f(ulong dummy)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Clear the BSS. */
|
||||
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||
|
||||
timer_init();
|
||||
|
||||
arch_cpu_init();
|
||||
|
||||
spl_early_init();
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
ret = imx9_probe_mu(NULL, NULL);
|
||||
if (ret) {
|
||||
printf("Fail to init ELE API\n");
|
||||
} else {
|
||||
printf("SOC: 0x%x\n", gd->arch.soc_rev);
|
||||
printf("LC: 0x%x\n", gd->arch.lifecycle);
|
||||
}
|
||||
|
||||
clock_init();
|
||||
|
||||
power_init_board();
|
||||
|
||||
if (!IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE))
|
||||
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);
|
||||
}
|
||||
@@ -147,6 +147,16 @@ const struct toradex_som toradex_modules[] = {
|
||||
[74] = { "Verdin AM62 Dual 1GB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) },
|
||||
[75] = { "Verdin AM62 Dual 1GB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) },
|
||||
[76] = { "Verdin AM62 Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_AM62_A53) },
|
||||
[77] = { "Colibri iMX6S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6) },
|
||||
[78] = { "Colibri iMX6S 256MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) },
|
||||
[79] = { "Colibri iMX6DL 512MB", TARGET_IS_ENABLED(COLIBRI_IMX6) },
|
||||
[80] = { "Colibri iMX6DL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) },
|
||||
[81] = { "Colibri iMX7D 512MB", TARGET_IS_ENABLED(COLIBRI_IMX7) },
|
||||
[82] = { "Apalis iMX6D 512MB", TARGET_IS_ENABLED(APALIS_IMX6) },
|
||||
[83] = { "Apalis iMX6Q 1GB", TARGET_IS_ENABLED(APALIS_IMX6) },
|
||||
[84] = { "Apalis iMX6D 1GB IT", TARGET_IS_ENABLED(APALIS_IMX6) },
|
||||
[85] = { "Apalis iMX6Q 2GB IT", TARGET_IS_ENABLED(APALIS_IMX6) },
|
||||
[86] = { "Verdin iMX8M Mini DualLite 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
|
||||
};
|
||||
|
||||
struct pid4list {
|
||||
|
||||
@@ -102,6 +102,16 @@ enum {
|
||||
VERDIN_AM62D_1G_IT,
|
||||
VERDIN_AM62D_1G_WIFI_BT_IT, /* 75 */
|
||||
VERDIN_AM62Q_2G_WIFI_BT_IT,
|
||||
COLIBRI_IMX6S_NOWINCE,
|
||||
COLIBRI_IMX6S_IT_NOWINCE,
|
||||
COLIBRI_IMX6DL_NOWINCE,
|
||||
COLIBRI_IMX6DL_IT_NOWINCE, /* 80 */
|
||||
COLIBRI_IMX7D_NOWINCE,
|
||||
APALIS_IMX6D_NOWINCE,
|
||||
APALIS_IMX6Q_NOWINCE,
|
||||
APALIS_IMX6D_IT_NOWINCE,
|
||||
APALIS_IMX6Q_IT_NOWINCE, /* 85 */
|
||||
VERDIN_IMX8MMDL_2G_IT,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@@ -118,6 +118,7 @@ CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_GETTIME=y
|
||||
CONFIG_CMD_KASLRSEED=y
|
||||
CONFIG_CMD_SYSBOOT=y
|
||||
CONFIG_CMD_UUID=y
|
||||
CONFIG_CMD_PMIC=y
|
||||
@@ -215,6 +216,7 @@ CONFIG_DM_REGULATOR_BD71837=y
|
||||
CONFIG_SPL_DM_REGULATOR_BD71837=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_RNG=y
|
||||
CONFIG_DM_RTC=y
|
||||
CONFIG_RTC_M41T62=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
|
||||
@@ -125,6 +125,7 @@ CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_GETTIME=y
|
||||
CONFIG_CMD_KASLRSEED=y
|
||||
CONFIG_CMD_SYSBOOT=y
|
||||
CONFIG_CMD_UUID=y
|
||||
CONFIG_CMD_PMIC=y
|
||||
@@ -234,6 +235,7 @@ CONFIG_DM_REGULATOR_PCA9450=y
|
||||
CONFIG_SPL_DM_REGULATOR_PCA9450=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_RNG=y
|
||||
CONFIG_DM_RTC=y
|
||||
CONFIG_RTC_M41T62=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
|
||||
138
configs/imx93-phyboard-segin_defconfig
Normal file
138
configs/imx93-phyboard-segin_defconfig
Normal file
@@ -0,0 +1,138 @@
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_IMX9=y
|
||||
CONFIG_TEXT_BASE=0x80200000
|
||||
CONFIG_SYS_MALLOC_LEN=0x2000000
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x20000
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
CONFIG_ENV_SOURCE_FILE="phycore_imx93"
|
||||
CONFIG_ENV_SIZE=0x10000
|
||||
CONFIG_ENV_OFFSET=0x700000
|
||||
CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/imximage.cfg"
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="imx93-phyboard-segin"
|
||||
CONFIG_SPL_TEXT_BASE=0x2049A000
|
||||
CONFIG_AHAB_BOOT=y
|
||||
CONFIG_TARGET_PHYCORE_IMX93=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
CONFIG_SYS_MONITOR_LEN=524288
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL_STACK=0x20519dd0
|
||||
CONFIG_SPL=y
|
||||
CONFIG_ENV_OFFSET_REDUND=0x720000
|
||||
CONFIG_CMD_DEKBLOB=y
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x88000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x80400000
|
||||
CONFIG_SYS_MEMTEST_START=0x80000000
|
||||
CONFIG_SYS_MEMTEST_END=0x90000000
|
||||
CONFIG_REMAKE_ELF=y
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
CONFIG_BOOTCOMMAND="mmc dev ${mmcdev}; if mmc rescan; then if run loadimage; then run mmcboot; else run netboot; fi; fi;"
|
||||
CONFIG_DEFAULT_FDT_FILE="oftree"
|
||||
CONFIG_SYS_CBSIZE=2048
|
||||
CONFIG_SYS_PBSIZE=2074
|
||||
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_LOAD_IMX_CONTAINER=y
|
||||
CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx9/container.cfg"
|
||||
# CONFIG_SPL_SHARES_INIT_SP_ADDR is not set
|
||||
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_CMD_ERASEENV=y
|
||||
CONFIG_CMD_NVEDIT_EFI=y
|
||||
CONFIG_CRC32_VERIFY=y
|
||||
CONFIG_CMD_EEPROM=y
|
||||
CONFIG_SYS_I2C_EEPROM_BUS=2
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2
|
||||
CONFIG_SYS_EEPROM_SIZE=4096
|
||||
CONFIG_SYS_EEPROM_PAGE_WRITE_BITS=5
|
||||
CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS=5
|
||||
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_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_REDUNDAND_ENVIRONMENT=y
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_SYS_MMC_ENV_DEV=1
|
||||
CONFIG_USE_ETHPRIME=y
|
||||
CONFIG_ETHPRIME="eth1"
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_SPL_DM=y
|
||||
CONFIG_SPL_CLK_IMX93=y
|
||||
CONFIG_CLK_IMX93=y
|
||||
CONFIG_DFU_MMC=y
|
||||
CONFIG_DFU_RAM=y
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_IMX_RGPIO2P=y
|
||||
CONFIG_DM_I2C=y
|
||||
CONFIG_SYS_I2C_IMX_LPI2C=y
|
||||
CONFIG_I2C_EEPROM=y
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR=0x50
|
||||
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_TI_GENERIC=y
|
||||
CONFIG_DM_ETH_PHY=y
|
||||
CONFIG_DWC_ETH_QOS=y
|
||||
CONFIG_DWC_ETH_QOS_IMX=y
|
||||
CONFIG_FEC_MXC=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX93=y
|
||||
CONFIG_POWER_DOMAIN=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_DM_PMIC_PCA9450=y
|
||||
CONFIG_SPL_DM_PMIC_PCA9450=y
|
||||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_PCA9450=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_RTC=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_FSL_LPUART=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DM_SPI=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SPL_SYSRESET=y
|
||||
CONFIG_SYSRESET_WATCHDOG=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_IMX_TMU=y
|
||||
CONFIG_ULP_WATCHDOG=y
|
||||
CONFIG_LZO=y
|
||||
CONFIG_BZIP2=y
|
||||
@@ -21,6 +21,9 @@ CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SPL_LIBDISK_SUPPORT=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_LTO=y
|
||||
CONFIG_HAS_BOARD_SIZE_LIMIT=y
|
||||
CONFIG_BOARD_SIZE_LIMIT=715766
|
||||
CONFIG_FIT=y
|
||||
CONFIG_SPL_FIT_PRINT=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
@@ -101,6 +104,8 @@ CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SYSRESET_WATCHDOG=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DM_SPI=y
|
||||
CONFIG_MXC_SPI=y
|
||||
@@ -127,3 +132,4 @@ CONFIG_IMX_HDMI=y
|
||||
CONFIG_SPLASH_SCREEN=y
|
||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||
CONFIG_BMP_16BPP=y
|
||||
CONFIG_IMX_WATCHDOG=y
|
||||
|
||||
@@ -27,7 +27,7 @@ CONFIG_FIT_EXTERNAL_OFFSET=0x3000
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="mmc dev ${mmcdev}; if mmc rescan; then if run loadimage; then run mmcboot; else run netboot; fi; fi;"
|
||||
CONFIG_BOOTCOMMAND="if test ${dofastboot} = 1; then fastboot 0; fi; mmc dev ${mmcdev}; if mmc rescan; then if run loadimage; then run mmcboot; else run netboot; fi; fi;"
|
||||
CONFIG_DEFAULT_FDT_FILE="oftree"
|
||||
CONFIG_SYS_CBSIZE=2048
|
||||
CONFIG_SYS_PBSIZE=2074
|
||||
@@ -65,6 +65,9 @@ CONFIG_CMD_FUSE=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_CMD_DHCP=y
|
||||
CONFIG_CMD_MII=y
|
||||
CONFIG_CMD_PING=y
|
||||
@@ -85,6 +88,17 @@ CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_SPL_DM=y
|
||||
CONFIG_CLK_COMPOSITE_CCF=y
|
||||
CONFIG_CLK_IMX8MP=y
|
||||
CONFIG_USB_FUNCTION_FASTBOOT=y
|
||||
CONFIG_FASTBOOT_BUF_ADDR=0x42800000
|
||||
CONFIG_FASTBOOT_BUF_SIZE=0x13000000
|
||||
CONFIG_FASTBOOT_FLASH=y
|
||||
CONFIG_FASTBOOT_UUU_SUPPORT=y
|
||||
CONFIG_FASTBOOT_FLASH_MMC_DEV=2
|
||||
CONFIG_FASTBOOT_MMC_BOOT_SUPPORT=y
|
||||
CONFIG_FASTBOOT_MMC_BOOT1_NAME="mmc2boot0"
|
||||
CONFIG_FASTBOOT_MMC_BOOT2_NAME="mmc2boot1"
|
||||
CONFIG_FASTBOOT_MMC_USER_SUPPORT=y
|
||||
CONFIG_FASTBOOT_MMC_USER_NAME="mmc2"
|
||||
CONFIG_MXC_GPIO=y
|
||||
CONFIG_DM_I2C=y
|
||||
# CONFIG_SPL_DM_I2C is not set
|
||||
@@ -104,10 +118,14 @@ CONFIG_DM_ETH_PHY=y
|
||||
CONFIG_FEC_MXC=y
|
||||
CONFIG_RGMII=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_PHY_IMX8MQ_USB=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX8M=y
|
||||
CONFIG_SPL_POWER_LEGACY=y
|
||||
CONFIG_POWER_DOMAIN=y
|
||||
CONFIG_IMX8M_POWER_DOMAIN=y
|
||||
CONFIG_IMX8MP_HSIOMIX_BLKCTRL=y
|
||||
CONFIG_POWER_PCA9450=y
|
||||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
@@ -120,4 +138,17 @@ CONFIG_SPL_SYSRESET=y
|
||||
CONFIG_SYSRESET_PSCI=y
|
||||
CONFIG_SYSRESET_WATCHDOG=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_DM_USB_GADGET=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_XHCI_DWC3_OF_SIMPLE=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GENERIC=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="FSL"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x0525
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
|
||||
CONFIG_IMX_WATCHDOG=y
|
||||
|
||||
61
doc/board/phytec/imx93-phyboard-segin.rst
Normal file
61
doc/board/phytec/imx93-phyboard-segin.rst
Normal file
@@ -0,0 +1,61 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
phyBOARD-Segin-i.MX93
|
||||
=====================
|
||||
|
||||
U-Boot for the phyBOARD-Segin-i.MX93.
|
||||
|
||||
Quick Start
|
||||
-----------
|
||||
|
||||
- Get and Build the ARM Trusted firmware
|
||||
- Get the DDR firmware
|
||||
- Get ahab-container.img
|
||||
- Build U-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
|
||||
|
||||
$ make imx93-phyboard-segin_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
|
||||
@@ -7,6 +7,7 @@ PHYTEC
|
||||
:maxdepth: 2
|
||||
|
||||
imx8mm-phygate-tauri-l
|
||||
imx93-phyboard-segin
|
||||
phycore-am62x
|
||||
phycore-imx8mm
|
||||
phycore-imx8mp
|
||||
|
||||
@@ -882,6 +882,28 @@ void sc_pm_reboot(sc_ipc_t ipc, sc_pm_reset_type_t type)
|
||||
misc_call(dev, SC_TRUE, &msg, size, &msg, size);
|
||||
}
|
||||
|
||||
int sc_pm_reset_reason(sc_ipc_t ipc, sc_pm_reset_reason_t *reason)
|
||||
{
|
||||
struct udevice *dev = gd->arch.scu_dev;
|
||||
struct sc_rpc_msg_s msg;
|
||||
int size = sizeof(struct sc_rpc_msg_s);
|
||||
int ret;
|
||||
|
||||
RPC_VER(&msg) = SC_RPC_VERSION;
|
||||
RPC_SVC(&msg) = (u8)SC_RPC_SVC_PM;
|
||||
RPC_FUNC(&msg) = (u8)PM_FUNC_RESET_REASON;
|
||||
RPC_SIZE(&msg) = 1U;
|
||||
|
||||
ret = misc_call(dev, SC_FALSE, &msg, size, &msg, size);
|
||||
if (ret)
|
||||
printf("%s: res:%d\n", __func__, RPC_U8(&msg, 0U));
|
||||
|
||||
if (reason)
|
||||
*reason = RPC_U8(&msg, 0U);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int sc_pm_get_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_pm_power_mode_t *mode)
|
||||
{
|
||||
|
||||
@@ -19,6 +19,11 @@
|
||||
"fdt_addr=0x48000000\0" \
|
||||
"fdt_file=" CONFIG_DEFAULT_FDT_FILE "\0" \
|
||||
"ip_dyn=yes\0" \
|
||||
"dofastboot=0\0" \
|
||||
"fastboot_raw_partition_bootloader=64 8128\0" \
|
||||
"fastboot_raw_partition_all=0 4194304\0" \
|
||||
"emmc_dev=2\0" \
|
||||
"sd_dev=1\0" \
|
||||
"mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
|
||||
"mmcpart=1\0" \
|
||||
"mmcroot=2\0" \
|
||||
|
||||
28
include/configs/phycore_imx93.h
Normal file
28
include/configs/phycore_imx93.h
Normal file
@@ -0,0 +1,28 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2022 NXP
|
||||
* Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
||||
* Christoph Stoidner <c.stoidner@phytec.de>
|
||||
* Copyright (C) 2024 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __PHYCORE_IMX93_H
|
||||
#define __PHYCORE_IMX93_H
|
||||
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
|
||||
#define CFG_SYS_UBOOT_BASE \
|
||||
(QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512)
|
||||
|
||||
#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
|
||||
|
||||
/* Using ULP WDOG for reset */
|
||||
#define WDOG_BASE_ADDR WDG3_BASE_ADDR
|
||||
|
||||
#endif /* __PHYCORE_IMX93_H */
|
||||
@@ -75,6 +75,7 @@ int sc_pm_set_clock_parent(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
int sc_pm_cpu_start(sc_ipc_t ipc, sc_rsrc_t resource, sc_bool_t enable,
|
||||
sc_faddr_t address);
|
||||
void sc_pm_reboot(sc_ipc_t ipc, sc_pm_reset_type_t type);
|
||||
int sc_pm_reset_reason(sc_ipc_t ipc, sc_pm_reset_reason_t *reason);
|
||||
sc_bool_t sc_pm_is_partition_started(sc_ipc_t ipc, sc_rm_pt_t pt);
|
||||
int sc_pm_resource_reset(sc_ipc_t ipc, sc_rsrc_t resource);
|
||||
|
||||
@@ -385,6 +386,11 @@ static inline void sc_pm_reboot(sc_ipc_t ipc, sc_pm_reset_type_t type)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int sc_pm_reset_reason(sc_ipc_t ipc, sc_pm_reset_reason_t *reason)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_v2x_build_info(sc_ipc_t ipc, u32 *version, u32 *commit)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@@ -210,33 +210,37 @@ typedef struct {
|
||||
uint8_t datasetup;
|
||||
uint8_t coladdrwidth;
|
||||
uint8_t devcfgenable;
|
||||
uint8_t reserved_2[3];
|
||||
uint8_t deviceModeType;
|
||||
uint16_t waitTimeCfgCommands;
|
||||
uint8_t devmodeseq[4];
|
||||
uint8_t devmodearg[4];
|
||||
uint32_t devmodearg;
|
||||
uint8_t cmd_enable;
|
||||
uint8_t reserved_3[3];
|
||||
uint8_t configModeType[3];
|
||||
uint8_t cmd_seq[16] ;
|
||||
uint8_t cmd_arg[16];
|
||||
uint8_t controllermisc[4];
|
||||
uint32_t controllermisc;
|
||||
uint8_t dev_type;
|
||||
uint8_t sflash_pad;
|
||||
uint8_t serial_clk;
|
||||
uint8_t lut_custom ;
|
||||
uint8_t reserved_4[8];
|
||||
uint8_t sflashA1[4];
|
||||
uint8_t sflashA2[4];
|
||||
uint8_t sflashB1[4];
|
||||
uint8_t sflashB2[4];
|
||||
uint8_t cspadover[4];
|
||||
uint8_t sclkpadover[4];
|
||||
uint8_t datapadover[4];
|
||||
uint8_t dqspadover[4];
|
||||
uint8_t timeout[4];
|
||||
uint8_t commandInt[4];
|
||||
uint8_t datavalid[4];
|
||||
uint8_t busyoffset[2];
|
||||
uint8_t busybitpolarity[2];
|
||||
uint8_t lut_custom;
|
||||
uint8_t reserved_2[8];
|
||||
uint32_t sflashA1;
|
||||
uint32_t sflashA2;
|
||||
uint32_t sflashB1;
|
||||
uint32_t sflashB2;
|
||||
uint32_t cspadover;
|
||||
uint32_t sclkpadover;
|
||||
uint32_t datapadover;
|
||||
uint32_t dqspadover;
|
||||
uint32_t timeout;
|
||||
uint32_t commandInt;
|
||||
uint16_t datavalid[2];
|
||||
uint16_t busyoffset;
|
||||
uint16_t busybitpolarity;
|
||||
uint8_t lut[256];
|
||||
uint8_t lutCustomSeq[48];
|
||||
uint8_t reserved_3[16];
|
||||
|
||||
} __attribute__((packed)) fspi_conf;
|
||||
|
||||
typedef void (*set_dcd_val_t)(struct imx_header *imxhdr,
|
||||
|
||||
@@ -148,6 +148,27 @@ config SERIAL_CLK_FREQUENCY
|
||||
Chip specific frequency: other value 30MHz
|
||||
1-30MHz 2-50MHz 3-60MHz 4-75MHz 5-80MHz 6-100MHz 7-133MHz 8-166MHz
|
||||
|
||||
config FSPI_COL_ADDR_W
|
||||
hex "Column Address With"
|
||||
default 0x00
|
||||
depends on FSPI_CONF_HEADER
|
||||
help
|
||||
Default 0. For HyperBus protocol, it is fixed to 3
|
||||
|
||||
config FSPI_CONTROLLER_MISC
|
||||
hex "FSPI miscellaneous control"
|
||||
default 0x00000000
|
||||
depends on FSPI_CONF_HEADER
|
||||
help
|
||||
Default 0. [0x40] Controller Misc Options
|
||||
|
||||
config FSPI_FLASH_A1_SIZE
|
||||
hex "Size in bytes of Flash A1"
|
||||
default 0x10000000
|
||||
depends on FSPI_CONF_HEADER
|
||||
help
|
||||
Size of Flash connected to A1 in bytes
|
||||
|
||||
config LUT_CUSTOM_SEQUENCE
|
||||
hex "Enable Custom Look Up Table(LUT) Sequence"
|
||||
default 0x00
|
||||
|
||||
@@ -426,36 +426,39 @@ static int generate_fspi_header (int ifd)
|
||||
.read_sample = CONFIG_READ_CLK_SOURCE,
|
||||
.datahold = 0x03,
|
||||
.datasetup = 0x03,
|
||||
.coladdrwidth = 0x00,
|
||||
.coladdrwidth = CONFIG_FSPI_COL_ADDR_W,
|
||||
.devcfgenable = 0x00,
|
||||
.reserved_2 = {0x00, 0x00, 0x00},
|
||||
.deviceModeType = 0x00,
|
||||
.waitTimeCfgCommands = 0x0000,
|
||||
.devmodeseq = {0x00, 0x00, 0x00, 0x00},
|
||||
.devmodearg = {0x00, 0x00, 0x00, 0x00},
|
||||
.devmodearg = 0x00000000,
|
||||
.cmd_enable = 0x00,
|
||||
.reserved_3 = {0x00},
|
||||
.configModeType = {0x00},
|
||||
.cmd_seq = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
.cmd_arg = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
.controllermisc = {0x00, 0x00, 0x00, 0x00},
|
||||
.controllermisc = cpu_to_le32(CONFIG_FSPI_CONTROLLER_MISC),
|
||||
.dev_type = CONFIG_DEVICE_TYPE,
|
||||
.sflash_pad = CONFIG_FLASH_PAD_TYPE,
|
||||
.serial_clk = CONFIG_SERIAL_CLK_FREQUENCY,
|
||||
.lut_custom = CONFIG_LUT_CUSTOM_SEQUENCE,
|
||||
.reserved_4 = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
.sflashA1 = {0x00, 0x00, 0x00, 0x10},
|
||||
.sflashA2 = {0x00, 0x00, 0x00, 0x00},
|
||||
.sflashB1 = {0x00, 0x00, 0x00, 0x00},
|
||||
.sflashB2 = {0x00, 0x00, 0x00, 0x00},
|
||||
.cspadover = {0x00, 0x00, 0x00, 0x00},
|
||||
.sclkpadover = {0x00, 0x00, 0x00, 0x00},
|
||||
.datapadover = {0x00, 0x00, 0x00, 0x00},
|
||||
.dqspadover = {0x00, 0x00, 0x00, 0x00},
|
||||
.timeout = {0x00, 0x00, 0x00, 0x00},
|
||||
.commandInt = {0x00, 0x00, 0x00, 0x00},
|
||||
.datavalid = {0x00, 0x00, 0x00, 0x00},
|
||||
.busyoffset = {0x00, 0x00},
|
||||
.busybitpolarity = {0x00, 0x00},
|
||||
.reserved_2 = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
.sflashA1 = cpu_to_le32(CONFIG_FSPI_FLASH_A1_SIZE),
|
||||
.sflashA2 = 0x00000000,
|
||||
.sflashB1 = 0x00000000,
|
||||
.sflashB2 = 0x00000000,
|
||||
.cspadover = 0x00000000,
|
||||
.sclkpadover = 0x00000000,
|
||||
.datapadover = 0x00000000,
|
||||
.dqspadover = 0x00000000,
|
||||
.timeout = 0x00000000,
|
||||
.commandInt = 0x00000000,
|
||||
.datavalid = {0x0000, 0x0000},
|
||||
.busyoffset = 0x0000,
|
||||
.busybitpolarity = 0x0000,
|
||||
.lutCustomSeq = {0x00},
|
||||
.reserved_3 = {0x00}
|
||||
};
|
||||
|
||||
for (val = strtok(lut_str, ","); val; val = strtok(NULL, ",")) {
|
||||
|
||||
@@ -908,6 +908,64 @@ int imximage_check_params(struct image_tool_params *params)
|
||||
(params->xflag) || !(strlen(params->imagename));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FSPI_CONF_HEADER
|
||||
static void generate_fspi_header(int ifd)
|
||||
{
|
||||
int i = 0;
|
||||
char *val;
|
||||
char lut_str[] = CONFIG_LUT_SEQUENCE;
|
||||
|
||||
fspi_conf fspi_conf_data = {
|
||||
.tag = {0x46, 0x43, 0x46, 0x42},
|
||||
.version = {0x00, 0x00, 0x01, 0x56},
|
||||
.reserved_1 = {0x00, 0x00, 0x00, 0x00},
|
||||
.read_sample = CONFIG_READ_CLK_SOURCE,
|
||||
.datahold = 0x03,
|
||||
.datasetup = 0x03,
|
||||
.coladdrwidth = CONFIG_FSPI_COL_ADDR_W,
|
||||
.devcfgenable = 0x00,
|
||||
.deviceModeType = 0x00,
|
||||
.waitTimeCfgCommands = 0x0000,
|
||||
.devmodeseq = {0x00, 0x00, 0x00, 0x00},
|
||||
.devmodearg = 0x00000000,
|
||||
.cmd_enable = 0x00,
|
||||
.configModeType = {0x00},
|
||||
.cmd_seq = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
.cmd_arg = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
.controllermisc = cpu_to_le32(CONFIG_FSPI_CONTROLLER_MISC),
|
||||
.dev_type = CONFIG_DEVICE_TYPE,
|
||||
.sflash_pad = CONFIG_FLASH_PAD_TYPE,
|
||||
.serial_clk = CONFIG_SERIAL_CLK_FREQUENCY,
|
||||
.lut_custom = CONFIG_LUT_CUSTOM_SEQUENCE,
|
||||
.reserved_2 = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
.sflashA1 = cpu_to_le32(CONFIG_FSPI_FLASH_A1_SIZE),
|
||||
.sflashA2 = 0x00000000,
|
||||
.sflashB1 = 0x00000000,
|
||||
.sflashB2 = 0x00000000,
|
||||
.cspadover = 0x00000000,
|
||||
.sclkpadover = 0x00000000,
|
||||
.datapadover = 0x00000000,
|
||||
.dqspadover = 0x00000000,
|
||||
.timeout = 0x00000000,
|
||||
.commandInt = 0x00000000,
|
||||
.datavalid = {0x0000, 0x0000},
|
||||
.busyoffset = 0x0000,
|
||||
.busybitpolarity = 0x0000,
|
||||
.lutCustomSeq = {0x00},
|
||||
.reserved_3 = {0x00}
|
||||
};
|
||||
|
||||
for (val = strtok(lut_str, ","); val; val = strtok(NULL, ","))
|
||||
fspi_conf_data.lut[i++] = strtoul(val, NULL, 16);
|
||||
|
||||
lseek(ifd, 0, SEEK_CUR);
|
||||
if (write(ifd, &fspi_conf_data, sizeof(fspi_conf_data)) == -1)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int imximage_generate(struct image_tool_params *params,
|
||||
struct image_type_params *tparams)
|
||||
{
|
||||
@@ -917,6 +975,11 @@ static int imximage_generate(struct image_tool_params *params,
|
||||
char *datafile = params->datafile;
|
||||
uint32_t pad_len, header_size;
|
||||
|
||||
#ifdef CONFIG_FSPI_CONF_HEADER
|
||||
int fspi_fd;
|
||||
char *fspi;
|
||||
#endif
|
||||
|
||||
memset(&imximage_header, 0, sizeof(imximage_header));
|
||||
|
||||
/*
|
||||
@@ -977,6 +1040,20 @@ static int imximage_generate(struct image_tool_params *params,
|
||||
|
||||
pad_len = ROUND(sbuf.st_size, 4096) - sbuf.st_size;
|
||||
|
||||
#ifdef CONFIG_FSPI_CONF_HEADER
|
||||
fspi = CONFIG_FSPI_CONF_FILE;
|
||||
fspi_fd = open(fspi, O_RDWR | O_CREAT, S_IRWXU);
|
||||
if (fspi_fd < 0) {
|
||||
fprintf(stderr, "Can't open %s: %s\n",
|
||||
fspi, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
generate_fspi_header(fspi_fd);
|
||||
close(fspi_fd);
|
||||
|
||||
#endif
|
||||
|
||||
return pad_len;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user