u-boot-imx-20230525
------------------- - i.MX93 series - Fixes CI: https://source.denx.de/u-boot/custodians/u-boot-imx/-/pipelines/16412 -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQS2TmnA27QKhpKSZe309WXkmmjvpgUCZG8HrQ8cc2JhYmljQGRl bnguZGUACgkQ9PVl5Jpo76Zj7ACfRzFvybIZReXEjtdmJH6eyrgRXNAAnisjumty 4bq+E+hFrWar5kC2iTAa =uqqN -----END PGP SIGNATURE----- Merge tag 'u-boot-imx-20230525' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx u-boot-imx-20230525 ------------------- - i.MX93 series - Fixes CI: https://source.denx.de/u-boot/custodians/u-boot-imx/-/pipelines/16412
This commit is contained in:
commit
6dcee70692
84 changed files with 6176 additions and 2471 deletions
|
@ -5,3 +5,54 @@
|
|||
&usbotg1 {
|
||||
dr_mode = "peripheral";
|
||||
};
|
||||
|
||||
&usdhc1 {
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_usdhc1_gpio>;
|
||||
pinctrl-1 = <&pinctrl_usdhc1_100mhz>, <&pinctrl_usdhc1_gpio>;
|
||||
pinctrl-2 = <&pinctrl_usdhc1_200mhz>, <&pinctrl_usdhc1_gpio>;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc1 {
|
||||
fsl,pins = <
|
||||
MX7D_PAD_SD1_CMD__SD1_CMD 0x59
|
||||
MX7D_PAD_SD1_CLK__SD1_CLK 0x19
|
||||
MX7D_PAD_SD1_DATA0__SD1_DATA0 0x59
|
||||
MX7D_PAD_SD1_DATA1__SD1_DATA1 0x59
|
||||
MX7D_PAD_SD1_DATA2__SD1_DATA2 0x59
|
||||
MX7D_PAD_SD1_DATA3__SD1_DATA3 0x59
|
||||
>;
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl_usdhc1_gpio: usdhc1gpiogrp {
|
||||
fsl,pins = <
|
||||
MX7D_PAD_SD1_CD_B__GPIO5_IO0 0x59 /* CD */
|
||||
MX7D_PAD_SD1_WP__GPIO5_IO1 0x59 /* WP */
|
||||
MX7D_PAD_SD1_RESET_B__GPIO5_IO2 0x59 /* vmmc */
|
||||
MX7D_PAD_GPIO1_IO08__SD1_VSELECT 0x59 /* VSELECT */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1_100mhz: usdhc1100mhzgrp {
|
||||
fsl,pins = <
|
||||
MX7D_PAD_SD1_CMD__SD1_CMD 0x5a
|
||||
MX7D_PAD_SD1_CLK__SD1_CLK 0x1a
|
||||
MX7D_PAD_SD1_DATA0__SD1_DATA0 0x5a
|
||||
MX7D_PAD_SD1_DATA1__SD1_DATA1 0x5a
|
||||
MX7D_PAD_SD1_DATA2__SD1_DATA2 0x5a
|
||||
MX7D_PAD_SD1_DATA3__SD1_DATA3 0x5a
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1_200mhz: usdhc1200mhzgrp {
|
||||
fsl,pins = <
|
||||
MX7D_PAD_SD1_CMD__SD1_CMD 0x5b
|
||||
MX7D_PAD_SD1_CLK__SD1_CLK 0x1b
|
||||
MX7D_PAD_SD1_DATA0__SD1_DATA0 0x5b
|
||||
MX7D_PAD_SD1_DATA1__SD1_DATA1 0x5b
|
||||
MX7D_PAD_SD1_DATA2__SD1_DATA2 0x5b
|
||||
MX7D_PAD_SD1_DATA3__SD1_DATA3 0x5b
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -10,25 +10,6 @@
|
|||
bootph-pre-ram;
|
||||
};
|
||||
|
||||
aliases {
|
||||
usbgadget0 = &usbg1;
|
||||
usbgadget1 = &usbg2;
|
||||
};
|
||||
|
||||
usbg1: usbg1 {
|
||||
compatible = "fsl,imx27-usb-gadget";
|
||||
dr_mode = "peripheral";
|
||||
chipidea,usb = <&usbotg1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usbg2: usbg2 {
|
||||
compatible = "fsl,imx27-usb-gadget";
|
||||
dr_mode = "peripheral";
|
||||
chipidea,usb = <&usbotg2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
firmware {
|
||||
optee {
|
||||
compatible = "linaro,optee-tz";
|
||||
|
@ -141,16 +122,6 @@
|
|||
reset-deassert-us = <100000>;
|
||||
};
|
||||
|
||||
&usbotg1 {
|
||||
status = "okay";
|
||||
extcon = <&ptn5110>;
|
||||
};
|
||||
|
||||
&usbotg2 {
|
||||
status = "okay";
|
||||
extcon = <&ptn5110_2>;
|
||||
};
|
||||
|
||||
&s4muap {
|
||||
bootph-pre-ram;
|
||||
status = "okay";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright 2021 NXP
|
||||
* Copyright 2022 NXP
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
@ -8,29 +8,18 @@
|
|||
#include "imx93.dtsi"
|
||||
|
||||
/ {
|
||||
model = "NXP i.MX93 11X11 EVK board";
|
||||
compatible = "fsl,imx93-11x11-evk", "fsl,imx93";
|
||||
|
||||
chosen {
|
||||
stdout-path = &lpuart1;
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
audio: audio@a4120000 {
|
||||
compatible = "shared-dma-pool";
|
||||
reg = <0 0xa4120000 0 0x100000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
|
||||
reg_can2_stby: regulator-can2-stby {
|
||||
reg_vref_1v8: regulator-adc-vref {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "can2-stby";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
gpio = <&adp5585gpio 5 GPIO_ACTIVE_LOW>;
|
||||
enable-active-low;
|
||||
regulator-name = "vref_1v8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
|
||||
reg_usdhc2_vmmc: regulator-usdhc2 {
|
||||
|
@ -43,81 +32,57 @@
|
|||
gpio = <&gpio3 7 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
};
|
||||
|
||||
usdhc3_pwrseq: usdhc3_pwrseq {
|
||||
compatible = "mmc-pwrseq-simple";
|
||||
reset-gpios = <&pcal6524 20 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
reg_vref_1v8: regulator-adc-vref {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vref_1v8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
&adc1 {
|
||||
vref-supply = <®_vref_1v8>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&mu1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&lpi2c1 {
|
||||
&mu2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&eqos {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_eqos>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-handle = <ðphy1>;
|
||||
status = "okay";
|
||||
|
||||
mdio {
|
||||
compatible = "snps,dwmac-mdio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&pinctrl_lpi2c1>;
|
||||
pinctrl-1 = <&pinctrl_lpi2c1>;
|
||||
clock-frequency = <5000000>;
|
||||
|
||||
ethphy1: ethernet-phy@1 {
|
||||
reg = <1>;
|
||||
eee-broken-1000t;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-handle = <ðphy2>;
|
||||
fsl,magic-packet;
|
||||
status = "okay";
|
||||
|
||||
ptn5110: tcpc@50 {
|
||||
compatible = "nxp,ptn5110";
|
||||
reg = <0x50>;
|
||||
interrupt-parent = <&pcal6524>;
|
||||
interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
|
||||
status = "okay";
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clock-frequency = <5000000>;
|
||||
|
||||
port {
|
||||
typec1_dr_sw: endpoint {
|
||||
remote-endpoint = <&usb1_drd_sw>;
|
||||
};
|
||||
};
|
||||
|
||||
typec1_con: connector {
|
||||
compatible = "usb-c-connector";
|
||||
label = "USB-C";
|
||||
power-role = "dual";
|
||||
data-role = "dual";
|
||||
try-power-role = "sink";
|
||||
source-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;
|
||||
sink-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)
|
||||
PDO_VAR(5000, 20000, 3000)>;
|
||||
op-sink-microwatt = <15000000>;
|
||||
self-powered;
|
||||
};
|
||||
};
|
||||
|
||||
ptn5110_2: tcpc@51 {
|
||||
compatible = "nxp,ptn5110";
|
||||
reg = <0x51>;
|
||||
interrupt-parent = <&pcal6524>;
|
||||
interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
typec2_dr_sw: endpoint {
|
||||
remote-endpoint = <&usb2_drd_sw>;
|
||||
};
|
||||
};
|
||||
|
||||
typec2_con: connector {
|
||||
compatible = "usb-c-connector";
|
||||
label = "USB-C";
|
||||
power-role = "dual";
|
||||
data-role = "dual";
|
||||
try-power-role = "sink";
|
||||
source-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;
|
||||
sink-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)
|
||||
PDO_VAR(5000, 20000, 3000)>;
|
||||
op-sink-microwatt = <15000000>;
|
||||
self-powered;
|
||||
ethphy2: ethernet-phy@2 {
|
||||
reg = <2>;
|
||||
eee-broken-1000t;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -134,15 +99,14 @@
|
|||
pmic@25 {
|
||||
compatible = "nxp,pca9451a";
|
||||
reg = <0x25>;
|
||||
pinctrl-names = "default";
|
||||
interrupt-parent = <&pcal6524>;
|
||||
interrupts = <12 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
|
||||
|
||||
regulators {
|
||||
buck1: BUCK1 {
|
||||
regulator-name = "BUCK1";
|
||||
regulator-min-microvolt = <600000>;
|
||||
regulator-max-microvolt = <2187500>;
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2237500>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
regulator-ramp-delay = <3125>;
|
||||
|
@ -189,22 +153,6 @@
|
|||
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>;
|
||||
|
@ -250,48 +198,6 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&lpuart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usbotg1 {
|
||||
dr_mode = "otg";
|
||||
hnp-disable;
|
||||
srp-disable;
|
||||
adp-disable;
|
||||
usb-role-switch;
|
||||
disable-over-current;
|
||||
samsung,picophy-pre-emp-curr-control = <3>;
|
||||
samsung,picophy-dc-vol-level-adjust = <7>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
usb1_drd_sw: endpoint {
|
||||
remote-endpoint = <&typec1_dr_sw>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&usbotg2 {
|
||||
dr_mode = "otg";
|
||||
hnp-disable;
|
||||
srp-disable;
|
||||
adp-disable;
|
||||
usb-role-switch;
|
||||
disable-over-current;
|
||||
samsung,picophy-pre-emp-curr-control = <3>;
|
||||
samsung,picophy-dc-vol-level-adjust = <7>;
|
||||
status = "okay";
|
||||
|
||||
port {
|
||||
usb2_drd_sw: endpoint {
|
||||
remote-endpoint = <&typec2_dr_sw>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&usdhc1 {
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc1>;
|
||||
|
@ -315,116 +221,17 @@
|
|||
no-mmc;
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-handle = <ðphy2>;
|
||||
fsl,magic-packet;
|
||||
status = "okay";
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clock-frequency = <5000000>;
|
||||
|
||||
ethphy2: ethernet-phy@2 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
reg = <2>;
|
||||
eee-broken-1000t;
|
||||
rtl821x,aldps-disable;
|
||||
rtl821x,clkout-disable;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&eqos {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_eqos>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-handle = <ðphy1>;
|
||||
status = "okay";
|
||||
|
||||
mdio {
|
||||
compatible = "snps,dwmac-mdio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clock-frequency = <5000000>;
|
||||
|
||||
ethphy1: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
reg = <1>;
|
||||
eee-broken-1000t;
|
||||
rtl821x,aldps-disable;
|
||||
rtl821x,clkout-disable;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&flexspi {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexspi>;
|
||||
status = "disabled";
|
||||
|
||||
flash0: flash@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "jedec,spi-nor";
|
||||
spi-max-frequency = <80000000>;
|
||||
spi-tx-bus-width = <1>;
|
||||
spi-rx-bus-width = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
pinctrl_flexcan2: flexcan2grp {
|
||||
pinctrl_lpi2c2: lpi2c2grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_GPIO_IO25__CAN2_TX 0x139e
|
||||
MX93_PAD_GPIO_IO27__CAN2_RX 0x139e
|
||||
MX93_PAD_I2C2_SCL__LPI2C2_SCL 0x40000b9e
|
||||
MX93_PAD_I2C2_SDA__LPI2C2_SDA 0x40000b9e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexspi: flexspigrp {
|
||||
pinctrl_pcal6524: pcal6524grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD3_CMD__FLEXSPI1_A_SS0_B 0x42
|
||||
MX93_PAD_SD1_DATA3__FLEXSPI1_A_SS1_B 0x42
|
||||
MX93_PAD_SD3_CLK__FLEXSPI1_A_SCLK 0x42
|
||||
MX93_PAD_SD1_STROBE__FLEXSPI1_A_DQS 0x42
|
||||
MX93_PAD_SD3_DATA0__FLEXSPI1_A_DATA00 0x42
|
||||
MX93_PAD_SD3_DATA1__FLEXSPI1_A_DATA01 0x42
|
||||
MX93_PAD_SD3_DATA2__FLEXSPI1_A_DATA02 0x42
|
||||
MX93_PAD_SD3_DATA3__FLEXSPI1_A_DATA03 0x42
|
||||
MX93_PAD_SD1_DATA4__FLEXSPI1_A_DATA04 0x42
|
||||
MX93_PAD_SD1_DATA5__FLEXSPI1_A_DATA05 0x42
|
||||
MX93_PAD_SD1_DATA6__FLEXSPI1_A_DATA06 0x42
|
||||
MX93_PAD_SD1_DATA7__FLEXSPI1_A_DATA07 0x42
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_fec: fecgrp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_ENET2_MDC__ENET1_MDC 0x57e
|
||||
MX93_PAD_ENET2_MDIO__ENET1_MDIO 0x57e
|
||||
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
|
||||
MX93_PAD_CCM_CLKO2__GPIO3_IO27 0x31e
|
||||
>;
|
||||
};
|
||||
|
||||
|
@ -447,23 +254,22 @@
|
|||
>;
|
||||
};
|
||||
|
||||
pinctrl_lpi2c1: lpi2c1grp {
|
||||
pinctrl_fec: fecgrp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_I2C1_SCL__LPI2C1_SCL 0x40000b9e
|
||||
MX93_PAD_I2C1_SDA__LPI2C1_SDA 0x40000b9e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_lpi2c2: lpi2c2grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_I2C2_SCL__LPI2C2_SCL 0x40000b9e
|
||||
MX93_PAD_I2C2_SDA__LPI2C2_SDA 0x40000b9e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pcal6524: pcal6524grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_CCM_CLKO2__GPIO3_IO27 0x31e
|
||||
MX93_PAD_ENET2_MDC__ENET1_MDC 0x57e
|
||||
MX93_PAD_ENET2_MDIO__ENET1_MDIO 0x57e
|
||||
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
|
||||
>;
|
||||
};
|
||||
|
||||
|
@ -474,16 +280,9 @@
|
|||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_UART2_TXD__LPUART2_TX 0x31e
|
||||
MX93_PAD_UART2_RXD__LPUART2_RX 0x31e
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1: usdhc1grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD1_CLK__USDHC1_CLK 0x17fe
|
||||
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
|
||||
|
@ -493,7 +292,7 @@
|
|||
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 0x17fe
|
||||
MX93_PAD_SD1_STROBE__USDHC1_STROBE 0x15fe
|
||||
>;
|
||||
};
|
||||
|
||||
|
@ -511,7 +310,7 @@
|
|||
|
||||
pinctrl_usdhc2: usdhc2grp {
|
||||
fsl,pins = <
|
||||
MX93_PAD_SD2_CLK__USDHC2_CLK 0x17fe
|
||||
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
|
||||
|
@ -521,7 +320,3 @@
|
|||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&wdog3 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
||||
/*
|
||||
* Copyright 2022 NXP
|
||||
*/
|
||||
|
@ -10,57 +10,57 @@
|
|||
* The pin function ID is a tuple of
|
||||
* <mux_reg conf_reg input_reg mux_mode input_val>
|
||||
*/
|
||||
#define MX93_PAD_DAP_TDI__JTAG_MUX_TDI 0x0000 0x01B0 0x03E0 0x0 0x0
|
||||
#define MX93_PAD_DAP_TDI__JTAG_MUX_TDI 0x0000 0x01B0 0x03D8 0x0 0x0
|
||||
#define MX93_PAD_DAP_TDI__MQS2_LEFT 0x0000 0x01B0 0x0000 0x1 0x0
|
||||
#define MX93_PAD_DAP_TDI__CAN2_TX 0x0000 0x01B0 0x0000 0x3 0x0
|
||||
#define MX93_PAD_DAP_TDI__FLEXIO2_FLEXIO30 0x0000 0x01B0 0x0000 0x4 0x0
|
||||
#define MX93_PAD_DAP_TDI__GPIO3_IO28 0x0000 0x01B0 0x03CC 0x5 0x0
|
||||
#define MX93_PAD_DAP_TDI__LPUART5_RX 0x0000 0x01B0 0x0438 0x6 0x0
|
||||
#define MX93_PAD_DAP_TMS_SWDIO__JTAG_MUX_TMS 0x0004 0x01B4 0x03E4 0x0 0x0
|
||||
#define MX93_PAD_DAP_TDI__GPIO3_IO28 0x0000 0x01B0 0x0000 0x5 0x0
|
||||
#define MX93_PAD_DAP_TDI__LPUART5_RX 0x0000 0x01B0 0x0430 0x6 0x0
|
||||
#define MX93_PAD_DAP_TMS_SWDIO__JTAG_MUX_TMS 0x0004 0x01B4 0x03DC 0x0 0x0
|
||||
#define MX93_PAD_DAP_TMS_SWDIO__FLEXIO2_FLEXIO31 0x0004 0x01B4 0x0000 0x4 0x0
|
||||
#define MX93_PAD_DAP_TMS_SWDIO__GPIO3_IO29 0x0004 0x01B4 0x03D0 0x5 0x0
|
||||
#define MX93_PAD_DAP_TMS_SWDIO__GPIO3_IO29 0x0004 0x01B4 0x0000 0x5 0x0
|
||||
#define MX93_PAD_DAP_TMS_SWDIO__LPUART5_RTS_B 0x0004 0x01B4 0x0000 0x6 0x0
|
||||
#define MX93_PAD_DAP_TCLK_SWCLK__JTAG_MUX_TCK 0x0008 0x01B8 0x03DC 0x0 0x0
|
||||
#define MX93_PAD_DAP_TCLK_SWCLK__JTAG_MUX_TCK 0x0008 0x01B8 0x03D4 0x0 0x0
|
||||
#define MX93_PAD_DAP_TCLK_SWCLK__FLEXIO1_FLEXIO30 0x0008 0x01B8 0x0000 0x4 0x0
|
||||
#define MX93_PAD_DAP_TCLK_SWCLK__GPIO3_IO30 0x0008 0x01B8 0x0000 0x5 0x0
|
||||
#define MX93_PAD_DAP_TCLK_SWCLK__LPUART5_CTS_B 0x0008 0x01B8 0x0434 0x6 0x0
|
||||
#define MX93_PAD_DAP_TCLK_SWCLK__LPUART5_CTS_B 0x0008 0x01B8 0x042C 0x6 0x0
|
||||
#define MX93_PAD_DAP_TDO_TRACESWO__JTAG_MUX_TDO 0x000C 0x01BC 0x0000 0x0 0x0
|
||||
#define MX93_PAD_DAP_TDO_TRACESWO__MQS2_RIGHT 0x000C 0x01BC 0x0000 0x1 0x0
|
||||
#define MX93_PAD_DAP_TDO_TRACESWO__CAN2_RX 0x000C 0x01BC 0x0364 0x3 0x0
|
||||
#define MX93_PAD_DAP_TDO_TRACESWO__FLEXIO1_FLEXIO31 0x000C 0x01BC 0x0000 0x4 0x0
|
||||
#define MX93_PAD_DAP_TDO_TRACESWO__GPIO3_IO31 0x000C 0x01BC 0x0000 0x5 0x0
|
||||
#define MX93_PAD_DAP_TDO_TRACESWO__LPUART5_TX 0x000C 0x01BC 0x043C 0x6 0x0
|
||||
#define MX93_PAD_DAP_TDO_TRACESWO__LPUART5_TX 0x000C 0x01BC 0x0434 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO00__GPIO2_IO00 0x0010 0x01C0 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO00__LPI2C3_SDA 0x0010 0x01C0 0x03EC 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO00__LPI2C3_SDA 0x0010 0x01C0 0x03E4 0x11 0x0
|
||||
#define MX93_PAD_GPIO_IO00__MEDIAMIX_CAM_CLK 0x0010 0x01C0 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO00__MEDIAMIX_DISP_CLK 0x0010 0x01C0 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO00__LPSPI6_PCS0 0x0010 0x01C0 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO00__LPUART5_TX 0x0010 0x01C0 0x043C 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO00__LPI2C5_SDA 0x0010 0x01C0 0x03F4 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO00__LPUART5_TX 0x0010 0x01C0 0x0434 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO00__LPI2C5_SDA 0x0010 0x01C0 0x03EC 0x16 0x0
|
||||
#define MX93_PAD_GPIO_IO00__FLEXIO1_FLEXIO00 0x0010 0x01C0 0x036C 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO01__GPIO2_IO01 0x0014 0x01C4 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO01__LPI2C3_SCL 0x0014 0x01C4 0x03E8 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO01__LPI2C3_SCL 0x0014 0x01C4 0x03E0 0x11 0x0
|
||||
#define MX93_PAD_GPIO_IO01__MEDIAMIX_CAM_DATA00 0x0014 0x01C4 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO01__MEDIAMIX_DISP_DE 0x0014 0x01C4 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO01__LPSPI6_SIN 0x0014 0x01C4 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO01__LPUART5_RX 0x0014 0x01C4 0x0438 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO01__LPI2C5_SCL 0x0014 0x01C4 0x03F0 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO01__LPUART5_RX 0x0014 0x01C4 0x0430 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO01__LPI2C5_SCL 0x0014 0x01C4 0x03E8 0x16 0x0
|
||||
#define MX93_PAD_GPIO_IO01__FLEXIO1_FLEXIO01 0x0014 0x01C4 0x0370 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO02__GPIO2_IO02 0x0018 0x01C8 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO02__LPI2C4_SDA 0x0018 0x01C8 0x0000 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO02__LPI2C4_SDA 0x0018 0x01C8 0x0000 0x11 0x0
|
||||
#define MX93_PAD_GPIO_IO02__MEDIAMIX_CAM_VSYNC 0x0018 0x01C8 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO02__MEDIAMIX_DISP_VSYNC 0x0018 0x01C8 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO02__LPSPI6_SOUT 0x0018 0x01C8 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO02__LPUART5_CTS_B 0x0018 0x01C8 0x0434 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO02__LPI2C6_SDA 0x0018 0x01C8 0x03FC 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO02__LPUART5_CTS_B 0x0018 0x01C8 0x042C 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO02__LPI2C6_SDA 0x0018 0x01C8 0x03F4 0x16 0x0
|
||||
#define MX93_PAD_GPIO_IO02__FLEXIO1_FLEXIO02 0x0018 0x01C8 0x0374 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO03__GPIO2_IO03 0x001C 0x01CC 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO03__LPI2C4_SCL 0x001C 0x01CC 0x0000 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO03__LPI2C4_SCL 0x001C 0x01CC 0x0000 0x11 0x0
|
||||
#define MX93_PAD_GPIO_IO03__MEDIAMIX_CAM_HSYNC 0x001C 0x01CC 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO03__MEDIAMIX_DISP_HSYNC 0x001C 0x01CC 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO03__LPSPI6_SCK 0x001C 0x01CC 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO03__LPUART5_RTS_B 0x001C 0x01CC 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO03__LPI2C6_SCL 0x001C 0x01CC 0x03F8 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO03__LPI2C6_SCL 0x001C 0x01CC 0x03F0 0x16 0x0
|
||||
#define MX93_PAD_GPIO_IO03__FLEXIO1_FLEXIO03 0x001C 0x01CC 0x0378 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO04__GPIO2_IO04 0x0020 0x01D0 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO04__TPM3_CH0 0x0020 0x01D0 0x0000 0x1 0x0
|
||||
|
@ -68,23 +68,23 @@
|
|||
#define MX93_PAD_GPIO_IO04__MEDIAMIX_DISP_DATA00 0x0020 0x01D0 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO04__LPSPI7_PCS0 0x0020 0x01D0 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO04__LPUART6_TX 0x0020 0x01D0 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO04__LPI2C6_SDA 0x0020 0x01D0 0x03FC 0x6 0x1
|
||||
#define MX93_PAD_GPIO_IO04__LPI2C6_SDA 0x0020 0x01D0 0x03F4 0x16 0x1
|
||||
#define MX93_PAD_GPIO_IO04__FLEXIO1_FLEXIO04 0x0020 0x01D0 0x037C 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO05__GPIO2_IO05 0x0024 0x01D4 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO05__TPM4_CH0 0x0024 0x01D4 0x0000 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO05__PDM_BIT_STREAM00 0x0024 0x01D4 0x0440 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO05__PDM_BIT_STREAM00 0x0024 0x01D4 0x0438 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO05__MEDIAMIX_DISP_DATA01 0x0024 0x01D4 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO05__LPSPI7_SIN 0x0024 0x01D4 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO05__LPUART6_RX 0x0024 0x01D4 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO05__LPI2C6_SCL 0x0024 0x01D4 0x03F8 0x6 0x1
|
||||
#define MX93_PAD_GPIO_IO05__LPI2C6_SCL 0x0024 0x01D4 0x03F0 0x16 0x1
|
||||
#define MX93_PAD_GPIO_IO05__FLEXIO1_FLEXIO05 0x0024 0x01D4 0x0380 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO06__GPIO2_IO06 0x0028 0x01D8 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO06__TPM5_CH0 0x0028 0x01D8 0x0000 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO06__PDM_BIT_STREAM01 0x0028 0x01D8 0x0444 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO06__PDM_BIT_STREAM01 0x0028 0x01D8 0x043C 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO06__MEDIAMIX_DISP_DATA02 0x0028 0x01D8 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO06__LPSPI7_SOUT 0x0028 0x01D8 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO06__LPUART6_CTS_B 0x0028 0x01D8 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO06__LPI2C7_SDA 0x0028 0x01D8 0x0404 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO06__LPI2C7_SDA 0x0028 0x01D8 0x03FC 0x16 0x0
|
||||
#define MX93_PAD_GPIO_IO06__FLEXIO1_FLEXIO06 0x0028 0x01D8 0x0384 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO07__GPIO2_IO07 0x002C 0x01DC 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO07__LPSPI3_PCS1 0x002C 0x01DC 0x0000 0x1 0x0
|
||||
|
@ -92,7 +92,7 @@
|
|||
#define MX93_PAD_GPIO_IO07__MEDIAMIX_DISP_DATA03 0x002C 0x01DC 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO07__LPSPI7_SCK 0x002C 0x01DC 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO07__LPUART6_RTS_B 0x002C 0x01DC 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO07__LPI2C7_SCL 0x002C 0x01DC 0x0400 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO07__LPI2C7_SCL 0x002C 0x01DC 0x03F8 0x16 0x0
|
||||
#define MX93_PAD_GPIO_IO07__FLEXIO1_FLEXIO07 0x002C 0x01DC 0x0388 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO08__GPIO2_IO08 0x0030 0x01E0 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO08__LPSPI3_PCS0 0x0030 0x01E0 0x0000 0x1 0x0
|
||||
|
@ -100,7 +100,7 @@
|
|||
#define MX93_PAD_GPIO_IO08__MEDIAMIX_DISP_DATA04 0x0030 0x01E0 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO08__TPM6_CH0 0x0030 0x01E0 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO08__LPUART7_TX 0x0030 0x01E0 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO08__LPI2C7_SDA 0x0030 0x01E0 0x0404 0x6 0x1
|
||||
#define MX93_PAD_GPIO_IO08__LPI2C7_SDA 0x0030 0x01E0 0x03FC 0x16 0x1
|
||||
#define MX93_PAD_GPIO_IO08__FLEXIO1_FLEXIO08 0x0030 0x01E0 0x038C 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO09__GPIO2_IO09 0x0034 0x01E4 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO09__LPSPI3_SIN 0x0034 0x01E4 0x0000 0x1 0x0
|
||||
|
@ -108,7 +108,7 @@
|
|||
#define MX93_PAD_GPIO_IO09__MEDIAMIX_DISP_DATA05 0x0034 0x01E4 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO09__TPM3_EXTCLK 0x0034 0x01E4 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO09__LPUART7_RX 0x0034 0x01E4 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO09__LPI2C7_SCL 0x0034 0x01E4 0x0400 0x6 0x1
|
||||
#define MX93_PAD_GPIO_IO09__LPI2C7_SCL 0x0034 0x01E4 0x03F8 0x16 0x1
|
||||
#define MX93_PAD_GPIO_IO09__FLEXIO1_FLEXIO09 0x0034 0x01E4 0x0390 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO10__GPIO2_IO10 0x0038 0x01E8 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO10__LPSPI3_SOUT 0x0038 0x01E8 0x0000 0x1 0x0
|
||||
|
@ -116,7 +116,7 @@
|
|||
#define MX93_PAD_GPIO_IO10__MEDIAMIX_DISP_DATA06 0x0038 0x01E8 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO10__TPM4_EXTCLK 0x0038 0x01E8 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO10__LPUART7_CTS_B 0x0038 0x01E8 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO10__LPI2C8_SDA 0x0038 0x01E8 0x040C 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO10__LPI2C8_SDA 0x0038 0x01E8 0x0404 0x16 0x0
|
||||
#define MX93_PAD_GPIO_IO10__FLEXIO1_FLEXIO10 0x0038 0x01E8 0x0394 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO11__GPIO2_IO11 0x003C 0x01EC 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO11__LPSPI3_SCK 0x003C 0x01EC 0x0000 0x1 0x0
|
||||
|
@ -124,47 +124,47 @@
|
|||
#define MX93_PAD_GPIO_IO11__MEDIAMIX_DISP_DATA07 0x003C 0x01EC 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO11__TPM5_EXTCLK 0x003C 0x01EC 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO11__LPUART7_RTS_B 0x003C 0x01EC 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO11__LPI2C8_SCL 0x003C 0x01EC 0x0408 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO11__LPI2C8_SCL 0x003C 0x01EC 0x0400 0x16 0x0
|
||||
#define MX93_PAD_GPIO_IO11__FLEXIO1_FLEXIO11 0x003C 0x01EC 0x0398 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO12__GPIO2_IO12 0x0040 0x01F0 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO12__TPM3_CH2 0x0040 0x01F0 0x0000 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO12__PDM_BIT_STREAM02 0x0040 0x01F0 0x0448 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO12__PDM_BIT_STREAM02 0x0040 0x01F0 0x0440 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO12__MEDIAMIX_DISP_DATA08 0x0040 0x01F0 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO12__LPSPI8_PCS0 0x0040 0x01F0 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO12__LPUART8_TX 0x0040 0x01F0 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO12__LPI2C8_SDA 0x0040 0x01F0 0x040C 0x6 0x1
|
||||
#define MX93_PAD_GPIO_IO12__SAI3_RX_SYNC 0x0040 0x01F0 0x0458 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO12__LPI2C8_SDA 0x0040 0x01F0 0x0404 0x16 0x1
|
||||
#define MX93_PAD_GPIO_IO12__SAI3_RX_SYNC 0x0040 0x01F0 0x0450 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO13__GPIO2_IO13 0x0044 0x01F4 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO13__TPM4_CH2 0x0044 0x01F4 0x0000 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO13__PDM_BIT_STREAM03 0x0044 0x01F4 0x044C 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO13__PDM_BIT_STREAM03 0x0044 0x01F4 0x0444 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO13__MEDIAMIX_DISP_DATA09 0x0044 0x01F4 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO13__LPSPI8_SIN 0x0044 0x01F4 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO13__LPUART8_RX 0x0044 0x01F4 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO13__LPI2C8_SCL 0x0044 0x01F4 0x0408 0x6 0x1
|
||||
#define MX93_PAD_GPIO_IO13__LPI2C8_SCL 0x0044 0x01F4 0x0400 0x16 0x1
|
||||
#define MX93_PAD_GPIO_IO13__FLEXIO1_FLEXIO13 0x0044 0x01F4 0x039C 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO14__GPIO2_IO14 0x0048 0x01F8 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO14__LPUART3_TX 0x0048 0x01F8 0x0424 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO14__LPUART3_TX 0x0048 0x01F8 0x041C 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO14__MEDIAMIX_CAM_DATA06 0x0048 0x01F8 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO14__MEDIAMIX_DISP_DATA10 0x0048 0x01F8 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO14__LPSPI8_SOUT 0x0048 0x01F8 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO14__LPUART8_CTS_B 0x0048 0x01F8 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO14__LPUART4_TX 0x0048 0x01F8 0x0430 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO14__LPUART4_TX 0x0048 0x01F8 0x0428 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO14__FLEXIO1_FLEXIO14 0x0048 0x01F8 0x03A0 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO15__GPIO2_IO15 0x004C 0x01FC 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO15__LPUART3_RX 0x004C 0x01FC 0x0420 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO15__LPUART3_RX 0x004C 0x01FC 0x0418 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO15__MEDIAMIX_CAM_DATA07 0x004C 0x01FC 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO15__MEDIAMIX_DISP_DATA11 0x004C 0x01FC 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO15__LPSPI8_SCK 0x004C 0x01FC 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO15__LPUART8_RTS_B 0x004C 0x01FC 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO15__LPUART4_RX 0x004C 0x01FC 0x042C 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO15__LPUART4_RX 0x004C 0x01FC 0x0424 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO15__FLEXIO1_FLEXIO15 0x004C 0x01FC 0x03A4 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO16__GPIO2_IO16 0x0050 0x0200 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO16__SAI3_TX_BCLK 0x0050 0x0200 0x0000 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO16__PDM_BIT_STREAM02 0x0050 0x0200 0x0448 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO16__PDM_BIT_STREAM02 0x0050 0x0200 0x0440 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO16__MEDIAMIX_DISP_DATA12 0x0050 0x0200 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO16__LPUART3_CTS_B 0x0050 0x0200 0x041C 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO16__LPUART3_CTS_B 0x0050 0x0200 0x0414 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO16__LPSPI4_PCS2 0x0050 0x0200 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO16__LPUART4_CTS_B 0x0050 0x0200 0x0428 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO16__LPUART4_CTS_B 0x0050 0x0200 0x0420 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO16__FLEXIO1_FLEXIO16 0x0050 0x0200 0x03A8 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO17__GPIO2_IO17 0x0054 0x0204 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO17__SAI3_MCLK 0x0054 0x0204 0x0000 0x1 0x0
|
||||
|
@ -175,7 +175,7 @@
|
|||
#define MX93_PAD_GPIO_IO17__LPUART4_RTS_B 0x0054 0x0204 0x0000 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO17__FLEXIO1_FLEXIO17 0x0054 0x0204 0x03AC 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO18__GPIO2_IO18 0x0058 0x0208 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO18__SAI3_RX_BCLK 0x0058 0x0208 0x0454 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO18__SAI3_RX_BCLK 0x0058 0x0208 0x044C 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO18__MEDIAMIX_CAM_DATA09 0x0058 0x0208 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO18__MEDIAMIX_DISP_DATA14 0x0058 0x0208 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO18__LPSPI5_PCS0 0x0058 0x0208 0x0000 0x4 0x0
|
||||
|
@ -183,8 +183,8 @@
|
|||
#define MX93_PAD_GPIO_IO18__TPM5_CH2 0x0058 0x0208 0x0000 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO18__FLEXIO1_FLEXIO18 0x0058 0x0208 0x03B0 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO19__GPIO2_IO19 0x005C 0x020C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO19__SAI3_RX_SYNC 0x005C 0x020C 0x0458 0x1 0x1
|
||||
#define MX93_PAD_GPIO_IO19__PDM_BIT_STREAM03 0x005C 0x020C 0x044C 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO19__SAI3_RX_SYNC 0x005C 0x020C 0x0450 0x1 0x1
|
||||
#define MX93_PAD_GPIO_IO19__PDM_BIT_STREAM03 0x005C 0x020C 0x0444 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO19__MEDIAMIX_DISP_DATA15 0x005C 0x020C 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO19__LPSPI5_SIN 0x005C 0x020C 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO19__LPSPI4_SIN 0x005C 0x020C 0x0000 0x5 0x0
|
||||
|
@ -192,7 +192,7 @@
|
|||
#define MX93_PAD_GPIO_IO19__SAI3_TX_DATA00 0x005C 0x020C 0x0000 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO20__GPIO2_IO20 0x0060 0x0210 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO20__SAI3_RX_DATA00 0x0060 0x0210 0x0000 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO20__PDM_BIT_STREAM00 0x0060 0x0210 0x0440 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO20__PDM_BIT_STREAM00 0x0060 0x0210 0x0438 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO20__MEDIAMIX_DISP_DATA16 0x0060 0x0210 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO20__LPSPI5_SOUT 0x0060 0x0210 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO20__LPSPI4_SOUT 0x0060 0x0210 0x0000 0x5 0x0
|
||||
|
@ -205,58 +205,58 @@
|
|||
#define MX93_PAD_GPIO_IO21__LPSPI5_SCK 0x0064 0x0214 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO21__LPSPI4_SCK 0x0064 0x0214 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO21__TPM4_CH1 0x0064 0x0214 0x0000 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO21__SAI3_RX_BCLK 0x0064 0x0214 0x0454 0x7 0x1
|
||||
#define MX93_PAD_GPIO_IO21__SAI3_RX_BCLK 0x0064 0x0214 0x044C 0x7 0x1
|
||||
#define MX93_PAD_GPIO_IO22__GPIO2_IO22 0x0068 0x0218 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO22__USDHC3_CLK 0x0068 0x0218 0x0460 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO22__SPDIF_IN 0x0068 0x0218 0x045C 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO22__USDHC3_CLK 0x0068 0x0218 0x0458 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO22__SPDIF_IN 0x0068 0x0218 0x0454 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO22__MEDIAMIX_DISP_DATA18 0x0068 0x0218 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO22__TPM5_CH1 0x0068 0x0218 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO22__TPM6_EXTCLK 0x0068 0x0218 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO22__LPI2C5_SDA 0x0068 0x0218 0x03F4 0x6 0x1
|
||||
#define MX93_PAD_GPIO_IO22__LPI2C5_SDA 0x0068 0x0218 0x03EC 0x16 0x1
|
||||
#define MX93_PAD_GPIO_IO22__FLEXIO1_FLEXIO22 0x0068 0x0218 0x03B8 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO23__GPIO2_IO23 0x006C 0x021C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO23__USDHC3_CMD 0x006C 0x021C 0x0464 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO23__USDHC3_CMD 0x006C 0x021C 0x045C 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO23__SPDIF_OUT 0x006C 0x021C 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO23__MEDIAMIX_DISP_DATA19 0x006C 0x021C 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO23__TPM6_CH1 0x006C 0x021C 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO23__LPI2C5_SCL 0x006C 0x021C 0x03F0 0x6 0x1
|
||||
#define MX93_PAD_GPIO_IO23__LPI2C5_SCL 0x006C 0x021C 0x03E8 0x16 0x1
|
||||
#define MX93_PAD_GPIO_IO23__FLEXIO1_FLEXIO23 0x006C 0x021C 0x03BC 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO24__GPIO2_IO24 0x0070 0x0220 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO24__USDHC3_DATA0 0x0070 0x0220 0x0468 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO24__USDHC3_DATA0 0x0070 0x0220 0x0460 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO24__MEDIAMIX_DISP_DATA20 0x0070 0x0220 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO24__TPM3_CH3 0x0070 0x0220 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO24__JTAG_MUX_TDO 0x0070 0x0220 0x0000 0x5 0x0
|
||||
#define MX93_PAD_GPIO_IO24__LPSPI6_PCS1 0x0070 0x0220 0x0000 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO24__FLEXIO1_FLEXIO24 0x0070 0x0220 0x03C0 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO25__GPIO2_IO25 0x0074 0x0224 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO25__USDHC3_DATA1 0x0074 0x0224 0x046C 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO25__USDHC3_DATA1 0x0074 0x0224 0x0464 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO25__CAN2_TX 0x0074 0x0224 0x0000 0x2 0x0
|
||||
#define MX93_PAD_GPIO_IO25__MEDIAMIX_DISP_DATA21 0x0074 0x0224 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO25__TPM4_CH3 0x0074 0x0224 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO25__JTAG_MUX_TCK 0x0074 0x0224 0x03DC 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO25__JTAG_MUX_TCK 0x0074 0x0224 0x03D4 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO25__LPSPI7_PCS1 0x0074 0x0224 0x0000 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO25__FLEXIO1_FLEXIO25 0x0074 0x0224 0x03C4 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO26__GPIO2_IO26 0x0078 0x0228 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO26__USDHC3_DATA2 0x0078 0x0228 0x0470 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO26__PDM_BIT_STREAM01 0x0078 0x0228 0x0444 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO26__USDHC3_DATA2 0x0078 0x0228 0x0468 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO26__PDM_BIT_STREAM01 0x0078 0x0228 0x043C 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO26__MEDIAMIX_DISP_DATA22 0x0078 0x0228 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO26__TPM5_CH3 0x0078 0x0228 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO26__JTAG_MUX_TDI 0x0078 0x0228 0x03E0 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO26__JTAG_MUX_TDI 0x0078 0x0228 0x03D8 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO26__LPSPI8_PCS1 0x0078 0x0228 0x0000 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO26__SAI3_TX_SYNC 0x0078 0x0228 0x0000 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO27__GPIO2_IO27 0x007C 0x022C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO27__USDHC3_DATA3 0x007C 0x022C 0x0474 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO27__USDHC3_DATA3 0x007C 0x022C 0x046C 0x1 0x0
|
||||
#define MX93_PAD_GPIO_IO27__CAN2_RX 0x007C 0x022C 0x0364 0x2 0x1
|
||||
#define MX93_PAD_GPIO_IO27__MEDIAMIX_DISP_DATA23 0x007C 0x022C 0x0000 0x3 0x0
|
||||
#define MX93_PAD_GPIO_IO27__TPM6_CH3 0x007C 0x022C 0x0000 0x4 0x0
|
||||
#define MX93_PAD_GPIO_IO27__JTAG_MUX_TMS 0x007C 0x022C 0x03E4 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO27__JTAG_MUX_TMS 0x007C 0x022C 0x03DC 0x5 0x1
|
||||
#define MX93_PAD_GPIO_IO27__LPSPI5_PCS1 0x007C 0x022C 0x0000 0x6 0x0
|
||||
#define MX93_PAD_GPIO_IO27__FLEXIO1_FLEXIO27 0x007C 0x022C 0x03C8 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO28__GPIO2_IO28 0x0080 0x0230 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO28__LPI2C3_SDA 0x0080 0x0230 0x03EC 0x1 0x1
|
||||
#define MX93_PAD_GPIO_IO28__LPI2C3_SDA 0x0080 0x0230 0x03E4 0x11 0x1
|
||||
#define MX93_PAD_GPIO_IO28__FLEXIO1_FLEXIO28 0x0080 0x0230 0x0000 0x7 0x0
|
||||
#define MX93_PAD_GPIO_IO29__GPIO2_IO29 0x0084 0x0234 0x0000 0x0 0x0
|
||||
#define MX93_PAD_GPIO_IO29__LPI2C3_SCL 0x0084 0x0234 0x03E8 0x1 0x1
|
||||
#define MX93_PAD_GPIO_IO29__LPI2C3_SCL 0x0084 0x0234 0x03E0 0x11 0x1
|
||||
#define MX93_PAD_GPIO_IO29__FLEXIO1_FLEXIO29 0x0084 0x0234 0x0000 0x7 0x0
|
||||
#define MX93_PAD_CCM_CLKO1__CCMSRCGPCMIX_CLKO1 0x0088 0x0238 0x0000 0x0 0x0
|
||||
#define MX93_PAD_CCM_CLKO1__FLEXIO1_FLEXIO26 0x0088 0x0238 0x0000 0x4 0x0
|
||||
|
@ -266,20 +266,19 @@
|
|||
#define MX93_PAD_CCM_CLKO2__FLEXIO1_FLEXIO27 0x008C 0x023C 0x03C8 0x4 0x1
|
||||
#define MX93_PAD_CCM_CLKO3__CCMSRCGPCMIX_CLKO3 0x0090 0x0240 0x0000 0x0 0x0
|
||||
#define MX93_PAD_CCM_CLKO3__FLEXIO2_FLEXIO28 0x0090 0x0240 0x0000 0x4 0x0
|
||||
#define MX93_PAD_CCM_CLKO3__GPIO3_IO28 0x0090 0x0240 0x03CC 0x5 0x1
|
||||
#define MX93_PAD_CCM_CLKO3__GPIO4_IO28 0x0090 0x0240 0x0000 0x5 0x0
|
||||
#define MX93_PAD_CCM_CLKO4__CCMSRCGPCMIX_CLKO4 0x0094 0x0244 0x0000 0x0 0x0
|
||||
#define MX93_PAD_CCM_CLKO4__FLEXIO2_FLEXIO29 0x0094 0x0244 0x0000 0x4 0x0
|
||||
#define MX93_PAD_CCM_CLKO4__GPIO3_IO29 0x0094 0x0244 0x03D0 0x5 0x1
|
||||
#define MX93_PAD_CCM_CLKO4__GPIO4_IO29 0x0094 0x0244 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET1_MDC__ENET_QOS_MDC 0x0098 0x0248 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET1_MDC__LPUART3_DCB_B 0x0098 0x0248 0x0000 0x1 0x0
|
||||
#define MX93_PAD_ENET1_MDC__I3C2_SCL 0x0098 0x0248 0x03D4 0x2 0x0
|
||||
#define MX93_PAD_ENET1_MDC__I3C2_SCL 0x0098 0x0248 0x03CC 0x2 0x0
|
||||
#define MX93_PAD_ENET1_MDC__HSIOMIX_OTG_ID1 0x0098 0x0248 0x0000 0x3 0x0
|
||||
#define MX93_PAD_ENET1_MDC__FLEXIO2_FLEXIO00 0x0098 0x0248 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET1_MDC__GPIO4_IO00 0x0098 0x0248 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET1_MDC__LPUART5_RTS_B 0x0098 0x0248 0x0000 0x6 0x0
|
||||
#define MX93_PAD_ENET1_MDIO__ENET_QOS_MDIO 0x009C 0x024C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET1_MDIO__LPUART3_RIN_B 0x009C 0x024C 0x0000 0x1 0x0
|
||||
#define MX93_PAD_ENET1_MDIO__I3C2_SDA 0x009C 0x024C 0x03D8 0x2 0x0
|
||||
#define MX93_PAD_ENET1_MDIO__I3C2_SDA 0x009C 0x024C 0x03D0 0x2 0x0
|
||||
#define MX93_PAD_ENET1_MDIO__HSIOMIX_OTG_PWR1 0x009C 0x024C 0x0000 0x3 0x0
|
||||
#define MX93_PAD_ENET1_MDIO__FLEXIO2_FLEXIO01 0x009C 0x024C 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET1_MDIO__GPIO4_IO01 0x009C 0x024C 0x0000 0x5 0x0
|
||||
|
@ -302,7 +301,7 @@
|
|||
#define MX93_PAD_ENET1_TD1__GPIO4_IO04 0x00A8 0x0258 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET1_TD1__I3C2_PUR_B 0x00A8 0x0258 0x0000 0x6 0x0
|
||||
#define MX93_PAD_ENET1_TD0__ENET_QOS_RGMII_TD0 0x00AC 0x025C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET1_TD0__LPUART3_TX 0x00AC 0x025C 0x0424 0x1 0x1
|
||||
#define MX93_PAD_ENET1_TD0__LPUART3_TX 0x00AC 0x025C 0x041C 0x1 0x1
|
||||
#define MX93_PAD_ENET1_TD0__FLEXIO2_FLEXIO05 0x00AC 0x025C 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET1_TD0__GPIO4_IO05 0x00AC 0x025C 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET1_TX_CTL__ENET_QOS_RGMII_TX_CTL 0x00B0 0x0260 0x0000 0x0 0x0
|
||||
|
@ -323,21 +322,21 @@
|
|||
#define MX93_PAD_ENET1_RXC__FLEXIO2_FLEXIO09 0x00BC 0x026C 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET1_RXC__GPIO4_IO09 0x00BC 0x026C 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET1_RD0__ENET_QOS_RGMII_RD0 0x00C0 0x0270 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET1_RD0__LPUART3_RX 0x00C0 0x0270 0x0420 0x1 0x1
|
||||
#define MX93_PAD_ENET1_RD0__LPUART3_RX 0x00C0 0x0270 0x0418 0x1 0x1
|
||||
#define MX93_PAD_ENET1_RD0__FLEXIO2_FLEXIO10 0x00C0 0x0270 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET1_RD0__GPIO4_IO10 0x00C0 0x0270 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET1_RD1__ENET_QOS_RGMII_RD1 0x00C4 0x0274 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET1_RD1__LPUART3_CTS_B 0x00C4 0x0274 0x041C 0x1 0x1
|
||||
#define MX93_PAD_ENET1_RD1__LPTMR2_ALT1 0x00C4 0x0274 0x0410 0x3 0x0
|
||||
#define MX93_PAD_ENET1_RD1__LPUART3_CTS_B 0x00C4 0x0274 0x0414 0x1 0x1
|
||||
#define MX93_PAD_ENET1_RD1__LPTMR2_ALT1 0x00C4 0x0274 0x0408 0x3 0x0
|
||||
#define MX93_PAD_ENET1_RD1__FLEXIO2_FLEXIO11 0x00C4 0x0274 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET1_RD1__GPIO4_IO11 0x00C4 0x0274 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET1_RD2__ENET_QOS_RGMII_RD2 0x00C8 0x0278 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET1_RD2__LPTMR2_ALT2 0x00C8 0x0278 0x0414 0x3 0x0
|
||||
#define MX93_PAD_ENET1_RD2__LPTMR2_ALT2 0x00C8 0x0278 0x040C 0x3 0x0
|
||||
#define MX93_PAD_ENET1_RD2__FLEXIO2_FLEXIO12 0x00C8 0x0278 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET1_RD2__GPIO4_IO12 0x00C8 0x0278 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET1_RD3__ENET_QOS_RGMII_RD3 0x00CC 0x027C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET1_RD3__FLEXSPI1_TESTER_TRIGGER 0x00CC 0x027C 0x0000 0x2 0x0
|
||||
#define MX93_PAD_ENET1_RD3__LPTMR2_ALT3 0x00CC 0x027C 0x0418 0x3 0x0
|
||||
#define MX93_PAD_ENET1_RD3__LPTMR2_ALT3 0x00CC 0x027C 0x0410 0x3 0x0
|
||||
#define MX93_PAD_ENET1_RD3__FLEXIO2_FLEXIO13 0x00CC 0x027C 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET1_RD3__GPIO4_IO13 0x00CC 0x027C 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET2_MDC__ENET1_MDC 0x00D0 0x0280 0x0000 0x0 0x0
|
||||
|
@ -365,7 +364,7 @@
|
|||
#define MX93_PAD_ENET2_TD1__FLEXIO2_FLEXIO18 0x00E0 0x0290 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET2_TD1__GPIO4_IO18 0x00E0 0x0290 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET2_TD0__ENET1_RGMII_TD0 0x00E4 0x0294 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET2_TD0__LPUART4_TX 0x00E4 0x0294 0x0430 0x1 0x1
|
||||
#define MX93_PAD_ENET2_TD0__LPUART4_TX 0x00E4 0x0294 0x0428 0x1 0x1
|
||||
#define MX93_PAD_ENET2_TD0__SAI2_RX_DATA03 0x00E4 0x0294 0x0000 0x2 0x0
|
||||
#define MX93_PAD_ENET2_TD0__FLEXIO2_FLEXIO19 0x00E4 0x0294 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET2_TD0__GPIO4_IO19 0x00E4 0x0294 0x0000 0x5 0x0
|
||||
|
@ -390,24 +389,24 @@
|
|||
#define MX93_PAD_ENET2_RXC__FLEXIO2_FLEXIO23 0x00F4 0x02A4 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET2_RXC__GPIO4_IO23 0x00F4 0x02A4 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET2_RD0__ENET1_RGMII_RD0 0x00F8 0x02A8 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET2_RD0__LPUART4_RX 0x00F8 0x02A8 0x042C 0x1 0x1
|
||||
#define MX93_PAD_ENET2_RD0__LPUART4_RX 0x00F8 0x02A8 0x0424 0x1 0x1
|
||||
#define MX93_PAD_ENET2_RD0__SAI2_TX_DATA02 0x00F8 0x02A8 0x0000 0x2 0x0
|
||||
#define MX93_PAD_ENET2_RD0__FLEXIO2_FLEXIO24 0x00F8 0x02A8 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET2_RD0__GPIO4_IO24 0x00F8 0x02A8 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET2_RD1__ENET1_RGMII_RD1 0x00FC 0x02AC 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET2_RD1__SPDIF_IN 0x00FC 0x02AC 0x045C 0x1 0x1
|
||||
#define MX93_PAD_ENET2_RD1__SPDIF_IN 0x00FC 0x02AC 0x0454 0x1 0x1
|
||||
#define MX93_PAD_ENET2_RD1__SAI2_TX_DATA03 0x00FC 0x02AC 0x0000 0x2 0x0
|
||||
#define MX93_PAD_ENET2_RD1__FLEXIO2_FLEXIO25 0x00FC 0x02AC 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET2_RD1__GPIO4_IO25 0x00FC 0x02AC 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET2_RD2__ENET1_RGMII_RD2 0x0100 0x02B0 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET2_RD2__LPUART4_CTS_B 0x0100 0x02B0 0x0428 0x1 0x1
|
||||
#define MX93_PAD_ENET2_RD2__LPUART4_CTS_B 0x0100 0x02B0 0x0420 0x1 0x1
|
||||
#define MX93_PAD_ENET2_RD2__SAI2_MCLK 0x0100 0x02B0 0x0000 0x2 0x0
|
||||
#define MX93_PAD_ENET2_RD2__MQS2_RIGHT 0x0100 0x02B0 0x0000 0x3 0x0
|
||||
#define MX93_PAD_ENET2_RD2__FLEXIO2_FLEXIO26 0x0100 0x02B0 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET2_RD2__GPIO4_IO26 0x0100 0x02B0 0x0000 0x5 0x0
|
||||
#define MX93_PAD_ENET2_RD3__ENET1_RGMII_RD3 0x0104 0x02B4 0x0000 0x0 0x0
|
||||
#define MX93_PAD_ENET2_RD3__SPDIF_OUT 0x0104 0x02B4 0x0000 0x1 0x0
|
||||
#define MX93_PAD_ENET2_RD3__SPDIF_IN 0x0104 0x02B4 0x045C 0x2 0x2
|
||||
#define MX93_PAD_ENET2_RD3__SPDIF_IN 0x0104 0x02B4 0x0454 0x2 0x2
|
||||
#define MX93_PAD_ENET2_RD3__MQS2_LEFT 0x0104 0x02B4 0x0000 0x3 0x0
|
||||
#define MX93_PAD_ENET2_RD3__FLEXIO2_FLEXIO27 0x0104 0x02B4 0x0000 0x4 0x0
|
||||
#define MX93_PAD_ENET2_RD3__GPIO4_IO27 0x0104 0x02B4 0x0000 0x5 0x0
|
||||
|
@ -457,43 +456,42 @@
|
|||
#define MX93_PAD_SD1_STROBE__GPIO3_IO18 0x0130 0x02E0 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x0134 0x02E4 0x0000 0x0 0x0
|
||||
#define MX93_PAD_SD2_VSELECT__USDHC2_WP 0x0134 0x02E4 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD2_VSELECT__LPTMR2_ALT3 0x0134 0x02E4 0x0418 0x2 0x1
|
||||
#define MX93_PAD_SD2_VSELECT__LPTMR2_ALT3 0x0134 0x02E4 0x0410 0x2 0x1
|
||||
#define MX93_PAD_SD2_VSELECT__FLEXIO1_FLEXIO19 0x0134 0x02E4 0x0000 0x4 0x0
|
||||
#define MX93_PAD_SD2_VSELECT__GPIO3_IO19 0x0134 0x02E4 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD2_VSELECT__CCMSRCGPCMIX_EXT_CLK1 0x0134 0x02E4 0x0368 0x6 0x0
|
||||
#define MX93_PAD_SD3_CLK__USDHC3_CLK 0x0138 0x02E8 0x0460 0x0 0x1
|
||||
#define MX93_PAD_SD3_CLK__USDHC3_CLK 0x0138 0x02E8 0x0458 0x0 0x1
|
||||
#define MX93_PAD_SD3_CLK__FLEXSPI1_A_SCLK 0x0138 0x02E8 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD3_CLK__FLEXIO1_FLEXIO20 0x0138 0x02E8 0x03B4 0x4 0x1
|
||||
#define MX93_PAD_SD3_CLK__GPIO3_IO20 0x0138 0x02E8 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD3_CMD__USDHC3_CMD 0x013C 0x02EC 0x0464 0x0 0x1
|
||||
#define MX93_PAD_SD3_CMD__USDHC3_CMD 0x013C 0x02EC 0x045C 0x0 0x1
|
||||
#define MX93_PAD_SD3_CMD__FLEXSPI1_A_SS0_B 0x013C 0x02EC 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD3_CMD__FLEXIO1_FLEXIO21 0x013C 0x02EC 0x0000 0x4 0x0
|
||||
#define MX93_PAD_SD3_CMD__GPIO3_IO21 0x013C 0x02EC 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD3_DATA0__USDHC3_DATA0 0x0140 0x02F0 0x0468 0x0 0x1
|
||||
#define MX93_PAD_SD3_DATA0__USDHC3_DATA0 0x0140 0x02F0 0x0460 0x0 0x1
|
||||
#define MX93_PAD_SD3_DATA0__FLEXSPI1_A_DATA00 0x0140 0x02F0 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD3_DATA0__FLEXIO1_FLEXIO22 0x0140 0x02F0 0x03B8 0x4 0x1
|
||||
#define MX93_PAD_SD3_DATA0__GPIO3_IO22 0x0140 0x02F0 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD3_DATA1__USDHC3_DATA1 0x0144 0x02F4 0x046C 0x0 0x1
|
||||
#define MX93_PAD_SD3_DATA1__USDHC3_DATA1 0x0144 0x02F4 0x0464 0x0 0x1
|
||||
#define MX93_PAD_SD3_DATA1__FLEXSPI1_A_DATA01 0x0144 0x02F4 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD3_DATA1__FLEXIO1_FLEXIO23 0x0144 0x02F4 0x03BC 0x4 0x1
|
||||
#define MX93_PAD_SD3_DATA1__GPIO3_IO23 0x0144 0x02F4 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD3_DATA2__USDHC3_DATA2 0x0148 0x02F8 0x0470 0x0 0x1
|
||||
#define MX93_PAD_SD3_DATA2__USDHC3_DATA2 0x0148 0x02F8 0x0468 0x0 0x1
|
||||
#define MX93_PAD_SD3_DATA2__FLEXSPI1_A_DATA02 0x0148 0x02F8 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD3_DATA2__FLEXIO1_FLEXIO24 0x0148 0x02F8 0x03C0 0x4 0x1
|
||||
#define MX93_PAD_SD3_DATA2__GPIO3_IO24 0x0148 0x02F8 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD3_DATA3__USDHC3_DATA3 0x014C 0x02FC 0x0474 0x0 0x1
|
||||
#define MX93_PAD_SD3_DATA3__USDHC3_DATA3 0x014C 0x02FC 0x046C 0x0 0x1
|
||||
#define MX93_PAD_SD3_DATA3__FLEXSPI1_A_DATA03 0x014C 0x02FC 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD3_DATA3__FLEXIO1_FLEXIO25 0x014C 0x02FC 0x03C4 0x4 0x1
|
||||
#define MX93_PAD_SD3_DATA3__GPIO3_IO25 0x014C 0x02FC 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD2_CD_B__USDHC2_CD_B 0x0150 0x0300 0x0000 0x0 0x0
|
||||
#define MX93_PAD_SD2_CD_B__ENET_QOS_1588_EVENT0_IN 0x0150 0x0300 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD2_CD_B__I3C2_SCL 0x0150 0x0300 0x03D4 0x2 0x1
|
||||
#define MX93_PAD_SD2_CD_B__I3C2_SCL 0x0150 0x0300 0x03CC 0x2 0x1
|
||||
#define MX93_PAD_SD2_CD_B__FLEXIO1_FLEXIO00 0x0150 0x0300 0x036C 0x4 0x1
|
||||
#define MX93_PAD_SD2_CD_B__GPIO3_IO00 0x0150 0x0300 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD2_CD_B__CCMSRCGPCMIX_TESTER_ACK 0x0150 0x0300 0x0000 0x6 0x0
|
||||
#define MX93_PAD_SD2_CLK__USDHC2_CLK 0x0154 0x0304 0x0000 0x0 0x0
|
||||
#define MX93_PAD_SD2_CLK__ENET_QOS_1588_EVENT0_OUT 0x0154 0x0304 0x0000 0x1 0x0
|
||||
#define MX93_PAD_SD2_CLK__I3C2_SDA 0x0154 0x0304 0x03D8 0x2 0x1
|
||||
#define MX93_PAD_SD2_CLK__I3C2_SDA 0x0154 0x0304 0x03D0 0x2 0x1
|
||||
#define MX93_PAD_SD2_CLK__FLEXIO1_FLEXIO01 0x0154 0x0304 0x0370 0x4 0x1
|
||||
#define MX93_PAD_SD2_CLK__GPIO3_IO01 0x0154 0x0304 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD2_CLK__CCMSRCGPCMIX_OBSERVE0 0x0154 0x0304 0x0000 0x6 0x0
|
||||
|
@ -523,34 +521,34 @@
|
|||
#define MX93_PAD_SD2_DATA2__GPIO3_IO05 0x0164 0x0314 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD2_DATA2__CCMSRCGPCMIX_STOP 0x0164 0x0314 0x0000 0x6 0x0
|
||||
#define MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x0168 0x0318 0x0000 0x0 0x0
|
||||
#define MX93_PAD_SD2_DATA3__LPTMR2_ALT1 0x0168 0x0318 0x0410 0x1 0x1
|
||||
#define MX93_PAD_SD2_DATA3__LPTMR2_ALT1 0x0168 0x0318 0x0408 0x1 0x1
|
||||
#define MX93_PAD_SD2_DATA3__MQS2_LEFT 0x0168 0x0318 0x0000 0x2 0x0
|
||||
#define MX93_PAD_SD2_DATA3__FLEXIO1_FLEXIO06 0x0168 0x0318 0x0384 0x4 0x1
|
||||
#define MX93_PAD_SD2_DATA3__GPIO3_IO06 0x0168 0x0318 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD2_DATA3__CCMSRCGPCMIX_EARLY_RESET 0x0168 0x0318 0x0000 0x6 0x0
|
||||
#define MX93_PAD_SD2_RESET_B__USDHC2_RESET_B 0x016C 0x031C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_SD2_RESET_B__LPTMR2_ALT2 0x016C 0x031C 0x0414 0x1 0x1
|
||||
#define MX93_PAD_SD2_RESET_B__LPTMR2_ALT2 0x016C 0x031C 0x040C 0x1 0x1
|
||||
#define MX93_PAD_SD2_RESET_B__FLEXIO1_FLEXIO07 0x016C 0x031C 0x0388 0x4 0x1
|
||||
#define MX93_PAD_SD2_RESET_B__GPIO3_IO07 0x016C 0x031C 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SD2_RESET_B__CCMSRCGPCMIX_SYSTEM_RESET 0x016C 0x031C 0x0000 0x6 0x0
|
||||
#define MX93_PAD_I2C1_SCL__LPI2C1_SCL 0x0170 0x0320 0x0000 0x0 0x0
|
||||
#define MX93_PAD_I2C1_SCL__LPI2C1_SCL 0x0170 0x0320 0x0000 0x10 0x0
|
||||
#define MX93_PAD_I2C1_SCL__I3C1_SCL 0x0170 0x0320 0x0000 0x1 0x0
|
||||
#define MX93_PAD_I2C1_SCL__LPUART1_DCB_B 0x0170 0x0320 0x0000 0x2 0x0
|
||||
#define MX93_PAD_I2C1_SCL__TPM2_CH0 0x0170 0x0320 0x0000 0x3 0x0
|
||||
#define MX93_PAD_I2C1_SCL__GPIO1_IO00 0x0170 0x0320 0x0000 0x5 0x0
|
||||
#define MX93_PAD_I2C1_SDA__LPI2C1_SDA 0x0174 0x0324 0x0000 0x0 0x0
|
||||
#define MX93_PAD_I2C1_SDA__LPI2C1_SDA 0x0174 0x0324 0x0000 0x10 0x0
|
||||
#define MX93_PAD_I2C1_SDA__I3C1_SDA 0x0174 0x0324 0x0000 0x1 0x0
|
||||
#define MX93_PAD_I2C1_SDA__LPUART1_RIN_B 0x0174 0x0324 0x0000 0x2 0x0
|
||||
#define MX93_PAD_I2C1_SDA__TPM2_CH1 0x0174 0x0324 0x0000 0x3 0x0
|
||||
#define MX93_PAD_I2C1_SDA__GPIO1_IO01 0x0174 0x0324 0x0000 0x5 0x0
|
||||
#define MX93_PAD_I2C2_SCL__LPI2C2_SCL 0x0178 0x0328 0x0000 0x0 0x0
|
||||
#define MX93_PAD_I2C2_SCL__LPI2C2_SCL 0x0178 0x0328 0x0000 0x10 0x0
|
||||
#define MX93_PAD_I2C2_SCL__I3C1_PUR 0x0178 0x0328 0x0000 0x1 0x0
|
||||
#define MX93_PAD_I2C2_SCL__LPUART2_DCB_B 0x0178 0x0328 0x0000 0x2 0x0
|
||||
#define MX93_PAD_I2C2_SCL__TPM2_CH2 0x0178 0x0328 0x0000 0x3 0x0
|
||||
#define MX93_PAD_I2C2_SCL__SAI1_RX_SYNC 0x0178 0x0328 0x0000 0x4 0x0
|
||||
#define MX93_PAD_I2C2_SCL__GPIO1_IO02 0x0178 0x0328 0x0000 0x5 0x0
|
||||
#define MX93_PAD_I2C2_SCL__I3C1_PUR_B 0x0178 0x0328 0x0000 0x6 0x0
|
||||
#define MX93_PAD_I2C2_SDA__LPI2C2_SDA 0x017C 0x032C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_I2C2_SDA__LPI2C2_SDA 0x017C 0x032C 0x0000 0x10 0x0
|
||||
#define MX93_PAD_I2C2_SDA__LPUART2_RIN_B 0x017C 0x032C 0x0000 0x2 0x0
|
||||
#define MX93_PAD_I2C2_SDA__TPM2_CH3 0x017C 0x032C 0x0000 0x3 0x0
|
||||
#define MX93_PAD_I2C2_SDA__SAI1_RX_BCLK 0x017C 0x032C 0x0000 0x4 0x0
|
||||
|
@ -569,7 +567,7 @@
|
|||
#define MX93_PAD_UART2_RXD__LPUART1_CTS_B 0x0188 0x0338 0x0000 0x1 0x0
|
||||
#define MX93_PAD_UART2_RXD__LPSPI2_SOUT 0x0188 0x0338 0x0000 0x2 0x0
|
||||
#define MX93_PAD_UART2_RXD__TPM1_CH2 0x0188 0x0338 0x0000 0x3 0x0
|
||||
#define MX93_PAD_UART2_RXD__SAI1_MCLK 0x0188 0x0338 0x0450 0x4 0x0
|
||||
#define MX93_PAD_UART2_RXD__SAI1_MCLK 0x0188 0x0338 0x0448 0x4 0x0
|
||||
#define MX93_PAD_UART2_RXD__GPIO1_IO06 0x0188 0x0338 0x0000 0x5 0x0
|
||||
#define MX93_PAD_UART2_TXD__LPUART2_TX 0x018C 0x033C 0x0000 0x0 0x0
|
||||
#define MX93_PAD_UART2_TXD__LPUART1_RTS_B 0x018C 0x033C 0x0000 0x1 0x0
|
||||
|
@ -581,14 +579,14 @@
|
|||
#define MX93_PAD_PDM_CLK__LPTMR1_ALT1 0x0190 0x0340 0x0000 0x4 0x0
|
||||
#define MX93_PAD_PDM_CLK__GPIO1_IO08 0x0190 0x0340 0x0000 0x5 0x0
|
||||
#define MX93_PAD_PDM_CLK__CAN1_TX 0x0190 0x0340 0x0000 0x6 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM0__PDM_BIT_STREAM00 0x0194 0x0344 0x0440 0x0 0x2
|
||||
#define MX93_PAD_PDM_BIT_STREAM0__PDM_BIT_STREAM00 0x0194 0x0344 0x0438 0x0 0x2
|
||||
#define MX93_PAD_PDM_BIT_STREAM0__MQS1_RIGHT 0x0194 0x0344 0x0000 0x1 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM0__LPSPI1_PCS1 0x0194 0x0344 0x0000 0x2 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM0__TPM1_EXTCLK 0x0194 0x0344 0x0000 0x3 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM0__LPTMR1_ALT2 0x0194 0x0344 0x0000 0x4 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM0__GPIO1_IO09 0x0194 0x0344 0x0000 0x5 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM0__CAN1_RX 0x0194 0x0344 0x0360 0x6 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM1__PDM_BIT_STREAM01 0x0198 0x0348 0x0444 0x0 0x2
|
||||
#define MX93_PAD_PDM_BIT_STREAM1__PDM_BIT_STREAM01 0x0198 0x0348 0x043C 0x0 0x2
|
||||
#define MX93_PAD_PDM_BIT_STREAM1__NMI_GLUE_NMI 0x0198 0x0348 0x0000 0x1 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM1__LPSPI2_PCS1 0x0198 0x0348 0x0000 0x2 0x0
|
||||
#define MX93_PAD_PDM_BIT_STREAM1__TPM2_EXTCLK 0x0198 0x0348 0x0000 0x3 0x0
|
||||
|
@ -614,7 +612,7 @@
|
|||
#define MX93_PAD_SAI1_TXD0__CAN1_TX 0x01A4 0x0354 0x0000 0x4 0x0
|
||||
#define MX93_PAD_SAI1_TXD0__GPIO1_IO13 0x01A4 0x0354 0x0000 0x5 0x0
|
||||
#define MX93_PAD_SAI1_RXD0__SAI1_RX_DATA00 0x01A8 0x0358 0x0000 0x0 0x0
|
||||
#define MX93_PAD_SAI1_RXD0__SAI1_MCLK 0x01A8 0x0358 0x0450 0x1 0x1
|
||||
#define MX93_PAD_SAI1_RXD0__SAI1_MCLK 0x01A8 0x0358 0x0448 0x1 0x1
|
||||
#define MX93_PAD_SAI1_RXD0__LPSPI1_SOUT 0x01A8 0x0358 0x0000 0x2 0x0
|
||||
#define MX93_PAD_SAI1_RXD0__LPUART2_DSR_B 0x01A8 0x0358 0x0000 0x3 0x0
|
||||
#define MX93_PAD_SAI1_RXD0__MQS1_RIGHT 0x01A8 0x0358 0x0000 0x4 0x0
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright 2021 NXP
|
||||
* Copyright 2022 NXP
|
||||
*/
|
||||
|
||||
#include <dt-bindings/clock/imx93-clock.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/power/fsl,imx93-power.h>
|
||||
#include <dt-bindings/thermal/thermal.h>
|
||||
#include <dt-bindings/power/imx93-power.h>
|
||||
#include <dt-bindings/usb/pd.h>
|
||||
|
||||
#include "imx93-pinfunc.h"
|
||||
|
||||
|
@ -23,11 +22,17 @@
|
|||
gpio1 = &gpio2;
|
||||
gpio2 = &gpio3;
|
||||
gpio3 = &gpio4;
|
||||
i2c0 = &lpi2c1;
|
||||
i2c1 = &lpi2c2;
|
||||
i2c2 = &lpi2c3;
|
||||
i2c3 = &lpi2c4;
|
||||
i2c4 = &lpi2c5;
|
||||
i2c5 = &lpi2c6;
|
||||
i2c6 = &lpi2c7;
|
||||
i2c7 = &lpi2c8;
|
||||
mmc0 = &usdhc1;
|
||||
mmc1 = &usdhc2;
|
||||
mmc2 = &usdhc3;
|
||||
ethernet0 = &fec;
|
||||
ethernet1 = &eqos;
|
||||
serial0 = &lpuart1;
|
||||
serial1 = &lpuart2;
|
||||
serial2 = &lpuart3;
|
||||
|
@ -36,14 +41,6 @@
|
|||
serial5 = &lpuart6;
|
||||
serial6 = &lpuart7;
|
||||
serial7 = &lpuart8;
|
||||
i2c0 = &lpi2c1;
|
||||
i2c1 = &lpi2c2;
|
||||
i2c2 = &lpi2c3;
|
||||
i2c3 = &lpi2c4;
|
||||
i2c4 = &lpi2c5;
|
||||
i2c5 = &lpi2c6;
|
||||
usb0 = &usbotg1;
|
||||
usb1 = &usbotg2;
|
||||
};
|
||||
|
||||
cpus {
|
||||
|
@ -89,6 +86,11 @@
|
|||
clock-output-names = "clk_ext1";
|
||||
};
|
||||
|
||||
pmu {
|
||||
compatible = "arm,cortex-a55-pmu";
|
||||
interrupts = <GIC_PPI 7 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
|
||||
};
|
||||
|
||||
psci {
|
||||
compatible = "arm,psci-1.0";
|
||||
method = "smc";
|
||||
|
@ -115,6 +117,38 @@
|
|||
interrupt-parent = <&gic>;
|
||||
};
|
||||
|
||||
thermal-zones {
|
||||
cpu-thermal {
|
||||
polling-delay-passive = <250>;
|
||||
polling-delay = <2000>;
|
||||
|
||||
thermal-sensors = <&tmu 0>;
|
||||
|
||||
trips {
|
||||
cpu_alert: cpu-alert {
|
||||
temperature = <80000>;
|
||||
hysteresis = <2000>;
|
||||
type = "passive";
|
||||
};
|
||||
|
||||
cpu_crit: cpu-crit {
|
||||
temperature = <90000>;
|
||||
hysteresis = <2000>;
|
||||
type = "critical";
|
||||
};
|
||||
};
|
||||
|
||||
cooling-maps {
|
||||
map0 {
|
||||
trip = <&cpu_alert>;
|
||||
cooling-device =
|
||||
<&A55_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
|
||||
<&A55_1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
soc@0 {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
|
@ -129,46 +163,53 @@
|
|||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
anomix_ns_gpr: syscon@44210000 {
|
||||
compatible = "fsl,imx93-aonmix-ns-syscfg", "syscon";
|
||||
reg = <0x44210000 0x1000>;
|
||||
};
|
||||
|
||||
mu1: mailbox@44230000 {
|
||||
compatible = "fsl,imx93-mu", "fsl,imx8ulp-mu";
|
||||
reg = <0x44230000 0x10000>;
|
||||
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_MU1_B_GATE>;
|
||||
#mbox-cells = <2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
anomix_ns_gpr: blk-ctrl-anomix@42420000 {
|
||||
compatible = "syscon";
|
||||
reg = <0x44210000 0x1000>;
|
||||
};
|
||||
|
||||
system_counter: timer@44290000 {
|
||||
compatible = "nxp,sysctr-timer";
|
||||
reg = <0x44290000 0x30000>;
|
||||
interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&osc_24m>;
|
||||
clock-names = "per";
|
||||
nxp,no-divider;
|
||||
};
|
||||
|
||||
i3c1: i3c-master@44330000 {
|
||||
#address-cells = <3>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,imx93-i3c-master", "silvaco,i3c-master";
|
||||
reg = <0x44330000 0x10000>;
|
||||
interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_I3C1_GATE>,
|
||||
<&clk IMX93_CLK_I3C1_GATE>,
|
||||
<&clk IMX93_CLK_DUMMY>;
|
||||
clock-names = "pclk", "fast_clk", "slow_clk";
|
||||
tpm1: pwm@44310000 {
|
||||
compatible = "fsl,imx7ulp-pwm";
|
||||
reg = <0x44310000 0x1000>;
|
||||
clocks = <&clk IMX93_CLK_TPM1_GATE>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tpm2: pwm@44320000 {
|
||||
compatible = "fsl,imx7ulp-pwm";
|
||||
reg = <0x44320000 0x10000>;
|
||||
clocks = <&clk IMX93_CLK_TPM2_GATE>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpi2c1: i2c@44340000 {
|
||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||
reg = <0x44340000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPI2C1_GATE>,
|
||||
<&clk IMX93_CLK_LPI2C1_GATE>;
|
||||
<&clk IMX93_CLK_BUS_AON>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -176,9 +217,11 @@
|
|||
lpi2c2: i2c@44350000 {
|
||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||
reg = <0x44350000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPI2C2_GATE>,
|
||||
<&clk IMX93_CLK_LPI2C2_GATE>;
|
||||
<&clk IMX93_CLK_BUS_AON>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -190,7 +233,7 @@
|
|||
reg = <0x44360000 0x10000>;
|
||||
interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPSPI1_GATE>,
|
||||
<&clk IMX93_CLK_LPSPI1_GATE>;
|
||||
<&clk IMX93_CLK_BUS_AON>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -202,14 +245,13 @@
|
|||
reg = <0x44370000 0x10000>;
|
||||
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPSPI2_GATE>,
|
||||
<&clk IMX93_CLK_LPSPI2_GATE>;
|
||||
<&clk IMX93_CLK_BUS_AON>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart1: serial@44380000 {
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx8ulp-lpuart",
|
||||
"fsl,imx7ulp-lpuart";
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart";
|
||||
reg = <0x44380000 0x1000>;
|
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPUART1_GATE>;
|
||||
|
@ -218,8 +260,7 @@
|
|||
};
|
||||
|
||||
lpuart2: serial@44390000 {
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx8ulp-lpuart",
|
||||
"fsl,imx7ulp-lpuart";
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart";
|
||||
reg = <0x44390000 0x1000>;
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPUART2_GATE>;
|
||||
|
@ -227,9 +268,40 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
flexcan1: can@443a0000 {
|
||||
compatible = "fsl,imx93-flexcan";
|
||||
reg = <0x443a0000 0x10000>;
|
||||
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_BUS_AON>,
|
||||
<&clk IMX93_CLK_CAN1_GATE>;
|
||||
clock-names = "ipg", "per";
|
||||
assigned-clocks = <&clk IMX93_CLK_CAN1>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>;
|
||||
assigned-clock-rates = <40000000>;
|
||||
fsl,clk-source = /bits/ 8 <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
iomuxc: pinctrl@443c0000 {
|
||||
compatible = "fsl,imx93-iomuxc";
|
||||
reg = <0x443c0000 0x10000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
bbnsm: bbnsm@44440000 {
|
||||
compatible = "nxp,imx93-bbnsm", "syscon", "simple-mfd";
|
||||
reg = <0x44440000 0x10000>;
|
||||
|
||||
bbnsm_rtc: rtc {
|
||||
compatible = "nxp,imx93-bbnsm-rtc";
|
||||
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
bbnsm_pwrkey: pwrkey {
|
||||
compatible = "nxp,imx93-bbnsm-pwrkey";
|
||||
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
|
||||
linux,code = <KEY_POWER>;
|
||||
};
|
||||
};
|
||||
|
||||
clk: clock-controller@44450000 {
|
||||
|
@ -238,16 +310,53 @@
|
|||
#clock-cells = <1>;
|
||||
clocks = <&osc_32k>, <&osc_24m>, <&clk_ext1>;
|
||||
clock-names = "osc_32k", "osc_24m", "clk_ext1";
|
||||
assigned-clocks = <&clk IMX93_CLK_AUDIO_PLL>;
|
||||
assigned-clock-rates = <393216000>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
src: system-controller@44460000 {
|
||||
compatible = "fsl,imx93-src", "syscon";
|
||||
reg = <0x44460000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
mediamix: power-domain@44462400 {
|
||||
compatible = "fsl,imx93-src-slice";
|
||||
reg = <0x44462400 0x400>, <0x44465800 0x400>;
|
||||
#power-domain-cells = <0>;
|
||||
clocks = <&clk IMX93_CLK_MEDIA_AXI>,
|
||||
<&clk IMX93_CLK_MEDIA_APB>;
|
||||
};
|
||||
|
||||
mlmix: power-domain@44461800 {
|
||||
compatible = "fsl,imx93-src-slice";
|
||||
reg = <0x44461800 0x400>, <0x44464800 0x400>;
|
||||
#power-domain-cells = <0>;
|
||||
clocks = <&clk IMX93_CLK_ML_APB>,
|
||||
<&clk IMX93_CLK_ML>;
|
||||
};
|
||||
};
|
||||
|
||||
anatop: anatop@44480000 {
|
||||
compatible = "fsl,imx93-anatop", "syscon";
|
||||
reg = <0x44480000 0x10000>;
|
||||
};
|
||||
|
||||
tmu: tmu@44482000 {
|
||||
compatible = "fsl,imx93-tmu";
|
||||
reg = <0x44482000 0x1000>;
|
||||
clocks = <&clk IMX93_CLK_TMC_GATE>;
|
||||
little-endian;
|
||||
fsl,tmu-calibration = <0x0000000e 0x800000da
|
||||
0x00000029 0x800000e9
|
||||
0x00000056 0x80000102
|
||||
0x000000a2 0x8000012a
|
||||
0x00000116 0x80000166
|
||||
0x00000195 0x800001a7
|
||||
0x000001b2 0x800001b6>;
|
||||
#thermal-sensor-cells = <1>;
|
||||
};
|
||||
|
||||
adc1: adc@44530000 {
|
||||
compatible = "nxp,imx93-adc";
|
||||
reg = <0x44530000 0x10000>;
|
||||
|
@ -257,6 +366,7 @@
|
|||
<GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_ADC1_GATE>;
|
||||
clock-names = "ipg";
|
||||
#io-channel-cells = <1>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
@ -268,8 +378,8 @@
|
|||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
wakeupmix_gpr: blk-ctrl-wakeupmix@42420000 {
|
||||
compatible = "syscon";
|
||||
wakeupmix_gpr: syscon@42420000 {
|
||||
compatible = "fsl,imx93-wakeupmix-syscfg", "syscon";
|
||||
reg = <0x42420000 0x1000>;
|
||||
};
|
||||
|
||||
|
@ -277,6 +387,7 @@
|
|||
compatible = "fsl,imx93-mu", "fsl,imx8ulp-mu";
|
||||
reg = <0x42440000 0x10000>;
|
||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_MU2_B_GATE>;
|
||||
#mbox-cells = <2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -287,39 +398,48 @@
|
|||
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_WDOG3_GATE>;
|
||||
timeout-sec = <40>;
|
||||
};
|
||||
|
||||
tpm3: pwm@424e0000 {
|
||||
compatible = "fsl,imx7ulp-pwm";
|
||||
reg = <0x424e0000 0x1000>;
|
||||
clocks = <&clk IMX93_CLK_TPM3_GATE>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tpm4: pwm@424f0000 {
|
||||
compatible = "fsl,imx7ulp-pwm";
|
||||
reg = <0x424f0000 0x1000>;
|
||||
reg = <0x424f0000 0x10000>;
|
||||
clocks = <&clk IMX93_CLK_TPM4_GATE>;
|
||||
assigned-clocks = <&clk IMX93_CLK_TPM4>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_24M>;
|
||||
assigned-clock-rates = <24000000>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i3c2: i3c-master@42520000 {
|
||||
#address-cells = <3>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,imx93-i3c-master", "silvaco,i3c-master";
|
||||
reg = <0x42520000 0x10000>;
|
||||
interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_I3C2_GATE>,
|
||||
<&clk IMX93_CLK_I3C2_GATE>,
|
||||
<&clk IMX93_CLK_DUMMY>;
|
||||
clock-names = "pclk", "fast_clk", "slow_clk";
|
||||
tpm5: pwm@42500000 {
|
||||
compatible = "fsl,imx7ulp-pwm";
|
||||
reg = <0x42500000 0x10000>;
|
||||
clocks = <&clk IMX93_CLK_TPM5_GATE>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tpm6: pwm@42510000 {
|
||||
compatible = "fsl,imx7ulp-pwm";
|
||||
reg = <0x42510000 0x10000>;
|
||||
clocks = <&clk IMX93_CLK_TPM6_GATE>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpi2c3: i2c@42530000 {
|
||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||
reg = <0x42530000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPI2C3_GATE>,
|
||||
<&clk IMX93_CLK_LPI2C3_GATE>;
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -327,9 +447,11 @@
|
|||
lpi2c4: i2c@42540000 {
|
||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||
reg = <0x42540000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPI2C4_GATE>,
|
||||
<&clk IMX93_CLK_LPI2C4_GATE>;
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -341,7 +463,7 @@
|
|||
reg = <0x42550000 0x10000>;
|
||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPSPI3_GATE>,
|
||||
<&clk IMX93_CLK_LPSPI3_GATE>;
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -353,14 +475,13 @@
|
|||
reg = <0x42560000 0x10000>;
|
||||
interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPSPI4_GATE>,
|
||||
<&clk IMX93_CLK_LPSPI4_GATE>;
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart3: serial@42570000 {
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx8ulp-lpuart",
|
||||
"fsl,imx7ulp-lpuart";
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart";
|
||||
reg = <0x42570000 0x1000>;
|
||||
interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPUART3_GATE>;
|
||||
|
@ -369,8 +490,7 @@
|
|||
};
|
||||
|
||||
lpuart4: serial@42580000 {
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx8ulp-lpuart",
|
||||
"fsl,imx7ulp-lpuart";
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart";
|
||||
reg = <0x42580000 0x1000>;
|
||||
interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPUART4_GATE>;
|
||||
|
@ -379,8 +499,7 @@
|
|||
};
|
||||
|
||||
lpuart5: serial@42590000 {
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx8ulp-lpuart",
|
||||
"fsl,imx7ulp-lpuart";
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart";
|
||||
reg = <0x42590000 0x1000>;
|
||||
interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPUART5_GATE>;
|
||||
|
@ -389,8 +508,7 @@
|
|||
};
|
||||
|
||||
lpuart6: serial@425a0000 {
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx8ulp-lpuart",
|
||||
"fsl,imx7ulp-lpuart";
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart";
|
||||
reg = <0x425a0000 0x1000>;
|
||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPUART6_GATE>;
|
||||
|
@ -398,22 +516,37 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
flexspi: spi@425e0000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
flexcan2: can@425b0000 {
|
||||
compatible = "fsl,imx93-flexcan";
|
||||
reg = <0x425b0000 0x10000>;
|
||||
interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_BUS_WAKEUP>,
|
||||
<&clk IMX93_CLK_CAN2_GATE>;
|
||||
clock-names = "ipg", "per";
|
||||
assigned-clocks = <&clk IMX93_CLK_CAN2>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>;
|
||||
assigned-clock-rates = <40000000>;
|
||||
fsl,clk-source = /bits/ 8 <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
flexspi1: spi@425e0000 {
|
||||
compatible = "nxp,imx8mm-fspi";
|
||||
reg = <0x425e0000 0x10000>, <0x28000000 0x10000000>;
|
||||
reg-names = "fspi_base", "fspi_mmap";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_DUMMY>,
|
||||
<&clk IMX93_CLK_DUMMY>;
|
||||
clock-names = "fspi", "fspi_en";
|
||||
clocks = <&clk IMX93_CLK_FLEXSPI1_GATE>,
|
||||
<&clk IMX93_CLK_FLEXSPI1_GATE>;
|
||||
clock-names = "fspi_en", "fspi";
|
||||
assigned-clocks = <&clk IMX93_CLK_FLEXSPI1>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart7: serial@42690000 {
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx8ulp-lpuart",
|
||||
"fsl,imx7ulp-lpuart";
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart";
|
||||
reg = <0x42690000 0x1000>;
|
||||
interrupts = <GIC_SPI 210 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPUART7_GATE>;
|
||||
|
@ -422,8 +555,7 @@
|
|||
};
|
||||
|
||||
lpuart8: serial@426a0000 {
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx8ulp-lpuart",
|
||||
"fsl,imx7ulp-lpuart";
|
||||
compatible = "fsl,imx93-lpuart", "fsl,imx7ulp-lpuart";
|
||||
reg = <0x426a0000 0x1000>;
|
||||
interrupts = <GIC_SPI 211 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPUART8_GATE>;
|
||||
|
@ -434,9 +566,11 @@
|
|||
lpi2c5: i2c@426b0000 {
|
||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||
reg = <0x426b0000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 195 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPI2C5_GATE>,
|
||||
<&clk IMX93_CLK_LPI2C5_GATE>;
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -444,12 +578,87 @@
|
|||
lpi2c6: i2c@426c0000 {
|
||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||
reg = <0x426c0000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPI2C6_GATE>,
|
||||
<&clk IMX93_CLK_LPI2C6_GATE>;
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpi2c7: i2c@426d0000 {
|
||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||
reg = <0x426d0000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPI2C7_GATE>,
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpi2c8: i2c@426e0000 {
|
||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||
reg = <0x426e0000 0x10000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupts = <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPI2C8_GATE>,
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpspi5: spi@426f0000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,imx93-spi", "fsl,imx7ulp-spi";
|
||||
reg = <0x426f0000 0x10000>;
|
||||
interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPSPI5_GATE>,
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpspi6: spi@42700000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,imx93-spi", "fsl,imx7ulp-spi";
|
||||
reg = <0x42700000 0x10000>;
|
||||
interrupts = <GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPSPI6_GATE>,
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpspi7: spi@42710000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,imx93-spi", "fsl,imx7ulp-spi";
|
||||
reg = <0x42710000 0x10000>;
|
||||
interrupts = <GIC_SPI 193 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPSPI7_GATE>,
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpspi8: spi@42720000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,imx93-spi", "fsl,imx7ulp-spi";
|
||||
reg = <0x42720000 0x10000>;
|
||||
interrupts = <GIC_SPI 194 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_LPSPI8_GATE>,
|
||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||
clock-names = "per", "ipg";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
aips3: bus@42800000 {
|
||||
|
@ -463,8 +672,8 @@
|
|||
compatible = "fsl,imx93-usdhc", "fsl,imx8mm-usdhc";
|
||||
reg = <0x42850000 0x10000>;
|
||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_DUMMY>,
|
||||
<&clk IMX93_CLK_DUMMY>,
|
||||
clocks = <&clk IMX93_CLK_BUS_WAKEUP>,
|
||||
<&clk IMX93_CLK_WAKEUP_AXI>,
|
||||
<&clk IMX93_CLK_USDHC1_GATE>;
|
||||
clock-names = "ipg", "ahb", "per";
|
||||
bus-width = <8>;
|
||||
|
@ -477,8 +686,8 @@
|
|||
compatible = "fsl,imx93-usdhc", "fsl,imx8mm-usdhc";
|
||||
reg = <0x42860000 0x10000>;
|
||||
interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_DUMMY>,
|
||||
<&clk IMX93_CLK_DUMMY>,
|
||||
clocks = <&clk IMX93_CLK_BUS_WAKEUP>,
|
||||
<&clk IMX93_CLK_WAKEUP_AXI>,
|
||||
<&clk IMX93_CLK_USDHC2_GATE>;
|
||||
clock-names = "ipg", "ahb", "per";
|
||||
bus-width = <4>;
|
||||
|
@ -487,15 +696,37 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
eqos: ethernet@428a0000 {
|
||||
compatible = "nxp,imx93-dwmac-eqos", "snps,dwmac-5.10a";
|
||||
reg = <0x428a0000 0x10000>;
|
||||
interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "macirq", "eth_wake_irq";
|
||||
clocks = <&clk IMX93_CLK_ENET_QOS_GATE>,
|
||||
<&clk IMX93_CLK_ENET_QOS_GATE>,
|
||||
<&clk IMX93_CLK_ENET_TIMER2>,
|
||||
<&clk IMX93_CLK_ENET>,
|
||||
<&clk IMX93_CLK_ENET_QOS_GATE>;
|
||||
clock-names = "stmmaceth", "pclk", "ptp_ref", "tx", "mem";
|
||||
assigned-clocks = <&clk IMX93_CLK_ENET_TIMER2>,
|
||||
<&clk IMX93_CLK_ENET>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>,
|
||||
<&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>;
|
||||
assigned-clock-rates = <100000000>, <250000000>;
|
||||
intf_mode = <&wakeupmix_gpr 0x28>;
|
||||
snps,clk-csr = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
fec: ethernet@42890000 {
|
||||
compatible = "fsl,imx93-fec", "fsl,imx8mp-fec", "fsl,imx8mq-fec";
|
||||
compatible = "fsl,imx93-fec", "fsl,imx8mq-fec", "fsl,imx6sx-fec";
|
||||
reg = <0x42890000 0x10000>;
|
||||
interrupts = <GIC_SPI 179 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 180 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 181 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_WAKEUP_AXI>,
|
||||
<&clk IMX93_CLK_WAKEUP_AXI>,
|
||||
clocks = <&clk IMX93_CLK_ENET1_GATE>,
|
||||
<&clk IMX93_CLK_ENET1_GATE>,
|
||||
<&clk IMX93_CLK_ENET_TIMER1>,
|
||||
<&clk IMX93_CLK_ENET_REF>,
|
||||
<&clk IMX93_CLK_ENET_REF_PHY>;
|
||||
|
@ -510,29 +741,6 @@
|
|||
assigned-clock-rates = <100000000>, <250000000>, <50000000>;
|
||||
fsl,num-tx-queues = <3>;
|
||||
fsl,num-rx-queues = <3>;
|
||||
fsl,wakeup_irq = <2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
eqos: ethernet@428a0000 {
|
||||
compatible = "nxp,imx93-dwmac-eqos", "snps,dwmac-5.10a";
|
||||
reg = <0x428a0000 0x10000>;
|
||||
interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "eth_wake_irq", "macirq";
|
||||
clocks = <&clk IMX93_CLK_WAKEUP_AXI>,
|
||||
<&clk IMX93_CLK_WAKEUP_AXI>,
|
||||
<&clk IMX93_CLK_ENET_TIMER2>,
|
||||
<&clk IMX93_CLK_ENET>,
|
||||
<&clk IMX93_CLK_WAKEUP_AXI>;
|
||||
clock-names = "stmmaceth", "pclk", "ptp_ref", "tx", "mem";
|
||||
assigned-clocks = <&clk IMX93_CLK_ENET_TIMER2>,
|
||||
<&clk IMX93_CLK_ENET>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>,
|
||||
<&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>;
|
||||
assigned-clock-rates = <100000000>, <250000000>;
|
||||
intf_mode = <&wakeupmix_gpr 0x28>;
|
||||
clk_csr = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -540,8 +748,8 @@
|
|||
compatible = "fsl,imx93-usdhc", "fsl,imx8mm-usdhc";
|
||||
reg = <0x428b0000 0x10000>;
|
||||
interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_DUMMY>,
|
||||
<&clk IMX93_CLK_DUMMY>,
|
||||
clocks = <&clk IMX93_CLK_BUS_WAKEUP>,
|
||||
<&clk IMX93_CLK_WAKEUP_AXI>,
|
||||
<&clk IMX93_CLK_USDHC3_GATE>;
|
||||
clock-names = "ipg", "ahb", "per";
|
||||
bus-width = <4>;
|
||||
|
@ -551,138 +759,90 @@
|
|||
};
|
||||
};
|
||||
|
||||
gpio2: gpio@43810000 {
|
||||
compatible = "fsl,imx8ulp-gpio", "fsl,imx7ulp-gpio";
|
||||
gpio2: gpio@43810080 {
|
||||
compatible = "fsl,imx93-gpio", "fsl,imx7ulp-gpio";
|
||||
reg = <0x43810080 0x1000>, <0x43810040 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 32 32>;
|
||||
clocks = <&clk IMX93_CLK_GPIO2_GATE>,
|
||||
<&clk IMX93_CLK_GPIO2_GATE>;
|
||||
clock-names = "gpio", "port";
|
||||
gpio-ranges = <&iomuxc 0 4 30>;
|
||||
};
|
||||
|
||||
gpio3: gpio@43820000 {
|
||||
compatible = "fsl,imx8ulp-gpio", "fsl,imx7ulp-gpio";
|
||||
gpio3: gpio@43820080 {
|
||||
compatible = "fsl,imx93-gpio", "fsl,imx7ulp-gpio";
|
||||
reg = <0x43820080 0x1000>, <0x43820040 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 64 32>;
|
||||
clocks = <&clk IMX93_CLK_GPIO3_GATE>,
|
||||
<&clk IMX93_CLK_GPIO3_GATE>;
|
||||
clock-names = "gpio", "port";
|
||||
gpio-ranges = <&iomuxc 0 84 8>, <&iomuxc 8 66 18>,
|
||||
<&iomuxc 26 34 2>, <&iomuxc 28 0 4>;
|
||||
};
|
||||
|
||||
gpio4: gpio@43830000 {
|
||||
compatible = "fsl,imx8ulp-gpio", "fsl,imx7ulp-gpio";
|
||||
gpio4: gpio@43830080 {
|
||||
compatible = "fsl,imx93-gpio", "fsl,imx7ulp-gpio";
|
||||
reg = <0x43830080 0x1000>, <0x43830040 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 96 32>;
|
||||
clocks = <&clk IMX93_CLK_GPIO4_GATE>,
|
||||
<&clk IMX93_CLK_GPIO4_GATE>;
|
||||
clock-names = "gpio", "port";
|
||||
gpio-ranges = <&iomuxc 0 38 28>, <&iomuxc 28 36 2>;
|
||||
};
|
||||
|
||||
gpio1: gpio@47400000 {
|
||||
compatible = "fsl,imx8ulp-gpio", "fsl,imx7ulp-gpio";
|
||||
gpio1: gpio@47400080 {
|
||||
compatible = "fsl,imx93-gpio", "fsl,imx7ulp-gpio";
|
||||
reg = <0x47400080 0x1000>, <0x47400040 0x40>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 0 32>;
|
||||
clocks = <&clk IMX93_CLK_GPIO1_GATE>,
|
||||
<&clk IMX93_CLK_GPIO1_GATE>;
|
||||
clock-names = "gpio", "port";
|
||||
gpio-ranges = <&iomuxc 0 92 16>;
|
||||
};
|
||||
|
||||
ocotp: efuse@47510000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "fsl,imx93-ocotp", "syscon";
|
||||
reg = <0x47510000 0x1000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
s4muap: s4muap@47520000 {
|
||||
s4muap: mailbox@47520000 {
|
||||
compatible = "fsl,imx93-mu-s4";
|
||||
reg = <0x47520000 0x10000>;
|
||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "txirq", "rxirq";
|
||||
interrupt-names = "tx", "rx";
|
||||
#mbox-cells = <2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
sentnl_mu: sentnl-mu {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "fsl,imx-sentnl";
|
||||
mboxes = <&s4muap 0 0 &s4muap 1 0>;
|
||||
mbox-names = "tx", "rx";
|
||||
fsl,sentnl_mu_id = <2>;
|
||||
fsl,sentnl_mu_max_users = <4>;
|
||||
status = "okay";
|
||||
dma-ranges = <0x80000000 0x80000000 0x20000000>;
|
||||
};
|
||||
|
||||
ddr-pmu@4e300e00 {
|
||||
compatible = "fsl,imx93-ddr-pmu";
|
||||
reg = <0x4e300dc0 0x200>; /* _dc0 ~ _eb8 */
|
||||
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
usbphynop1: usbphynop1 {
|
||||
compatible = "usb-nop-xceiv";
|
||||
clocks = <&clk IMX93_CLK_USB_PHY_BURUNIN>;
|
||||
clock-names = "main_clk";
|
||||
};
|
||||
|
||||
usbotg1: usb@4c100000 {
|
||||
compatible = "fsl,imx8mm-usb", "fsl,imx7d-usb";
|
||||
reg = <0x4c100000 0x200>;
|
||||
interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_USB_CONTROLLER_GATE>;
|
||||
clock-names = "usb1_ctrl_root_clk";
|
||||
assigned-clocks = <&clk IMX93_CLK_USB_CONTROLLER_GATE>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_HSIO>;
|
||||
fsl,usbphy = <&usbphynop1>;
|
||||
fsl,usbmisc = <&usbmisc1 0>;
|
||||
media_blk_ctrl: system-controller@4ac10000 {
|
||||
compatible = "fsl,imx93-media-blk-ctrl", "syscon";
|
||||
reg = <0x4ac10000 0x10000>;
|
||||
power-domains = <&mediamix>;
|
||||
clocks = <&clk IMX93_CLK_MEDIA_APB>,
|
||||
<&clk IMX93_CLK_MEDIA_AXI>,
|
||||
<&clk IMX93_CLK_NIC_MEDIA_GATE>,
|
||||
<&clk IMX93_CLK_MEDIA_DISP_PIX>,
|
||||
<&clk IMX93_CLK_CAM_PIX>,
|
||||
<&clk IMX93_CLK_PXP_GATE>,
|
||||
<&clk IMX93_CLK_LCDIF_GATE>,
|
||||
<&clk IMX93_CLK_ISI_GATE>,
|
||||
<&clk IMX93_CLK_MIPI_CSI_GATE>,
|
||||
<&clk IMX93_CLK_MIPI_DSI_GATE>;
|
||||
clock-names = "apb", "axi", "nic", "disp", "cam",
|
||||
"pxp", "lcdif", "isi", "csi", "dsi";
|
||||
#power-domain-cells = <1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbmisc1: usbmisc@4c100200 {
|
||||
compatible = "fsl,imx8mm-usbmisc", "fsl,imx7d-usbmisc";
|
||||
#index-cells = <1>;
|
||||
reg = <0x4c100200 0x200>;
|
||||
};
|
||||
|
||||
usbphynop2: usbphynop2 {
|
||||
compatible = "usb-nop-xceiv";
|
||||
clocks = <&clk IMX93_CLK_USB_PHY_BURUNIN>;
|
||||
clock-names = "main_clk";
|
||||
};
|
||||
|
||||
usbotg2: usb@4c200000 {
|
||||
compatible = "fsl,imx8mm-usb", "fsl,imx7d-usb";
|
||||
reg = <0x4c200000 0x200>;
|
||||
interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX93_CLK_USB_CONTROLLER_GATE>;
|
||||
clock-names = "usb2_ctrl_root_clk";
|
||||
assigned-clocks = <&clk IMX93_CLK_USB_CONTROLLER_GATE>;
|
||||
assigned-clock-parents = <&clk IMX93_CLK_HSIO>;
|
||||
fsl,usbphy = <&usbphynop2>;
|
||||
fsl,usbmisc = <&usbmisc2 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usbmisc2: usbmisc@4c200200 {
|
||||
compatible = "fsl,imx8mm-usbmisc", "fsl,imx7d-usbmisc";
|
||||
#index-cells = <1>;
|
||||
reg = <0x4c200200 0x200>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -61,6 +61,13 @@
|
|||
#define MXC_CPU_MX7ULP 0xE1 /* Temporally hard code */
|
||||
#define MXC_CPU_VF610 0xF6 /* dummy ID */
|
||||
#define MXC_CPU_IMX93 0xC1 /* dummy ID */
|
||||
#define MXC_CPU_IMX9351 0xC2 /* dummy ID */
|
||||
#define MXC_CPU_IMX9332 0xC3 /* dummy ID */
|
||||
#define MXC_CPU_IMX9331 0xC4 /* dummy ID */
|
||||
#define MXC_CPU_IMX9322 0xC5 /* dummy ID */
|
||||
#define MXC_CPU_IMX9321 0xC6 /* dummy ID */
|
||||
#define MXC_CPU_IMX9312 0xC7 /* dummy ID */
|
||||
#define MXC_CPU_IMX9311 0xC8 /* dummy ID */
|
||||
|
||||
#define MXC_SOC_MX6 0x60
|
||||
#define MXC_SOC_MX7 0x70
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#ifndef _ASM_ARCH_IMX8_POWER_DOMAIN_H
|
||||
#define _ASM_ARCH_IMX8_POWER_DOMAIN_H
|
||||
|
||||
#include <asm/arch/sci/types.h>
|
||||
#include <firmware/imx/sci/types.h>
|
||||
|
||||
struct imx8_power_domain_plat {
|
||||
sc_rsrc_t resource_id;
|
||||
|
|
|
@ -1,138 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2018 NXP
|
||||
*/
|
||||
|
||||
#ifndef _SC_SCI_H
|
||||
#define _SC_SCI_H
|
||||
|
||||
#include <log.h>
|
||||
#include <asm/arch/sci/types.h>
|
||||
#include <asm/arch/sci/svc/misc/api.h>
|
||||
#include <asm/arch/sci/svc/pad/api.h>
|
||||
#include <asm/arch/sci/svc/pm/api.h>
|
||||
#include <asm/arch/sci/svc/rm/api.h>
|
||||
#include <asm/arch/sci/svc/seco/api.h>
|
||||
#include <asm/arch/sci/rpc.h>
|
||||
#include <dt-bindings/soc/imx_rsrc.h>
|
||||
#include <linux/errno.h>
|
||||
|
||||
static inline int sc_err_to_linux(sc_err_t err)
|
||||
{
|
||||
int ret;
|
||||
|
||||
switch (err) {
|
||||
case SC_ERR_NONE:
|
||||
return 0;
|
||||
case SC_ERR_VERSION:
|
||||
case SC_ERR_CONFIG:
|
||||
case SC_ERR_PARM:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
case SC_ERR_NOACCESS:
|
||||
case SC_ERR_LOCKED:
|
||||
case SC_ERR_UNAVAILABLE:
|
||||
ret = -EACCES;
|
||||
break;
|
||||
case SC_ERR_NOTFOUND:
|
||||
case SC_ERR_NOPOWER:
|
||||
ret = -ENODEV;
|
||||
break;
|
||||
case SC_ERR_IPC:
|
||||
ret = -EIO;
|
||||
break;
|
||||
case SC_ERR_BUSY:
|
||||
ret = -EBUSY;
|
||||
break;
|
||||
case SC_ERR_FAIL:
|
||||
ret = -EIO;
|
||||
break;
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
debug("%s %d %d\n", __func__, err, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* PM API*/
|
||||
int sc_pm_set_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_pm_power_mode_t mode);
|
||||
int sc_pm_get_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_pm_power_mode_t *mode);
|
||||
int sc_pm_set_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clock_rate_t *rate);
|
||||
int sc_pm_get_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clock_rate_t *rate);
|
||||
int sc_pm_clock_enable(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_bool_t enable, sc_bool_t autog);
|
||||
int sc_pm_set_clock_parent(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clk_parent_t parent);
|
||||
int sc_pm_cpu_start(sc_ipc_t ipc, sc_rsrc_t resource, sc_bool_t enable,
|
||||
sc_faddr_t address);
|
||||
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);
|
||||
|
||||
/* MISC API */
|
||||
int sc_misc_set_control(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_ctrl_t ctrl, u32 val);
|
||||
int sc_misc_get_control(sc_ipc_t ipc, sc_rsrc_t resource, sc_ctrl_t ctrl,
|
||||
u32 *val);
|
||||
void sc_misc_get_boot_dev(sc_ipc_t ipc, sc_rsrc_t *boot_dev);
|
||||
void sc_misc_boot_status(sc_ipc_t ipc, sc_misc_boot_status_t status);
|
||||
int sc_misc_get_boot_container(sc_ipc_t ipc, u8 *idx);
|
||||
void sc_misc_build_info(sc_ipc_t ipc, u32 *build, u32 *commit);
|
||||
int sc_misc_otp_fuse_read(sc_ipc_t ipc, u32 word, u32 *val);
|
||||
int sc_misc_get_temp(sc_ipc_t ipc, sc_rsrc_t resource, sc_misc_temp_t temp,
|
||||
s16 *celsius, s8 *tenths);
|
||||
|
||||
/* RM API */
|
||||
sc_bool_t sc_rm_is_memreg_owned(sc_ipc_t ipc, sc_rm_mr_t mr);
|
||||
int sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr, sc_faddr_t addr_start,
|
||||
sc_faddr_t addr_end);
|
||||
int sc_rm_set_memreg_permissions(sc_ipc_t ipc, sc_rm_mr_t mr,
|
||||
sc_rm_pt_t pt, sc_rm_perm_t perm);
|
||||
int sc_rm_get_memreg_info(sc_ipc_t ipc, sc_rm_mr_t mr, sc_faddr_t *addr_start,
|
||||
sc_faddr_t *addr_end);
|
||||
sc_bool_t sc_rm_is_resource_owned(sc_ipc_t ipc, sc_rsrc_t resource);
|
||||
int sc_rm_partition_alloc(sc_ipc_t ipc, sc_rm_pt_t *pt, sc_bool_t secure,
|
||||
sc_bool_t isolated, sc_bool_t restricted,
|
||||
sc_bool_t grant, sc_bool_t coherent);
|
||||
int sc_rm_partition_free(sc_ipc_t ipc, sc_rm_pt_t pt);
|
||||
int sc_rm_get_partition(sc_ipc_t ipc, sc_rm_pt_t *pt);
|
||||
int sc_rm_set_parent(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_pt_t pt_parent);
|
||||
int sc_rm_assign_resource(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rsrc_t resource);
|
||||
int sc_rm_assign_pad(sc_ipc_t ipc, sc_rm_pt_t pt, sc_pad_t pad);
|
||||
sc_bool_t sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad);
|
||||
int sc_rm_get_resource_owner(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_rm_pt_t *pt);
|
||||
|
||||
/* PAD API */
|
||||
int sc_pad_set(sc_ipc_t ipc, sc_pad_t pad, u32 val);
|
||||
int sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val);
|
||||
|
||||
/* SMMU API */
|
||||
int sc_rm_set_master_sid(sc_ipc_t ipc, sc_rsrc_t resource, sc_rm_sid_t sid);
|
||||
|
||||
/* SECO API */
|
||||
int sc_seco_authenticate(sc_ipc_t ipc, sc_seco_auth_cmd_t cmd,
|
||||
sc_faddr_t addr);
|
||||
int sc_seco_forward_lifecycle(sc_ipc_t ipc, u32 change);
|
||||
int sc_seco_chip_info(sc_ipc_t ipc, u16 *lc, u16 *monotonic, u32 *uid_l,
|
||||
u32 *uid_h);
|
||||
void sc_seco_build_info(sc_ipc_t ipc, u32 *version, u32 *commit);
|
||||
int sc_seco_get_event(sc_ipc_t ipc, u8 idx, u32 *event);
|
||||
int sc_seco_gen_key_blob(sc_ipc_t ipc, u32 id, sc_faddr_t load_addr,
|
||||
sc_faddr_t export_addr, u16 max_size);
|
||||
int sc_seco_get_mp_key(sc_ipc_t ipc, sc_faddr_t dst_addr, u16 dst_size);
|
||||
int sc_seco_update_mpmr(sc_ipc_t ipc, sc_faddr_t addr, u8 size, u8 lock);
|
||||
int sc_seco_get_mp_sign(sc_ipc_t ipc, sc_faddr_t msg_addr,
|
||||
u16 msg_size, sc_faddr_t dst_addr, u16 dst_size);
|
||||
int sc_seco_secvio_dgo_config(sc_ipc_t ipc, u8 id, u8 access, u32 *data);
|
||||
int sc_seco_secvio_config(sc_ipc_t ipc, u8 id, u8 access,
|
||||
u32 *data0, u32 *data1, u32 *data2, u32 *data3,
|
||||
u32 *data4, u8 size);
|
||||
|
||||
#endif
|
|
@ -3,7 +3,7 @@
|
|||
* Copyright 2018 NXP
|
||||
*/
|
||||
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/mach-imx/sys_proto.h>
|
||||
#include <asm/arch/power-domain.h>
|
||||
#include <dm/platdata.h>
|
||||
|
|
|
@ -709,7 +709,7 @@ int ddr_init(struct dram_timing_info *timing_info);
|
|||
int ddr_cfg_phy(struct dram_timing_info *timing_info);
|
||||
void load_lpddr4_phy_pie(void);
|
||||
void ddrphy_trained_csr_save(struct dram_cfg_param *param, unsigned int num);
|
||||
void dram_config_save(struct dram_timing_info *info, unsigned long base);
|
||||
void *dram_config_save(struct dram_timing_info *info, unsigned long base);
|
||||
void board_dram_ecc_scrub(void);
|
||||
void ddrc_inline_ecc_scrub(unsigned int start_address,
|
||||
unsigned int range_address);
|
||||
|
|
|
@ -205,6 +205,12 @@ struct clk_root_map {
|
|||
u32 mux_type;
|
||||
};
|
||||
|
||||
struct imx_clk_setting {
|
||||
u32 clk_root;
|
||||
enum ccm_clk_src src;
|
||||
u32 div;
|
||||
};
|
||||
|
||||
int clock_init(void);
|
||||
u32 get_clk_src_rate(enum ccm_clk_src source);
|
||||
u32 get_lpuart_clk(void);
|
||||
|
|
|
@ -13,9 +13,21 @@
|
|||
#define DDR_PHY_BASE 0x4E100000
|
||||
#define DDRMIX_BLK_CTRL_BASE 0x4E010000
|
||||
|
||||
#define REG_DDR_SDRAM_MD_CNTL (DDR_CTL_BASE + 0x120)
|
||||
#define REG_DDR_CS0_BNDS (DDR_CTL_BASE + 0x0)
|
||||
#define REG_DDR_CS1_BNDS (DDR_CTL_BASE + 0x8)
|
||||
#define REG_DDRDSR_2 (DDR_CTL_BASE + 0xB24)
|
||||
#define REG_DDR_TIMING_CFG_0 (DDR_CTL_BASE + 0x104)
|
||||
#define REG_DDR_SDRAM_CFG (DDR_CTL_BASE + 0x110)
|
||||
#define REG_DDR_TIMING_CFG_4 (DDR_CTL_BASE + 0x160)
|
||||
#define REG_DDR_DEBUG_19 (DDR_CTL_BASE + 0xF48)
|
||||
#define REG_DDR_SDRAM_CFG_3 (DDR_CTL_BASE + 0x260)
|
||||
#define REG_DDR_SDRAM_CFG_4 (DDR_CTL_BASE + 0x264)
|
||||
#define REG_DDR_SDRAM_MD_CNTL_2 (DDR_CTL_BASE + 0x270)
|
||||
#define REG_DDR_SDRAM_MPR4 (DDR_CTL_BASE + 0x28C)
|
||||
#define REG_DDR_SDRAM_MPR5 (DDR_CTL_BASE + 0x290)
|
||||
|
||||
#define REG_DDR_ERR_EN (DDR_CTL_BASE + 0x1000)
|
||||
|
||||
#define SRC_BASE_ADDR (0x44460000)
|
||||
#define SRC_DPHY_BASE_ADDR (SRC_BASE_ADDR + 0x1400)
|
||||
|
@ -50,6 +62,12 @@ struct dram_cfg_param {
|
|||
unsigned int val;
|
||||
};
|
||||
|
||||
struct dram_fsp_cfg {
|
||||
struct dram_cfg_param ddrc_cfg[20];
|
||||
struct dram_cfg_param mr_cfg[10];
|
||||
unsigned int bypass;
|
||||
};
|
||||
|
||||
struct dram_fsp_msg {
|
||||
unsigned int drate;
|
||||
enum fw_type fw_type;
|
||||
|
@ -61,6 +79,9 @@ struct dram_timing_info {
|
|||
/* umctl2 config */
|
||||
struct dram_cfg_param *ddrc_cfg;
|
||||
unsigned int ddrc_cfg_num;
|
||||
/* fsp config */
|
||||
struct dram_fsp_cfg *fsp_cfg;
|
||||
unsigned int fsp_cfg_num;
|
||||
/* ddrphy config */
|
||||
struct dram_cfg_param *ddrphy_cfg;
|
||||
unsigned int ddrphy_cfg_num;
|
||||
|
@ -84,7 +105,7 @@ int ddr_init(struct dram_timing_info *timing_info);
|
|||
int ddr_cfg_phy(struct dram_timing_info *timing_info);
|
||||
void load_lpddr4_phy_pie(void);
|
||||
void ddrphy_trained_csr_save(struct dram_cfg_param *param, unsigned int num);
|
||||
void dram_config_save(struct dram_timing_info *info, unsigned long base);
|
||||
void *dram_config_save(struct dram_timing_info *info, unsigned long base);
|
||||
void board_dram_ecc_scrub(void);
|
||||
void ddrc_inline_ecc_scrub(unsigned int start_address,
|
||||
unsigned int range_address);
|
||||
|
|
|
@ -48,6 +48,9 @@
|
|||
#define BCTRL_GPR_ENET_QOS_INTF_SEL_RGMII (0x1 << 1)
|
||||
#define BCTRL_GPR_ENET_QOS_CLK_GEN_EN (0x1 << 0)
|
||||
|
||||
#define MARKETING_GRADING_MASK GENMASK(5, 4)
|
||||
#define SPEED_GRADING_MASK GENMASK(11, 6)
|
||||
|
||||
#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
|
||||
#include <asm/types.h>
|
||||
#include <stdbool.h>
|
||||
|
|
|
@ -82,7 +82,17 @@ struct bd_info;
|
|||
|
||||
#define is_imx8qxp() (is_cpu_type(MXC_CPU_IMX8QXP))
|
||||
|
||||
#define is_imx93() (is_cpu_type(MXC_CPU_IMX93))
|
||||
#define is_imx93() (is_cpu_type(MXC_CPU_IMX93) || is_cpu_type(MXC_CPU_IMX9331) || \
|
||||
is_cpu_type(MXC_CPU_IMX9332) || is_cpu_type(MXC_CPU_IMX9351) || \
|
||||
is_cpu_type(MXC_CPU_IMX9322) || is_cpu_type(MXC_CPU_IMX9321) || \
|
||||
is_cpu_type(MXC_CPU_IMX9312) || is_cpu_type(MXC_CPU_IMX9311))
|
||||
#define is_imx9351() (is_cpu_type(MXC_CPU_IMX9351))
|
||||
#define is_imx9332() (is_cpu_type(MXC_CPU_IMX9332))
|
||||
#define is_imx9331() (is_cpu_type(MXC_CPU_IMX9331))
|
||||
#define is_imx9322() (is_cpu_type(MXC_CPU_IMX9322))
|
||||
#define is_imx9321() (is_cpu_type(MXC_CPU_IMX9321))
|
||||
#define is_imx9312() (is_cpu_type(MXC_CPU_IMX9312))
|
||||
#define is_imx9311() (is_cpu_type(MXC_CPU_IMX9311))
|
||||
|
||||
#define is_imxrt1020() (is_cpu_type(MXC_CPU_IMXRT1020))
|
||||
#define is_imxrt1050() (is_cpu_type(MXC_CPU_IMXRT1050))
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <mapmem.h>
|
||||
#include <tee.h>
|
||||
#ifdef CONFIG_IMX_SECO_DEK_ENCAP
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/mach-imx/image.h>
|
||||
#endif
|
||||
#include <cpu_func.h>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#include <log.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/mach-imx/sys_proto.h>
|
||||
#include <asm/arch-imx/cpu.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <errno.h>
|
||||
#include <spl.h>
|
||||
#include <thermal.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch-imx/cpu.h>
|
||||
#include <asm/armv8/cpu.h>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#include <common.h>
|
||||
#include <log.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <dm/ofnode.h>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
#include <common.h>
|
||||
#include <log.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/mach-imx/sys_proto.h>
|
||||
#include <imx_sip.h>
|
||||
#include <linux/arm-smccc.h>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <log.h>
|
||||
#include <stddef.h>
|
||||
#include <common.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch-imx8/imx8-pins.h>
|
||||
#include <asm/arch-imx8/snvs_security_sc.h>
|
||||
#include <asm/global_data.h>
|
||||
|
|
|
@ -671,6 +671,7 @@ int spl_mmc_emmc_boot_partition(struct mmc *mmc)
|
|||
/* Log entries with 1 parameter, skip 1 */
|
||||
case 0x80: /* Start to perform the device initialization */
|
||||
case 0x81: /* The boot device initialization completes */
|
||||
case 0x82: /* Starts to execute boot device driver pre-config */
|
||||
case 0x8f: /* The boot device initialization fails */
|
||||
case 0x90: /* Start to read data from boot device */
|
||||
case 0x91: /* Reading data from boot device completes */
|
||||
|
@ -1429,79 +1430,6 @@ int arch_misc_init(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
void imx_tmu_arch_init(void *reg_base)
|
||||
{
|
||||
if (is_imx8mm() || is_imx8mn()) {
|
||||
/* Load TCALIV and TASR from fuses */
|
||||
struct ocotp_regs *ocotp =
|
||||
(struct ocotp_regs *)OCOTP_BASE_ADDR;
|
||||
struct fuse_bank *bank = &ocotp->bank[3];
|
||||
struct fuse_bank3_regs *fuse =
|
||||
(struct fuse_bank3_regs *)bank->fuse_regs;
|
||||
|
||||
u32 tca_rt, tca_hr, tca_en;
|
||||
u32 buf_vref, buf_slope;
|
||||
|
||||
tca_rt = fuse->ana0 & 0xFF;
|
||||
tca_hr = (fuse->ana0 & 0xFF00) >> 8;
|
||||
tca_en = (fuse->ana0 & 0x2000000) >> 25;
|
||||
|
||||
buf_vref = (fuse->ana0 & 0x1F00000) >> 20;
|
||||
buf_slope = (fuse->ana0 & 0xF0000) >> 16;
|
||||
|
||||
writel(buf_vref | (buf_slope << 16), (ulong)reg_base + 0x28);
|
||||
writel((tca_en << 31) | (tca_hr << 16) | tca_rt,
|
||||
(ulong)reg_base + 0x30);
|
||||
}
|
||||
#ifdef CONFIG_IMX8MP
|
||||
/* Load TCALIV0/1/m40 and TRIM from fuses */
|
||||
struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
|
||||
struct fuse_bank *bank = &ocotp->bank[38];
|
||||
struct fuse_bank38_regs *fuse =
|
||||
(struct fuse_bank38_regs *)bank->fuse_regs;
|
||||
struct fuse_bank *bank2 = &ocotp->bank[39];
|
||||
struct fuse_bank39_regs *fuse2 =
|
||||
(struct fuse_bank39_regs *)bank2->fuse_regs;
|
||||
u32 buf_vref, buf_slope, bjt_cur, vlsb, bgr;
|
||||
u32 reg;
|
||||
u32 tca40[2], tca25[2], tca105[2];
|
||||
|
||||
/* For blank sample */
|
||||
if (!fuse->ana_trim2 && !fuse->ana_trim3 &&
|
||||
!fuse->ana_trim4 && !fuse2->ana_trim5) {
|
||||
/* Use a default 25C binary codes */
|
||||
tca25[0] = 1596;
|
||||
tca25[1] = 1596;
|
||||
writel(tca25[0], (ulong)reg_base + 0x30);
|
||||
writel(tca25[1], (ulong)reg_base + 0x34);
|
||||
return;
|
||||
}
|
||||
|
||||
buf_vref = (fuse->ana_trim2 & 0xc0) >> 6;
|
||||
buf_slope = (fuse->ana_trim2 & 0xF00) >> 8;
|
||||
bjt_cur = (fuse->ana_trim2 & 0xF000) >> 12;
|
||||
bgr = (fuse->ana_trim2 & 0xF0000) >> 16;
|
||||
vlsb = (fuse->ana_trim2 & 0xF00000) >> 20;
|
||||
writel(buf_vref | (buf_slope << 16), (ulong)reg_base + 0x28);
|
||||
|
||||
reg = (bgr << 28) | (bjt_cur << 20) | (vlsb << 12) | (1 << 7);
|
||||
writel(reg, (ulong)reg_base + 0x3c);
|
||||
|
||||
tca40[0] = (fuse->ana_trim3 & 0xFFF0000) >> 16;
|
||||
tca25[0] = (fuse->ana_trim3 & 0xF0000000) >> 28;
|
||||
tca25[0] |= ((fuse->ana_trim4 & 0xFF) << 4);
|
||||
tca105[0] = (fuse->ana_trim4 & 0xFFF00) >> 8;
|
||||
tca40[1] = (fuse->ana_trim4 & 0xFFF00000) >> 20;
|
||||
tca25[1] = fuse2->ana_trim5 & 0xFFF;
|
||||
tca105[1] = (fuse2->ana_trim5 & 0xFFF000) >> 12;
|
||||
|
||||
/* use 25c for 1p calibration */
|
||||
writel(tca25[0] | (tca105[0] << 16), (ulong)reg_base + 0x30);
|
||||
writel(tca25[1] | (tca105[1] << 16), (ulong)reg_base + 0x34);
|
||||
writel(tca40[0] | (tca40[1] << 16), (ulong)reg_base + 0x38);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(CONFIG_SPL_BUILD)
|
||||
#if defined(CONFIG_IMX8MQ) || defined(CONFIG_IMX8MM) || defined(CONFIG_IMX8MN)
|
||||
bool serror_need_skip = true;
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
if ARCH_IMX8ULP
|
||||
|
||||
config AHAB_BOOT
|
||||
bool "Support i.MX8ULP AHAB features"
|
||||
help
|
||||
This option enables the support for AHAB secure boot.
|
||||
|
||||
config IMX8ULP
|
||||
bool
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
obj-y += lowlevel_init.o
|
||||
obj-y += soc.o clock.o iomux.o pcc.o cgc.o rdc.o
|
||||
obj-$(CONFIG_AHAB_BOOT) += ahab.o
|
||||
|
||||
ifeq ($(CONFIG_SPL_BUILD),y)
|
||||
obj-y += upower/
|
||||
|
|
|
@ -5,6 +5,11 @@ config AHAB_BOOT
|
|||
help
|
||||
This option enables the support for AHAB secure boot.
|
||||
|
||||
config IMX9_LOW_DRIVE_MODE
|
||||
bool "Configure to i.MX9 low drive mode"
|
||||
help
|
||||
This option enables the settings for iMX9 low drive mode.
|
||||
|
||||
config IMX9
|
||||
bool
|
||||
select HAS_CAAM
|
||||
|
|
|
@ -26,6 +26,7 @@ static struct anatop_reg *ana_regs = (struct anatop_reg *)ANATOP_BASE_ADDR;
|
|||
static struct imx_intpll_rate_table imx9_intpll_tbl[] = {
|
||||
INT_PLL_RATE(1800000000U, 1, 150, 2), /* 1.8Ghz */
|
||||
INT_PLL_RATE(1700000000U, 1, 141, 2), /* 1.7Ghz */
|
||||
INT_PLL_RATE(1500000000U, 1, 125, 2), /* 1.5Ghz */
|
||||
INT_PLL_RATE(1400000000U, 1, 175, 3), /* 1.4Ghz */
|
||||
INT_PLL_RATE(1000000000U, 1, 166, 4), /* 1000Mhz */
|
||||
INT_PLL_RATE(900000000U, 1, 150, 4), /* 900Mhz */
|
||||
|
@ -35,8 +36,11 @@ static struct imx_fracpll_rate_table imx9_fracpll_tbl[] = {
|
|||
FRAC_PLL_RATE(1000000000U, 1, 166, 4, 2, 3), /* 1000Mhz */
|
||||
FRAC_PLL_RATE(933000000U, 1, 155, 4, 1, 2), /* 933Mhz */
|
||||
FRAC_PLL_RATE(700000000U, 1, 145, 5, 5, 6), /* 700Mhz */
|
||||
FRAC_PLL_RATE(484000000U, 1, 121, 6, 0, 1),
|
||||
FRAC_PLL_RATE(445333333U, 1, 167, 9, 0, 1),
|
||||
FRAC_PLL_RATE(466000000U, 1, 155, 8, 1, 3), /* 466Mhz */
|
||||
FRAC_PLL_RATE(400000000U, 1, 200, 12, 0, 1), /* 400Mhz */
|
||||
FRAC_PLL_RATE(300000000U, 1, 150, 12, 0, 1),
|
||||
};
|
||||
|
||||
/* return in khz */
|
||||
|
@ -202,6 +206,9 @@ int configure_intpll(enum ccm_clk_src pll, u32 freq)
|
|||
return -EPERM;
|
||||
}
|
||||
|
||||
/* Clear PLL HW CTRL SEL */
|
||||
setbits_le32(®->ctrl.reg_clr, PLL_CTRL_HW_CTRL_SEL);
|
||||
|
||||
/* Bypass the PLL to ref */
|
||||
writel(PLL_CTRL_CLKMUX_BYPASS, ®->ctrl.reg_set);
|
||||
|
||||
|
@ -570,7 +577,7 @@ u32 imx_get_i2cclk(u32 i2c_num)
|
|||
if (i2c_num > 7)
|
||||
return -EINVAL;
|
||||
|
||||
return ccm_clk_root_get_rate(LPUART1_CLK_ROOT + i2c_num);
|
||||
return ccm_clk_root_get_rate(LPI2C1_CLK_ROOT + i2c_num);
|
||||
}
|
||||
|
||||
u32 get_lpuart_clk(void)
|
||||
|
@ -594,21 +601,27 @@ void init_uart_clk(u32 index)
|
|||
|
||||
void init_clk_usdhc(u32 index)
|
||||
{
|
||||
/* 400 Mhz */
|
||||
u32 div;
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE))
|
||||
div = 3; /* 266.67 Mhz */
|
||||
else
|
||||
div = 2; /* 400 Mhz */
|
||||
|
||||
switch (index) {
|
||||
case 0:
|
||||
ccm_lpcg_on(CCGR_USDHC1, 0);
|
||||
ccm_clk_root_cfg(USDHC1_CLK_ROOT, SYS_PLL_PFD1, 2);
|
||||
ccm_clk_root_cfg(USDHC1_CLK_ROOT, SYS_PLL_PFD1, div);
|
||||
ccm_lpcg_on(CCGR_USDHC1, 1);
|
||||
break;
|
||||
case 1:
|
||||
ccm_lpcg_on(CCGR_USDHC2, 0);
|
||||
ccm_clk_root_cfg(USDHC2_CLK_ROOT, SYS_PLL_PFD1, 2);
|
||||
ccm_clk_root_cfg(USDHC2_CLK_ROOT, SYS_PLL_PFD1, div);
|
||||
ccm_lpcg_on(CCGR_USDHC2, 1);
|
||||
break;
|
||||
case 2:
|
||||
ccm_lpcg_on(CCGR_USDHC3, 0);
|
||||
ccm_clk_root_cfg(USDHC3_CLK_ROOT, SYS_PLL_PFD1, 2);
|
||||
ccm_clk_root_cfg(USDHC3_CLK_ROOT, SYS_PLL_PFD1, div);
|
||||
ccm_lpcg_on(CCGR_USDHC3, 1);
|
||||
break;
|
||||
default:
|
||||
|
@ -635,6 +648,9 @@ void dram_pll_init(ulong pll_val)
|
|||
void dram_enable_bypass(ulong clk_val)
|
||||
{
|
||||
switch (clk_val) {
|
||||
case MHZ(625):
|
||||
ccm_clk_root_cfg(DRAM_ALT_CLK_ROOT, SYS_PLL_PFD2, 1);
|
||||
break;
|
||||
case MHZ(400):
|
||||
ccm_clk_root_cfg(DRAM_ALT_CLK_ROOT, SYS_PLL_PFD1, 2);
|
||||
break;
|
||||
|
@ -670,42 +686,95 @@ void set_arm_clk(ulong freq)
|
|||
{
|
||||
/* Increase ARM clock to 1.7Ghz */
|
||||
ccm_shared_gpr_set(SHARED_GPR_A55_CLK, SHARED_GPR_A55_CLK_SEL_CCM);
|
||||
configure_intpll(ARM_PLL_CLK, 1700000000);
|
||||
configure_intpll(ARM_PLL_CLK, freq);
|
||||
ccm_shared_gpr_set(SHARED_GPR_A55_CLK, SHARED_GPR_A55_CLK_SEL_PLL);
|
||||
}
|
||||
|
||||
void set_arm_core_max_clk(void)
|
||||
{
|
||||
/* Increase ARM clock to max rate according to speed grade */
|
||||
u32 speed = get_cpu_speed_grade_hz();
|
||||
|
||||
set_arm_clk(speed);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE)
|
||||
struct imx_clk_setting imx_clk_settings[] = {
|
||||
/* Set A55 clk to 500M */
|
||||
{ARM_A55_CLK_ROOT, SYS_PLL_PFD0, 2},
|
||||
/* Set A55 periphal to 200M */
|
||||
{ARM_A55_PERIPH_CLK_ROOT, SYS_PLL_PFD1, 4},
|
||||
/* Set A55 mtr bus to 133M */
|
||||
{ARM_A55_MTR_BUS_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
|
||||
/* Sentinel to 133M */
|
||||
{SENTINEL_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* Bus_wakeup to 133M */
|
||||
{BUS_WAKEUP_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* Bus_AON to 133M */
|
||||
{BUS_AON_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* M33 to 133M */
|
||||
{M33_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* WAKEUP_AXI to 200M */
|
||||
{WAKEUP_AXI_CLK_ROOT, SYS_PLL_PFD1, 4},
|
||||
/* SWO TRACE to 133M */
|
||||
{SWO_TRACE_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* M33 systetick to 24M */
|
||||
{M33_SYSTICK_CLK_ROOT, OSC_24M_CLK, 1},
|
||||
/* NIC to 250M */
|
||||
{NIC_CLK_ROOT, SYS_PLL_PFD0, 4},
|
||||
/* NIC_APB to 133M */
|
||||
{NIC_APB_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3}
|
||||
};
|
||||
#else
|
||||
struct imx_clk_setting imx_clk_settings[] = {
|
||||
/*
|
||||
* Set A55 clk to 500M. This clock root is normally used as intermediate
|
||||
* clock source for A55 core/DSU when doing ARM PLL reconfig. set it to
|
||||
* 500MHz(LD mode frequency) should be ok.
|
||||
*/
|
||||
{ARM_A55_CLK_ROOT, SYS_PLL_PFD0, 2},
|
||||
/* Set A55 periphal to 333M */
|
||||
{ARM_A55_PERIPH_CLK_ROOT, SYS_PLL_PFD0, 3},
|
||||
/* Set A55 mtr bus to 133M */
|
||||
{ARM_A55_MTR_BUS_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* Sentinel to 200M */
|
||||
{SENTINEL_CLK_ROOT, SYS_PLL_PFD1_DIV2, 2},
|
||||
/* Bus_wakeup to 133M */
|
||||
{BUS_WAKEUP_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* Bus_AON to 133M */
|
||||
{BUS_AON_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* M33 to 200M */
|
||||
{M33_CLK_ROOT, SYS_PLL_PFD1_DIV2, 2},
|
||||
/*
|
||||
* WAKEUP_AXI to 312.5M, because of FEC only can support to 320M for
|
||||
* generating MII clock at 2.5M
|
||||
*/
|
||||
{WAKEUP_AXI_CLK_ROOT, SYS_PLL_PFD2, 2},
|
||||
/* SWO TRACE to 133M */
|
||||
{SWO_TRACE_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3},
|
||||
/* M33 systetick to 24M */
|
||||
{M33_SYSTICK_CLK_ROOT, OSC_24M_CLK, 1},
|
||||
/* NIC to 400M */
|
||||
{NIC_CLK_ROOT, SYS_PLL_PFD1, 2},
|
||||
/* NIC_APB to 133M */
|
||||
{NIC_APB_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3}
|
||||
};
|
||||
#endif
|
||||
|
||||
int clock_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Set A55 periphal to 333M */
|
||||
ccm_clk_root_cfg(ARM_A55_PERIPH_CLK_ROOT, SYS_PLL_PFD0, 3);
|
||||
/* Set A55 mtr bus to 133M */
|
||||
ccm_clk_root_cfg(ARM_A55_MTR_BUS_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3);
|
||||
for (i = 0; i < ARRAY_SIZE(imx_clk_settings); i++) {
|
||||
ccm_clk_root_cfg(imx_clk_settings[i].clk_root,
|
||||
imx_clk_settings[i].src, imx_clk_settings[i].div);
|
||||
}
|
||||
|
||||
/* Sentinel to 200M */
|
||||
ccm_clk_root_cfg(SENTINEL_CLK_ROOT, SYS_PLL_PFD1_DIV2, 2);
|
||||
/* Bus_wakeup to 133M */
|
||||
ccm_clk_root_cfg(BUS_WAKEUP_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3);
|
||||
/* Bus_AON to 133M */
|
||||
ccm_clk_root_cfg(BUS_AON_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3);
|
||||
/* M33 to 200M */
|
||||
ccm_clk_root_cfg(M33_CLK_ROOT, SYS_PLL_PFD1_DIV2, 2);
|
||||
/*
|
||||
* WAKEUP_AXI to 312.5M, because of FEC only can support to 320M for
|
||||
* generating MII clock at 2.5M
|
||||
*/
|
||||
ccm_clk_root_cfg(WAKEUP_AXI_CLK_ROOT, SYS_PLL_PFD2, 2);
|
||||
/* SWO TRACE to 133M */
|
||||
ccm_clk_root_cfg(SWO_TRACE_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3);
|
||||
/* M33 systetick to 133M */
|
||||
ccm_clk_root_cfg(M33_SYSTICK_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3);
|
||||
/* NIC to 400M */
|
||||
ccm_clk_root_cfg(NIC_CLK_ROOT, SYS_PLL_PFD1, 2);
|
||||
/* NIC_APB to 133M */
|
||||
ccm_clk_root_cfg(NIC_APB_CLK_ROOT, SYS_PLL_PFD1_DIV2, 3);
|
||||
if (IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE))
|
||||
set_arm_clk(MHZ(900));
|
||||
|
||||
/* allow for non-secure access */
|
||||
for (i = 0; i < OSCPLL_END; i++)
|
||||
|
|
|
@ -34,17 +34,13 @@ int arch_auxiliary_core_down(u32 core_id)
|
|||
int arch_auxiliary_core_up(u32 core_id, ulong addr)
|
||||
{
|
||||
struct arm_smccc_res res;
|
||||
u32 stack, pc;
|
||||
|
||||
if (!addr)
|
||||
return -EINVAL;
|
||||
|
||||
stack = *(u32 *)addr;
|
||||
pc = *(u32 *)(addr + 4);
|
||||
printf("## Starting auxiliary core addr = 0x%08lX...\n", addr);
|
||||
|
||||
printf("## Starting auxiliary core stack = 0x%08X, pc = 0x%08X...\n", stack, pc);
|
||||
|
||||
arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_START, 0, 0,
|
||||
arm_smccc_smc(IMX_SIP_SRC, IMX_SIP_SRC_M4_START, addr, 0,
|
||||
0, 0, 0, 0, &res);
|
||||
|
||||
return 0;
|
||||
|
@ -129,5 +125,5 @@ U_BOOT_CMD(
|
|||
"Start auxiliary core",
|
||||
"<address> [<core>]\n"
|
||||
" - start auxiliary core [<core>] (default 0),\n"
|
||||
" at address <address>\n"
|
||||
" at address <address> of auxiliary core view\n"
|
||||
);
|
||||
|
|
|
@ -19,17 +19,24 @@
|
|||
#include <asm/mach-imx/boot_mode.h>
|
||||
#include <asm/mach-imx/syscounter.h>
|
||||
#include <asm/armv8/mmu.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/device_compat.h>
|
||||
#include <dm/uclass.h>
|
||||
#include <env.h>
|
||||
#include <env_internal.h>
|
||||
#include <errno.h>
|
||||
#include <fdt_support.h>
|
||||
#include <imx_thermal.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/delay.h>
|
||||
#include <thermal.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/bootm.h>
|
||||
#include <asm/arch-imx/cpu.h>
|
||||
#include <asm/mach-imx/s400_api.h>
|
||||
#include <linux/delay.h>
|
||||
#include <fuse.h>
|
||||
#include <asm/arch/ddr.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
|
@ -38,19 +45,17 @@ struct rom_api *g_rom_api = (struct rom_api *)0x1980;
|
|||
#ifdef CONFIG_ENV_IS_IN_MMC
|
||||
__weak int board_mmc_get_env_dev(int devno)
|
||||
{
|
||||
return devno; }
|
||||
return devno;
|
||||
}
|
||||
|
||||
int mmc_get_env_dev(void)
|
||||
{
|
||||
volatile gd_t *pgd = gd;
|
||||
int ret;
|
||||
u32 boot;
|
||||
u16 boot_type;
|
||||
u8 boot_instance;
|
||||
|
||||
ret = g_rom_api->query_boot_infor(QUERY_BT_DEV, &boot,
|
||||
((uintptr_t)&boot) ^ QUERY_BT_DEV);
|
||||
set_gd(pgd);
|
||||
ret = rom_api_query_boot_infor(QUERY_BT_DEV, &boot);
|
||||
|
||||
if (ret != ROM_API_OKAY) {
|
||||
puts("ROMAPI: failure at query_boot_info\n");
|
||||
|
@ -70,6 +75,82 @@ int mmc_get_env_dev(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SPEED_GRADE[5:4] SPEED_GRADE[3:0] MHz
|
||||
* xx 0000 2300
|
||||
* xx 0001 2200
|
||||
* xx 0010 2100
|
||||
* xx 0011 2000
|
||||
* xx 0100 1900
|
||||
* xx 0101 1800
|
||||
* xx 0110 1700
|
||||
* xx 0111 1600
|
||||
* xx 1000 1500
|
||||
* xx 1001 1400
|
||||
* xx 1010 1300
|
||||
* xx 1011 1200
|
||||
* xx 1100 1100
|
||||
* xx 1101 1000
|
||||
* xx 1110 900
|
||||
* xx 1111 800
|
||||
*/
|
||||
u32 get_cpu_speed_grade_hz(void)
|
||||
{
|
||||
u32 speed, max_speed;
|
||||
u32 val;
|
||||
|
||||
fuse_read(2, 3, &val);
|
||||
val = FIELD_GET(SPEED_GRADING_MASK, val) & 0xF;
|
||||
|
||||
speed = MHZ(2300) - val * MHZ(100);
|
||||
|
||||
if (is_imx93())
|
||||
max_speed = MHZ(1700);
|
||||
|
||||
/* In case the fuse of speed grade not programmed */
|
||||
if (speed > max_speed)
|
||||
speed = max_speed;
|
||||
|
||||
return speed;
|
||||
}
|
||||
|
||||
/*
|
||||
* `00` - Consumer 0C to 95C
|
||||
* `01` - Ext. Consumer -20C to 105C
|
||||
* `10` - Industrial -40C to 105C
|
||||
* `11` - Automotive -40C to 125C
|
||||
*/
|
||||
u32 get_cpu_temp_grade(int *minc, int *maxc)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
fuse_read(2, 3, &val);
|
||||
val = FIELD_GET(MARKETING_GRADING_MASK, val);
|
||||
|
||||
if (minc && maxc) {
|
||||
if (val == TEMP_AUTOMOTIVE) {
|
||||
*minc = -40;
|
||||
*maxc = 125;
|
||||
} else if (val == TEMP_INDUSTRIAL) {
|
||||
*minc = -40;
|
||||
*maxc = 105;
|
||||
} else if (val == TEMP_EXTCOMMERCIAL) {
|
||||
if (is_imx93()) {
|
||||
/* imx93 only has extended industrial*/
|
||||
*minc = -40;
|
||||
*maxc = 125;
|
||||
} else {
|
||||
*minc = -20;
|
||||
*maxc = 105;
|
||||
}
|
||||
} else {
|
||||
*minc = 0;
|
||||
*maxc = 95;
|
||||
}
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
static void set_cpu_info(struct sentinel_get_info_data *info)
|
||||
{
|
||||
gd->arch.soc_rev = info->soc;
|
||||
|
@ -77,11 +158,34 @@ static void set_cpu_info(struct sentinel_get_info_data *info)
|
|||
memcpy((void *)&gd->arch.uid, &info->uid, 4 * sizeof(u32));
|
||||
}
|
||||
|
||||
static u32 get_cpu_variant_type(u32 type)
|
||||
{
|
||||
/* word 19 */
|
||||
u32 val = readl((ulong)FSB_BASE_ADDR + 0x8000 + (19 << 2));
|
||||
u32 val2 = readl((ulong)FSB_BASE_ADDR + 0x8000 + (20 << 2));
|
||||
bool npu_disable = !!(val & BIT(13));
|
||||
bool core1_disable = !!(val & BIT(15));
|
||||
u32 pack_9x9_fused = BIT(4) | BIT(17) | BIT(19) | BIT(24);
|
||||
|
||||
if ((val2 & pack_9x9_fused) == pack_9x9_fused)
|
||||
type = MXC_CPU_IMX9322;
|
||||
|
||||
if (npu_disable && core1_disable)
|
||||
return type + 3;
|
||||
else if (npu_disable)
|
||||
return type + 2;
|
||||
else if (core1_disable)
|
||||
return type + 1;
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
u32 get_cpu_rev(void)
|
||||
{
|
||||
u32 rev = (gd->arch.soc_rev >> 24) - 0xa0;
|
||||
|
||||
return (MXC_CPU_IMX93 << 12) | (CHIP_REV_1_0 + rev);
|
||||
return (get_cpu_variant_type(MXC_CPU_IMX93) << 12) |
|
||||
(CHIP_REV_1_0 + rev);
|
||||
}
|
||||
|
||||
#define UNLOCK_WORD 0xD928C520 /* unlock word */
|
||||
|
@ -180,21 +284,216 @@ static struct mm_region imx93_mem_map[] = {
|
|||
|
||||
struct mm_region *mem_map = imx93_mem_map;
|
||||
|
||||
int dram_init(void)
|
||||
static unsigned int imx9_find_dram_entry_in_mem_map(void)
|
||||
{
|
||||
gd->ram_size = PHYS_SDRAM_SIZE;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(imx93_mem_map); i++)
|
||||
if (imx93_mem_map[i].phys == CFG_SYS_SDRAM_BASE)
|
||||
return i;
|
||||
|
||||
hang(); /* Entry not found, this must never happen. */
|
||||
}
|
||||
|
||||
void enable_caches(void)
|
||||
{
|
||||
/* If OPTEE runs, remove OPTEE memory from MMU table to avoid speculative prefetch
|
||||
* If OPTEE does not run, still update the MMU table according to dram banks structure
|
||||
* to set correct dram size from board_phys_sdram_size
|
||||
*/
|
||||
int i = 0;
|
||||
/*
|
||||
* please make sure that entry initial value matches
|
||||
* imx93_mem_map for DRAM1
|
||||
*/
|
||||
int entry = imx9_find_dram_entry_in_mem_map();
|
||||
u64 attrs = imx93_mem_map[entry].attrs;
|
||||
|
||||
while (i < CONFIG_NR_DRAM_BANKS &&
|
||||
entry < ARRAY_SIZE(imx93_mem_map)) {
|
||||
if (gd->bd->bi_dram[i].start == 0)
|
||||
break;
|
||||
imx93_mem_map[entry].phys = gd->bd->bi_dram[i].start;
|
||||
imx93_mem_map[entry].virt = gd->bd->bi_dram[i].start;
|
||||
imx93_mem_map[entry].size = gd->bd->bi_dram[i].size;
|
||||
imx93_mem_map[entry].attrs = attrs;
|
||||
debug("Added memory mapping (%d): %llx %llx\n", entry,
|
||||
imx93_mem_map[entry].phys, imx93_mem_map[entry].size);
|
||||
i++; entry++;
|
||||
}
|
||||
|
||||
icache_enable();
|
||||
dcache_enable();
|
||||
}
|
||||
|
||||
__weak int board_phys_sdram_size(phys_size_t *size)
|
||||
{
|
||||
phys_size_t start, end;
|
||||
phys_size_t val;
|
||||
|
||||
if (!size)
|
||||
return -EINVAL;
|
||||
|
||||
val = readl(REG_DDR_CS0_BNDS);
|
||||
start = (val >> 16) << 24;
|
||||
end = (val & 0xFFFF);
|
||||
end = end ? end + 1 : 0;
|
||||
end = end << 24;
|
||||
*size = end - start;
|
||||
|
||||
val = readl(REG_DDR_CS1_BNDS);
|
||||
start = (val >> 16) << 24;
|
||||
end = (val & 0xFFFF);
|
||||
end = end ? end + 1 : 0;
|
||||
end = end << 24;
|
||||
*size += end - start;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
phys_size_t sdram_size;
|
||||
int ret;
|
||||
|
||||
ret = board_phys_sdram_size(&sdram_size);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* rom_pointer[1] contains the size of TEE occupies */
|
||||
if (rom_pointer[1])
|
||||
gd->ram_size = sdram_size - rom_pointer[1];
|
||||
else
|
||||
gd->ram_size = sdram_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dram_init_banksize(void)
|
||||
{
|
||||
int bank = 0;
|
||||
int ret;
|
||||
phys_size_t sdram_size;
|
||||
phys_size_t sdram_b1_size, sdram_b2_size;
|
||||
|
||||
ret = board_phys_sdram_size(&sdram_size);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Bank 1 can't cross over 4GB space */
|
||||
if (sdram_size > 0x80000000) {
|
||||
sdram_b1_size = 0x80000000;
|
||||
sdram_b2_size = sdram_size - 0x80000000;
|
||||
} else {
|
||||
sdram_b1_size = sdram_size;
|
||||
sdram_b2_size = 0;
|
||||
}
|
||||
|
||||
gd->bd->bi_dram[bank].start = PHYS_SDRAM;
|
||||
if (rom_pointer[1]) {
|
||||
phys_addr_t optee_start = (phys_addr_t)rom_pointer[0];
|
||||
phys_size_t optee_size = (size_t)rom_pointer[1];
|
||||
|
||||
gd->bd->bi_dram[bank].size = optee_start - gd->bd->bi_dram[bank].start;
|
||||
if ((optee_start + optee_size) < (PHYS_SDRAM + sdram_b1_size)) {
|
||||
if (++bank >= CONFIG_NR_DRAM_BANKS) {
|
||||
puts("CONFIG_NR_DRAM_BANKS is not enough\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
gd->bd->bi_dram[bank].start = optee_start + optee_size;
|
||||
gd->bd->bi_dram[bank].size = PHYS_SDRAM +
|
||||
sdram_b1_size - gd->bd->bi_dram[bank].start;
|
||||
}
|
||||
} else {
|
||||
gd->bd->bi_dram[bank].size = sdram_b1_size;
|
||||
}
|
||||
|
||||
if (sdram_b2_size) {
|
||||
if (++bank >= CONFIG_NR_DRAM_BANKS) {
|
||||
puts("CONFIG_NR_DRAM_BANKS is not enough for SDRAM_2\n");
|
||||
return -1;
|
||||
}
|
||||
gd->bd->bi_dram[bank].start = 0x100000000UL;
|
||||
gd->bd->bi_dram[bank].size = sdram_b2_size;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
phys_size_t get_effective_memsize(void)
|
||||
{
|
||||
int ret;
|
||||
phys_size_t sdram_size;
|
||||
phys_size_t sdram_b1_size;
|
||||
|
||||
ret = board_phys_sdram_size(&sdram_size);
|
||||
if (!ret) {
|
||||
/* Bank 1 can't cross over 4GB space */
|
||||
if (sdram_size > 0x80000000)
|
||||
sdram_b1_size = 0x80000000;
|
||||
else
|
||||
sdram_b1_size = sdram_size;
|
||||
|
||||
if (rom_pointer[1]) {
|
||||
/* We will relocate u-boot to top of dram1. TEE position has two cases:
|
||||
* 1. At the top of dram1, Then return the size removed optee size.
|
||||
* 2. In the middle of dram1, return the size of dram1.
|
||||
*/
|
||||
if ((rom_pointer[0] + rom_pointer[1]) == (PHYS_SDRAM + sdram_b1_size))
|
||||
return ((phys_addr_t)rom_pointer[0] - PHYS_SDRAM);
|
||||
}
|
||||
|
||||
return sdram_b1_size;
|
||||
} else {
|
||||
return PHYS_SDRAM_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
|
||||
{
|
||||
mac[0] = 0x1;
|
||||
mac[1] = 0x2;
|
||||
mac[2] = 0x3;
|
||||
mac[3] = 0x4;
|
||||
mac[4] = 0x5;
|
||||
mac[5] = 0x6;
|
||||
u32 val[2] = {};
|
||||
int ret;
|
||||
|
||||
if (dev_id == 0) {
|
||||
ret = fuse_read(39, 3, &val[0]);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
ret = fuse_read(39, 4, &val[1]);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
mac[0] = val[1] >> 8;
|
||||
mac[1] = val[1];
|
||||
mac[2] = val[0] >> 24;
|
||||
mac[3] = val[0] >> 16;
|
||||
mac[4] = val[0] >> 8;
|
||||
mac[5] = val[0];
|
||||
|
||||
} else {
|
||||
ret = fuse_read(39, 5, &val[0]);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
ret = fuse_read(39, 4, &val[1]);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
mac[0] = val[1] >> 24;
|
||||
mac[1] = val[1] >> 16;
|
||||
mac[2] = val[0] >> 24;
|
||||
mac[3] = val[0] >> 16;
|
||||
mac[4] = val[0] >> 8;
|
||||
mac[5] = val[0];
|
||||
}
|
||||
|
||||
debug("%s: MAC%d: %02x.%02x.%02x.%02x.%02x.%02x\n",
|
||||
__func__, dev_id, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||
return;
|
||||
err:
|
||||
memset(mac, 0, 6);
|
||||
printf("%s: fuse read err: %d\n", __func__, ret);
|
||||
}
|
||||
|
||||
int print_cpuinfo(void)
|
||||
|
@ -224,6 +523,18 @@ void get_board_serial(struct tag_serialnr *serialnr)
|
|||
}
|
||||
#endif
|
||||
|
||||
static void save_reset_cause(void)
|
||||
{
|
||||
struct src_general_regs *src = (struct src_general_regs *)SRC_GLOBAL_RBASE;
|
||||
u32 srsr = readl(&src->srsr);
|
||||
|
||||
/* clear srsr in sec mode */
|
||||
writel(srsr, &src->srsr);
|
||||
|
||||
/* Save value to GPR1 to pass to nonsecure */
|
||||
writel(srsr, &src->gpr[0]);
|
||||
}
|
||||
|
||||
int arch_cpu_init(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_SPL_BUILD)) {
|
||||
|
@ -233,6 +544,9 @@ int arch_cpu_init(void)
|
|||
clock_init();
|
||||
|
||||
trdc_early_init();
|
||||
|
||||
/* Save SRC SRSR to GPR1 and clear it */
|
||||
save_reset_cause();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -466,3 +780,45 @@ int m33_prepare(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int psci_sysreset_get_status(struct udevice *dev, char *buf, int size)
|
||||
{
|
||||
static const char *reset_cause[] = {
|
||||
"POR ",
|
||||
"JTAG ",
|
||||
"IPP USER ",
|
||||
"WDOG1 ",
|
||||
"WDOG2 ",
|
||||
"WDOG3 ",
|
||||
"WDOG4 ",
|
||||
"WDOG5 ",
|
||||
"TEMPSENSE ",
|
||||
"CSU ",
|
||||
"JTAG_SW ",
|
||||
"M33_REQ ",
|
||||
"M33_LOCKUP ",
|
||||
"UNK ",
|
||||
"UNK ",
|
||||
"UNK "
|
||||
};
|
||||
|
||||
struct src_general_regs *src = (struct src_general_regs *)SRC_GLOBAL_RBASE;
|
||||
u32 srsr;
|
||||
u32 i;
|
||||
int res;
|
||||
|
||||
srsr = readl(&src->gpr[0]);
|
||||
|
||||
for (i = ARRAY_SIZE(reset_cause); i > 0; i--) {
|
||||
if (srsr & (BIT(i - 1)))
|
||||
break;
|
||||
}
|
||||
|
||||
res = snprintf(buf, size, "Reset Status: %s\n", i ? reset_cause[i - 1] : "unknown reset");
|
||||
if (res < 0) {
|
||||
dev_err(dev, "Could not write reset status message (err = %d)\n", res);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#include <spl.h>
|
||||
#include <asm/mach-imx/image.h>
|
||||
#ifdef CONFIG_AHAB_BOOT
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#endif
|
||||
|
||||
#define SEC_SECURE_RAM_BASE 0x31800000UL
|
||||
|
|
|
@ -367,7 +367,7 @@ int board_return_to_bootrom(struct spl_image_info *spl_image,
|
|||
printf("USB boot\n");
|
||||
break;
|
||||
default:
|
||||
printf("Unknow (0x%x)\n", bstage);
|
||||
printf("Unknown (0x%x)\n", bstage);
|
||||
}
|
||||
|
||||
if (is_boot_from_stream_device(boot))
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <fsl_esdhc_imx.h>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <usb.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/snvs_security_sc.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <dm/lists.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
|
|
|
@ -4,3 +4,4 @@ S: Maintained
|
|||
F: board/freescale/imx93_evk/
|
||||
F: include/configs/imx93_evk.h
|
||||
F: configs/imx93_11x11_evk_defconfig
|
||||
configs/imx93_11x11_evk_ld_defconfig
|
||||
|
|
|
@ -8,5 +8,9 @@ obj-y += imx93_evk.o
|
|||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
obj-y += spl.o
|
||||
ifdef CONFIG_IMX9_LOW_DRIVE_MODE
|
||||
obj-$(CONFIG_IMX93_EVK_LPDDR4X) += lpddr4x_timing_ld.o
|
||||
else
|
||||
obj-$(CONFIG_IMX93_EVK_LPDDR4X) += lpddr4x_timing.o
|
||||
endif
|
||||
endif
|
||||
|
|
File diff suppressed because it is too large
Load diff
1496
board/freescale/imx93_evk/lpddr4x_timing_ld.c
Normal file
1496
board/freescale/imx93_evk/lpddr4x_timing_ld.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -67,10 +67,23 @@ int power_init_board(void)
|
|||
/* BUCKxOUT_DVS0/1 control BUCK123 output */
|
||||
pmic_reg_write(dev, PCA9450_BUCK123_DVS, 0x29);
|
||||
|
||||
/* 0.9v
|
||||
/* enable DVS control through PMIC_STBY_REQ */
|
||||
pmic_reg_write(dev, PCA9450_BUCK1CTRL, 0x59);
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE)) {
|
||||
/* 0.75v for Low drive mode
|
||||
*/
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x0c);
|
||||
pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x0c);
|
||||
} else {
|
||||
/* 0.9v for Over drive mode
|
||||
*/
|
||||
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);
|
||||
|
@ -103,10 +116,11 @@ void board_init_f(ulong dummy)
|
|||
printf("SOC: 0x%x\n", gd->arch.soc_rev);
|
||||
printf("LC: 0x%x\n", gd->arch.lifecycle);
|
||||
}
|
||||
|
||||
power_init_board();
|
||||
|
||||
/* 1.7GHz */
|
||||
set_arm_clk(1700000000);
|
||||
if (!IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE))
|
||||
set_arm_clk(get_cpu_speed_grade_hz());
|
||||
|
||||
/* Init power of mix */
|
||||
soc_power_init();
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include <asm/gpio.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#ifndef CONFIG_SPL
|
||||
#include <asm/arch-imx8/clock.h>
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <asm/arch/snvs_security_sc.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/io.h>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/imx8-pins.h>
|
||||
#include <asm/arch/iomux.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/io.h>
|
||||
|
|
|
@ -15,7 +15,7 @@ CONFIG_TARGET_IMX93_11X11_EVK=y
|
|||
CONFIG_SYS_PROMPT="u-boot=> "
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL_STACK=0x2051ddd0
|
||||
CONFIG_SPL_STACK=0x20519dd0
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x88000000
|
||||
CONFIG_SPL_LOAD_IMX_CONTAINER=y
|
||||
|
@ -30,7 +30,7 @@ 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=0x2051e000
|
||||
CONFIG_SPL_BSS_START_ADDR=0x2051a000
|
||||
CONFIG_SPL_BSS_MAX_SIZE=0x2000
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
CONFIG_SPL_BOOTROM_SUPPORT=y
|
||||
|
@ -81,6 +81,8 @@ CONFIG_NET_RANDOM_ETHADDR=y
|
|||
CONFIG_SPL_DM=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_CPU=y
|
||||
CONFIG_CPU_IMX=y
|
||||
CONFIG_IMX_RGPIO2P=y
|
||||
CONFIG_DM_PCA953X=y
|
||||
CONFIG_DM_I2C=y
|
||||
|
@ -110,6 +112,12 @@ CONFIG_DM_RTC=y
|
|||
CONFIG_RTC_EMULATION=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_FSL_LPUART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SYSRESET_CMD_POWEROFF=y
|
||||
CONFIG_SYSRESET_PSCI=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_IMX_TMU=y
|
||||
CONFIG_ULP_WATCHDOG=y
|
||||
CONFIG_WDT=y
|
||||
CONFIG_LZO=y
|
||||
CONFIG_BZIP2=y
|
||||
|
|
124
configs/imx93_11x11_evk_ld_defconfig
Normal file
124
configs/imx93_11x11_evk_ld_defconfig
Normal file
|
@ -0,0 +1,124 @@
|
|||
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_ENV_SIZE=0x4000
|
||||
CONFIG_ENV_OFFSET=0x400000
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="imx93-11x11-evk"
|
||||
CONFIG_SPL_TEXT_BASE=0x2049A000
|
||||
CONFIG_TARGET_IMX93_11X11_EVK=y
|
||||
CONFIG_SYS_PROMPT="u-boot=> "
|
||||
CONFIG_IMX9_LOW_DRIVE_MODE=y
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x88000000
|
||||
CONFIG_SPL_LOAD_IMX_CONTAINER=y
|
||||
CONFIG_SYS_LOAD_ADDR=0x80400000
|
||||
CONFIG_SYS_MEMTEST_START=0x80000000
|
||||
CONFIG_SYS_MEMTEST_END=0x90000000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_REMAKE_ELF=y
|
||||
CONFIG_SYS_MONITOR_LEN=524288
|
||||
CONFIG_DEFAULT_FDT_FILE="imx93-11x11-evk.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_SPL_STACK=0x20519dd0
|
||||
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_MAXARGS=64
|
||||
CONFIG_SYS_CBSIZE=2048
|
||||
CONFIG_SYS_PBSIZE=2074
|
||||
CONFIG_CMD_ERASEENV=y
|
||||
# CONFIG_CMD_CRC32 is not set
|
||||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_DFU=y
|
||||
CONFIG_CMD_FUSE=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_POWEROFF=y
|
||||
CONFIG_CMD_SNTP=y
|
||||
CONFIG_CMD_CACHE=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_USE_ETHPRIME=y
|
||||
CONFIG_ETHPRIME="eth0"
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_SPL_DM=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_CPU=y
|
||||
CONFIG_CPU_IMX=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_REALTEK=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_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX93=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_SYSRESET=y
|
||||
CONFIG_SYSRESET_CMD_POWEROFF=y
|
||||
CONFIG_SYSRESET_PSCI=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_IMX_TMU=y
|
||||
CONFIG_ULP_WATCHDOG=y
|
||||
CONFIG_WDT=y
|
||||
CONFIG_LZO=y
|
||||
CONFIG_BZIP2=y
|
|
@ -9,7 +9,7 @@
|
|||
#include <dm.h>
|
||||
#include <log.h>
|
||||
#include <malloc.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <dt-bindings/clock/imx8qxp-clock.h>
|
||||
#include <dt-bindings/soc/imx_rsrc.h>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <clk-uclass.h>
|
||||
#include <dm.h>
|
||||
#include <log.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <dt-bindings/clock/imx8qm-clock.h>
|
||||
#include <dt-bindings/soc/imx_rsrc.h>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <clk-uclass.h>
|
||||
#include <dm.h>
|
||||
#include <log.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <dt-bindings/clock/imx8qxp-clock.h>
|
||||
#include <dt-bindings/soc/imx_rsrc.h>
|
||||
|
|
|
@ -7,6 +7,12 @@ config CPU
|
|||
they can work correctly in the OS. This provides a framework for
|
||||
finding out information about available CPUs and making changes.
|
||||
|
||||
config CPU_IMX
|
||||
bool "Enable i.MX CPU driver"
|
||||
depends on CPU && ARM64
|
||||
help
|
||||
Support CPU cores for SoCs of the i.MX series.
|
||||
|
||||
config CPU_MPC83XX
|
||||
bool "Enable MPC83xx CPU driver"
|
||||
depends on CPU && MPC83xx
|
||||
|
|
|
@ -10,6 +10,7 @@ obj-$(CONFIG_ARCH_BMIPS) += bmips_cpu.o
|
|||
obj-$(CONFIG_ARCH_IMX8) += imx8_cpu.o
|
||||
obj-$(CONFIG_ARCH_AT91) += at91_cpu.o
|
||||
obj-$(CONFIG_ARCH_MEDIATEK) += mtk_cpu.o
|
||||
obj-$(CONFIG_CPU_IMX) += imx8_cpu.o
|
||||
obj-$(CONFIG_CPU_MPC83XX) += mpc83xx_cpu.o
|
||||
obj-$(CONFIG_CPU_RISCV) += riscv_cpu.o
|
||||
obj-$(CONFIG_CPU_MICROBLAZE) += microblaze_cpu.o
|
||||
|
|
|
@ -9,11 +9,13 @@
|
|||
#include <thermal.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch-imx/cpu.h>
|
||||
#include <asm/armv8/cpu.h>
|
||||
#include <imx_thermal.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/clk-provider.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
|
@ -27,21 +29,40 @@ struct cpu_imx_plat {
|
|||
u32 mpidr;
|
||||
};
|
||||
|
||||
const char *get_imx8_type(u32 imxtype)
|
||||
static const char *get_imx_type_str(u32 imxtype)
|
||||
{
|
||||
switch (imxtype) {
|
||||
case MXC_CPU_IMX8QXP:
|
||||
case MXC_CPU_IMX8QXP_A0:
|
||||
return "QXP";
|
||||
return "8QXP";
|
||||
case MXC_CPU_IMX8QM:
|
||||
return "QM";
|
||||
return "8QM";
|
||||
case MXC_CPU_IMX93:
|
||||
return "93(52)";/* iMX93 Dual core with NPU */
|
||||
case MXC_CPU_IMX9351:
|
||||
return "93(51)";/* iMX93 Single core with NPU */
|
||||
case MXC_CPU_IMX9332:
|
||||
return "93(32)";/* iMX93 Dual core without NPU */
|
||||
case MXC_CPU_IMX9331:
|
||||
return "93(31)";/* iMX93 Single core without NPU */
|
||||
case MXC_CPU_IMX9322:
|
||||
return "93(22)";/* iMX93 9x9 Dual core */
|
||||
case MXC_CPU_IMX9321:
|
||||
return "93(21)";/* iMX93 9x9 Single core */
|
||||
case MXC_CPU_IMX9312:
|
||||
return "93(12)";/* iMX93 9x9 Dual core without NPU */
|
||||
case MXC_CPU_IMX9311:
|
||||
return "93(11)";/* iMX93 9x9 Single core without NPU */
|
||||
default:
|
||||
return "??";
|
||||
}
|
||||
}
|
||||
|
||||
const char *get_imx8_rev(u32 rev)
|
||||
static const char *get_imx_rev_str(u32 rev)
|
||||
{
|
||||
static char revision[4];
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX8)) {
|
||||
switch (rev) {
|
||||
case CHIP_REV_A:
|
||||
return "A";
|
||||
|
@ -52,6 +73,14 @@ const char *get_imx8_rev(u32 rev)
|
|||
default:
|
||||
return "?";
|
||||
}
|
||||
} else {
|
||||
revision[0] = '1' + (((rev & 0xf0) - CHIP_REV_1_0) >> 4);
|
||||
revision[1] = '.';
|
||||
revision[2] = '0' + (rev & 0xf);
|
||||
revision[3] = '\0';
|
||||
|
||||
return revision;
|
||||
}
|
||||
}
|
||||
|
||||
static void set_core_data(struct udevice *dev)
|
||||
|
@ -67,21 +96,27 @@ static void set_core_data(struct udevice *dev)
|
|||
} else if (device_is_compatible(dev, "arm,cortex-a72")) {
|
||||
plat->cpu_rsrc = SC_R_A72;
|
||||
plat->name = "A72";
|
||||
} else if (device_is_compatible(dev, "arm,cortex-a55")) {
|
||||
plat->name = "A55";
|
||||
} else {
|
||||
plat->cpu_rsrc = SC_R_A53;
|
||||
plat->name = "?";
|
||||
}
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_IMX_SCU_THERMAL)
|
||||
#if IS_ENABLED(CONFIG_DM_THERMAL)
|
||||
static int cpu_imx_get_temp(struct cpu_imx_plat *plat)
|
||||
{
|
||||
struct udevice *thermal_dev;
|
||||
int cpu_tmp, ret;
|
||||
int idx = 1; /* use "cpu-thermal0" device */
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX8)) {
|
||||
if (plat->cpu_rsrc == SC_R_A72)
|
||||
idx = 2; /* use "cpu-thermal1" device */
|
||||
} else {
|
||||
idx = 1;
|
||||
}
|
||||
|
||||
ret = uclass_get_device(UCLASS_THERMAL, idx, &thermal_dev);
|
||||
if (!ret) {
|
||||
|
@ -101,18 +136,46 @@ static int cpu_imx_get_temp(struct cpu_imx_plat *plat)
|
|||
}
|
||||
#endif
|
||||
|
||||
int cpu_imx_get_desc(const struct udevice *dev, char *buf, int size)
|
||||
__weak u32 get_cpu_temp_grade(int *minc, int *maxc)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpu_imx_get_desc(const struct udevice *dev, char *buf, int size)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
const char *grade;
|
||||
int ret, temp;
|
||||
int minc, maxc;
|
||||
|
||||
if (size < 100)
|
||||
return -ENOSPC;
|
||||
|
||||
ret = snprintf(buf, size, "NXP i.MX8%s Rev%s %s at %u MHz",
|
||||
ret = snprintf(buf, size, "NXP i.MX%s Rev%s %s at %u MHz",
|
||||
plat->type, plat->rev, plat->name, plat->freq_mhz);
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX_SCU_THERMAL)) {
|
||||
if (IS_ENABLED(CONFIG_IMX9)) {
|
||||
switch (get_cpu_temp_grade(&minc, &maxc)) {
|
||||
case TEMP_AUTOMOTIVE:
|
||||
grade = "Automotive temperature grade ";
|
||||
break;
|
||||
case TEMP_INDUSTRIAL:
|
||||
grade = "Industrial temperature grade ";
|
||||
break;
|
||||
case TEMP_EXTCOMMERCIAL:
|
||||
grade = "Extended Consumer temperature grade ";
|
||||
break;
|
||||
default:
|
||||
grade = "Consumer temperature grade ";
|
||||
break;
|
||||
}
|
||||
|
||||
buf = buf + ret;
|
||||
size = size - ret;
|
||||
ret = snprintf(buf, size, "\nCPU: %s (%dC to %dC)", grade, minc, maxc);
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_DM_THERMAL)) {
|
||||
temp = cpu_imx_get_temp(plat);
|
||||
buf = buf + ret;
|
||||
size = size - ret;
|
||||
|
@ -174,7 +237,7 @@ static int cpu_imx_is_current(struct udevice *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct cpu_ops cpu_imx8_ops = {
|
||||
static const struct cpu_ops cpu_imx_ops = {
|
||||
.get_desc = cpu_imx_get_desc,
|
||||
.get_info = cpu_imx_get_info,
|
||||
.get_count = cpu_imx_get_count,
|
||||
|
@ -182,21 +245,32 @@ static const struct cpu_ops cpu_imx8_ops = {
|
|||
.is_current = cpu_imx_is_current,
|
||||
};
|
||||
|
||||
static const struct udevice_id cpu_imx8_ids[] = {
|
||||
static const struct udevice_id cpu_imx_ids[] = {
|
||||
{ .compatible = "arm,cortex-a35" },
|
||||
{ .compatible = "arm,cortex-a53" },
|
||||
{ .compatible = "arm,cortex-a55" },
|
||||
{ .compatible = "arm,cortex-a72" },
|
||||
{ }
|
||||
};
|
||||
|
||||
static ulong imx8_get_cpu_rate(struct udevice *dev)
|
||||
static ulong imx_get_cpu_rate(struct udevice *dev)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
struct clk clk;
|
||||
ulong rate;
|
||||
int ret;
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX8)) {
|
||||
ret = sc_pm_get_clock_rate(-1, plat->cpu_rsrc, SC_PM_CLK_CPU,
|
||||
(sc_pm_clock_rate_t *)&rate);
|
||||
} else {
|
||||
ret = clk_get_by_index(dev, 0, &clk);
|
||||
if (!ret) {
|
||||
rate = clk_get_rate(&clk);
|
||||
if (!rate)
|
||||
ret = -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
if (ret) {
|
||||
printf("Could not read CPU frequency: %d\n", ret);
|
||||
return 0;
|
||||
|
@ -205,7 +279,7 @@ static ulong imx8_get_cpu_rate(struct udevice *dev)
|
|||
return rate;
|
||||
}
|
||||
|
||||
static int imx8_cpu_probe(struct udevice *dev)
|
||||
static int imx_cpu_probe(struct udevice *dev)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
u32 cpurev;
|
||||
|
@ -213,9 +287,9 @@ static int imx8_cpu_probe(struct udevice *dev)
|
|||
set_core_data(dev);
|
||||
cpurev = get_cpu_rev();
|
||||
plat->cpurev = cpurev;
|
||||
plat->rev = get_imx8_rev(cpurev & 0xFFF);
|
||||
plat->type = get_imx8_type((cpurev & 0xFF000) >> 12);
|
||||
plat->freq_mhz = imx8_get_cpu_rate(dev) / 1000000;
|
||||
plat->rev = get_imx_rev_str(cpurev & 0xFFF);
|
||||
plat->type = get_imx_type_str((cpurev & 0xFF000) >> 12);
|
||||
plat->freq_mhz = imx_get_cpu_rate(dev) / 1000000;
|
||||
plat->mpidr = dev_read_addr(dev);
|
||||
if (plat->mpidr == FDT_ADDR_T_NONE) {
|
||||
printf("%s: Failed to get CPU reg property\n", __func__);
|
||||
|
@ -225,12 +299,12 @@ static int imx8_cpu_probe(struct udevice *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
U_BOOT_DRIVER(cpu_imx8_drv) = {
|
||||
.name = "imx8x_cpu",
|
||||
U_BOOT_DRIVER(cpu_imx_drv) = {
|
||||
.name = "imx_cpu",
|
||||
.id = UCLASS_CPU,
|
||||
.of_match = cpu_imx8_ids,
|
||||
.ops = &cpu_imx8_ops,
|
||||
.probe = imx8_cpu_probe,
|
||||
.of_match = cpu_imx_ids,
|
||||
.ops = &cpu_imx_ops,
|
||||
.probe = imx_cpu_probe,
|
||||
.plat_auto = sizeof(struct cpu_imx_plat),
|
||||
.flags = DM_FLAG_PRE_RELOC,
|
||||
};
|
||||
|
|
224
drivers/cpu/imx9_cpu.c
Normal file
224
drivers/cpu/imx9_cpu.c
Normal file
|
@ -0,0 +1,224 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2019 NXP
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <cpu.h>
|
||||
#include <dm.h>
|
||||
#include <thermal.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/system.h>
|
||||
#include <firmware/linux/imx/sci/sci.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/arch-imx/cpu.h>
|
||||
#include <asm/armv8/cpu.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
struct cpu_imx_plat {
|
||||
const char *name;
|
||||
const char *rev;
|
||||
const char *type;
|
||||
u32 cpu_rsrc;
|
||||
u32 cpurev;
|
||||
u32 freq_mhz;
|
||||
u32 mpidr;
|
||||
};
|
||||
|
||||
const char *get_imx9_type(u32 imxtype)
|
||||
{
|
||||
switch (imxtype) {
|
||||
case MXC_CPU_IMX93:
|
||||
return "93";
|
||||
default:
|
||||
return "??";
|
||||
}
|
||||
}
|
||||
|
||||
const char *get_imx9_rev(u32 rev)
|
||||
{
|
||||
switch (rev) {
|
||||
case CHIP_REV_1_0:
|
||||
return "1.";
|
||||
case CHIP_REV_B:
|
||||
return "B";
|
||||
case CHIP_REV_C:
|
||||
return "C";
|
||||
default:
|
||||
return "?";
|
||||
}
|
||||
}
|
||||
|
||||
static void set_core_data(struct udevice *dev)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
|
||||
if (device_is_compatible(dev, "arm,cortex-a35"))
|
||||
plat->name = "A35";
|
||||
else
|
||||
plat->name = "?";
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_IMX_SCU_THERMAL)
|
||||
static int cpu_imx_get_temp(struct cpu_imx_plat *plat)
|
||||
{
|
||||
struct udevice *thermal_dev;
|
||||
int cpu_tmp, ret;
|
||||
int idx = 1; /* use "cpu-thermal0" device */
|
||||
|
||||
if (plat->cpu_rsrc == SC_R_A72)
|
||||
idx = 2; /* use "cpu-thermal1" device */
|
||||
|
||||
ret = uclass_get_device(UCLASS_THERMAL, idx, &thermal_dev);
|
||||
if (!ret) {
|
||||
ret = thermal_get_temp(thermal_dev, &cpu_tmp);
|
||||
if (ret)
|
||||
return 0xdeadbeef;
|
||||
} else {
|
||||
return 0xdeadbeef;
|
||||
}
|
||||
|
||||
return cpu_tmp;
|
||||
}
|
||||
#else
|
||||
static int cpu_imx_get_temp(struct cpu_imx_plat *plat)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int cpu_imx_get_desc(const struct udevice *dev, char *buf, int size)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
int ret, temp;
|
||||
|
||||
if (size < 100)
|
||||
return -ENOSPC;
|
||||
|
||||
ret = snprintf(buf, size, "NXP i.MX8%s Rev%s %s at %u MHz",
|
||||
plat->type, plat->rev, plat->name, plat->freq_mhz);
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMX_SCU_THERMAL)) {
|
||||
temp = cpu_imx_get_temp(plat);
|
||||
buf = buf + ret;
|
||||
size = size - ret;
|
||||
if (temp != 0xdeadbeef)
|
||||
ret = snprintf(buf, size, " at %dC", temp);
|
||||
else
|
||||
ret = snprintf(buf, size, " - invalid sensor data");
|
||||
}
|
||||
|
||||
snprintf(buf + ret, size - ret, "\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpu_imx_get_info(const struct udevice *dev, struct cpu_info *info)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
|
||||
info->cpu_freq = plat->freq_mhz * 1000;
|
||||
info->features = BIT(CPU_FEAT_L1_CACHE) | BIT(CPU_FEAT_MMU);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpu_imx_get_count(const struct udevice *dev)
|
||||
{
|
||||
ofnode node;
|
||||
int num = 0;
|
||||
|
||||
ofnode_for_each_subnode(node, dev_ofnode(dev->parent)) {
|
||||
const char *device_type;
|
||||
|
||||
if (!ofnode_is_enabled(node))
|
||||
continue;
|
||||
|
||||
device_type = ofnode_read_string(node, "device_type");
|
||||
if (!device_type)
|
||||
continue;
|
||||
|
||||
if (!strcmp(device_type, "cpu"))
|
||||
num++;
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
static int cpu_imx_get_vendor(const struct udevice *dev, char *buf, int size)
|
||||
{
|
||||
snprintf(buf, size, "NXP");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpu_imx_is_current(struct udevice *dev)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
|
||||
if (plat->mpidr == (read_mpidr() & 0xffff))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct cpu_ops cpu_imx9_ops = {
|
||||
.get_desc = cpu_imx_get_desc,
|
||||
.get_info = cpu_imx_get_info,
|
||||
.get_count = cpu_imx_get_count,
|
||||
.get_vendor = cpu_imx_get_vendor,
|
||||
.is_current = cpu_imx_is_current,
|
||||
};
|
||||
|
||||
static const struct udevice_id cpu_imx9_ids[] = {
|
||||
{ .compatible = "arm,cortex-a35" },
|
||||
{ .compatible = "arm,cortex-a53" },
|
||||
{ .compatible = "arm,cortex-a72" },
|
||||
{ }
|
||||
};
|
||||
|
||||
static ulong imx9_get_cpu_rate(struct udevice *dev)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
ulong rate;
|
||||
int ret;
|
||||
|
||||
ret = sc_pm_get_clock_rate(-1, plat->cpu_rsrc, SC_PM_CLK_CPU,
|
||||
(sc_pm_clock_rate_t *)&rate);
|
||||
if (ret) {
|
||||
printf("Could not read CPU frequency: %d\n", ret);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return rate;
|
||||
}
|
||||
|
||||
static int imx9_cpu_probe(struct udevice *dev)
|
||||
{
|
||||
struct cpu_imx_plat *plat = dev_get_plat(dev);
|
||||
u32 cpurev;
|
||||
|
||||
set_core_data(dev);
|
||||
cpurev = get_cpu_rev();
|
||||
plat->cpurev = cpurev;
|
||||
plat->rev = get_imx9_rev(cpurev & 0xFFF);
|
||||
plat->type = get_imx9_type((cpurev & 0xFF000) >> 12);
|
||||
plat->freq_mhz = imx9_get_cpu_rate(dev) / 1000000;
|
||||
plat->mpidr = dev_read_addr(dev);
|
||||
if (plat->mpidr == FDT_ADDR_T_NONE) {
|
||||
printf("%s: Failed to get CPU reg property\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
U_BOOT_DRIVER(cpu_imx9_drv) = {
|
||||
.name = "imx9x_cpu",
|
||||
.id = UCLASS_CPU,
|
||||
.of_match = cpu_imx9_ids,
|
||||
.ops = &cpu_imx9_ops,
|
||||
.probe = imx9_cpu_probe,
|
||||
.plat_auto = sizeof(struct cpu_imx_plat),
|
||||
.flags = DM_FLAG_PRE_RELOC,
|
||||
};
|
|
@ -22,6 +22,6 @@ config SAVED_DRAM_TIMING_BASE
|
|||
help
|
||||
after DRAM is trained, need to save the dram related timming
|
||||
info into memory for low power use.
|
||||
default 0x204DC000
|
||||
default 0x2051C000
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -12,6 +12,13 @@
|
|||
#include <asm/arch/sys_proto.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
static unsigned int g_cdd_rr_max[4];
|
||||
static unsigned int g_cdd_rw_max[4];
|
||||
static unsigned int g_cdd_wr_max[4];
|
||||
static unsigned int g_cdd_ww_max[4];
|
||||
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
|
||||
void ddrphy_coldreset(void)
|
||||
{
|
||||
/* dramphy_apb_n default 1 , assert -> 0, de_assert -> 1 */
|
||||
|
@ -64,24 +71,277 @@ void check_dfi_init_complete(void)
|
|||
setbits_le32(REG_DDRDSR_2, BIT(2));
|
||||
}
|
||||
|
||||
void ddrc_config(struct dram_cfg_param *ddrc_config, int num)
|
||||
void ddrc_config(struct dram_timing_info *dram_timing)
|
||||
{
|
||||
u32 num = dram_timing->ddrc_cfg_num;
|
||||
struct dram_cfg_param *ddrc_config;
|
||||
int i = 0;
|
||||
|
||||
ddrc_config = dram_timing->ddrc_cfg;
|
||||
for (i = 0; i < num; i++) {
|
||||
writel(ddrc_config->val, (ulong)ddrc_config->reg);
|
||||
ddrc_config++;
|
||||
}
|
||||
|
||||
if (dram_timing->fsp_cfg) {
|
||||
ddrc_config = dram_timing->fsp_cfg[0].ddrc_cfg;
|
||||
while (ddrc_config->reg != 0) {
|
||||
writel(ddrc_config->val, (ulong)ddrc_config->reg);
|
||||
ddrc_config++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int look_for_max(unsigned int data[], unsigned int addr_start,
|
||||
unsigned int addr_end)
|
||||
{
|
||||
unsigned int i, imax = 0;
|
||||
|
||||
for (i = addr_start; i <= addr_end; i++) {
|
||||
if (((data[i] >> 7) == 0) && data[i] > imax)
|
||||
imax = data[i];
|
||||
}
|
||||
|
||||
return imax;
|
||||
}
|
||||
|
||||
void get_trained_CDD(u32 fsp)
|
||||
{
|
||||
unsigned int i, tmp;
|
||||
unsigned int cdd_cha[12], cdd_chb[12];
|
||||
unsigned int cdd_cha_rr_max, cdd_cha_rw_max, cdd_cha_wr_max, cdd_cha_ww_max;
|
||||
unsigned int cdd_chb_rr_max, cdd_chb_rw_max, cdd_chb_wr_max, cdd_chb_ww_max;
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
tmp = dwc_ddrphy_apb_rd(0x54013 + i);
|
||||
cdd_cha[i * 2] = tmp & 0xff;
|
||||
cdd_cha[i * 2 + 1] = (tmp >> 8) & 0xff;
|
||||
}
|
||||
|
||||
for (i = 0; i < 7; i++) {
|
||||
tmp = dwc_ddrphy_apb_rd(0x5402c + i);
|
||||
|
||||
if (i == 0) {
|
||||
cdd_chb[0] = (tmp >> 8) & 0xff;
|
||||
} else if (i == 6) {
|
||||
cdd_chb[11] = tmp & 0xff;
|
||||
} else {
|
||||
cdd_chb[i * 2 - 1] = tmp & 0xff;
|
||||
cdd_chb[i * 2] = (tmp >> 8) & 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
cdd_cha_rr_max = look_for_max(cdd_cha, 0, 1);
|
||||
cdd_cha_rw_max = look_for_max(cdd_cha, 2, 5);
|
||||
cdd_cha_wr_max = look_for_max(cdd_cha, 6, 9);
|
||||
cdd_cha_ww_max = look_for_max(cdd_cha, 10, 11);
|
||||
cdd_chb_rr_max = look_for_max(cdd_chb, 0, 1);
|
||||
cdd_chb_rw_max = look_for_max(cdd_chb, 2, 5);
|
||||
cdd_chb_wr_max = look_for_max(cdd_chb, 6, 9);
|
||||
cdd_chb_ww_max = look_for_max(cdd_chb, 10, 11);
|
||||
g_cdd_rr_max[fsp] = cdd_cha_rr_max > cdd_chb_rr_max ? cdd_cha_rr_max : cdd_chb_rr_max;
|
||||
g_cdd_rw_max[fsp] = cdd_cha_rw_max > cdd_chb_rw_max ? cdd_cha_rw_max : cdd_chb_rw_max;
|
||||
g_cdd_wr_max[fsp] = cdd_cha_wr_max > cdd_chb_wr_max ? cdd_cha_wr_max : cdd_chb_wr_max;
|
||||
g_cdd_ww_max[fsp] = cdd_cha_ww_max > cdd_chb_ww_max ? cdd_cha_ww_max : cdd_chb_ww_max;
|
||||
}
|
||||
|
||||
static u32 ddrc_get_fsp_reg_setting(struct dram_cfg_param *ddrc_cfg, unsigned int cfg_num, u32 reg)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < cfg_num; i++) {
|
||||
if (reg == ddrc_cfg[i].reg)
|
||||
return ddrc_cfg[i].val;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ddrc_update_fsp_reg_setting(struct dram_cfg_param *ddrc_cfg, int cfg_num,
|
||||
u32 reg, u32 val)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < cfg_num; i++) {
|
||||
if (reg == ddrc_cfg[i].reg) {
|
||||
ddrc_cfg[i].val = val;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void update_umctl2_rank_space_setting(struct dram_timing_info *dram_timing, unsigned int pstat_num)
|
||||
{
|
||||
u32 tmp, tmp_t;
|
||||
u32 wwt, rrt, wrt, rwt;
|
||||
u32 ext_wwt, ext_rrt, ext_wrt, ext_rwt;
|
||||
u32 max_wwt, max_rrt, max_wrt, max_rwt;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < pstat_num; i++) {
|
||||
/* read wwt, rrt, wrt, rwt fields from timing_cfg_0 */
|
||||
if (!dram_timing->fsp_cfg_num) {
|
||||
tmp = ddrc_get_fsp_reg_setting(dram_timing->ddrc_cfg,
|
||||
dram_timing->ddrc_cfg_num,
|
||||
REG_DDR_TIMING_CFG_0);
|
||||
} else {
|
||||
tmp = ddrc_get_fsp_reg_setting(dram_timing->fsp_cfg[i].ddrc_cfg,
|
||||
ARRAY_SIZE(dram_timing->fsp_cfg[i].ddrc_cfg),
|
||||
REG_DDR_TIMING_CFG_0);
|
||||
}
|
||||
wwt = (tmp >> 24) & 0x3;
|
||||
rrt = (tmp >> 26) & 0x3;
|
||||
wrt = (tmp >> 28) & 0x3;
|
||||
rwt = (tmp >> 30) & 0x3;
|
||||
|
||||
/* read rxt_wwt, ext_rrt, ext_wrt, ext_rwt fields from timing_cfg_4 */
|
||||
if (!dram_timing->fsp_cfg_num) {
|
||||
tmp_t = ddrc_get_fsp_reg_setting(dram_timing->ddrc_cfg,
|
||||
dram_timing->ddrc_cfg_num,
|
||||
REG_DDR_TIMING_CFG_4);
|
||||
} else {
|
||||
tmp_t = ddrc_get_fsp_reg_setting(dram_timing->fsp_cfg[i].ddrc_cfg,
|
||||
ARRAY_SIZE(dram_timing->fsp_cfg[i].ddrc_cfg),
|
||||
REG_DDR_TIMING_CFG_4);
|
||||
}
|
||||
ext_wwt = (tmp_t >> 8) & 0x3;
|
||||
ext_rrt = (tmp_t >> 10) & 0x3;
|
||||
ext_wrt = (tmp_t >> 12) & 0x3;
|
||||
ext_rwt = (tmp_t >> 14) & 0x3;
|
||||
|
||||
wwt = (ext_wwt << 2) | wwt;
|
||||
rrt = (ext_rrt << 2) | rrt;
|
||||
wrt = (ext_wrt << 2) | wrt;
|
||||
rwt = (ext_rwt << 2) | rwt;
|
||||
|
||||
max_wwt = MAX(g_cdd_ww_max[0], wwt);
|
||||
max_rrt = MAX(g_cdd_rr_max[0], rrt);
|
||||
max_wrt = MAX(g_cdd_wr_max[0], wrt);
|
||||
max_rwt = MAX(g_cdd_rw_max[0], rwt);
|
||||
/* verify values to see if are bigger then 15 (4 bits) */
|
||||
if (max_wwt > 15)
|
||||
max_wwt = 15;
|
||||
if (max_rrt > 15)
|
||||
max_rrt = 15;
|
||||
if (max_wrt > 15)
|
||||
max_wrt = 15;
|
||||
if (max_rwt > 15)
|
||||
max_rwt = 15;
|
||||
|
||||
/* recalculate timings for controller registers */
|
||||
wwt = max_wwt & 0x3;
|
||||
rrt = max_rrt & 0x3;
|
||||
wrt = max_wrt & 0x3;
|
||||
rwt = max_rwt & 0x3;
|
||||
|
||||
ext_wwt = (max_wwt & 0xC) >> 2;
|
||||
ext_rrt = (max_rrt & 0xC) >> 2;
|
||||
ext_wrt = (max_wrt & 0xC) >> 2;
|
||||
ext_rwt = (max_rwt & 0xC) >> 2;
|
||||
|
||||
/* update timing_cfg_0 and timing_cfg_4 */
|
||||
tmp = (tmp & 0x00ffffff) | (rwt << 30) | (wrt << 28) |
|
||||
(rrt << 26) | (wwt << 24);
|
||||
tmp_t = (tmp_t & 0xFFFF00FF) | (ext_rwt << 14) |
|
||||
(ext_wrt << 12) | (ext_rrt << 10) | (ext_wwt << 8);
|
||||
|
||||
if (!dram_timing->fsp_cfg_num) {
|
||||
ddrc_update_fsp_reg_setting(dram_timing->ddrc_cfg,
|
||||
dram_timing->ddrc_cfg_num,
|
||||
REG_DDR_TIMING_CFG_0, tmp);
|
||||
ddrc_update_fsp_reg_setting(dram_timing->ddrc_cfg,
|
||||
dram_timing->ddrc_cfg_num,
|
||||
REG_DDR_TIMING_CFG_4, tmp_t);
|
||||
} else {
|
||||
ddrc_update_fsp_reg_setting(dram_timing->fsp_cfg[i].ddrc_cfg,
|
||||
ARRAY_SIZE(dram_timing->fsp_cfg[i].ddrc_cfg),
|
||||
REG_DDR_TIMING_CFG_0, tmp);
|
||||
ddrc_update_fsp_reg_setting(dram_timing->fsp_cfg[i].ddrc_cfg,
|
||||
ARRAY_SIZE(dram_timing->fsp_cfg[i].ddrc_cfg),
|
||||
REG_DDR_TIMING_CFG_4, tmp_t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u32 ddrc_mrr(u32 chip_select, u32 mode_reg_num, u32 *mode_reg_val)
|
||||
{
|
||||
u32 temp;
|
||||
|
||||
writel(0x80000000, REG_DDR_SDRAM_MD_CNTL_2);
|
||||
temp = 0x80000000 | (chip_select << 28) | (mode_reg_num << 0);
|
||||
writel(temp, REG_DDR_SDRAM_MD_CNTL);
|
||||
while ((readl(REG_DDR_SDRAM_MD_CNTL) & 0x80000000) == 0x80000000)
|
||||
;
|
||||
while (!(readl(REG_DDR_SDRAM_MPR5)))
|
||||
;
|
||||
*mode_reg_val = (readl(REG_DDR_SDRAM_MPR4) & 0xFF0000) >> 16;
|
||||
writel(0x0, REG_DDR_SDRAM_MPR5);
|
||||
while ((readl(REG_DDR_SDRAM_MPR5)))
|
||||
;
|
||||
writel(0x0, REG_DDR_SDRAM_MPR4);
|
||||
writel(0x0, REG_DDR_SDRAM_MD_CNTL_2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ddrc_mrs(u32 cs_sel, u32 opcode, u32 mr)
|
||||
{
|
||||
u32 regval;
|
||||
|
||||
regval = (cs_sel << 28) | (opcode << 6) | (mr);
|
||||
writel(regval, REG_DDR_SDRAM_MD_CNTL);
|
||||
setbits_le32(REG_DDR_SDRAM_MD_CNTL, BIT(31));
|
||||
check_ddrc_idle();
|
||||
}
|
||||
|
||||
u32 lpddr4_mr_read(u32 mr_rank, u32 mr_addr)
|
||||
{
|
||||
u32 chip_select, regval;
|
||||
|
||||
if (mr_rank == 1)
|
||||
chip_select = 0; /* CS0 */
|
||||
else if (mr_rank == 2)
|
||||
chip_select = 1; /* CS1 */
|
||||
else
|
||||
chip_select = 4; /* CS0 & CS1 */
|
||||
|
||||
ddrc_mrr(chip_select, mr_addr, ®val);
|
||||
|
||||
return regval;
|
||||
}
|
||||
|
||||
void update_mr_fsp_op0(struct dram_cfg_param *cfg, unsigned int num)
|
||||
{
|
||||
int i;
|
||||
|
||||
ddrc_mrs(0x4, 0x88, 13); /* FSP-OP->1, FSP-WR->0, VRCG=1, DMD=0 */
|
||||
for (i = 0; i < num; i++) {
|
||||
if (cfg[i].reg)
|
||||
ddrc_mrs(0x4, cfg[i].val, cfg[i].reg);
|
||||
}
|
||||
ddrc_mrs(0x4, 0xc0, 13); /* FSP-OP->1, FSP-WR->1, VRCG=0, DMD=0 */
|
||||
}
|
||||
|
||||
void save_trained_mr12_14(struct dram_cfg_param *cfg, u32 cfg_num, u32 mr12, u32 mr14)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < cfg_num; i++) {
|
||||
if (cfg->reg == 12)
|
||||
cfg->val = mr12;
|
||||
else if (cfg->reg == 14)
|
||||
cfg->val = mr14;
|
||||
cfg++;
|
||||
}
|
||||
}
|
||||
|
||||
int ddr_init(struct dram_timing_info *dram_timing)
|
||||
{
|
||||
unsigned int initial_drate;
|
||||
struct dram_timing_info *saved_timing;
|
||||
void *fsp;
|
||||
int ret;
|
||||
u32 mr12, mr14;
|
||||
u32 regval;
|
||||
|
||||
debug("DDRINFO: start DRAM init\n");
|
||||
|
@ -107,9 +367,11 @@ int ddr_init(struct dram_timing_info *dram_timing)
|
|||
|
||||
debug("DDRINFO: ddrphy config done\n");
|
||||
|
||||
update_umctl2_rank_space_setting(dram_timing, dram_timing->fsp_msg_num - 1);
|
||||
|
||||
/* rogram the ddrc registers */
|
||||
debug("DDRINFO: ddrc config start\n");
|
||||
ddrc_config(dram_timing->ddrc_cfg, dram_timing->ddrc_cfg_num);
|
||||
ddrc_config(dram_timing);
|
||||
debug("DDRINFO: ddrc config done\n");
|
||||
|
||||
#ifdef CONFIG_IMX9_DRAM_PM_COUNTER
|
||||
|
@ -123,8 +385,29 @@ int ddr_init(struct dram_timing_info *dram_timing)
|
|||
|
||||
check_ddrc_idle();
|
||||
|
||||
mr12 = lpddr4_mr_read(1, 12);
|
||||
mr14 = lpddr4_mr_read(1, 14);
|
||||
|
||||
/* save the dram timing config into memory */
|
||||
dram_config_save(dram_timing, CONFIG_SAVED_DRAM_TIMING_BASE);
|
||||
fsp = dram_config_save(dram_timing, CONFIG_SAVED_DRAM_TIMING_BASE);
|
||||
|
||||
saved_timing = (struct dram_timing_info *)CONFIG_SAVED_DRAM_TIMING_BASE;
|
||||
saved_timing->fsp_cfg = fsp;
|
||||
saved_timing->fsp_cfg_num = dram_timing->fsp_cfg_num;
|
||||
if (saved_timing->fsp_cfg_num) {
|
||||
memcpy(saved_timing->fsp_cfg, dram_timing->fsp_cfg,
|
||||
dram_timing->fsp_cfg_num * sizeof(struct dram_fsp_cfg));
|
||||
|
||||
save_trained_mr12_14(saved_timing->fsp_cfg[0].mr_cfg,
|
||||
ARRAY_SIZE(saved_timing->fsp_cfg[0].mr_cfg), mr12, mr14);
|
||||
/*
|
||||
* Configure mode registers in fsp1 to mode register 0 because DDRC
|
||||
* doesn't automatically set.
|
||||
*/
|
||||
if (saved_timing->fsp_cfg_num > 1)
|
||||
update_mr_fsp_op0(saved_timing->fsp_cfg[1].mr_cfg,
|
||||
ARRAY_SIZE(saved_timing->fsp_cfg[1].mr_cfg));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -148,6 +148,9 @@ void ddrphy_init_set_dfi_clk(unsigned int drate)
|
|||
dram_pll_init(MHZ(167));
|
||||
dram_disable_bypass();
|
||||
break;
|
||||
case 625:
|
||||
dram_enable_bypass(MHZ(625));
|
||||
break;
|
||||
case 400:
|
||||
dram_enable_bypass(MHZ(400));
|
||||
break;
|
||||
|
|
|
@ -167,8 +167,7 @@ void ddrphy_trained_csr_save(struct dram_cfg_param *ddrphy_csr,
|
|||
dwc_ddrphy_apb_wr(0xd0000, 0x1);
|
||||
}
|
||||
|
||||
void dram_config_save(struct dram_timing_info *timing_info,
|
||||
unsigned long saved_timing_base)
|
||||
void *dram_config_save(struct dram_timing_info *timing_info, unsigned long saved_timing_base)
|
||||
{
|
||||
int i = 0;
|
||||
struct dram_timing_info *saved_timing = (struct dram_timing_info *)saved_timing_base;
|
||||
|
@ -217,4 +216,6 @@ void dram_config_save(struct dram_timing_info *timing_info,
|
|||
cfg->val = timing_info->ddrphy_pie[i].val;
|
||||
cfg++;
|
||||
}
|
||||
|
||||
return (void *)cfg;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <console.h>
|
||||
#include <errno.h>
|
||||
#include <fuse.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <linux/arm-smccc.h>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include <dm/lists.h>
|
||||
#include <dm/root.h>
|
||||
#include <dm/device-internal.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <misc.h>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
#include <dm.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <misc.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <errno.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <misc.h>
|
||||
|
||||
#include "pinctrl-imx.h"
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <dm/device-internal.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <malloc.h>
|
||||
#include <power-domain-uclass.h>
|
||||
#include <asm/arch/power-domain.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
|
||||
static int imx8_power_domain_on(struct power_domain *power_domain)
|
||||
{
|
||||
|
|
|
@ -966,6 +966,14 @@ config MSM_GENI_SERIAL
|
|||
Driver works in FIFO mode.
|
||||
Multiple baudrates supported.
|
||||
|
||||
config MXS_AUART_SERIAL
|
||||
bool "MXS AUART"
|
||||
depends on DM_SERIAL
|
||||
help
|
||||
Support for Freescale i.MX23 / i.MX28 AUART or Application UART IP.
|
||||
This IP is present in the aforementioned SoCs, however this is not
|
||||
the IP used to drive the Debug UART port, for that see PL01X_SERIAL .
|
||||
|
||||
config OCTEON_SERIAL_BOOTCMD
|
||||
bool "MIPS Octeon PCI remote bootcmd input"
|
||||
depends on ARCH_OCTEON
|
||||
|
|
|
@ -46,6 +46,7 @@ obj-$(CONFIG_BCM283X_MU_SERIAL) += serial_bcm283x_mu.o
|
|||
obj-$(CONFIG_BCM283X_PL011_SERIAL) += serial_bcm283x_pl011.o
|
||||
obj-$(CONFIG_MSM_SERIAL) += serial_msm.o
|
||||
obj-$(CONFIG_MSM_GENI_SERIAL) += serial_msm_geni.o
|
||||
obj-$(CONFIG_MXS_AUART_SERIAL) += serial_mxs.o
|
||||
obj-$(CONFIG_MVEBU_A3700_UART) += serial_mvebu_a3700.o
|
||||
obj-$(CONFIG_MPC8XX_CONS) += serial_mpc8xx.o
|
||||
obj-$(CONFIG_NULLDEV_SERIAL) += serial_nulldev.o
|
||||
|
|
129
drivers/serial/serial_mxs.c
Normal file
129
drivers/serial/serial_mxs.c
Normal file
|
@ -0,0 +1,129 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (C) 2023 Marek Vasut <marex@denx.de>
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <malloc.h>
|
||||
#include <serial.h>
|
||||
#include <wait_bit.h>
|
||||
|
||||
#define SET_REG 0x4
|
||||
#define CLR_REG 0x8
|
||||
|
||||
#define AUART_CTRL0 0x00
|
||||
#define AUART_CTRL1 0x10
|
||||
#define AUART_CTRL2 0x20
|
||||
#define AUART_LINECTRL 0x30
|
||||
#define AUART_INTR 0x50
|
||||
#define AUART_DATA 0x60
|
||||
#define AUART_STAT 0x70
|
||||
|
||||
#define AUART_CTRL0_SFTRST BIT(31)
|
||||
#define AUART_CTRL0_CLKGATE BIT(30)
|
||||
|
||||
#define AUART_CTRL2_UARTEN BIT(0)
|
||||
|
||||
#define AUART_LINECTRL_BAUD_DIVINT(v) (((v) & 0xffff) << 16)
|
||||
#define AUART_LINECTRL_BAUD_DIVFRAC(v) (((v) & 0x3f) << 8)
|
||||
#define AUART_LINECTRL_WLEN(v) ((((v) - 5) & 0x3) << 5)
|
||||
|
||||
#define AUART_STAT_TXFE BIT(27)
|
||||
#define AUART_STAT_TXFF BIT(25)
|
||||
#define AUART_STAT_RXFE BIT(24)
|
||||
|
||||
#define AUART_CLK 24000000
|
||||
|
||||
struct mxs_auart_uart_priv {
|
||||
void __iomem *base;
|
||||
};
|
||||
|
||||
static int mxs_auart_uart_setbrg(struct udevice *dev, int baudrate)
|
||||
{
|
||||
struct mxs_auart_uart_priv *priv = dev_get_priv(dev);
|
||||
u32 div;
|
||||
|
||||
writel(AUART_CTRL0_CLKGATE, priv->base + AUART_CTRL0 + CLR_REG);
|
||||
writel(AUART_CTRL0_SFTRST, priv->base + AUART_CTRL0 + CLR_REG);
|
||||
|
||||
writel(AUART_CTRL2_UARTEN, priv->base + AUART_CTRL2 + SET_REG);
|
||||
|
||||
writel(0, priv->base + AUART_INTR);
|
||||
|
||||
div = DIV_ROUND_CLOSEST(AUART_CLK * 32, baudrate);
|
||||
|
||||
/* Disable FIFO, baudrate, 8N1. */
|
||||
writel(AUART_LINECTRL_BAUD_DIVFRAC(div & 0x3F) |
|
||||
AUART_LINECTRL_BAUD_DIVINT(div >> 6) |
|
||||
AUART_LINECTRL_WLEN(8),
|
||||
priv->base + AUART_LINECTRL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mxs_auart_uart_pending(struct udevice *dev, bool input)
|
||||
{
|
||||
struct mxs_auart_uart_priv *priv = dev_get_priv(dev);
|
||||
u32 stat = readl(priv->base + AUART_STAT);
|
||||
|
||||
if (input)
|
||||
return !(stat & AUART_STAT_RXFE);
|
||||
|
||||
return !!(stat & AUART_STAT_TXFE);
|
||||
}
|
||||
|
||||
static int mxs_auart_uart_putc(struct udevice *dev, const char ch)
|
||||
{
|
||||
struct mxs_auart_uart_priv *priv = dev_get_priv(dev);
|
||||
u32 stat = readl(priv->base + AUART_STAT);
|
||||
|
||||
if (stat & AUART_STAT_TXFF)
|
||||
return -EAGAIN;
|
||||
|
||||
writel(ch, priv->base + AUART_DATA);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mxs_auart_uart_getc(struct udevice *dev)
|
||||
{
|
||||
struct mxs_auart_uart_priv *priv = dev_get_priv(dev);
|
||||
|
||||
if (!mxs_auart_uart_pending(dev, true))
|
||||
return -EAGAIN;
|
||||
|
||||
return readl(priv->base + AUART_DATA) & 0xff;
|
||||
}
|
||||
|
||||
static int mxs_auart_uart_probe(struct udevice *dev)
|
||||
{
|
||||
struct mxs_auart_uart_priv *priv = dev_get_priv(dev);
|
||||
|
||||
priv->base = dev_read_addr_ptr(dev);
|
||||
if (!priv->base)
|
||||
return -EINVAL;
|
||||
|
||||
return mxs_auart_uart_setbrg(dev, CONFIG_BAUDRATE);
|
||||
}
|
||||
|
||||
static const struct dm_serial_ops mxs_auart_uart_ops = {
|
||||
.putc = mxs_auart_uart_putc,
|
||||
.pending = mxs_auart_uart_pending,
|
||||
.getc = mxs_auart_uart_getc,
|
||||
.setbrg = mxs_auart_uart_setbrg,
|
||||
};
|
||||
|
||||
static const struct udevice_id mxs_auart_uart_ids[] = {
|
||||
{ .compatible = "fsl,imx23-auart", },
|
||||
{ .compatible = "fsl,imx28-auart", },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(mxs_auart_serial) = {
|
||||
.name = "mxs-auart",
|
||||
.id = UCLASS_SERIAL,
|
||||
.of_match = mxs_auart_uart_ids,
|
||||
.probe = mxs_auart_uart_probe,
|
||||
.ops = &mxs_auart_uart_ops,
|
||||
.priv_auto = sizeof(struct mxs_auart_uart_priv),
|
||||
};
|
|
@ -27,10 +27,10 @@ config IMX_SCU_THERMAL
|
|||
trip is crossed
|
||||
|
||||
config IMX_TMU
|
||||
bool "Thermal Management Unit driver for NXP i.MX8M"
|
||||
depends on ARCH_IMX8M
|
||||
bool "Thermal Management Unit driver for NXP i.MX8M and iMX93"
|
||||
depends on ARCH_IMX8M || IMX93
|
||||
help
|
||||
Support for Temperature sensors on NXP i.MX8M.
|
||||
Support for Temperature sensors on NXP i.MX8M and iMX93.
|
||||
It supports one critical trip point and one passive trip point.
|
||||
The boot is hold to the cool device to throttle CPUs when the
|
||||
passive trip is crossed
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <asm/global_data.h>
|
||||
#include <dm/device-internal.h>
|
||||
#include <dm/device.h>
|
||||
#include <asm/arch/sci/sci.h>
|
||||
#include <firmware/imx/sci/sci.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/libfdt.h>
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <dm.h>
|
||||
#include <dm/device_compat.h>
|
||||
#include <dm/device-internal.h>
|
||||
#include <dm/device.h>
|
||||
#include <errno.h>
|
||||
|
@ -24,6 +25,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||
#define SITES_MAX 16
|
||||
#define FLAGS_VER2 0x1
|
||||
#define FLAGS_VER3 0x2
|
||||
#define FLAGS_VER4 0x4
|
||||
|
||||
#define TMR_DISABLE 0x0
|
||||
#define TMR_ME 0x80000000
|
||||
|
@ -75,6 +77,45 @@ struct imx_tmu_regs {
|
|||
u32 ttr3cr; /* Temperature Range 3 Control Register */
|
||||
};
|
||||
|
||||
struct imx_tmu_regs_v4 {
|
||||
u32 tmr; /* Mode Register */
|
||||
u32 tsr; /* Status Register */
|
||||
u32 tmsr; /* Monitor Site Register */
|
||||
u32 tmtmir; /* Temperature measurement interval Register */
|
||||
u8 res0[0x10];
|
||||
u32 tier; /* Interrupt Enable Register */
|
||||
u32 tidr; /* Interrupt Detect Register */
|
||||
u8 res1[0x8];
|
||||
u32 tiiscr; /* Interrupt Immediate Site Capture Register */
|
||||
u32 tiascr; /* Interrupt Average Site Capture Register */
|
||||
u32 ticscr; /* Interrupt Critical Site Capture Register */
|
||||
u8 res2[0x4];
|
||||
u32 tmhtcr; /* Monitor High Temperature Capture Register */
|
||||
u32 tmltcr; /* MonitorLow Temperature Capture Register */
|
||||
u32 tmrtrcr; /* Monitor Rising Temperature Rate Capture Register */
|
||||
u32 tmftrcr; /* Monitor Falling Temperature Rate Capture Register */
|
||||
u32 tmhtitr; /* Monitor High Temperature Immediate Threshold */
|
||||
u32 tmhtatr; /* Monitor High Temperature Average Threshold */
|
||||
u32 tmhtactr; /* Monitor High Temperature Average Crit Threshold */
|
||||
u8 res3[0x4];
|
||||
u32 tmltitr; /* Monitor Low Temperature Immediate Threshold */
|
||||
u32 tmltatr; /* Monitor Low Temperature Average Threshold */
|
||||
u32 tmltactr; /* Monitor Low Temperature Average Crit Threshold */
|
||||
u8 res4[0x4];
|
||||
u32 tmrtrctr; /* Monitor Rising Temperature Rate Critical Threshold Register */
|
||||
u32 tmftrctr; /* Monitor Falling Temperature Rate Critical Threshold Register */
|
||||
u8 res5[0x8];
|
||||
u32 ttcfgr; /* Temperature Configuration Register */
|
||||
u32 tscfgr; /* Sensor Configuration Register */
|
||||
u8 res6[0x78];
|
||||
u32 tritsr0; /* Immediate Temperature Site Register */
|
||||
u32 tratsr0; /* Average Temperature Site Register */
|
||||
u8 res7[0xdf8];
|
||||
u32 tcmcfg; /* Central Module Configuration */
|
||||
u8 res8[0xc];
|
||||
u32 ttrcr[16]; /* Temperature Range Control Register */
|
||||
};
|
||||
|
||||
struct imx_tmu_regs_v2 {
|
||||
u32 ter; /* TMU enable Register */
|
||||
u32 tsr; /* Status Register */
|
||||
|
@ -114,6 +155,7 @@ union tmu_regs {
|
|||
struct imx_tmu_regs regs_v1;
|
||||
struct imx_tmu_regs_v2 regs_v2;
|
||||
struct imx_tmu_regs_v3 regs_v3;
|
||||
struct imx_tmu_regs_v4 regs_v4;
|
||||
};
|
||||
|
||||
struct imx_tmu_plat {
|
||||
|
@ -147,6 +189,9 @@ static int read_temperature(struct udevice *dev, int *temp)
|
|||
* only reflects the RAW uncalibrated data
|
||||
*/
|
||||
valid = ((val & 0xff) < 10 || (val & 0xff) > 125) ? 0 : 1;
|
||||
} else if (drv_data & FLAGS_VER4) {
|
||||
val = readl(&pdata->regs->regs_v4.tritsr0);
|
||||
valid = val & 0x80000000;
|
||||
} else {
|
||||
val = readl(&pdata->regs->regs_v1.site[pdata->id].tritsr);
|
||||
valid = val & 0x80000000;
|
||||
|
@ -164,6 +209,13 @@ static int read_temperature(struct udevice *dev, int *temp)
|
|||
return -EINVAL;
|
||||
|
||||
*temp *= 1000;
|
||||
} else if (drv_data & FLAGS_VER4) {
|
||||
*temp = (val & 0x1ff) * 1000;
|
||||
if (val & 0x200)
|
||||
*temp += 500;
|
||||
|
||||
/* Convert Kelvin to Celsius */
|
||||
*temp -= 273000;
|
||||
} else {
|
||||
*temp = (val & 0xff) * 1000;
|
||||
}
|
||||
|
@ -185,8 +237,8 @@ int imx_tmu_get_temp(struct udevice *dev, int *temp)
|
|||
return ret;
|
||||
|
||||
while (cpu_tmp >= pdata->alert) {
|
||||
printf("CPU Temperature (%dC) has beyond alert (%dC), close to critical (%dC)", cpu_tmp, pdata->alert, pdata->critical);
|
||||
puts(" waiting...\n");
|
||||
dev_info(dev, "CPU Temperature (%dC) has beyond alert (%dC), close to critical (%dC) waiting...\n",
|
||||
cpu_tmp, pdata->alert, pdata->critical);
|
||||
mdelay(pdata->polling_delay);
|
||||
ret = read_temperature(dev, &cpu_tmp);
|
||||
if (ret)
|
||||
|
@ -205,19 +257,39 @@ static const struct dm_thermal_ops imx_tmu_ops = {
|
|||
static int imx_tmu_calibration(struct udevice *dev)
|
||||
{
|
||||
int i, val, len, ret;
|
||||
int index;
|
||||
u32 range[4];
|
||||
const fdt32_t *calibration;
|
||||
struct imx_tmu_plat *pdata = dev_get_plat(dev);
|
||||
ulong drv_data = dev_get_driver_data(dev);
|
||||
|
||||
debug("%s\n", __func__);
|
||||
dev_dbg(dev, "%s\n", __func__);
|
||||
|
||||
if (drv_data & (FLAGS_VER2 | FLAGS_VER3))
|
||||
return 0;
|
||||
|
||||
if (drv_data & FLAGS_VER4) {
|
||||
calibration = dev_read_prop(dev, "fsl,tmu-calibration", &len);
|
||||
if (!calibration || len % 8 || len > 128) {
|
||||
printf("TMU: invalid calibration data.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i += 8, calibration += 2) {
|
||||
index = i / 8;
|
||||
writel(index, &pdata->regs->regs_v4.ttcfgr);
|
||||
val = fdt32_to_cpu(*calibration);
|
||||
writel(val, &pdata->regs->regs_v4.tscfgr);
|
||||
val = fdt32_to_cpu(*(calibration + 1));
|
||||
writel((1 << 31) | val, &pdata->regs->regs_v4.ttrcr[index]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = dev_read_u32_array(dev, "fsl,tmu-range", range, 4);
|
||||
if (ret) {
|
||||
printf("TMU: missing calibration range, ret = %d.\n", ret);
|
||||
dev_err(dev, "TMU: missing calibration range, ret = %d.\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -229,7 +301,7 @@ static int imx_tmu_calibration(struct udevice *dev)
|
|||
|
||||
calibration = dev_read_prop(dev, "fsl,tmu-calibration", &len);
|
||||
if (!calibration || len % 8) {
|
||||
printf("TMU: invalid calibration data.\n");
|
||||
dev_err(dev, "TMU: invalid calibration data.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -243,8 +315,103 @@ static int imx_tmu_calibration(struct udevice *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void __weak imx_tmu_arch_init(void *reg_base)
|
||||
#if defined(CONFIG_IMX8MM) || defined(CONFIG_IMX8MN)
|
||||
static void imx_tmu_mx8mm_mx8mn_init(struct udevice *dev)
|
||||
{
|
||||
/* Load TCALIV and TASR from fuses */
|
||||
struct ocotp_regs *ocotp =
|
||||
(struct ocotp_regs *)OCOTP_BASE_ADDR;
|
||||
struct fuse_bank *bank = &ocotp->bank[3];
|
||||
struct fuse_bank3_regs *fuse =
|
||||
(struct fuse_bank3_regs *)bank->fuse_regs;
|
||||
struct imx_tmu_plat *pdata = dev_get_plat(dev);
|
||||
void *reg_base = (void *)pdata->regs;
|
||||
|
||||
u32 tca_rt, tca_hr, tca_en;
|
||||
u32 buf_vref, buf_slope;
|
||||
|
||||
tca_rt = fuse->ana0 & 0xFF;
|
||||
tca_hr = (fuse->ana0 & 0xFF00) >> 8;
|
||||
tca_en = (fuse->ana0 & 0x2000000) >> 25;
|
||||
|
||||
buf_vref = (fuse->ana0 & 0x1F00000) >> 20;
|
||||
buf_slope = (fuse->ana0 & 0xF0000) >> 16;
|
||||
|
||||
writel(buf_vref | (buf_slope << 16), (ulong)reg_base + 0x28);
|
||||
writel((tca_en << 31) | (tca_hr << 16) | tca_rt,
|
||||
(ulong)reg_base + 0x30);
|
||||
}
|
||||
#else
|
||||
static inline void imx_tmu_mx8mm_mx8mn_init(struct udevice *dev) { }
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_IMX8MP)
|
||||
static void imx_tmu_mx8mp_init(struct udevice *dev)
|
||||
{
|
||||
/* Load TCALIV0/1/m40 and TRIM from fuses */
|
||||
struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
|
||||
struct fuse_bank *bank = &ocotp->bank[38];
|
||||
struct fuse_bank38_regs *fuse =
|
||||
(struct fuse_bank38_regs *)bank->fuse_regs;
|
||||
struct fuse_bank *bank2 = &ocotp->bank[39];
|
||||
struct fuse_bank39_regs *fuse2 =
|
||||
(struct fuse_bank39_regs *)bank2->fuse_regs;
|
||||
struct imx_tmu_plat *pdata = dev_get_plat(dev);
|
||||
void *reg_base = (void *)pdata->regs;
|
||||
u32 buf_vref, buf_slope, bjt_cur, vlsb, bgr;
|
||||
u32 reg;
|
||||
u32 tca40[2], tca25[2], tca105[2];
|
||||
|
||||
/* For blank sample */
|
||||
if (!fuse->ana_trim2 && !fuse->ana_trim3 &&
|
||||
!fuse->ana_trim4 && !fuse2->ana_trim5) {
|
||||
/* Use a default 25C binary codes */
|
||||
tca25[0] = 1596;
|
||||
tca25[1] = 1596;
|
||||
writel(tca25[0], (ulong)reg_base + 0x30);
|
||||
writel(tca25[1], (ulong)reg_base + 0x34);
|
||||
return;
|
||||
}
|
||||
|
||||
buf_vref = (fuse->ana_trim2 & 0xc0) >> 6;
|
||||
buf_slope = (fuse->ana_trim2 & 0xF00) >> 8;
|
||||
bjt_cur = (fuse->ana_trim2 & 0xF000) >> 12;
|
||||
bgr = (fuse->ana_trim2 & 0xF0000) >> 16;
|
||||
vlsb = (fuse->ana_trim2 & 0xF00000) >> 20;
|
||||
writel(buf_vref | (buf_slope << 16), (ulong)reg_base + 0x28);
|
||||
|
||||
reg = (bgr << 28) | (bjt_cur << 20) | (vlsb << 12) | (1 << 7);
|
||||
writel(reg, (ulong)reg_base + 0x3c);
|
||||
|
||||
tca40[0] = (fuse->ana_trim3 & 0xFFF0000) >> 16;
|
||||
tca25[0] = (fuse->ana_trim3 & 0xF0000000) >> 28;
|
||||
tca25[0] |= ((fuse->ana_trim4 & 0xFF) << 4);
|
||||
tca105[0] = (fuse->ana_trim4 & 0xFFF00) >> 8;
|
||||
tca40[1] = (fuse->ana_trim4 & 0xFFF00000) >> 20;
|
||||
tca25[1] = fuse2->ana_trim5 & 0xFFF;
|
||||
tca105[1] = (fuse2->ana_trim5 & 0xFFF000) >> 12;
|
||||
|
||||
/* use 25c for 1p calibration */
|
||||
writel(tca25[0] | (tca105[0] << 16), (ulong)reg_base + 0x30);
|
||||
writel(tca25[1] | (tca105[1] << 16), (ulong)reg_base + 0x34);
|
||||
writel(tca40[0] | (tca40[1] << 16), (ulong)reg_base + 0x38);
|
||||
}
|
||||
#else
|
||||
static inline void imx_tmu_mx8mp_init(struct udevice *dev) { }
|
||||
#endif
|
||||
|
||||
static inline void imx_tmu_mx93_init(struct udevice *dev) { }
|
||||
|
||||
static void imx_tmu_arch_init(struct udevice *dev)
|
||||
{
|
||||
if (is_imx8mm() || is_imx8mn())
|
||||
imx_tmu_mx8mm_mx8mn_init(dev);
|
||||
else if (is_imx8mp())
|
||||
imx_tmu_mx8mp_init(dev);
|
||||
else if (is_imx93())
|
||||
imx_tmu_mx93_init(dev);
|
||||
else
|
||||
dev_err(dev, "Unsupported SoC, TMU calibration not loaded!\n");
|
||||
}
|
||||
|
||||
static void imx_tmu_init(struct udevice *dev)
|
||||
|
@ -252,7 +419,7 @@ static void imx_tmu_init(struct udevice *dev)
|
|||
struct imx_tmu_plat *pdata = dev_get_plat(dev);
|
||||
ulong drv_data = dev_get_driver_data(dev);
|
||||
|
||||
debug("%s\n", __func__);
|
||||
dev_dbg(dev, "%s\n", __func__);
|
||||
|
||||
if (drv_data & FLAGS_VER3) {
|
||||
/* Disable monitoring */
|
||||
|
@ -267,6 +434,15 @@ static void imx_tmu_init(struct udevice *dev)
|
|||
|
||||
/* Disable interrupt, using polling instead */
|
||||
writel(0x0, &pdata->regs->regs_v2.tier);
|
||||
} else if (drv_data & FLAGS_VER4) {
|
||||
/* Disable monitoring */
|
||||
writel(TMR_DISABLE, &pdata->regs->regs_v4.tmr);
|
||||
|
||||
/* Disable interrupt, using polling instead */
|
||||
writel(TIER_DISABLE, &pdata->regs->regs_v4.tier);
|
||||
|
||||
/* Set update_interval */
|
||||
writel(TMTMIR_DEFAULT, &pdata->regs->regs_v4.tmtmir);
|
||||
} else {
|
||||
/* Disable monitoring */
|
||||
writel(TMR_DISABLE, &pdata->regs->regs_v1.tmr);
|
||||
|
@ -278,7 +454,7 @@ static void imx_tmu_init(struct udevice *dev)
|
|||
writel(TMTMIR_DEFAULT, &pdata->regs->regs_v1.tmtmir);
|
||||
}
|
||||
|
||||
imx_tmu_arch_init((void *)pdata->regs);
|
||||
imx_tmu_arch_init(dev);
|
||||
}
|
||||
|
||||
static int imx_tmu_enable_msite(struct udevice *dev)
|
||||
|
@ -287,7 +463,7 @@ static int imx_tmu_enable_msite(struct udevice *dev)
|
|||
ulong drv_data = dev_get_driver_data(dev);
|
||||
u32 reg;
|
||||
|
||||
debug("%s\n", __func__);
|
||||
dev_dbg(dev, "%s\n", __func__);
|
||||
|
||||
if (!pdata->regs)
|
||||
return -EIO;
|
||||
|
@ -319,6 +495,22 @@ static int imx_tmu_enable_msite(struct udevice *dev)
|
|||
/* Enable monitor */
|
||||
reg |= TER_EN;
|
||||
writel(reg, &pdata->regs->regs_v2.ter);
|
||||
} else if (drv_data & FLAGS_VER4) {
|
||||
reg = readl(&pdata->regs->regs_v4.tcmcfg);
|
||||
reg |= (1 << 30) | (1 << 28);
|
||||
reg &= ~0xF000; /* set SAR clk = IPG clk /16 */
|
||||
writel(reg, &pdata->regs->regs_v4.tcmcfg);
|
||||
|
||||
/* Set ALPF*/
|
||||
reg = readl(&pdata->regs->regs_v4.tmr);
|
||||
reg |= TMR_ALPF;
|
||||
writel(reg, &pdata->regs->regs_v4.tmr);
|
||||
|
||||
writel(1, &pdata->regs->regs_v4.tmsr);
|
||||
|
||||
/* Enable ME */
|
||||
reg |= TMR_ME;
|
||||
writel(reg, &pdata->regs->regs_v4.tmr);
|
||||
} else {
|
||||
/* Clear the ME before setting MSITE and ALPF*/
|
||||
reg = readl(&pdata->regs->regs_v1.tmr);
|
||||
|
@ -346,7 +538,7 @@ static int imx_tmu_bind(struct udevice *dev)
|
|||
const void *prop;
|
||||
int minc, maxc;
|
||||
|
||||
debug("%s dev name %s\n", __func__, dev->name);
|
||||
dev_dbg(dev, "%s\n", __func__);
|
||||
|
||||
prop = dev_read_prop(dev, "compatible", NULL);
|
||||
if (!prop)
|
||||
|
@ -367,8 +559,7 @@ static int imx_tmu_bind(struct udevice *dev)
|
|||
dev->driver_data, offset,
|
||||
NULL);
|
||||
if (ret)
|
||||
printf("Error binding driver '%s': %d\n",
|
||||
dev->driver->name, ret);
|
||||
dev_err(dev, "Error binding driver: %d\n", ret);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -381,7 +572,7 @@ static int imx_tmu_parse_fdt(struct udevice *dev)
|
|||
ofnode trips_np;
|
||||
int ret;
|
||||
|
||||
debug("%s dev name %s\n", __func__, dev->name);
|
||||
dev_dbg(dev, "%s\n", __func__);
|
||||
|
||||
if (pdata->zone_node) {
|
||||
pdata->regs = (union tmu_regs *)dev_read_addr_ptr(dev);
|
||||
|
@ -409,7 +600,7 @@ static int imx_tmu_parse_fdt(struct udevice *dev)
|
|||
else
|
||||
pdata->id = 0;
|
||||
|
||||
debug("args.args_count %d, id %d\n", args.args_count, pdata->id);
|
||||
dev_dbg(dev, "args.args_count %d, id %d\n", args.args_count, pdata->id);
|
||||
|
||||
pdata->polling_delay = dev_read_u32_default(dev, "polling-delay", 1000);
|
||||
|
||||
|
@ -428,7 +619,7 @@ static int imx_tmu_parse_fdt(struct udevice *dev)
|
|||
continue;
|
||||
}
|
||||
|
||||
debug("id %d polling_delay %d, critical %d, alert %d\n",
|
||||
dev_dbg(dev, "id %d polling_delay %d, critical %d, alert %d\n",
|
||||
pdata->id, pdata->polling_delay, pdata->critical, pdata->alert);
|
||||
|
||||
return 0;
|
||||
|
@ -441,7 +632,7 @@ static int imx_tmu_probe(struct udevice *dev)
|
|||
|
||||
ret = imx_tmu_parse_fdt(dev);
|
||||
if (ret) {
|
||||
printf("Error in parsing TMU FDT %d\n", ret);
|
||||
dev_err(dev, "Error in parsing TMU FDT %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -460,6 +651,7 @@ static const struct udevice_id imx_tmu_ids[] = {
|
|||
{ .compatible = "fsl,imx8mq-tmu", },
|
||||
{ .compatible = "fsl,imx8mm-tmu", .data = FLAGS_VER2, },
|
||||
{ .compatible = "fsl,imx8mp-tmu", .data = FLAGS_VER3, },
|
||||
{ .compatible = "fsl,imx93-tmu", .data = FLAGS_VER4, },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
|
@ -122,6 +122,7 @@ void hw_watchdog_init(void)
|
|||
ulp_watchdog_init(wdog, CONFIG_WATCHDOG_TIMEOUT_MSECS);
|
||||
}
|
||||
|
||||
#if !CONFIG_IS_ENABLED(SYSRESET)
|
||||
void reset_cpu(void)
|
||||
{
|
||||
struct wdog_regs *wdog = (struct wdog_regs *)WDOG_BASE_ADDR;
|
||||
|
@ -159,6 +160,7 @@ void reset_cpu(void)
|
|||
|
||||
while (1);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ulp_wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags)
|
||||
{
|
||||
|
|
|
@ -131,8 +131,6 @@
|
|||
#define PHYS_SDRAM 0x80000000
|
||||
#define PHYS_SDRAM_SIZE 0x80000000 /* 2GB DDR */
|
||||
|
||||
#define CFG_SYS_FSL_USDHC_NUM 2
|
||||
|
||||
/* Using ULP WDOG for reset */
|
||||
#define WDOG_BASE_ADDR WDG3_BASE_ADDR
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ OR MIT */
|
||||
/*
|
||||
* Copyright 2021 NXP
|
||||
* Copyright 2022 NXP
|
||||
*/
|
||||
|
||||
#ifndef __DT_BINDINGS_CLOCK_IMX93_CLK_H
|
||||
|
@ -28,13 +28,9 @@
|
|||
#define IMX93_CLK_M33_SYSTICK 19
|
||||
#define IMX93_CLK_FLEXIO1 20
|
||||
#define IMX93_CLK_FLEXIO2 21
|
||||
#define IMX93_CLK_LPIT1 22
|
||||
#define IMX93_CLK_LPIT2 23
|
||||
#define IMX93_CLK_LPTMR1 24
|
||||
#define IMX93_CLK_LPTMR2 25
|
||||
#define IMX93_CLK_TPM1 26
|
||||
#define IMX93_CLK_TPM2 27
|
||||
#define IMX93_CLK_TPM3 28
|
||||
#define IMX93_CLK_TPM4 29
|
||||
#define IMX93_CLK_TPM5 30
|
||||
#define IMX93_CLK_TPM6 31
|
||||
|
@ -199,5 +195,10 @@
|
|||
#define IMX93_CLK_SAI1_IPG 190
|
||||
#define IMX93_CLK_SAI2_IPG 191
|
||||
#define IMX93_CLK_SAI3_IPG 192
|
||||
#define IMX93_CLK_END 193
|
||||
#define IMX93_CLK_MU1_A_GATE 193
|
||||
#define IMX93_CLK_MU1_B_GATE 194
|
||||
#define IMX93_CLK_MU2_A_GATE 195
|
||||
#define IMX93_CLK_MU2_B_GATE 196
|
||||
#define IMX93_CLK_END 197
|
||||
|
||||
#endif
|
||||
|
|
15
include/dt-bindings/power/fsl,imx93-power.h
Normal file
15
include/dt-bindings/power/fsl,imx93-power.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
|
||||
/*
|
||||
* Copyright 2022 NXP
|
||||
*/
|
||||
|
||||
#ifndef __DT_BINDINGS_IMX93_POWER_H__
|
||||
#define __DT_BINDINGS_IMX93_POWER_H__
|
||||
|
||||
#define IMX93_MEDIABLK_PD_MIPI_DSI 0
|
||||
#define IMX93_MEDIABLK_PD_MIPI_CSI 1
|
||||
#define IMX93_MEDIABLK_PD_PXP 2
|
||||
#define IMX93_MEDIABLK_PD_LCDIF 3
|
||||
#define IMX93_MEDIABLK_PD_ISI 4
|
||||
|
||||
#endif
|
|
@ -1,12 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright 2021 NXP
|
||||
*/
|
||||
|
||||
#ifndef __DT_BINDINGS_IMX93_POWER_H__
|
||||
#define __DT_BINDINGS_IMX93_POWER_H__
|
||||
|
||||
#define IMX93_POWER_DOMAIN_MLMIX 0
|
||||
#define IMX93_POWER_DOMAIN_MEDIAMIX 1
|
||||
|
||||
#endif
|
379
include/firmware/imx/sci/sci.h
Normal file
379
include/firmware/imx/sci/sci.h
Normal file
|
@ -0,0 +1,379 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2018 NXP
|
||||
*/
|
||||
|
||||
#ifndef _SC_SCI_H
|
||||
#define _SC_SCI_H
|
||||
|
||||
#include <log.h>
|
||||
#include <firmware/imx/sci/types.h>
|
||||
#include <firmware/imx/sci/svc/misc/api.h>
|
||||
#include <firmware/imx/sci/svc/pad/api.h>
|
||||
#include <firmware/imx/sci/svc/pm/api.h>
|
||||
#include <firmware/imx/sci/svc/rm/api.h>
|
||||
#include <firmware/imx/sci/svc/seco/api.h>
|
||||
#include <firmware/imx/sci/rpc.h>
|
||||
#include <dt-bindings/soc/imx_rsrc.h>
|
||||
#include <linux/errno.h>
|
||||
|
||||
static inline int sc_err_to_linux(sc_err_t err)
|
||||
{
|
||||
int ret;
|
||||
|
||||
switch (err) {
|
||||
case SC_ERR_NONE:
|
||||
return 0;
|
||||
case SC_ERR_VERSION:
|
||||
case SC_ERR_CONFIG:
|
||||
case SC_ERR_PARM:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
case SC_ERR_NOACCESS:
|
||||
case SC_ERR_LOCKED:
|
||||
case SC_ERR_UNAVAILABLE:
|
||||
ret = -EACCES;
|
||||
break;
|
||||
case SC_ERR_NOTFOUND:
|
||||
case SC_ERR_NOPOWER:
|
||||
ret = -ENODEV;
|
||||
break;
|
||||
case SC_ERR_IPC:
|
||||
ret = -EIO;
|
||||
break;
|
||||
case SC_ERR_BUSY:
|
||||
ret = -EBUSY;
|
||||
break;
|
||||
case SC_ERR_FAIL:
|
||||
ret = -EIO;
|
||||
break;
|
||||
default:
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
debug("%s %d %d\n", __func__, err, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_IMX8)
|
||||
/* PM API*/
|
||||
int sc_pm_set_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_pm_power_mode_t mode);
|
||||
int sc_pm_get_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_pm_power_mode_t *mode);
|
||||
int sc_pm_set_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clock_rate_t *rate);
|
||||
int sc_pm_get_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clock_rate_t *rate);
|
||||
int sc_pm_clock_enable(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_bool_t enable, sc_bool_t autog);
|
||||
int sc_pm_set_clock_parent(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clk_parent_t parent);
|
||||
int sc_pm_cpu_start(sc_ipc_t ipc, sc_rsrc_t resource, sc_bool_t enable,
|
||||
sc_faddr_t address);
|
||||
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);
|
||||
|
||||
/* MISC API */
|
||||
int sc_misc_set_control(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_ctrl_t ctrl, u32 val);
|
||||
int sc_misc_get_control(sc_ipc_t ipc, sc_rsrc_t resource, sc_ctrl_t ctrl,
|
||||
u32 *val);
|
||||
void sc_misc_get_boot_dev(sc_ipc_t ipc, sc_rsrc_t *boot_dev);
|
||||
void sc_misc_boot_status(sc_ipc_t ipc, sc_misc_boot_status_t status);
|
||||
int sc_misc_get_boot_container(sc_ipc_t ipc, u8 *idx);
|
||||
void sc_misc_build_info(sc_ipc_t ipc, u32 *build, u32 *commit);
|
||||
int sc_misc_otp_fuse_read(sc_ipc_t ipc, u32 word, u32 *val);
|
||||
int sc_misc_get_temp(sc_ipc_t ipc, sc_rsrc_t resource, sc_misc_temp_t temp,
|
||||
s16 *celsius, s8 *tenths);
|
||||
|
||||
/* RM API */
|
||||
sc_bool_t sc_rm_is_memreg_owned(sc_ipc_t ipc, sc_rm_mr_t mr);
|
||||
int sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr, sc_faddr_t addr_start,
|
||||
sc_faddr_t addr_end);
|
||||
int sc_rm_set_memreg_permissions(sc_ipc_t ipc, sc_rm_mr_t mr,
|
||||
sc_rm_pt_t pt, sc_rm_perm_t perm);
|
||||
int sc_rm_get_memreg_info(sc_ipc_t ipc, sc_rm_mr_t mr, sc_faddr_t *addr_start,
|
||||
sc_faddr_t *addr_end);
|
||||
sc_bool_t sc_rm_is_resource_owned(sc_ipc_t ipc, sc_rsrc_t resource);
|
||||
int sc_rm_partition_alloc(sc_ipc_t ipc, sc_rm_pt_t *pt, sc_bool_t secure,
|
||||
sc_bool_t isolated, sc_bool_t restricted,
|
||||
sc_bool_t grant, sc_bool_t coherent);
|
||||
int sc_rm_partition_free(sc_ipc_t ipc, sc_rm_pt_t pt);
|
||||
int sc_rm_get_partition(sc_ipc_t ipc, sc_rm_pt_t *pt);
|
||||
int sc_rm_set_parent(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_pt_t pt_parent);
|
||||
int sc_rm_assign_resource(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rsrc_t resource);
|
||||
int sc_rm_assign_pad(sc_ipc_t ipc, sc_rm_pt_t pt, sc_pad_t pad);
|
||||
sc_bool_t sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad);
|
||||
int sc_rm_get_resource_owner(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_rm_pt_t *pt);
|
||||
|
||||
/* PAD API */
|
||||
int sc_pad_set(sc_ipc_t ipc, sc_pad_t pad, u32 val);
|
||||
int sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val);
|
||||
|
||||
/* SMMU API */
|
||||
int sc_rm_set_master_sid(sc_ipc_t ipc, sc_rsrc_t resource, sc_rm_sid_t sid);
|
||||
|
||||
/* SECO API */
|
||||
int sc_seco_authenticate(sc_ipc_t ipc, sc_seco_auth_cmd_t cmd,
|
||||
sc_faddr_t addr);
|
||||
int sc_seco_forward_lifecycle(sc_ipc_t ipc, u32 change);
|
||||
int sc_seco_chip_info(sc_ipc_t ipc, u16 *lc, u16 *monotonic, u32 *uid_l,
|
||||
u32 *uid_h);
|
||||
void sc_seco_build_info(sc_ipc_t ipc, u32 *version, u32 *commit);
|
||||
int sc_seco_get_event(sc_ipc_t ipc, u8 idx, u32 *event);
|
||||
int sc_seco_gen_key_blob(sc_ipc_t ipc, u32 id, sc_faddr_t load_addr,
|
||||
sc_faddr_t export_addr, u16 max_size);
|
||||
int sc_seco_get_mp_key(sc_ipc_t ipc, sc_faddr_t dst_addr, u16 dst_size);
|
||||
int sc_seco_update_mpmr(sc_ipc_t ipc, sc_faddr_t addr, u8 size, u8 lock);
|
||||
int sc_seco_get_mp_sign(sc_ipc_t ipc, sc_faddr_t msg_addr,
|
||||
u16 msg_size, sc_faddr_t dst_addr, u16 dst_size);
|
||||
int sc_seco_secvio_dgo_config(sc_ipc_t ipc, u8 id, u8 access, u32 *data);
|
||||
int sc_seco_secvio_config(sc_ipc_t ipc, u8 id, u8 access,
|
||||
u32 *data0, u32 *data1, u32 *data2, u32 *data3,
|
||||
u32 *data4, u8 size);
|
||||
#else
|
||||
/* PM API*/
|
||||
static inline int sc_pm_set_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_pm_power_mode_t mode)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_pm_get_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
|
||||
sc_pm_power_mode_t *mode)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_pm_set_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clock_rate_t *rate)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_pm_get_clock_rate(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clock_rate_t *rate)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_pm_clock_enable(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_bool_t enable, sc_bool_t autog)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_pm_set_clock_parent(sc_ipc_t ipc, sc_rsrc_t resource, sc_pm_clk_t clk,
|
||||
sc_pm_clk_parent_t parent)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_pm_cpu_start(sc_ipc_t ipc, sc_rsrc_t resource, sc_bool_t enable,
|
||||
sc_faddr_t address)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline sc_bool_t sc_pm_is_partition_started(sc_ipc_t ipc, sc_rm_pt_t pt)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int sc_pm_resource_reset(sc_ipc_t ipc, sc_rsrc_t resource)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
/* MISC API */
|
||||
static inline int sc_misc_set_control(sc_ipc_t ipc, sc_rsrc_t resource, sc_ctrl_t ctrl, u32 val)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_misc_get_control(sc_ipc_t ipc, sc_rsrc_t resource, sc_ctrl_t ctrl, u32 *val)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline void sc_misc_get_boot_dev(sc_ipc_t ipc, sc_rsrc_t *boot_dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void sc_misc_boot_status(sc_ipc_t ipc, sc_misc_boot_status_t status)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int sc_misc_get_boot_container(sc_ipc_t ipc, u8 *idx)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline void sc_misc_build_info(sc_ipc_t ipc, u32 *build, u32 *commit)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int sc_misc_otp_fuse_read(sc_ipc_t ipc, u32 word, u32 *val)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_misc_get_temp(sc_ipc_t ipc, sc_rsrc_t resource, sc_misc_temp_t temp,
|
||||
s16 *celsius, s8 *tenths)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
/* RM API */
|
||||
static inline sc_bool_t sc_rm_is_memreg_owned(sc_ipc_t ipc, sc_rm_mr_t mr)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline int sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr, sc_faddr_t addr_start,
|
||||
sc_faddr_t addr_end)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_rm_set_memreg_permissions(sc_ipc_t ipc, sc_rm_mr_t mr, sc_rm_pt_t pt,
|
||||
sc_rm_perm_t perm)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_rm_get_memreg_info(sc_ipc_t ipc, sc_rm_mr_t mr, sc_faddr_t *addr_start,
|
||||
sc_faddr_t *addr_end)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline sc_bool_t sc_rm_is_resource_owned(sc_ipc_t ipc, sc_rsrc_t resource)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline int sc_rm_partition_alloc(sc_ipc_t ipc, sc_rm_pt_t *pt, sc_bool_t secure,
|
||||
sc_bool_t isolated, sc_bool_t restricted,
|
||||
sc_bool_t grant, sc_bool_t coherent)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_rm_partition_free(sc_ipc_t ipc, sc_rm_pt_t pt)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_rm_get_partition(sc_ipc_t ipc, sc_rm_pt_t *pt)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_rm_set_parent(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_pt_t pt_parent)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_rm_assign_resource(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rsrc_t resource)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_rm_assign_pad(sc_ipc_t ipc, sc_rm_pt_t pt, sc_pad_t pad)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline sc_bool_t sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline int sc_rm_get_resource_owner(sc_ipc_t ipc, sc_rsrc_t resource, sc_rm_pt_t *pt)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
/* PAD API */
|
||||
static inline int sc_pad_set(sc_ipc_t ipc, sc_pad_t pad, u32 val)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
/* SMMU API */
|
||||
static inline int sc_rm_set_master_sid(sc_ipc_t ipc, sc_rsrc_t resource, sc_rm_sid_t sid)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
/* SECO API */
|
||||
static inline int sc_seco_authenticate(sc_ipc_t ipc, sc_seco_auth_cmd_t cmd, sc_faddr_t addr)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_forward_lifecycle(sc_ipc_t ipc, u32 change)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_chip_info(sc_ipc_t ipc, u16 *lc, u16 *monotonic, u32 *uid_l, u32 *uid_h)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
void sc_seco_build_info(sc_ipc_t ipc, u32 *version, u32 *commit)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int sc_seco_get_event(sc_ipc_t ipc, u8 idx, u32 *event)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_gen_key_blob(sc_ipc_t ipc, u32 id, sc_faddr_t load_addr,
|
||||
sc_faddr_t export_addr, u16 max_size)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_get_mp_key(sc_ipc_t ipc, sc_faddr_t dst_addr, u16 dst_size)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_update_mpmr(sc_ipc_t ipc, sc_faddr_t addr, u8 size, u8 lock)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_get_mp_sign(sc_ipc_t ipc, sc_faddr_t msg_addr, u16 msg_size,
|
||||
sc_faddr_t dst_addr, u16 dst_size)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_secvio_dgo_config(sc_ipc_t ipc, u8 id, u8 access, u32 *data)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static inline int sc_seco_secvio_config(sc_ipc_t ipc, u8 id, u8 access, u32 *data0, u32 *data1,
|
||||
u32 *data2, u32 *data3, u32 *data4, u8 size)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -6,7 +6,7 @@
|
|||
#ifndef SC_RM_API_H
|
||||
#define SC_RM_API_H
|
||||
|
||||
#include <asm/arch/sci/types.h>
|
||||
#include <firmware/imx/sci/types.h>
|
||||
|
||||
/* Defines for type widths */
|
||||
#define SC_RM_PARTITION_W 5U /* Width of sc_rm_pt_t */
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
/* Includes */
|
||||
|
||||
#include <asm/arch/sci/types.h>
|
||||
#include <firmware/imx/sci/types.h>
|
||||
|
||||
/* Defines */
|
||||
#define SC_SECO_AUTH_CONTAINER 0U /* Authenticate container */
|
Loading…
Reference in a new issue