mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
u-boot-imx-20220422
------------------- - Switch to DM_SERIAL - Drop MMCROOT - several cleanup CI: https://source.denx.de/u-boot/custodians/u-boot-imx/-/pipelines/11815 -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQS2TmnA27QKhpKSZe309WXkmmjvpgUCYmJq1Q8cc2JhYmljQGRl bnguZGUACgkQ9PVl5Jpo76ZlxQCfQNPkQVf10kjENID/D9mu+Hl2tMEAnj8AMOyF iQrcw6oegrVvZZXV+s2J =XjAE -----END PGP SIGNATURE----- Merge tag 'u-boot-imx-20220422' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx u-boot-imx-20220422 ------------------- - Switch to DM_SERIAL - Drop MMCROOT - several cleanup CI: https://source.denx.de/u-boot/custodians/u-boot-imx/-/pipelines/11815
This commit is contained in:
commit
6e2af641e4
184 changed files with 6017 additions and 3024 deletions
|
@ -1860,11 +1860,6 @@ config TARGET_TEN64
|
|||
Support for Traverse Technologies Ten64 board, based
|
||||
on NXP LS1088A.
|
||||
|
||||
config TARGET_COLIBRI_PXA270
|
||||
bool "Support colibri_pxa270"
|
||||
select CPU_PXA27X
|
||||
select GPIO_EXTRA_HEADER
|
||||
|
||||
config ARCH_UNIPHIER
|
||||
bool "Socionext UniPhier SoCs"
|
||||
select BOARD_LATE_INIT
|
||||
|
@ -2328,7 +2323,6 @@ source "board/seeed/npi_imx6ull/Kconfig"
|
|||
source "board/socionext/developerbox/Kconfig"
|
||||
source "board/st/stv0991/Kconfig"
|
||||
source "board/tcl/sl50/Kconfig"
|
||||
source "board/toradex/colibri_pxa270/Kconfig"
|
||||
source "board/traverse/ten64/Kconfig"
|
||||
source "board/variscite/dart_6ul/Kconfig"
|
||||
source "board/vscom/baltos/Kconfig"
|
||||
|
|
|
@ -899,7 +899,6 @@ dtb-$(CONFIG_ARCH_IMX8) += \
|
|||
imx8qm-rom7720-a1.dtb \
|
||||
fsl-imx8qxp-ai_ml.dtb \
|
||||
fsl-imx8qxp-colibri.dtb \
|
||||
fsl-imx8qxp-apalis.dtb \
|
||||
fsl-imx8qxp-mek.dtb \
|
||||
imx8-deneb.dtb \
|
||||
imx8-giedi.dtb
|
||||
|
@ -939,6 +938,8 @@ dtb-$(CONFIG_ARCH_IMX8M) += \
|
|||
imx8mq-phanbell.dtb \
|
||||
imx8mp-evk.dtb \
|
||||
imx8mp-phyboard-pollux-rdk.dtb \
|
||||
imx8mp-venice.dtb \
|
||||
imx8mp-venice-gw74xx.dtb \
|
||||
imx8mp-verdin.dtb \
|
||||
imx8mq-pico-pi.dtb \
|
||||
imx8mq-kontron-pitx-imx8m.dtb
|
||||
|
|
|
@ -1,139 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+ OR MIT
|
||||
/*
|
||||
* Copyright 2020 Toradex
|
||||
*/
|
||||
|
||||
&{/imx8qx-pm} {
|
||||
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&mu {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&clk {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio_gpio0 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio_gpio1 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio_gpio2 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio_gpio3 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio_gpio4 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio_gpio5 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio_gpio6 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_lsio_gpio7 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_dma {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_dma_lpuart0 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_dma_lpuart3 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_conn {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_conn_sdch0 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_conn_sdch1 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_conn_sdch2 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&pd_conn_enet0 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&gpio0 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&gpio6 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&gpio7 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&lpuart3 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&lpuart0 {
|
||||
u-boot,dm-pre-proper;
|
||||
};
|
||||
|
||||
&usdhc1 {
|
||||
u-boot,dm-pre-proper;
|
||||
/delete-property/ assigned-clock-parents;
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
u-boot,dm-pre-proper;
|
||||
/delete-property/ assigned-clock-parents;
|
||||
};
|
|
@ -1,278 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+ OR MIT
|
||||
/*
|
||||
* Copyright 2020 Toradex
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "fsl-imx8qxp.dtsi"
|
||||
#include "fsl-imx8qxp-apalis-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Toradex Apalis iMX8X";
|
||||
compatible = "toradex,apalis-imx8x", "fsl,imx8qxp";
|
||||
|
||||
chosen {
|
||||
bootargs = "console=ttyLP1,115200";
|
||||
stdout-path = &lpuart1;
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reg_usb_otg1_vbus: regulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <0>;
|
||||
regulator-name = "usb_otg1_vbus";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
gpio = <&gpio3 16 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_hog0>, <&pinctrl_hog1>, <&pinctrl_reset_moci>;
|
||||
|
||||
apalis-imx8x {
|
||||
/* Apalis UART1 */
|
||||
pinctrl_lpuart1: lpuart1grp {
|
||||
fsl,pins = <
|
||||
SC_P_UART1_RX_ADMA_UART1_RX 0x06000020 /* SODIMM 118 */
|
||||
SC_P_UART1_TX_ADMA_UART1_TX 0x06000020 /* SODIMM 112 */
|
||||
>;
|
||||
};
|
||||
|
||||
/* On-module Gigabit Ethernet PHY Micrel KSZ9031 */
|
||||
pinctrl_fec1: fec1grp {
|
||||
fsl,pins = <
|
||||
SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB0_PAD 0x14a0
|
||||
SC_P_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB1_PAD 0x14a0
|
||||
SC_P_ENET0_MDC_CONN_ENET0_MDC 0x06000020
|
||||
SC_P_ENET0_MDIO_CONN_ENET0_MDIO 0x06000020
|
||||
SC_P_ENET0_RGMII_TX_CTL_CONN_ENET0_RGMII_TX_CTL 0x61
|
||||
SC_P_ENET0_RGMII_TXC_CONN_ENET0_RGMII_TXC 0x61
|
||||
SC_P_ENET0_RGMII_TXD0_CONN_ENET0_RGMII_TXD0 0x61
|
||||
SC_P_ENET0_RGMII_TXD1_CONN_ENET0_RGMII_TXD1 0x61
|
||||
SC_P_ENET0_RGMII_TXD2_CONN_ENET0_RGMII_TXD2 0x61
|
||||
SC_P_ENET0_RGMII_TXD3_CONN_ENET0_RGMII_TXD3 0x61
|
||||
SC_P_ENET0_RGMII_RXC_CONN_ENET0_RGMII_RXC 0x61
|
||||
SC_P_ENET0_RGMII_RX_CTL_CONN_ENET0_RGMII_RX_CTL 0x61
|
||||
SC_P_ENET0_RGMII_RXD0_CONN_ENET0_RGMII_RXD0 0x61
|
||||
SC_P_ENET0_RGMII_RXD1_CONN_ENET0_RGMII_RXD1 0x61
|
||||
SC_P_ENET0_RGMII_RXD2_CONN_ENET0_RGMII_RXD2 0x61
|
||||
SC_P_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3 0x61
|
||||
/* On-module ETH_RESET# */
|
||||
SC_P_MIPI_CSI0_MCLK_OUT_LSIO_GPIO3_IO04 0x06000020
|
||||
/* On-module ETH_INT# */
|
||||
SC_P_ADC_IN2_LSIO_GPIO1_IO12 0x21
|
||||
>;
|
||||
};
|
||||
|
||||
/* Apalis BKL_ON */
|
||||
pinctrl_gpio_bkl_on: gpio-bkl-on {
|
||||
fsl,pins = <
|
||||
SC_P_QSPI0A_DQS_LSIO_GPIO3_IO13 0x40 /* SODIMM 286 */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_hog0: hog0grp {
|
||||
fsl,pins = <
|
||||
SC_P_COMP_CTL_GPIO_1V8_3V3_GPIORHB_PAD 0x000514a0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_hog1: hog1grp {
|
||||
fsl,pins = <
|
||||
/* Apalis USBO1_EN */
|
||||
SC_P_QSPI0A_SCLK_LSIO_GPIO3_IO16 0x41 /* SODIMM 274 */
|
||||
>;
|
||||
};
|
||||
|
||||
/* Apalis RESET_MOCI# */
|
||||
pinctrl_reset_moci: gpioresetmocigrp {
|
||||
fsl,pins = <
|
||||
SC_P_PCIE_CTRL0_CLKREQ_B_LSIO_GPIO4_IO01 0x21
|
||||
>;
|
||||
};
|
||||
|
||||
/* On-module eMMC */
|
||||
pinctrl_usdhc1: usdhc1grp {
|
||||
fsl,pins = <
|
||||
SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000041
|
||||
SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x21
|
||||
SC_P_EMMC0_DATA0_CONN_EMMC0_DATA0 0x21
|
||||
SC_P_EMMC0_DATA1_CONN_EMMC0_DATA1 0x21
|
||||
SC_P_EMMC0_DATA2_CONN_EMMC0_DATA2 0x21
|
||||
SC_P_EMMC0_DATA3_CONN_EMMC0_DATA3 0x21
|
||||
SC_P_EMMC0_DATA4_CONN_EMMC0_DATA4 0x21
|
||||
SC_P_EMMC0_DATA5_CONN_EMMC0_DATA5 0x21
|
||||
SC_P_EMMC0_DATA6_CONN_EMMC0_DATA6 0x21
|
||||
SC_P_EMMC0_DATA7_CONN_EMMC0_DATA7 0x21
|
||||
SC_P_EMMC0_STROBE_CONN_EMMC0_STROBE 0x41
|
||||
SC_P_EMMC0_RESET_B_CONN_EMMC0_RESET_B 0x21
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
|
||||
fsl,pins = <
|
||||
SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000041
|
||||
SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x21
|
||||
SC_P_EMMC0_DATA0_CONN_EMMC0_DATA0 0x21
|
||||
SC_P_EMMC0_DATA1_CONN_EMMC0_DATA1 0x21
|
||||
SC_P_EMMC0_DATA2_CONN_EMMC0_DATA2 0x21
|
||||
SC_P_EMMC0_DATA3_CONN_EMMC0_DATA3 0x21
|
||||
SC_P_EMMC0_DATA4_CONN_EMMC0_DATA4 0x21
|
||||
SC_P_EMMC0_DATA5_CONN_EMMC0_DATA5 0x21
|
||||
SC_P_EMMC0_DATA6_CONN_EMMC0_DATA6 0x21
|
||||
SC_P_EMMC0_DATA7_CONN_EMMC0_DATA7 0x21
|
||||
SC_P_EMMC0_STROBE_CONN_EMMC0_STROBE 0x41
|
||||
SC_P_EMMC0_RESET_B_CONN_EMMC0_RESET_B 0x21
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
|
||||
fsl,pins = <
|
||||
SC_P_EMMC0_CLK_CONN_EMMC0_CLK 0x06000041
|
||||
SC_P_EMMC0_CMD_CONN_EMMC0_CMD 0x21
|
||||
SC_P_EMMC0_DATA0_CONN_EMMC0_DATA0 0x21
|
||||
SC_P_EMMC0_DATA1_CONN_EMMC0_DATA1 0x21
|
||||
SC_P_EMMC0_DATA2_CONN_EMMC0_DATA2 0x21
|
||||
SC_P_EMMC0_DATA3_CONN_EMMC0_DATA3 0x21
|
||||
SC_P_EMMC0_DATA4_CONN_EMMC0_DATA4 0x21
|
||||
SC_P_EMMC0_DATA5_CONN_EMMC0_DATA5 0x21
|
||||
SC_P_EMMC0_DATA6_CONN_EMMC0_DATA6 0x21
|
||||
SC_P_EMMC0_DATA7_CONN_EMMC0_DATA7 0x21
|
||||
SC_P_EMMC0_STROBE_CONN_EMMC0_STROBE 0x41
|
||||
SC_P_EMMC0_RESET_B_CONN_EMMC0_RESET_B 0x21
|
||||
>;
|
||||
};
|
||||
|
||||
/* Apalis MMC1_CD# */
|
||||
pinctrl_usdhc2_gpio: mmc1gpiogrp {
|
||||
fsl,pins = <
|
||||
SC_P_USDHC1_CD_B_LSIO_GPIO4_IO22 0x06000021 /* SODIMM 164 */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_gpio_sleep: usdhc1gpioslpgrp {
|
||||
fsl,pins = <
|
||||
SC_P_USDHC1_CD_B_LSIO_GPIO4_IO22 0x60 /* SODIMM 164 */
|
||||
>;
|
||||
};
|
||||
|
||||
/* Apalis USBH_EN */
|
||||
pinctrl_usbh_en: usbhen {
|
||||
fsl,pins = <
|
||||
SC_P_USB_SS3_TC1_LSIO_GPIO4_IO04 0x40 /* SODIMM 84 */
|
||||
>;
|
||||
};
|
||||
|
||||
/* Apalis MMC1 */
|
||||
pinctrl_usdhc2: usdhc2grp {
|
||||
fsl,pins = <
|
||||
SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000041 /* SODIMM 154 */
|
||||
SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x21 /* SODIMM 150 */
|
||||
SC_P_USDHC1_DATA0_CONN_USDHC1_DATA0 0x21 /* SODIMM 160 */
|
||||
SC_P_USDHC1_DATA1_CONN_USDHC1_DATA1 0x21 /* SODIMM 162 */
|
||||
SC_P_USDHC1_DATA2_CONN_USDHC1_DATA2 0x21 /* SODIMM 144 */
|
||||
SC_P_USDHC1_DATA3_CONN_USDHC1_DATA3 0x21 /* SODIMM 146 */
|
||||
SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT 0x21
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_100mhz: usdhc2grp100mhz {
|
||||
fsl,pins = <
|
||||
SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000041 /* SODIMM 154 */
|
||||
SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x21 /* SODIMM 150 */
|
||||
SC_P_USDHC1_DATA0_CONN_USDHC1_DATA0 0x21 /* SODIMM 160 */
|
||||
SC_P_USDHC1_DATA1_CONN_USDHC1_DATA1 0x21 /* SODIMM 162 */
|
||||
SC_P_USDHC1_DATA2_CONN_USDHC1_DATA2 0x21 /* SODIMM 144 */
|
||||
SC_P_USDHC1_DATA3_CONN_USDHC1_DATA3 0x21 /* SODIMM 146 */
|
||||
SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT 0x21
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_200mhz: usdhc2grp200mhz {
|
||||
fsl,pins = <
|
||||
SC_P_USDHC1_CLK_CONN_USDHC1_CLK 0x06000041 /* SODIMM 154 */
|
||||
SC_P_USDHC1_CMD_CONN_USDHC1_CMD 0x21 /* SODIMM 150 */
|
||||
SC_P_USDHC1_DATA0_CONN_USDHC1_DATA0 0x21 /* SODIMM 160 */
|
||||
SC_P_USDHC1_DATA1_CONN_USDHC1_DATA1 0x21 /* SODIMM 162 */
|
||||
SC_P_USDHC1_DATA2_CONN_USDHC1_DATA2 0x21 /* SODIMM 144 */
|
||||
SC_P_USDHC1_DATA3_CONN_USDHC1_DATA3 0x21 /* SODIMM 146 */
|
||||
SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT 0x21
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_sleep: usdhc2slpgrp {
|
||||
fsl,pins = <
|
||||
SC_P_USDHC1_CLK_LSIO_GPIO4_IO23 0x60 /* SODIMM 154 */
|
||||
SC_P_USDHC1_CMD_LSIO_GPIO4_IO24 0x60 /* SODIMM 150 */
|
||||
SC_P_USDHC1_DATA0_LSIO_GPIO4_IO25 0x60 /* SODIMM 160 */
|
||||
SC_P_USDHC1_DATA1_LSIO_GPIO4_IO26 0x60 /* SODIMM 162 */
|
||||
SC_P_USDHC1_DATA2_LSIO_GPIO4_IO27 0x60 /* SODIMM 144 */
|
||||
SC_P_USDHC1_DATA3_LSIO_GPIO4_IO28 0x60 /* SODIMM 146 */
|
||||
SC_P_USDHC1_VSELECT_CONN_USDHC1_VSELECT 0x21
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* Apalis Gigabit LAN */
|
||||
&fec1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec1>;
|
||||
fsl,magic-packet;
|
||||
phy-handle = <ðphy0>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-reset-duration = <10>;
|
||||
phy-reset-post-delay = <150>;
|
||||
phy-reset-gpios = <&gpio3 4 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ethphy0: ethernet-phy@4 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
reg = <4>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* Apalis UART1 */
|
||||
&lpuart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_lpuart1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* On-module eMMC */
|
||||
&usdhc1 {
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc1>;
|
||||
pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
|
||||
pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* Apalis MMC1 */
|
||||
&usdhc2 {
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep";
|
||||
pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
|
||||
pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
|
||||
pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
|
||||
pinctrl-3 = <&pinctrl_usdhc2_sleep>, <&pinctrl_usdhc2_gpio_sleep>;
|
||||
disable-wp;
|
||||
status = "okay";
|
||||
};
|
|
@ -3,3 +3,49 @@
|
|||
* Copyright 2021 Gateworks Corporation
|
||||
*/
|
||||
#include "imx8mm-venice-gw700x-u-boot.dtsi"
|
||||
|
||||
&gpio1 {
|
||||
pci_usb_sel {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <6 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "pci_usb_sel";
|
||||
};
|
||||
|
||||
dio_0 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dio0";
|
||||
};
|
||||
|
||||
dio_1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <9 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dio1";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
dio_2 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <3 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dio2";
|
||||
};
|
||||
|
||||
dio_3 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <4 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dio3";
|
||||
};
|
||||
|
||||
pci_wdis {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "pci_wdis#";
|
||||
};
|
||||
};
|
||||
|
|
|
@ -3,3 +3,84 @@
|
|||
* Copyright 2021 Gateworks Corporation
|
||||
*/
|
||||
#include "imx8mm-venice-gw700x-u-boot.dtsi"
|
||||
|
||||
&gpio1 {
|
||||
rs485_term {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <0 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs485_term";
|
||||
};
|
||||
|
||||
mipi_gpio4 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <1 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio4";
|
||||
};
|
||||
|
||||
pci_usb_sel {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <6 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "pci_usb_sel";
|
||||
};
|
||||
|
||||
dio_0 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dio0";
|
||||
};
|
||||
|
||||
dio_1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <9 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dio1";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
rs485_en {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <0 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs485_en";
|
||||
};
|
||||
|
||||
mipi_gpio3 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <1 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio3";
|
||||
};
|
||||
|
||||
rs485_half {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <2 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs485_hd";
|
||||
};
|
||||
|
||||
mipi_gpio2 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <3 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio2";
|
||||
};
|
||||
|
||||
mipi_gpio1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <4 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio1";
|
||||
};
|
||||
|
||||
pci_wdis {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "pci_wdis#";
|
||||
};
|
||||
};
|
||||
|
|
|
@ -3,3 +3,84 @@
|
|||
* Copyright 2021 Gateworks Corporation
|
||||
*/
|
||||
#include "imx8mm-venice-gw700x-u-boot.dtsi"
|
||||
|
||||
&gpio1 {
|
||||
rs485_term {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <0 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs485_term";
|
||||
};
|
||||
|
||||
mipi_gpio4 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <1 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio4";
|
||||
};
|
||||
|
||||
pci_usb_sel {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <6 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "pci_usb_sel";
|
||||
};
|
||||
|
||||
dio_0 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dio0";
|
||||
};
|
||||
|
||||
dio_1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <9 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dio1";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
rs485_en {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <0 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs485_en";
|
||||
};
|
||||
|
||||
mipi_gpio3 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <1 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio3";
|
||||
};
|
||||
|
||||
rs485_half {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <2 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs485_hd";
|
||||
};
|
||||
|
||||
mipi_gpio2 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <3 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio2";
|
||||
};
|
||||
|
||||
mipi_gpio1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <4 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio1";
|
||||
};
|
||||
|
||||
pci_wdis {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "pci_wdis#";
|
||||
};
|
||||
};
|
||||
|
|
|
@ -5,6 +5,124 @@
|
|||
|
||||
#include "imx8mm-venice-u-boot.dtsi"
|
||||
|
||||
&gpio1 {
|
||||
uart1_rs422 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <0 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_rs422#";
|
||||
};
|
||||
|
||||
uart1rs485 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <3 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_rs485#";
|
||||
};
|
||||
|
||||
uart1rs232 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <5 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_rs232#";
|
||||
};
|
||||
|
||||
dig1in {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <6 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dig1_in";
|
||||
};
|
||||
|
||||
dig1out {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dig1_out";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
uart3_rs232 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <6 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart3_rs232#";
|
||||
};
|
||||
|
||||
uart3_rs422 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart3_rs422#";
|
||||
};
|
||||
|
||||
uart3_rs485 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <8 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart3_rs485#";
|
||||
};
|
||||
|
||||
uart4_rs485 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <27 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart4_rs485#";
|
||||
};
|
||||
|
||||
sim1det {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <29 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "sim1_det";
|
||||
};
|
||||
|
||||
sim2det {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <30 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "sim2_det";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
dig2out {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <3 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dig2_out";
|
||||
};
|
||||
|
||||
dig2in {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <4 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dig2_in";
|
||||
};
|
||||
|
||||
sim2sel {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <5 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "sim2_sel";
|
||||
};
|
||||
|
||||
uart4_rs232 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <10 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart4_rs232#";
|
||||
};
|
||||
|
||||
uart4_rs422 {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <13 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart4_rs422#";
|
||||
};
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
phy-reset-gpios = <&gpio4 19 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <1>;
|
||||
|
|
|
@ -5,10 +5,160 @@
|
|||
|
||||
#include "imx8mm-venice-u-boot.dtsi"
|
||||
|
||||
&gpio1 {
|
||||
m2rst {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <13 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "m2_reset";
|
||||
};
|
||||
|
||||
m2wdis {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <15 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "m2_wdis#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
uart2en {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <8 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart2_en#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
m2gdis {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <1 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "m2_gdis#";
|
||||
};
|
||||
|
||||
m2off {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "m2_off#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
ampgpio3 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <11 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "amp_gpio3";
|
||||
};
|
||||
|
||||
ampgpio2 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <12 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "amp_gpio2";
|
||||
};
|
||||
|
||||
ampgpio1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <14 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "amp_gpio1";
|
||||
};
|
||||
|
||||
ltrpwr {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <16 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "lte_pwr#";
|
||||
};
|
||||
|
||||
lterst {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <17 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "lte_rst";
|
||||
};
|
||||
|
||||
ampgpio4 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <20 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "amp_gpio4";
|
||||
};
|
||||
|
||||
appgpio1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <21 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "app_gpio1";
|
||||
};
|
||||
|
||||
uart1rs485 {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <23 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_rs485";
|
||||
};
|
||||
|
||||
uart1term {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <25 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_term";
|
||||
};
|
||||
|
||||
uart1half {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <26 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_half";
|
||||
};
|
||||
|
||||
appgpio2 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <27 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "app_gpio2";
|
||||
};
|
||||
|
||||
mipigpio1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <28 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio1";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
mipigpio4 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <3 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio4";
|
||||
};
|
||||
|
||||
mipigpio3 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <4 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio3";
|
||||
};
|
||||
|
||||
mipigpio2 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <5 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio2";
|
||||
};
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
phy-reset-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <1>;
|
||||
phy-reset-post-delay = <1>;
|
||||
phy-reset-post-delay = <300>;
|
||||
};
|
||||
|
||||
&pinctrl_fec1 {
|
||||
|
|
|
@ -243,10 +243,14 @@
|
|||
ethphy0: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
reg = <0>;
|
||||
/* TI DP83867 props */
|
||||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||
ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||
tx-fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
|
||||
rx-fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
|
||||
/* GPY111 props */
|
||||
rx-internal-delay-ps = <2000>;
|
||||
tx-internal-delay-ps = <2500>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -5,6 +5,89 @@
|
|||
|
||||
#include "imx8mm-venice-u-boot.dtsi"
|
||||
|
||||
&gpio1 {
|
||||
rs422en {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <10 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs422_en#";
|
||||
};
|
||||
|
||||
rs485en {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <11 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs485_en#";
|
||||
};
|
||||
|
||||
rs232en {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <12 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "rs232_en#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
dig2in {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <0 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dig2_in";
|
||||
};
|
||||
|
||||
dig2out {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <1 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dig2_out#";
|
||||
};
|
||||
|
||||
dig1out {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <8 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dig1_out#";
|
||||
};
|
||||
|
||||
dig1in {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <9 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "dig1_in";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
sim1det {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <7 GPIO_ACTIVE_LOW>;
|
||||
line-name = "sim1_det#";
|
||||
};
|
||||
|
||||
sim2det {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <8 GPIO_ACTIVE_LOW>;
|
||||
line-name = "sim2_det#";
|
||||
};
|
||||
|
||||
sim2sel {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <9 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "sim2_sel";
|
||||
};
|
||||
|
||||
pci_wdis {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <12 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "pci_wdis#";
|
||||
};
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
phy-reset-gpios = <&gpio4 25 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <1>;
|
||||
|
|
|
@ -57,6 +57,10 @@
|
|||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&gsc {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
|
|
@ -27,6 +27,13 @@
|
|||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
status = "okay";
|
||||
|
||||
gsc: gsc@20 {
|
||||
compatible = "gw,gsc";
|
||||
reg = <0x20>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
eeprom@51 {
|
||||
compatible = "atmel,24c02";
|
||||
reg = <0x51>;
|
||||
|
|
|
@ -5,10 +5,118 @@
|
|||
|
||||
#include "imx8mn-venice-u-boot.dtsi"
|
||||
|
||||
&gpio1 {
|
||||
m2rst {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <13 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "m2_reset";
|
||||
};
|
||||
|
||||
m2wdis {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <15 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "m2_wdis#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
uart2en {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <8 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart2_en#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
m2gdis {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <1 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "m2_gdis#";
|
||||
};
|
||||
|
||||
m2off {
|
||||
gpio-hog;
|
||||
output-high;
|
||||
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "m2_off#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
appgpio1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <21 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "app_gpio1";
|
||||
};
|
||||
|
||||
uart1rs485 {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <23 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_rs485";
|
||||
};
|
||||
|
||||
uart1term {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <25 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_term";
|
||||
};
|
||||
|
||||
uart1half {
|
||||
gpio-hog;
|
||||
output-low;
|
||||
gpios = <26 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "uart1_half";
|
||||
};
|
||||
|
||||
appgpio2 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <27 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "app_gpio2";
|
||||
};
|
||||
|
||||
mipigpio1 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <28 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio1";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
mipigpio4 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <3 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio4";
|
||||
};
|
||||
|
||||
mipigpio3 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <4 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio3";
|
||||
};
|
||||
|
||||
mipigpio2 {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <5 GPIO_ACTIVE_HIGH>;
|
||||
line-name = "mipi_gpio2";
|
||||
};
|
||||
};
|
||||
|
||||
&fec1 {
|
||||
phy-reset-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <1>;
|
||||
phy-reset-post-delay = <1>;
|
||||
phy-reset-post-delay = <300>;
|
||||
};
|
||||
|
||||
&pinctrl_fec1 {
|
||||
|
|
|
@ -242,10 +242,14 @@
|
|||
ethphy0: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
reg = <0>;
|
||||
/* TI DP83867 props */
|
||||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||
ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||
tx-fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
|
||||
rx-fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
|
||||
/* GPY111 props */
|
||||
rx-internal-delay-ps = <2000>;
|
||||
tx-internal-delay-ps = <2500>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -94,6 +94,10 @@
|
|||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&gsc {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
|
|
@ -27,6 +27,13 @@
|
|||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
status = "okay";
|
||||
|
||||
gsc: gsc@20 {
|
||||
compatible = "gw,gsc";
|
||||
reg = <0x20>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
eeprom@51 {
|
||||
compatible = "atmel,24c02";
|
||||
reg = <0x51>;
|
||||
|
|
|
@ -99,8 +99,9 @@
|
|||
|
||||
fit {
|
||||
description = "Configuration to load ATF before U-Boot";
|
||||
#address-cells = <1>;
|
||||
fit,external-offset = <CONFIG_FIT_EXTERNAL_OFFSET>;
|
||||
fit,fdt-list = "of-list";
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
uboot {
|
||||
|
@ -129,7 +130,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
fdt {
|
||||
@fdt-SEQ {
|
||||
description = "NAME";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
|
@ -141,13 +142,13 @@
|
|||
};
|
||||
|
||||
configurations {
|
||||
default = "conf";
|
||||
default = "@config-DEFAULT-SEQ";
|
||||
|
||||
conf {
|
||||
@config-SEQ {
|
||||
description = "NAME";
|
||||
fdt = "fdt-SEQ";
|
||||
firmware = "uboot";
|
||||
loadables = "atf";
|
||||
fdt = "fdt";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
185
arch/arm/dts/imx8mp-venice-gw74xx-u-boot.dtsi
Normal file
185
arch/arm/dts/imx8mp-venice-gw74xx-u-boot.dtsi
Normal file
|
@ -0,0 +1,185 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright 2022 Gateworks Corporation
|
||||
*/
|
||||
|
||||
#include "imx8mp-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
firmware {
|
||||
optee {
|
||||
compatible = "linaro,optee-tz";
|
||||
method = "smc";
|
||||
};
|
||||
};
|
||||
|
||||
wdt-reboot {
|
||||
compatible = "wdt-reboot";
|
||||
u-boot,dm-spl;
|
||||
wdt = <&wdog1>;
|
||||
};
|
||||
};
|
||||
|
||||
&eqos {
|
||||
/delete-property/ assigned-clocks;
|
||||
/delete-property/ assigned-clock-parents;
|
||||
/delete-property/ assigned-clock-rates;
|
||||
};
|
||||
|
||||
ðphy0 {
|
||||
reset-gpios = <&gpio4 30 GPIO_ACTIVE_LOW>;
|
||||
reset-delay-us = <1000>;
|
||||
reset-post-delay-us = <300000>;
|
||||
};
|
||||
|
||||
&fec {
|
||||
phy-reset-gpios = <&gpio4 29 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <15>;
|
||||
phy-reset-post-delay = <100>;
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
u-boot,dm-spl;
|
||||
|
||||
dio0_hog {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <9 GPIO_ACTIVE_LOW>;
|
||||
line-name = "dio0";
|
||||
};
|
||||
|
||||
dio1_hog {
|
||||
gpio-hog;
|
||||
input;
|
||||
gpios = <11 GPIO_ACTIVE_LOW>;
|
||||
line-name = "dio1";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
u-boot,dm-spl;
|
||||
|
||||
pcie1_wdis_hog {
|
||||
gpio-hog;
|
||||
gpios = <17 GPIO_ACTIVE_HIGH>;
|
||||
output-high;
|
||||
line-name = "pcie1_wdis#";
|
||||
};
|
||||
|
||||
pcie2_wdis_hog {
|
||||
gpio-hog;
|
||||
gpios = <18 GPIO_ACTIVE_HIGH>;
|
||||
output-high;
|
||||
line-name = "pcie2_wdis#";
|
||||
};
|
||||
|
||||
pcie3_wdis_hog {
|
||||
gpio-hog;
|
||||
gpios = <14 GPIO_ACTIVE_HIGH>;
|
||||
output-high;
|
||||
line-name = "pcie3_wdis#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
u-boot,dm-spl;
|
||||
|
||||
m2_dis2_hog {
|
||||
gpio-hog;
|
||||
gpios = <0 GPIO_ACTIVE_LOW>;
|
||||
output-high;
|
||||
line-name = "m2_gdis#";
|
||||
};
|
||||
|
||||
m2rst_hog {
|
||||
gpio-hog;
|
||||
gpios = <6 GPIO_ACTIVE_LOW>;
|
||||
output-high;
|
||||
line-name = "m2_rst#";
|
||||
};
|
||||
|
||||
m2_off_hog {
|
||||
gpio-hog;
|
||||
gpios = <14 GPIO_ACTIVE_LOW>;
|
||||
output-high;
|
||||
line-name = "m2_off#";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
u-boot,dm-spl;
|
||||
|
||||
m2_dis1_hog {
|
||||
gpio-hog;
|
||||
gpios = <18 GPIO_ACTIVE_LOW>;
|
||||
output-high;
|
||||
line-name = "m2_wdis#";
|
||||
};
|
||||
|
||||
uart_rs485_hog {
|
||||
gpio-hog;
|
||||
gpios = <31 GPIO_ACTIVE_LOW>;
|
||||
output-low;
|
||||
line-name = "uart_rs485";
|
||||
};
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
u-boot,dm-spl;
|
||||
|
||||
uart_half_hog {
|
||||
gpio-hog;
|
||||
gpios = <0 GPIO_ACTIVE_LOW>;
|
||||
output-high;
|
||||
line-name = "uart_half";
|
||||
};
|
||||
|
||||
uart_term_hog {
|
||||
gpio-hog;
|
||||
gpios = <1 GPIO_ACTIVE_LOW>;
|
||||
output-low;
|
||||
line-name = "uart_term";
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_i2c1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_wdog {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_400M>;
|
||||
assigned-clock-rates = <400000000>;
|
||||
assigned-clocks = <&clk IMX8MP_CLK_USDHC2>;
|
||||
sd-uhs-ddr50;
|
||||
sd-uhs-sdr104;
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_400M>;
|
||||
assigned-clock-rates = <400000000>;
|
||||
assigned-clocks = <&clk IMX8MP_CLK_USDHC3>;
|
||||
mmc-hs400-1_8v;
|
||||
mmc-hs400-enhanced-strobe;
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&wdog1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
923
arch/arm/dts/imx8mp-venice-gw74xx.dts
Normal file
923
arch/arm/dts/imx8mp-venice-gw74xx.dts
Normal file
|
@ -0,0 +1,923 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright 2022 Gateworks Corporation
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/linux-event-codes.h>
|
||||
#include <dt-bindings/leds/common.h>
|
||||
|
||||
#include "imx8mp.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Gateworks Venice GW74xx i.MX8MP board";
|
||||
compatible = "gateworks,imx8mp-gw74xx", "fsl,imx8mp";
|
||||
|
||||
aliases {
|
||||
ethernet0 = &eqos;
|
||||
ethernet1 = &fec;
|
||||
ethernet2 = &lan1;
|
||||
ethernet3 = &lan2;
|
||||
ethernet4 = &lan3;
|
||||
ethernet5 = &lan4;
|
||||
ethernet6 = &lan5;
|
||||
};
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart2;
|
||||
};
|
||||
|
||||
memory@40000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000 0 0x80000000>;
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
key-0 {
|
||||
label = "user_pb";
|
||||
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
|
||||
linux,code = <BTN_0>;
|
||||
};
|
||||
|
||||
key-1 {
|
||||
label = "user_pb1x";
|
||||
linux,code = <BTN_1>;
|
||||
interrupt-parent = <&gsc>;
|
||||
interrupts = <0>;
|
||||
};
|
||||
|
||||
key-2 {
|
||||
label = "key_erased";
|
||||
linux,code = <BTN_2>;
|
||||
interrupt-parent = <&gsc>;
|
||||
interrupts = <1>;
|
||||
};
|
||||
|
||||
key-3 {
|
||||
label = "eeprom_wp";
|
||||
linux,code = <BTN_3>;
|
||||
interrupt-parent = <&gsc>;
|
||||
interrupts = <2>;
|
||||
};
|
||||
|
||||
key-4 {
|
||||
label = "tamper";
|
||||
linux,code = <BTN_4>;
|
||||
interrupt-parent = <&gsc>;
|
||||
interrupts = <5>;
|
||||
};
|
||||
|
||||
key-5 {
|
||||
label = "switch_hold";
|
||||
linux,code = <BTN_5>;
|
||||
interrupt-parent = <&gsc>;
|
||||
interrupts = <7>;
|
||||
};
|
||||
};
|
||||
|
||||
led-controller {
|
||||
compatible = "gpio-leds";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_gpio_leds>;
|
||||
|
||||
led-0 {
|
||||
function = LED_FUNCTION_HEARTBEAT;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
gpios = <&gpio2 15 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "on";
|
||||
linux,default-trigger = "heartbeat";
|
||||
};
|
||||
|
||||
led-1 {
|
||||
function = LED_FUNCTION_STATUS;
|
||||
color = <LED_COLOR_ID_RED>;
|
||||
gpios = <&gpio2 16 GPIO_ACTIVE_HIGH>;
|
||||
default-state = "off";
|
||||
};
|
||||
};
|
||||
|
||||
pps {
|
||||
compatible = "pps-gpio";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pps>;
|
||||
gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
reg_usb2_vbus: regulator-usb2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_reg_usb2>;
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "usb_usb2_vbus";
|
||||
gpio = <&gpio1 6 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
};
|
||||
|
||||
reg_can2_stby: regulator-can2-stby {
|
||||
compatible = "regulator-fixed";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_reg_can>;
|
||||
regulator-name = "can2_stby";
|
||||
gpio = <&gpio3 19 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
|
||||
reg_wifi_en: regulator-wifi-en {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_reg_wifi>;
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "wl";
|
||||
gpio = <&gpio3 9 GPIO_ACTIVE_HIGH>;
|
||||
startup-delay-us = <100>;
|
||||
enable-active-high;
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
};
|
||||
|
||||
/* off-board header */
|
||||
&ecspi2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_spi2>;
|
||||
cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&eqos {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_eqos>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-handle = <ðphy0>;
|
||||
status = "okay";
|
||||
|
||||
mdio {
|
||||
compatible = "snps,dwmac-mdio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ethphy0: ethernet-phy@0 {
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
reg = <0x0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_fec>;
|
||||
phy-mode = "rgmii-id";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
status = "okay";
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
|
||||
&flexcan2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_flexcan2>;
|
||||
xceiver-supply = <®_can2_stby>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
gpio-line-names =
|
||||
"", "", "", "", "", "", "", "",
|
||||
"", "", "dio0", "", "dio1", "", "", "",
|
||||
"", "", "", "", "", "", "", "",
|
||||
"", "", "", "", "", "", "", "";
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
gpio-line-names =
|
||||
"", "", "", "", "", "", "", "",
|
||||
"", "", "", "", "", "", "", "",
|
||||
"pcie3_wdis#", "", "", "pcie1_wdis@", "pcie2_wdis#", "", "", "",
|
||||
"", "", "", "", "", "", "", "";
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
gpio-line-names =
|
||||
"m2_gdis#", "", "", "", "", "", "", "m2_rst#",
|
||||
"", "", "", "", "", "", "", "",
|
||||
"m2_off#", "", "", "", "", "", "", "",
|
||||
"", "", "", "", "", "", "", "";
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
gpio-line-names =
|
||||
"", "", "", "", "", "", "", "",
|
||||
"", "", "", "", "", "", "", "",
|
||||
"", "", "", "", "m2_wdis#", "", "", "",
|
||||
"", "", "", "", "", "", "", "uart_rs485";
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
gpio-line-names =
|
||||
"uart_half", "uart_term", "", "", "", "", "", "",
|
||||
"", "", "", "", "", "", "", "",
|
||||
"", "", "", "", "", "", "", "",
|
||||
"", "", "", "", "", "", "", "";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
status = "okay";
|
||||
|
||||
gsc: gsc@20 {
|
||||
compatible = "gw,gsc";
|
||||
reg = <0x20>;
|
||||
pinctrl-0 = <&pinctrl_gsc>;
|
||||
interrupt-parent = <&gpio4>;
|
||||
interrupts = <20 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
adc {
|
||||
compatible = "gw,gsc-adc";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
channel@6 {
|
||||
gw,mode = <0>;
|
||||
reg = <0x06>;
|
||||
label = "temp";
|
||||
};
|
||||
|
||||
channel@8 {
|
||||
gw,mode = <1>;
|
||||
reg = <0x08>;
|
||||
label = "vdd_bat";
|
||||
};
|
||||
|
||||
channel@82 {
|
||||
gw,mode = <2>;
|
||||
reg = <0x82>;
|
||||
label = "vdd_adc1";
|
||||
gw,voltage-divider-ohms = <10000 10000>;
|
||||
};
|
||||
|
||||
channel@84 {
|
||||
gw,mode = <2>;
|
||||
reg = <0x84>;
|
||||
label = "vdd_adc2";
|
||||
gw,voltage-divider-ohms = <10000 10000>;
|
||||
};
|
||||
|
||||
channel@86 {
|
||||
gw,mode = <2>;
|
||||
reg = <0x86>;
|
||||
label = "vdd_vin";
|
||||
gw,voltage-divider-ohms = <22100 1000>;
|
||||
};
|
||||
|
||||
channel@88 {
|
||||
gw,mode = <2>;
|
||||
reg = <0x88>;
|
||||
label = "vdd_3p3";
|
||||
gw,voltage-divider-ohms = <10000 10000>;
|
||||
};
|
||||
|
||||
channel@8c {
|
||||
gw,mode = <2>;
|
||||
reg = <0x8c>;
|
||||
label = "vdd_2p5";
|
||||
gw,voltage-divider-ohms = <10000 10000>;
|
||||
};
|
||||
|
||||
channel@90 {
|
||||
gw,mode = <2>;
|
||||
reg = <0x90>;
|
||||
label = "vdd_soc";
|
||||
};
|
||||
|
||||
channel@92 {
|
||||
gw,mode = <2>;
|
||||
reg = <0x92>;
|
||||
label = "vdd_arm";
|
||||
};
|
||||
|
||||
channel@98 {
|
||||
gw,mode = <2>;
|
||||
reg = <0x98>;
|
||||
label = "vdd_1p8";
|
||||
};
|
||||
|
||||
channel@9a {
|
||||
gw,mode = <2>;
|
||||
reg = <0x9a>;
|
||||
label = "vdd_1p2";
|
||||
};
|
||||
|
||||
channel@9c {
|
||||
gw,mode = <2>;
|
||||
reg = <0x9c>;
|
||||
label = "vdd_dram";
|
||||
};
|
||||
|
||||
channel@a2 {
|
||||
gw,mode = <2>;
|
||||
reg = <0xa2>;
|
||||
label = "vdd_gsc";
|
||||
gw,voltage-divider-ohms = <10000 10000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
gpio: gpio@23 {
|
||||
compatible = "nxp,pca9555";
|
||||
reg = <0x23>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
interrupt-parent = <&gsc>;
|
||||
interrupts = <4>;
|
||||
};
|
||||
|
||||
pmic@25 {
|
||||
compatible = "nxp,pca9450c";
|
||||
reg = <0x25>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_pmic>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
|
||||
regulators {
|
||||
BUCK1 {
|
||||
regulator-name = "BUCK1";
|
||||
regulator-min-microvolt = <720000>;
|
||||
regulator-max-microvolt = <1000000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
regulator-ramp-delay = <3125>;
|
||||
};
|
||||
|
||||
BUCK2 {
|
||||
regulator-name = "BUCK2";
|
||||
regulator-min-microvolt = <720000>;
|
||||
regulator-max-microvolt = <1025000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
regulator-ramp-delay = <3125>;
|
||||
nxp,dvs-run-voltage = <950000>;
|
||||
nxp,dvs-standby-voltage = <850000>;
|
||||
};
|
||||
|
||||
BUCK4 {
|
||||
regulator-name = "BUCK4";
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3600000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
BUCK5 {
|
||||
regulator-name = "BUCK5";
|
||||
regulator-min-microvolt = <1650000>;
|
||||
regulator-max-microvolt = <1950000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
BUCK6 {
|
||||
regulator-name = "BUCK6";
|
||||
regulator-min-microvolt = <1045000>;
|
||||
regulator-max-microvolt = <1155000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
LDO1 {
|
||||
regulator-name = "LDO1";
|
||||
regulator-min-microvolt = <1650000>;
|
||||
regulator-max-microvolt = <1950000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
LDO3 {
|
||||
regulator-name = "LDO3";
|
||||
regulator-min-microvolt = <1710000>;
|
||||
regulator-max-microvolt = <1890000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
LDO5 {
|
||||
regulator-name = "LDO5";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
eeprom@50 {
|
||||
compatible = "atmel,24c02";
|
||||
reg = <0x50>;
|
||||
pagesize = <16>;
|
||||
};
|
||||
|
||||
eeprom@51 {
|
||||
compatible = "atmel,24c02";
|
||||
reg = <0x51>;
|
||||
pagesize = <16>;
|
||||
};
|
||||
|
||||
eeprom@52 {
|
||||
compatible = "atmel,24c02";
|
||||
reg = <0x52>;
|
||||
pagesize = <16>;
|
||||
};
|
||||
|
||||
eeprom@53 {
|
||||
compatible = "atmel,24c02";
|
||||
reg = <0x53>;
|
||||
pagesize = <16>;
|
||||
};
|
||||
|
||||
rtc@68 {
|
||||
compatible = "dallas,ds1672";
|
||||
reg = <0x68>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
|
||||
accelerometer@19 {
|
||||
compatible = "st,lis2de12";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_accel>;
|
||||
reg = <0x19>;
|
||||
st,drdy-int-pin = <1>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-names = "INT1";
|
||||
};
|
||||
|
||||
switch: switch@5f {
|
||||
compatible = "microchip,ksz9897";
|
||||
reg = <0x5f>;
|
||||
pinctrl-0 = <&pinctrl_ksz>;
|
||||
interrupt-parent = <&gpio4>;
|
||||
interrupts = <29 IRQ_TYPE_EDGE_FALLING>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
lan1: port@0 {
|
||||
reg = <0>;
|
||||
label = "lan1";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
phy-handle = <&sw_phy0>;
|
||||
phy-mode = "internal";
|
||||
};
|
||||
|
||||
lan2: port@1 {
|
||||
reg = <1>;
|
||||
label = "lan2";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
phy-handle = <&sw_phy1>;
|
||||
phy-mode = "internal";
|
||||
};
|
||||
|
||||
lan3: port@2 {
|
||||
reg = <2>;
|
||||
label = "lan3";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
phy-handle = <&sw_phy2>;
|
||||
phy-mode = "internal";
|
||||
};
|
||||
|
||||
lan4: port@3 {
|
||||
reg = <3>;
|
||||
label = "lan4";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
phy-handle = <&sw_phy3>;
|
||||
phy-mode = "internal";
|
||||
};
|
||||
|
||||
lan5: port@4 {
|
||||
reg = <4>;
|
||||
label = "lan5";
|
||||
local-mac-address = [00 00 00 00 00 00];
|
||||
phy-handle = <&sw_phy4>;
|
||||
phy-mode = "internal";
|
||||
};
|
||||
|
||||
port@6 {
|
||||
reg = <6>;
|
||||
label = "cpu";
|
||||
ethernet = <&fec>;
|
||||
phy-mode = "rgmii-id";
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mdios {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
mdio@0 {
|
||||
reg = <0>;
|
||||
compatible = "microchip,ksz-mdio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
sw_phy0: ethernet-phy@0 {
|
||||
reg = <0x0>;
|
||||
};
|
||||
|
||||
sw_phy1: ethernet-phy@1 {
|
||||
reg = <0x1>;
|
||||
};
|
||||
|
||||
sw_phy2: ethernet-phy@2 {
|
||||
reg = <0x2>;
|
||||
};
|
||||
|
||||
sw_phy3: ethernet-phy@3 {
|
||||
reg = <0x3>;
|
||||
};
|
||||
|
||||
sw_phy4: ethernet-phy@4 {
|
||||
reg = <0x4>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* off-board header */
|
||||
&i2c3 {
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c3>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* off-board header */
|
||||
&i2c4 {
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* GPS / off-board header */
|
||||
&uart1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* RS232 console */
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart4 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart4>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* USB1 - Type C front panel */
|
||||
&usb3_phy0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usb1>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb3_0 {
|
||||
fsl,over-current-active-low;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_dwc3_0 {
|
||||
dr_mode = "host";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* USB2 - USB3.0 Hub */
|
||||
&usb3_phy1 {
|
||||
vbus-supply = <®_usb2_vbus>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb3_1 {
|
||||
fsl,permanently-attached;
|
||||
fsl,disable-port-power-control;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb_dwc3_1 {
|
||||
dr_mode = "host";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* eMMC */
|
||||
&usdhc3 {
|
||||
assigned-clocks = <&clk IMX8MP_CLK_USDHC3>;
|
||||
assigned-clock-rates = <400000000>;
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
|
||||
pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&wdog1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_wdog>;
|
||||
fsl,ext-reset-output;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_hog>;
|
||||
|
||||
pinctrl_hog: hoggrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_GPIO1_IO09__GPIO1_IO09 0x40000041 /* DIO0 */
|
||||
MX8MP_IOMUXC_GPIO1_IO11__GPIO1_IO11 0x40000041 /* DIO1 */
|
||||
MX8MP_IOMUXC_NAND_DQS__GPIO3_IO14 0x40000041 /* M2SKT_OFF# */
|
||||
MX8MP_IOMUXC_SD2_DATA2__GPIO2_IO17 0x40000159 /* PCIE1_WDIS# */
|
||||
MX8MP_IOMUXC_SD2_DATA3__GPIO2_IO18 0x40000159 /* PCIE2_WDIS# */
|
||||
MX8MP_IOMUXC_SD2_CMD__GPIO2_IO14 0x40000159 /* PCIE3_WDIS# */
|
||||
MX8MP_IOMUXC_NAND_DATA00__GPIO3_IO06 0x40000041 /* M2SKT_RST# */
|
||||
MX8MP_IOMUXC_SAI1_TXD6__GPIO4_IO18 0x40000159 /* M2SKT_WDIS# */
|
||||
MX8MP_IOMUXC_NAND_ALE__GPIO3_IO00 0x40000159 /* M2SKT_GDIS# */
|
||||
MX8MP_IOMUXC_SAI3_TXD__GPIO5_IO01 0x40000104 /* UART_TERM */
|
||||
MX8MP_IOMUXC_SAI3_TXFS__GPIO4_IO31 0x40000104 /* UART_RS485 */
|
||||
MX8MP_IOMUXC_SAI3_TXC__GPIO5_IO00 0x40000104 /* UART_HALF */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_accel: accelgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_GPIO1_IO07__GPIO1_IO07 0x159
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_eqos: eqosgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_ENET_MDC__ENET_QOS_MDC 0x3
|
||||
MX8MP_IOMUXC_ENET_MDIO__ENET_QOS_MDIO 0x3
|
||||
MX8MP_IOMUXC_ENET_RD0__ENET_QOS_RGMII_RD0 0x91
|
||||
MX8MP_IOMUXC_ENET_RD1__ENET_QOS_RGMII_RD1 0x91
|
||||
MX8MP_IOMUXC_ENET_RD2__ENET_QOS_RGMII_RD2 0x91
|
||||
MX8MP_IOMUXC_ENET_RD3__ENET_QOS_RGMII_RD3 0x91
|
||||
MX8MP_IOMUXC_ENET_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK 0x91
|
||||
MX8MP_IOMUXC_ENET_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x91
|
||||
MX8MP_IOMUXC_ENET_TD0__ENET_QOS_RGMII_TD0 0x1f
|
||||
MX8MP_IOMUXC_ENET_TD1__ENET_QOS_RGMII_TD1 0x1f
|
||||
MX8MP_IOMUXC_ENET_TD2__ENET_QOS_RGMII_TD2 0x1f
|
||||
MX8MP_IOMUXC_ENET_TD3__ENET_QOS_RGMII_TD3 0x1f
|
||||
MX8MP_IOMUXC_ENET_TX_CTL__ENET_QOS_RGMII_TX_CTL 0x1f
|
||||
MX8MP_IOMUXC_ENET_TXC__CCM_ENET_QOS_CLOCK_GENERATE_TX_CLK 0x1f
|
||||
MX8MP_IOMUXC_SAI3_RXD__GPIO4_IO30 0x141 /* RST# */
|
||||
MX8MP_IOMUXC_SAI3_RXFS__GPIO4_IO28 0x159 /* IRQ# */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_fec: fecgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI1_RXD4__ENET1_RGMII_RD0 0x91
|
||||
MX8MP_IOMUXC_SAI1_RXD5__ENET1_RGMII_RD1 0x91
|
||||
MX8MP_IOMUXC_SAI1_RXD6__ENET1_RGMII_RD2 0x91
|
||||
MX8MP_IOMUXC_SAI1_RXD7__ENET1_RGMII_RD3 0x91
|
||||
MX8MP_IOMUXC_SAI1_TXC__ENET1_RGMII_RXC 0x91
|
||||
MX8MP_IOMUXC_SAI1_TXFS__ENET1_RGMII_RX_CTL 0x91
|
||||
MX8MP_IOMUXC_SAI1_TXD0__ENET1_RGMII_TD0 0x1f
|
||||
MX8MP_IOMUXC_SAI1_TXD1__ENET1_RGMII_TD1 0x1f
|
||||
MX8MP_IOMUXC_SAI1_TXD2__ENET1_RGMII_TD2 0x1f
|
||||
MX8MP_IOMUXC_SAI1_TXD3__ENET1_RGMII_TD3 0x1f
|
||||
MX8MP_IOMUXC_SAI1_TXD4__ENET1_RGMII_TX_CTL 0x1f
|
||||
MX8MP_IOMUXC_SAI1_TXD5__ENET1_RGMII_TXC 0x1f
|
||||
MX8MP_IOMUXC_SAI1_RXFS__ENET1_1588_EVENT0_IN 0x141
|
||||
MX8MP_IOMUXC_SAI1_RXC__ENET1_1588_EVENT0_OUT 0x141
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_flexcan2: flexcan2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI5_RXD3__CAN2_TX 0x154
|
||||
MX8MP_IOMUXC_SAI5_MCLK__CAN2_RX 0x154
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_gsc: gscgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI1_MCLK__GPIO4_IO20 0x159
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c1: i2c1grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_I2C1_SCL__I2C1_SCL 0x400001c3
|
||||
MX8MP_IOMUXC_I2C1_SDA__I2C1_SDA 0x400001c3
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_I2C2_SCL__I2C2_SCL 0x400001c3
|
||||
MX8MP_IOMUXC_I2C2_SDA__I2C2_SDA 0x400001c3
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c3: i2c3grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_I2C3_SCL__I2C3_SCL 0x400001c3
|
||||
MX8MP_IOMUXC_I2C3_SDA__I2C3_SDA 0x400001c3
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c4: i2c4grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_I2C4_SCL__I2C4_SCL 0x400001c3
|
||||
MX8MP_IOMUXC_I2C4_SDA__I2C4_SDA 0x400001c3
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_ksz: kszgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI3_RXC__GPIO4_IO29 0x159 /* IRQ# */
|
||||
MX8MP_IOMUXC_SAI3_MCLK__GPIO5_IO02 0x141 /* RST# */
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_gpio_leds: ledgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SD2_DATA0__GPIO2_IO15 0x19
|
||||
MX8MP_IOMUXC_SD2_DATA1__GPIO2_IO16 0x19
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pmic: pmicgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_NAND_DATA01__GPIO3_IO07 0x141
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_pps: ppsgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_GPIO1_IO12__GPIO1_IO12 0x141
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_reg_can: regcangrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI5_RXFS__GPIO3_IO19 0x154
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_reg_usb2: regusb2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_GPIO1_IO06__GPIO1_IO06 0x141
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_reg_wifi: regwifigrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_NAND_DATA03__GPIO3_IO09 0x119
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_sai2: sai2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SAI2_TXFS__AUDIOMIX_SAI2_TX_SYNC
|
||||
MX8MP_IOMUXC_SAI2_TXD0__AUDIOMIX_SAI2_TX_DATA00
|
||||
MX8MP_IOMUXC_SAI2_TXC__AUDIOMIX_SAI2_TX_BCLK
|
||||
MX8MP_IOMUXC_SAI2_MCLK__AUDIOMIX_SAI2_MCLK
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_spi2: spi2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_ECSPI2_SCLK__ECSPI2_SCLK 0x82
|
||||
MX8MP_IOMUXC_ECSPI2_MOSI__ECSPI2_MOSI 0x82
|
||||
MX8MP_IOMUXC_ECSPI2_MISO__ECSPI2_MISO 0x82
|
||||
MX8MP_IOMUXC_ECSPI2_SS0__GPIO5_IO13 0x140
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_UART1_RXD__UART1_DCE_RX 0x140
|
||||
MX8MP_IOMUXC_UART1_TXD__UART1_DCE_TX 0x140
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_UART2_RXD__UART2_DCE_RX 0x140
|
||||
MX8MP_IOMUXC_UART2_TXD__UART2_DCE_TX 0x140
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart4: uart4grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_UART4_RXD__UART4_DCE_RX 0x140
|
||||
MX8MP_IOMUXC_UART4_TXD__UART4_DCE_TX 0x140
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usb1: usb1grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_GPIO1_IO13__USB1_OTG_OC 0x140
|
||||
MX8MP_IOMUXC_GPIO1_IO10__USB1_OTG_ID 0x140
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc1: usdhc1grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x190
|
||||
MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d0
|
||||
MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d0
|
||||
MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d0
|
||||
MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d0
|
||||
MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3: usdhc3grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x190
|
||||
MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d0
|
||||
MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d0
|
||||
MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d0
|
||||
MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d0
|
||||
MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d0
|
||||
MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d0
|
||||
MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d0
|
||||
MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d0
|
||||
MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d0
|
||||
MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x190
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3_100mhz: usdhc3-100mhzgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x194
|
||||
MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d4
|
||||
MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d4
|
||||
MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d4
|
||||
MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d4
|
||||
MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d4
|
||||
MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d4
|
||||
MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d4
|
||||
MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d4
|
||||
MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d4
|
||||
MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x194
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3_200mhz: usdhc3-200mhzgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x196
|
||||
MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d6
|
||||
MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d6
|
||||
MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d6
|
||||
MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d6
|
||||
MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d6
|
||||
MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d6
|
||||
MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d6
|
||||
MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d6
|
||||
MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d6
|
||||
MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x196
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_wdog: wdoggrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_GPIO1_IO02__WDOG1_WDOG_B 0x166
|
||||
>;
|
||||
};
|
||||
};
|
74
arch/arm/dts/imx8mp-venice-u-boot.dtsi
Normal file
74
arch/arm/dts/imx8mp-venice-u-boot.dtsi
Normal file
|
@ -0,0 +1,74 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright 2022 Gateworks Corporation
|
||||
*/
|
||||
|
||||
#include "imx8mp-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
wdt-reboot {
|
||||
compatible = "wdt-reboot";
|
||||
wdt = <&wdog1>;
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&uart2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_uart2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc3 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_i2c1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&gsc {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_i2c2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&wdog1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
159
arch/arm/dts/imx8mp-venice.dts
Normal file
159
arch/arm/dts/imx8mp-venice.dts
Normal file
|
@ -0,0 +1,159 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright 2022 Gateworks Corporation
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "imx8mp.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Gateworks Venice i.MX8MP board";
|
||||
compatible = "gateworks,imx8mp-venice", "fsl,imx8mp";
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart2;
|
||||
};
|
||||
|
||||
memory@40000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x40000000 0 0x80000000>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
clock-frequency = <100000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c1>;
|
||||
status = "okay";
|
||||
|
||||
gsc: gsc@20 {
|
||||
compatible = "gw,gsc";
|
||||
reg = <0x20>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
eeprom@51 {
|
||||
compatible = "atmel,24c02";
|
||||
reg = <0x51>;
|
||||
pagesize = <16>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
clock-frequency = <400000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
|
||||
eeprom@52 {
|
||||
compatible = "atmel,24c32";
|
||||
reg = <0x52>;
|
||||
pagesize = <32>;
|
||||
};
|
||||
};
|
||||
|
||||
/* console */
|
||||
&uart2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart2>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/* eMMC */
|
||||
&usdhc3 {
|
||||
assigned-clocks = <&clk IMX8MP_CLK_USDHC3>;
|
||||
assigned-clock-rates = <400000000>;
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||
pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
|
||||
pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&wdog1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_wdog>;
|
||||
fsl,ext-reset-output;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
pinctrl_i2c1: i2c1grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_I2C1_SCL__I2C1_SCL 0x400001c3
|
||||
MX8MP_IOMUXC_I2C1_SDA__I2C1_SDA 0x400001c3
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_i2c2: i2c2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_I2C2_SCL__I2C2_SCL 0x400001c3
|
||||
MX8MP_IOMUXC_I2C2_SDA__I2C2_SDA 0x400001c3
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_UART2_RXD__UART2_DCE_RX 0x49
|
||||
MX8MP_IOMUXC_UART2_TXD__UART2_DCE_TX 0x49
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3: usdhc3grp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x190
|
||||
MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d0
|
||||
MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d0
|
||||
MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d0
|
||||
MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d0
|
||||
MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d0
|
||||
MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d0
|
||||
MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d0
|
||||
MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d0
|
||||
MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d0
|
||||
MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x190
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3_100mhz: usdhc3-100mhzgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x194
|
||||
MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d4
|
||||
MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d4
|
||||
MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d4
|
||||
MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d4
|
||||
MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d4
|
||||
MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d4
|
||||
MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d4
|
||||
MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d4
|
||||
MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d4
|
||||
MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x194
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc3_200mhz: usdhc3-200mhzgrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x196
|
||||
MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d6
|
||||
MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d6
|
||||
MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d6
|
||||
MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d6
|
||||
MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d6
|
||||
MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d6
|
||||
MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d6
|
||||
MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d6
|
||||
MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d6
|
||||
MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x196
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_wdog: wdoggrp {
|
||||
fsl,pins = <
|
||||
MX8MP_IOMUXC_GPIO1_IO02__WDOG1_WDOG_B 0x166
|
||||
>;
|
||||
};
|
||||
};
|
|
@ -4,6 +4,7 @@
|
|||
*/
|
||||
|
||||
#include <dt-bindings/clock/imx8mp-clock.h>
|
||||
#include <dt-bindings/power/imx8mp-power.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
@ -434,6 +435,44 @@
|
|||
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#reset-cells = <1>;
|
||||
};
|
||||
|
||||
gpc: gpc@303a0000 {
|
||||
compatible = "fsl,imx8mp-gpc";
|
||||
reg = <0x303a0000 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <3>;
|
||||
|
||||
pgc {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
pgc_pcie_phy: power-domain@1 {
|
||||
#power-domain-cells = <0>;
|
||||
reg = <IMX8MP_POWER_DOMAIN_PCIE_PHY>;
|
||||
};
|
||||
|
||||
pgc_usb1_phy: power-domain@2 {
|
||||
#power-domain-cells = <0>;
|
||||
reg = <IMX8MP_POWER_DOMAIN_USB1_PHY>;
|
||||
};
|
||||
|
||||
pgc_usb2_phy: power-domain@3 {
|
||||
#power-domain-cells = <0>;
|
||||
reg = <IMX8MP_POWER_DOMAIN_USB2_PHY>;
|
||||
};
|
||||
|
||||
pgc_hsiomix: power-domains@17 {
|
||||
#power-domain-cells = <0>;
|
||||
reg = <IMX8MP_POWER_DOMAIN_HSIOMIX>;
|
||||
clocks = <&clk IMX8MP_CLK_HSIO_AXI>,
|
||||
<&clk IMX8MP_CLK_HSIO_ROOT>;
|
||||
assigned-clocks = <&clk IMX8MP_CLK_HSIO_AXI>;
|
||||
assigned-clock-parents = <&clk IMX8MP_SYS_PLL2_500M>;
|
||||
assigned-clock-rates = <500000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
aips2: bus@30400000 {
|
||||
|
@ -842,6 +881,28 @@
|
|||
};
|
||||
};
|
||||
|
||||
aips4: bus@32c00000 {
|
||||
compatible = "fsl,aips-bus", "simple-bus";
|
||||
reg = <0x32c00000 0x400000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
hsio_blk_ctrl: blk-ctrl@32f10000 {
|
||||
compatible = "fsl,imx8mp-hsio-blk-ctrl", "syscon";
|
||||
reg = <0x32f10000 0x24>;
|
||||
clocks = <&clk IMX8MP_CLK_USB_ROOT>,
|
||||
<&clk IMX8MP_CLK_PCIE_ROOT>;
|
||||
clock-names = "usb", "pcie";
|
||||
power-domains = <&pgc_hsiomix>, <&pgc_hsiomix>,
|
||||
<&pgc_usb1_phy>, <&pgc_usb2_phy>,
|
||||
<&pgc_hsiomix>, <&pgc_pcie_phy>;
|
||||
power-domain-names = "bus", "usb", "usb-phy1",
|
||||
"usb-phy2", "pcie", "pcie-phy";
|
||||
#power-domain-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
gic: interrupt-controller@38800000 {
|
||||
compatible = "arm,gic-v3";
|
||||
reg = <0x38800000 0x10000>,
|
||||
|
@ -865,17 +926,20 @@
|
|||
clock-names = "phy";
|
||||
assigned-clocks = <&clk IMX8MP_CLK_USB_PHY_REF>;
|
||||
assigned-clock-parents = <&clk IMX8MP_CLK_24M>;
|
||||
power-domains = <&hsio_blk_ctrl IMX8MP_HSIOBLK_PD_USB_PHY1>;
|
||||
#phy-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb3_0: usb@32f10100 {
|
||||
compatible = "fsl,imx8mp-dwc3";
|
||||
reg = <0x32f10100 0x8>;
|
||||
reg = <0x32f10100 0x8>,
|
||||
<0x381f0000 0x20>;
|
||||
clocks = <&clk IMX8MP_CLK_HSIO_ROOT>,
|
||||
<&clk IMX8MP_CLK_USB_ROOT>;
|
||||
clock-names = "hsio", "suspend";
|
||||
interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
|
||||
power-domains = <&hsio_blk_ctrl IMX8MP_HSIOBLK_PD_USB>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
dma-ranges = <0x40000000 0x40000000 0xc0000000>;
|
||||
|
@ -907,16 +971,20 @@
|
|||
clock-names = "phy";
|
||||
assigned-clocks = <&clk IMX8MP_CLK_USB_PHY_REF>;
|
||||
assigned-clock-parents = <&clk IMX8MP_CLK_24M>;
|
||||
power-domains = <&hsio_blk_ctrl IMX8MP_HSIOBLK_PD_USB_PHY2>;
|
||||
#phy-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb3_1: usb@32f10108 {
|
||||
compatible = "fsl,imx8mp-dwc3";
|
||||
reg = <0x32f10108 0x8>;
|
||||
reg = <0x32f10108 0x8>,
|
||||
<0x382f0000 0x20>;
|
||||
clocks = <&clk IMX8MP_CLK_HSIO_ROOT>,
|
||||
<&clk IMX8MP_CLK_USB_ROOT>;
|
||||
clock-names = "hsio", "suspend";
|
||||
interrupts = <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>;
|
||||
power-domains = <&hsio_blk_ctrl IMX8MP_HSIOBLK_PD_USB>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
dma-ranges = <0x40000000 0x40000000 0xc0000000>;
|
||||
|
|
|
@ -2,6 +2,34 @@
|
|||
|
||||
#include "imx8mq-u-boot.dtsi"
|
||||
|
||||
&{/soc@0} {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&{/soc@0/bus@30000000} {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&{/soc@0/bus@30400000} {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&{/soc@0/bus@30800000} {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&{/soc@0/bus@32c00000} {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_uart1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&usdhc1 {
|
||||
mmc-hs400-1_8v;
|
||||
};
|
||||
|
@ -10,3 +38,7 @@
|
|||
sd-uhs-sdr104;
|
||||
sd-uhs-ddr50;
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright 2017 NXP
|
||||
*/
|
||||
|
||||
#ifndef _ASM_ARCH_IMX8M_POWER_DOMAIN_H
|
||||
#define _ASM_ARCH_IMX8M_POWER_DOMAIN_H
|
||||
|
||||
struct imx8m_power_domain_plat {
|
||||
int resource_id;
|
||||
int has_pd;
|
||||
struct power_domain pd;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -18,9 +18,6 @@
|
|||
#define is_usbotg_phy_active(void) (!(readl(USB_PHY0_BASE_ADDR + USBPHY_PWD) & \
|
||||
USBPHY_PWD_RXPWDRX))
|
||||
|
||||
int imx6_pcie_toggle_power(void);
|
||||
int imx6_pcie_toggle_reset(struct gpio_desc *gpio, bool active_high);
|
||||
|
||||
enum ldo_reg {
|
||||
LDO_ARM,
|
||||
LDO_SOC,
|
||||
|
|
|
@ -137,7 +137,7 @@ config CMD_NANDBCB
|
|||
|
||||
config FSL_MFGPROT
|
||||
bool "Support the 'mfgprot' command"
|
||||
depends on IMX_HAB && ARCH_MX7
|
||||
depends on IMX_HAB && (ARCH_MX7 || ARCH_IMX8M)
|
||||
help
|
||||
This option enables the manufacturing protection command
|
||||
which can be used has a protection feature for Manufacturing
|
||||
|
|
|
@ -38,8 +38,12 @@ ifeq ($(SOC),$(filter $(SOC),mx7))
|
|||
obj-y += cpu.o
|
||||
obj-$(CONFIG_SYS_I2C_MXC) += i2c-mxv7.o
|
||||
obj-$(CONFIG_ENV_IS_IN_MMC) += mmc_env.o
|
||||
endif
|
||||
ifeq ($(SOC),$(filter $(SOC),mx7 imx8m))
|
||||
ifneq ($(CONFIG_SPL_BUILD),y)
|
||||
obj-$(CONFIG_FSL_MFGPROT) += cmd_mfgprot.o
|
||||
endif
|
||||
endif
|
||||
ifeq ($(SOC),$(filter $(SOC),mx5 mx6 mx7))
|
||||
obj-$(CONFIG_IMX_VIDEO_SKIP) += video.o
|
||||
endif
|
||||
|
|
|
@ -12,13 +12,11 @@
|
|||
#include <linux/compiler.h>
|
||||
#include <command.h>
|
||||
#include <common.h>
|
||||
#include <environment.h>
|
||||
#include <env.h>
|
||||
#include <fsl_sec.h>
|
||||
#include <mapmem.h>
|
||||
#include <memalign.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/**
|
||||
* do_mfgprot() - Handle the "mfgprot" command-line command
|
||||
* @cmdtp: Command data struct pointer
|
||||
|
|
|
@ -54,11 +54,6 @@ config TARGET_COLIBRI_IMX8X
|
|||
select BOARD_LATE_INIT
|
||||
select IMX8QXP
|
||||
|
||||
config TARGET_APALIS_IMX8X
|
||||
bool "Support Apalis iMX8X module"
|
||||
select BOARD_LATE_INIT
|
||||
select IMX8QXP
|
||||
|
||||
config TARGET_DENEB
|
||||
bool "Support i.MX8QXP Capricorn Deneb board"
|
||||
select BOARD_LATE_INIT
|
||||
|
@ -105,7 +100,6 @@ source "board/congatec/cgtqmx8/Kconfig"
|
|||
source "board/advantech/imx8qm_rom7720_a1/Kconfig"
|
||||
source "board/toradex/apalis-imx8/Kconfig"
|
||||
source "board/toradex/colibri-imx8x/Kconfig"
|
||||
source "board/toradex/apalis-imx8x/Kconfig"
|
||||
source "board/siemens/capricorn/Kconfig"
|
||||
|
||||
config IMX_SNVS_SEC_SC
|
||||
|
|
|
@ -97,6 +97,8 @@ config TARGET_IMX8MM_VENICE
|
|||
select IMX8MM
|
||||
select SUPPORT_SPL
|
||||
select IMX8M_LPDDR4
|
||||
select GATEWORKS_SC
|
||||
select MISC
|
||||
|
||||
config TARGET_KONTRON_MX8MM
|
||||
bool "Kontron Electronics N80xx"
|
||||
|
@ -143,6 +145,8 @@ config TARGET_IMX8MN_VENICE
|
|||
select IMX8MN
|
||||
select SUPPORT_SPL
|
||||
select IMX8M_LPDDR4
|
||||
select GATEWORKS_SC
|
||||
select MISC
|
||||
|
||||
config TARGET_IMX8MP_EVK
|
||||
bool "imx8mp LPDDR4 EVK board"
|
||||
|
@ -154,6 +158,15 @@ config TARGET_IMX8MP_EVK
|
|||
select ARCH_MISC_INIT
|
||||
select SPL_CRYPTO if SPL
|
||||
|
||||
config TARGET_IMX8MP_VENICE
|
||||
bool "Support Gateworks Venice iMX8M Plus module"
|
||||
select BINMAN
|
||||
select IMX8MP
|
||||
select SUPPORT_SPL
|
||||
select IMX8M_LPDDR4
|
||||
select GATEWORKS_SC
|
||||
select MISC
|
||||
|
||||
config TARGET_PICO_IMX8MQ
|
||||
bool "Support Technexion Pico iMX8MQ"
|
||||
select BINMAN
|
||||
|
|
|
@ -331,7 +331,7 @@ phys_size_t get_effective_memsize(void)
|
|||
|
||||
ulong board_get_usable_ram_top(ulong total_size)
|
||||
{
|
||||
ulong top_addr = PHYS_SDRAM + gd->ram_size;
|
||||
ulong top_addr;
|
||||
|
||||
/*
|
||||
* Some IPs have their accessible address space restricted by
|
||||
|
@ -339,8 +339,7 @@ ulong board_get_usable_ram_top(ulong total_size)
|
|||
* space below the 4G address boundary (which is 3GiB big),
|
||||
* even when the effective available memory is bigger.
|
||||
*/
|
||||
if (top_addr > 0x80000000)
|
||||
top_addr = 0x80000000;
|
||||
top_addr = clamp_val((u64)PHYS_SDRAM + gd->ram_size, 0, 0xffffffff);
|
||||
|
||||
/*
|
||||
* rom_pointer[0] stores the TEE memory start address.
|
||||
|
|
|
@ -440,10 +440,9 @@ void mxs_set_lcdclk(u32 base_addr, u32 freq_in_khz)
|
|||
debug("PLL4 rate %ukhz\n", pll4_rate);
|
||||
|
||||
for (pfd = 12; pfd <= 35; pfd++) {
|
||||
parent_rate = pll4_rate;
|
||||
parent_rate = parent_rate * 18 / pfd;
|
||||
|
||||
for (div = 1; div <= 64; div++) {
|
||||
parent_rate = pll4_rate;
|
||||
parent_rate = parent_rate * 18 / pfd;
|
||||
parent_rate = parent_rate / div;
|
||||
|
||||
for (pcd = 0; pcd < 8; pcd++) {
|
||||
|
|
|
@ -227,6 +227,8 @@ config TARGET_GW_VENTANA
|
|||
bool "gw_ventana"
|
||||
depends on MX6QDL
|
||||
select SUPPORT_SPL
|
||||
select GATEWORKS_SC
|
||||
select MISC
|
||||
imply CMD_SATA
|
||||
imply CMD_SPL
|
||||
|
||||
|
|
|
@ -40,14 +40,8 @@ void spl_board_init(void)
|
|||
puts("Failed to find clock node. Check device tree\n");
|
||||
}
|
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1)
|
||||
#define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_ODE | PAD_CTL_PUE | PAD_CTL_PE)
|
||||
|
||||
static const iomux_v3_cfg_t uart_pads[] = {
|
||||
IMX8MN_PAD_UART4_RXD__UART4_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
IMX8MN_PAD_UART4_TXD__UART4_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
static const iomux_v3_cfg_t wdog_pads[] = {
|
||||
IMX8MN_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
|
||||
};
|
||||
|
@ -59,7 +53,6 @@ int board_early_init_f(void)
|
|||
imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
|
||||
set_wdog_reset(wdog);
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
|
||||
init_uart_clk(3);
|
||||
|
||||
if (IS_ENABLED(CONFIG_NAND_MXS)) {
|
||||
|
@ -82,14 +75,14 @@ void board_init_f(ulong dummy)
|
|||
|
||||
timer_init();
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
ret = spl_init();
|
||||
if (ret) {
|
||||
debug("spl_init() failed: %d\n", ret);
|
||||
hang();
|
||||
}
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
/* DDR initialization */
|
||||
spl_dram_init();
|
||||
|
||||
|
|
|
@ -335,11 +335,6 @@ static int iot_gate_imx8_update_ext_ied(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int board_fix_fdt(void *rw_fdt_blob)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int extension_board_scan(struct list_head *extension_list)
|
||||
{
|
||||
struct extension *extension = NULL;
|
||||
|
|
|
@ -72,14 +72,8 @@ int board_fit_config_name_match(const char *name)
|
|||
}
|
||||
#endif
|
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1)
|
||||
#define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_ODE | PAD_CTL_PUE | PAD_CTL_PE)
|
||||
|
||||
static iomux_v3_cfg_t const uart_pads[] = {
|
||||
IMX8MM_PAD_UART2_RXD_UART2_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
IMX8MM_PAD_UART2_TXD_UART2_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
static iomux_v3_cfg_t const wdog_pads[] = {
|
||||
IMX8MM_PAD_GPIO1_IO02_WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
|
||||
};
|
||||
|
@ -92,8 +86,6 @@ int board_early_init_f(void)
|
|||
|
||||
set_wdog_reset(wdog);
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -147,8 +139,6 @@ void board_init_f(ulong dummy)
|
|||
|
||||
timer_init();
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
/* Clear the BSS. */
|
||||
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||
|
||||
|
@ -166,6 +156,8 @@ void board_init_f(ulong dummy)
|
|||
hang();
|
||||
}
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
enable_tzc380();
|
||||
|
||||
power_init_board();
|
||||
|
|
|
@ -115,14 +115,8 @@ int board_fit_config_name_match(const char *name)
|
|||
}
|
||||
#endif
|
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1)
|
||||
#define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_ODE | PAD_CTL_PUE | PAD_CTL_PE)
|
||||
|
||||
static iomux_v3_cfg_t const uart_pads[] = {
|
||||
IMX8MN_PAD_UART2_RXD__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
IMX8MN_PAD_UART2_TXD__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
static iomux_v3_cfg_t const wdog_pads[] = {
|
||||
IMX8MN_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
|
||||
};
|
||||
|
@ -135,8 +129,6 @@ int board_early_init_f(void)
|
|||
|
||||
set_wdog_reset(wdog);
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -152,8 +144,6 @@ void board_init_f(ulong dummy)
|
|||
|
||||
timer_init();
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
/* Clear the BSS. */
|
||||
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||
|
||||
|
@ -163,6 +153,8 @@ void board_init_f(ulong dummy)
|
|||
hang();
|
||||
}
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
enable_tzc380();
|
||||
|
||||
/* DDR initialization */
|
||||
|
|
|
@ -20,14 +20,8 @@
|
|||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1)
|
||||
#define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_ODE | PAD_CTL_PUE | PAD_CTL_PE)
|
||||
|
||||
static iomux_v3_cfg_t const uart_pads[] = {
|
||||
MX8MP_PAD_UART2_RXD__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
MX8MP_PAD_UART2_TXD__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
static iomux_v3_cfg_t const wdog_pads[] = {
|
||||
MX8MP_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
|
||||
};
|
||||
|
@ -40,8 +34,6 @@ int board_early_init_f(void)
|
|||
|
||||
set_wdog_reset(wdog);
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,12 +17,4 @@ config CMD_EECONFIG
|
|||
help
|
||||
Provides access to EEPROM configuration on Gateworks Ventana
|
||||
|
||||
config CMD_GSC
|
||||
bool "Enable the 'gsc' command"
|
||||
help
|
||||
Provides access to the GSC configuration:
|
||||
|
||||
gsc sleep - sleeps for a period of seconds
|
||||
gsc wd - enables / disables the watchdog
|
||||
|
||||
endif
|
||||
|
|
|
@ -6,5 +6,5 @@
|
|||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y := gw_ventana.o gsc.o eeprom.o common.o
|
||||
obj-y := gw_ventana.o eeprom.o common.o
|
||||
obj-$(CONFIG_SPL_BUILD) += gw_ventana_spl.o
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <env.h>
|
||||
#include <fsl_esdhc_imx.h>
|
||||
#include <hwconfig.h>
|
||||
#include <log.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/mx6-pins.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/mach-imx/mxc_i2c.h>
|
||||
#include <env.h>
|
||||
#include <fsl_esdhc_imx.h>
|
||||
#include <hwconfig.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include "common.h"
|
||||
|
@ -1045,7 +1045,7 @@ struct ventana gpio_cfg[GW_UNKNOWN] = {
|
|||
#define SETUP_GPIO_INPUT(gpio, name) \
|
||||
gpio_request(gpio, name); \
|
||||
gpio_direction_input(gpio);
|
||||
void setup_iomux_gpio(int board, struct ventana_board_info *info)
|
||||
void setup_iomux_gpio(int board)
|
||||
{
|
||||
if (board >= GW_UNKNOWN)
|
||||
return;
|
||||
|
@ -1214,8 +1214,6 @@ static struct fsl_esdhc_cfg usdhc_cfg[2];
|
|||
|
||||
int board_mmc_init(struct bd_info *bis)
|
||||
{
|
||||
struct ventana_board_info ventana_info;
|
||||
int board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
|
||||
int ret;
|
||||
|
||||
switch (board_type) {
|
||||
|
@ -1279,13 +1277,11 @@ int board_mmc_init(struct bd_info *bis)
|
|||
|
||||
int board_mmc_getcd(struct mmc *mmc)
|
||||
{
|
||||
struct ventana_board_info ventana_info;
|
||||
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
|
||||
int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
|
||||
int gpio = gpio_cfg[board].mmc_cd;
|
||||
int gpio = gpio_cfg[board_type].mmc_cd;
|
||||
|
||||
/* Card Detect */
|
||||
switch (board) {
|
||||
switch (board_type) {
|
||||
case GW560x:
|
||||
/* emmc is always present */
|
||||
if (cfg->esdhc_base == USDHC2_BASE_ADDR)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#ifndef _GWVENTANA_COMMON_H_
|
||||
#define _GWVENTANA_COMMON_H_
|
||||
|
||||
#include "ventana_eeprom.h"
|
||||
#include "eeprom.h"
|
||||
|
||||
/* GPIO's common to all baseboards */
|
||||
#define GP_RS232_EN IMX_GPIO_NR(2, 11)
|
||||
|
@ -80,6 +80,6 @@ struct ventana {
|
|||
extern struct ventana gpio_cfg[GW_UNKNOWN];
|
||||
|
||||
/* configure gpio iomux/defaults */
|
||||
void setup_iomux_gpio(int board, struct ventana_board_info *);
|
||||
void setup_iomux_gpio(int board);
|
||||
|
||||
#endif /* #ifndef _GWVENTANA_COMMON_H_ */
|
||||
|
|
|
@ -4,23 +4,211 @@
|
|||
* Author: Tim Harvey <tharvey@gateworks.com>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include <errno.h>
|
||||
#include <common.h>
|
||||
#include <gsc.h>
|
||||
#include <hexdump.h>
|
||||
#include <i2c.h>
|
||||
#include <log.h>
|
||||
#include <malloc.h>
|
||||
#include <asm/bitops.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/uclass.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include "gsc.h"
|
||||
#include "ventana_eeprom.h"
|
||||
#include "eeprom.h"
|
||||
|
||||
/*
|
||||
* EEPROM board info struct populated by read_eeprom so that we only have to
|
||||
* read it once.
|
||||
*/
|
||||
struct ventana_board_info ventana_info;
|
||||
int board_type;
|
||||
|
||||
#if CONFIG_IS_ENABLED(DM_I2C)
|
||||
struct udevice *i2c_get_dev(int busno, int slave)
|
||||
{
|
||||
struct udevice *dev, *bus;
|
||||
int ret;
|
||||
|
||||
ret = uclass_get_device_by_seq(UCLASS_I2C, busno, &bus);
|
||||
if (ret)
|
||||
return NULL;
|
||||
ret = dm_i2c_probe(bus, slave, 0, &dev);
|
||||
if (ret)
|
||||
return NULL;
|
||||
|
||||
return dev;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The Gateworks System Controller will fail to ACK a master transaction if
|
||||
* it is busy, which can occur during its 1HZ timer tick while reading ADC's.
|
||||
* When this does occur, it will never be busy long enough to fail more than
|
||||
* 2 back-to-back transfers. Thus we wrap i2c_read and i2c_write with
|
||||
* 3 retries.
|
||||
*/
|
||||
int gsc_i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len)
|
||||
{
|
||||
int retry = 3;
|
||||
int n = 0;
|
||||
int ret;
|
||||
#if CONFIG_IS_ENABLED(DM_I2C)
|
||||
struct udevice *dev;
|
||||
|
||||
dev = i2c_get_dev(BOARD_EEPROM_BUSNO, chip);
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
ret = i2c_set_chip_offset_len(dev, alen);
|
||||
if (ret) {
|
||||
puts("EEPROM: Failed to set alen\n");
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
i2c_set_bus_num(BOARD_EEPROM_BUSNO);
|
||||
#endif
|
||||
|
||||
while (n++ < retry) {
|
||||
#if CONFIG_IS_ENABLED(DM_I2C)
|
||||
ret = dm_i2c_read(dev, addr, buf, len);
|
||||
#else
|
||||
ret = i2c_read(chip, addr, alen, buf, len);
|
||||
#endif
|
||||
if (!ret)
|
||||
break;
|
||||
debug("%s: 0x%02x 0x%02x retry%d: %d\n", __func__, chip, addr,
|
||||
n, ret);
|
||||
if (ret != -ENODEV)
|
||||
break;
|
||||
mdelay(10);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int gsc_i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len)
|
||||
{
|
||||
int retry = 3;
|
||||
int n = 0;
|
||||
int ret;
|
||||
#if CONFIG_IS_ENABLED(DM_I2C)
|
||||
struct udevice *dev;
|
||||
|
||||
dev = i2c_get_dev(BOARD_EEPROM_BUSNO, chip);
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
ret = i2c_set_chip_offset_len(dev, alen);
|
||||
if (ret) {
|
||||
puts("EEPROM: Failed to set alen\n");
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
while (n++ < retry) {
|
||||
#if CONFIG_IS_ENABLED(DM_I2C)
|
||||
ret = dm_i2c_write(dev, addr, buf, len);
|
||||
#else
|
||||
ret = i2c_write(chip, addr, alen, buf, len);
|
||||
#endif
|
||||
if (!ret)
|
||||
break;
|
||||
debug("%s: 0x%02x 0x%02x retry%d: %d\n", __func__, chip, addr,
|
||||
n, ret);
|
||||
if (ret != -ENODEV)
|
||||
break;
|
||||
mdelay(10);
|
||||
}
|
||||
mdelay(100);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* determine BOM revision from model */
|
||||
int get_bom_rev(const char *str)
|
||||
{
|
||||
int rev_bom = 0;
|
||||
int i;
|
||||
|
||||
for (i = strlen(str) - 1; i > 0; i--) {
|
||||
if (str[i] == '-')
|
||||
break;
|
||||
if (str[i] >= '1' && str[i] <= '9') {
|
||||
rev_bom = str[i] - '0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rev_bom;
|
||||
}
|
||||
|
||||
/* determine PCB revision from model */
|
||||
char get_pcb_rev(const char *str)
|
||||
{
|
||||
char rev_pcb = 'A';
|
||||
int i;
|
||||
|
||||
for (i = strlen(str) - 1; i > 0; i--) {
|
||||
if (str[i] == '-')
|
||||
break;
|
||||
if (str[i] >= 'A') {
|
||||
rev_pcb = str[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rev_pcb;
|
||||
}
|
||||
|
||||
/*
|
||||
* get dt name based on model and detail level:
|
||||
*/
|
||||
const char *gsc_get_dtb_name(int level, char *buf, int sz)
|
||||
{
|
||||
const char *model = (const char *)ventana_info.model;
|
||||
const char *pre = is_mx6dq() ? "imx6q-" : "imx6dl-";
|
||||
int modelno, rev_pcb, rev_bom;
|
||||
|
||||
/* a few board models are dt equivalents to other models */
|
||||
if (strncasecmp(model, "gw5906", 6) == 0)
|
||||
model = "gw552x-d";
|
||||
else if (strncasecmp(model, "gw5908", 6) == 0)
|
||||
model = "gw53xx-f";
|
||||
else if (strncasecmp(model, "gw5905", 6) == 0)
|
||||
model = "gw5904-a";
|
||||
|
||||
modelno = ((model[2] - '0') * 1000)
|
||||
+ ((model[3] - '0') * 100)
|
||||
+ ((model[4] - '0') * 10)
|
||||
+ (model[5] - '0');
|
||||
rev_pcb = tolower(get_pcb_rev(model));
|
||||
rev_bom = get_bom_rev(model);
|
||||
|
||||
/* compare model/rev/bom in order of most specific to least */
|
||||
snprintf(buf, sz, "%s%04d", pre, modelno);
|
||||
switch (level) {
|
||||
case 0: /* full model first (ie gw5400-a1) */
|
||||
if (rev_bom) {
|
||||
snprintf(buf, sz, "%sgw%04d-%c%d", pre, modelno, rev_pcb, rev_bom);
|
||||
break;
|
||||
}
|
||||
fallthrough;
|
||||
case 1: /* don't care about bom rev (ie gw5400-a) */
|
||||
snprintf(buf, sz, "%sgw%04d-%c", pre, modelno, rev_pcb);
|
||||
break;
|
||||
case 2: /* don't care about the pcb rev (ie gw5400) */
|
||||
snprintf(buf, sz, "%sgw%04d", pre, modelno);
|
||||
break;
|
||||
case 3: /* look for generic model (ie gw540x) */
|
||||
snprintf(buf, sz, "%sgw%03dx", pre, modelno / 10);
|
||||
break;
|
||||
case 4: /* look for more generic model (ie gw54xx) */
|
||||
snprintf(buf, sz, "%sgw%02dxx", pre, modelno / 100);
|
||||
break;
|
||||
default: /* give up */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
/* read ventana EEPROM, check for validity, and return baseboard type */
|
||||
int
|
||||
read_eeprom(int bus, struct ventana_board_info *info)
|
||||
read_eeprom(struct ventana_board_info *info)
|
||||
{
|
||||
int i;
|
||||
int chksum;
|
||||
|
@ -30,29 +218,8 @@ read_eeprom(int bus, struct ventana_board_info *info)
|
|||
|
||||
memset(info, 0, sizeof(*info));
|
||||
|
||||
/*
|
||||
* On a board with a missing/depleted backup battery for GSC, the
|
||||
* board may be ready to probe the GSC before its firmware is
|
||||
* running. We will wait here indefinately for the GSC/EEPROM.
|
||||
*/
|
||||
#if CONFIG_IS_ENABLED(DM_I2C)
|
||||
while (1) {
|
||||
if (i2c_get_dev(bus, GSC_EEPROM_ADDR))
|
||||
break;
|
||||
mdelay(1);
|
||||
}
|
||||
#else
|
||||
while (1) {
|
||||
if (0 == i2c_set_bus_num(bus) &&
|
||||
0 == i2c_probe(GSC_EEPROM_ADDR))
|
||||
break;
|
||||
mdelay(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* read eeprom config section */
|
||||
mdelay(10);
|
||||
if (gsc_i2c_read(GSC_EEPROM_ADDR, 0x00, 1, buf, sizeof(*info))) {
|
||||
if (gsc_i2c_read(BOARD_EEPROM_ADDR, 0x00, 1, buf, sizeof(*info))) {
|
||||
puts("EEPROM: Failed to read EEPROM\n");
|
||||
return GW_UNKNOWN;
|
||||
}
|
||||
|
@ -219,14 +386,14 @@ static int do_econfig(struct cmd_tbl *cmdtp, int flag, int argc,
|
|||
info->chksum[1] = chksum & 0xff;
|
||||
|
||||
/* write new config data */
|
||||
if (gsc_i2c_write(GSC_EEPROM_ADDR, info->config - (u8 *)info,
|
||||
if (gsc_i2c_write(BOARD_EEPROM_ADDR, info->config - (u8 *)info,
|
||||
1, econfig_bytes, sizeof(econfig_bytes))) {
|
||||
printf("EEPROM: Failed updating config\n");
|
||||
return CMD_RET_FAILURE;
|
||||
}
|
||||
|
||||
/* write new config data */
|
||||
if (gsc_i2c_write(GSC_EEPROM_ADDR, info->chksum - (u8 *)info,
|
||||
if (gsc_i2c_write(BOARD_EEPROM_ADDR, info->chksum - (u8 *)info,
|
||||
1, info->chksum, 2)) {
|
||||
printf("EEPROM: Failed updating checksum\n");
|
||||
return CMD_RET_FAILURE;
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
#ifndef _VENTANA_EEPROM_
|
||||
#define _VENTANA_EEPROM_
|
||||
|
||||
#define BOARD_EEPROM_BUSNO 0
|
||||
#define BOARD_EEPROM_ADDR 0x51
|
||||
|
||||
struct ventana_board_info {
|
||||
u8 mac0[6]; /* 0x00: MAC1 */
|
||||
u8 mac1[6]; /* 0x06: MAC2 */
|
||||
|
@ -137,7 +140,18 @@ struct ventana_eeprom_config {
|
|||
|
||||
extern struct ventana_eeprom_config econfig[];
|
||||
extern struct ventana_board_info ventana_info;
|
||||
extern int board_type;
|
||||
|
||||
int read_eeprom(int bus, struct ventana_board_info *);
|
||||
int read_eeprom(struct ventana_board_info *info);
|
||||
|
||||
/*
|
||||
* I2C transactions to the GSC are done via these functions which
|
||||
* perform retries in the case of a busy GSC NAK'ing the transaction
|
||||
*/
|
||||
int gsc_i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len);
|
||||
int gsc_i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len);
|
||||
const char *gsc_get_dtb_name(int level, char *buf, int sz);
|
||||
struct udevice *i2c_get_dev(int busno, int slave);
|
||||
const char *eeprom_get_model(void);
|
||||
|
||||
#endif
|
|
@ -1,72 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright (C) 2013 Gateworks Corporation
|
||||
*
|
||||
* Author: Tim Harvey <tharvey@gateworks.com>
|
||||
*/
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/* i2c slave addresses */
|
||||
#define GSC_SC_ADDR 0x20
|
||||
#define GSC_RTC_ADDR 0x68
|
||||
#define GSC_HWMON_ADDR 0x29
|
||||
#define GSC_EEPROM_ADDR 0x51
|
||||
|
||||
/* System Controller registers */
|
||||
enum {
|
||||
GSC_SC_CTRL0 = 0x00,
|
||||
GSC_SC_CTRL1 = 0x01,
|
||||
GSC_SC_STATUS = 0x0a,
|
||||
GSC_SC_FWCRC = 0x0c,
|
||||
GSC_SC_FWVER = 0x0e,
|
||||
};
|
||||
|
||||
/* System Controller Control1 bits */
|
||||
enum {
|
||||
GSC_SC_CTRL1_WDTIME = 4, /* 1 = 60s timeout, 0 = 30s timeout */
|
||||
GSC_SC_CTRL1_WDEN = 5, /* 1 = enable, 0 = disable */
|
||||
GSC_SC_CTRL1_WDDIS = 7, /* 1 = disable boot watchdog */
|
||||
};
|
||||
|
||||
/* System Controller Interrupt bits */
|
||||
enum {
|
||||
GSC_SC_IRQ_PB = 0, /* Pushbutton switch */
|
||||
GSC_SC_IRQ_SECURE = 1, /* Secure Key erase operation complete */
|
||||
GSC_SC_IRQ_EEPROM_WP = 2, /* EEPROM write violation */
|
||||
GSC_SC_IRQ_GPIO = 4, /* GPIO change */
|
||||
GSC_SC_IRQ_TAMPER = 5, /* Tamper detect */
|
||||
GSC_SC_IRQ_WATCHDOG = 6, /* Watchdog trip */
|
||||
GSC_SC_IRQ_PBLONG = 7, /* Pushbutton long hold */
|
||||
};
|
||||
|
||||
/* Hardware Monitor registers */
|
||||
enum {
|
||||
GSC_HWMON_TEMP = 0x00,
|
||||
GSC_HWMON_VIN = 0x02,
|
||||
GSC_HWMON_VDD_3P3 = 0x05,
|
||||
GSC_HWMON_VBATT = 0x08,
|
||||
GSC_HWMON_VDD_5P0 = 0x0b,
|
||||
GSC_HWMON_VDD_CORE = 0x0e,
|
||||
GSC_HWMON_VDD_SOC = 0x11,
|
||||
GSC_HWMON_VDD_HIGH = 0x14,
|
||||
GSC_HWMON_VDD_DDR = 0x17,
|
||||
GSC_HWMON_VDD_EXT = 0x1a,
|
||||
GSC_HWMON_VDD_1P8 = 0x1d,
|
||||
GSC_HWMON_VDD_IO2 = 0x20,
|
||||
GSC_HWMON_VDD_2P5 = 0x23,
|
||||
GSC_HWMON_VDD_IO3 = 0x26,
|
||||
GSC_HWMON_VDD_IO4 = 0x29,
|
||||
};
|
||||
|
||||
/*
|
||||
* I2C transactions to the GSC are done via these functions which
|
||||
* perform retries in the case of a busy GSC NAK'ing the transaction
|
||||
*/
|
||||
int gsc_i2c_read(uchar chip, uint addr, int alen, uchar *buf, int len);
|
||||
int gsc_i2c_write(uchar chip, uint addr, int alen, uchar *buf, int len);
|
||||
int gsc_info(int verbose);
|
||||
int gsc_boot_wd_disable(void);
|
||||
const char *gsc_get_dtb_name(int level, char *buf, int sz);
|
||||
struct udevice *i2c_get_dev(int busno, int slave);
|
||||
#endif
|
|
@ -5,40 +5,29 @@
|
|||
* Author: Tim Harvey <tharvey@gateworks.com>
|
||||
*/
|
||||
|
||||
#include <command.h>
|
||||
#include <common.h>
|
||||
#include <fdt_support.h>
|
||||
#include <gsc.h>
|
||||
#include <hwconfig.h>
|
||||
#include <i2c.h>
|
||||
#include <miiphy.h>
|
||||
#include <mtd_node.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/mx6-pins.h>
|
||||
#include <asm/arch/mxc_hdmi.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/mach-imx/boot_mode.h>
|
||||
#include <asm/mach-imx/video.h>
|
||||
#include <asm/setup.h>
|
||||
#include <env.h>
|
||||
#include <hwconfig.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <miiphy.h>
|
||||
#include <mtd_node.h>
|
||||
#include <linux/delay.h>
|
||||
#include <power/pmic.h>
|
||||
#include <fdt_support.h>
|
||||
#include <jffs2/load_kernel.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include "gsc.h"
|
||||
#include "common.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
|
||||
/*
|
||||
* EEPROM board info struct populated by read_eeprom so that we only have to
|
||||
* read it once.
|
||||
*/
|
||||
struct ventana_board_info ventana_info;
|
||||
static int board_type;
|
||||
|
||||
/* configure eth0 PHY board-specific LED behavior */
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
{
|
||||
|
@ -482,9 +471,12 @@ int board_init(void)
|
|||
gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
|
||||
|
||||
/* read Gateworks EEPROM into global struct (used later) */
|
||||
board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
|
||||
board_type = read_eeprom(&ventana_info);
|
||||
|
||||
setup_iomux_gpio(board_type, &ventana_info);
|
||||
setup_iomux_gpio(board_type);
|
||||
|
||||
/* show GSC details */
|
||||
run_command("gsc", 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -517,7 +509,6 @@ int board_fit_config_name_match(const char *name)
|
|||
int checkboard(void)
|
||||
{
|
||||
struct ventana_board_info *info = &ventana_info;
|
||||
unsigned char buf[4];
|
||||
const char *p;
|
||||
int quiet; /* Quiet or minimal output mode */
|
||||
|
||||
|
@ -541,15 +532,6 @@ int checkboard(void)
|
|||
if (quiet)
|
||||
return 0;
|
||||
|
||||
/* Display GSC firmware revision/CRC/status */
|
||||
gsc_info(0);
|
||||
|
||||
/* Display RTC */
|
||||
if (!gsc_i2c_read(GSC_RTC_ADDR, 0x00, 1, buf, 4)) {
|
||||
printf("RTC: %d\n",
|
||||
buf[0] | buf[1]<<8 | buf[2]<<16 | buf[3]<<24);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -6,26 +6,22 @@
|
|||
|
||||
#include <common.h>
|
||||
#include <env.h>
|
||||
#include <gsc.h>
|
||||
#include <hang.h>
|
||||
#include <i2c.h>
|
||||
#include <init.h>
|
||||
#include <log.h>
|
||||
#include <asm/io.h>
|
||||
#include <spl.h>
|
||||
#include <asm/arch/crm_regs.h>
|
||||
#include <asm/arch/mx6-ddr.h>
|
||||
#include <asm/arch/mx6-pins.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/mach-imx/boot_mode.h>
|
||||
#include <asm/mach-imx/iomux-v3.h>
|
||||
#include <asm/mach-imx/mxc_i2c.h>
|
||||
#include <env.h>
|
||||
#include <i2c.h>
|
||||
#include <spl.h>
|
||||
#include <power/pmic.h>
|
||||
#include <power/ltc3676_pmic.h>
|
||||
#include <power/pfuze100_pmic.h>
|
||||
#include <linux/delay.h>
|
||||
#include <power/mp5416.h>
|
||||
#include <power/pmic.h>
|
||||
#include <power/pfuze100_pmic.h>
|
||||
#include <power/ltc3676_pmic.h>
|
||||
|
||||
#include "gsc.h"
|
||||
#include "common.h"
|
||||
|
||||
#define RTT_NOM_120OHM /* use 120ohm Rtt_nom vs 60ohm (lower power) */
|
||||
|
@ -778,8 +774,6 @@ static void setup_ventana_i2c(int i2c)
|
|||
void setup_pmic(void)
|
||||
{
|
||||
struct pmic *p;
|
||||
struct ventana_board_info ventana_info;
|
||||
int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
|
||||
const int i2c_pmic = 1;
|
||||
u32 reg;
|
||||
char rev;
|
||||
|
@ -817,7 +811,7 @@ void setup_pmic(void)
|
|||
reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT));
|
||||
pmic_reg_write(p, PFUZE100_SWBSTCON1, reg);
|
||||
|
||||
if (board == GW54xx && (rev == 'G')) {
|
||||
if (board_type == GW54xx && (rev == 'G')) {
|
||||
/* Disable VGEN5 */
|
||||
pmic_reg_write(p, PFUZE100_VGEN5VOL, 0);
|
||||
|
||||
|
@ -873,7 +867,7 @@ void setup_pmic(void)
|
|||
* is a bit shy of the Vmin of 1350mV in the datasheet
|
||||
* for LDO enabled mode but is as high as we can go.
|
||||
*/
|
||||
switch (board) {
|
||||
switch (board_type) {
|
||||
case GW560x:
|
||||
/* mask PGOOD during SW3 transition */
|
||||
pmic_reg_write(p, LTC3676_DVB3B,
|
||||
|
@ -931,7 +925,7 @@ void setup_pmic(void)
|
|||
/* configure MP5416 PMIC */
|
||||
else if (!i2c_probe(0x69)) {
|
||||
puts("PMIC: MP5416\n");
|
||||
switch (board) {
|
||||
switch (board_type) {
|
||||
case GW5910:
|
||||
/* SW1: VDD_ARM 1.2V -> (1.275 to 1.475) */
|
||||
reg = MP5416_VSET_EN | MP5416_VSET_SW1_SVAL(1475000);
|
||||
|
@ -974,11 +968,23 @@ void board_init_f(ulong dummy)
|
|||
/* UART clocks enabled and gd valid - init serial console */
|
||||
preloader_console_init();
|
||||
|
||||
/*
|
||||
* On a board with a missing/depleted backup battery for GSC, the
|
||||
* board may be ready to probe the GSC before its firmware is
|
||||
* running. We will wait here indefinately for the GSC/EEPROM.
|
||||
*/
|
||||
while (1) {
|
||||
if (!i2c_set_bus_num(BOARD_EEPROM_BUSNO) &&
|
||||
!i2c_probe(BOARD_EEPROM_ADDR))
|
||||
break;
|
||||
mdelay(1);
|
||||
}
|
||||
|
||||
/* read/validate EEPROM info to determine board model and SDRAM cfg */
|
||||
board_model = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
|
||||
board_model = read_eeprom(&ventana_info);
|
||||
|
||||
/* configure model-specific gpio */
|
||||
setup_iomux_gpio(board_model, &ventana_info);
|
||||
setup_iomux_gpio(board_model);
|
||||
|
||||
/* provide some some default: 32bit 128MB */
|
||||
if (GW_UNKNOWN == board_model)
|
||||
|
@ -1006,7 +1012,6 @@ void board_boot_order(u32 *spl_boot_list)
|
|||
|
||||
/* called from board_init_r after gd setup if CONFIG_SPL_BOARD_INIT defined */
|
||||
/* its our chance to print info about boot device */
|
||||
static int board_type;
|
||||
void spl_board_init(void)
|
||||
{
|
||||
u32 boot_device;
|
||||
|
@ -1015,7 +1020,7 @@ void spl_board_init(void)
|
|||
boot_device = spl_boot_device();
|
||||
|
||||
/* read eeprom again now that we have gd */
|
||||
board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
|
||||
board_type = read_eeprom(&ventana_info);
|
||||
if (board_type == GW_UNKNOWN)
|
||||
hang();
|
||||
|
||||
|
|
|
@ -27,3 +27,18 @@ config SYS_CONFIG_NAME
|
|||
config IMX_CONFIG
|
||||
default "board/gateworks/venice/imximage-8mn-lpddr4.cfg"
|
||||
endif
|
||||
|
||||
if TARGET_IMX8MP_VENICE
|
||||
|
||||
config SYS_BOARD
|
||||
default "venice"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "gateworks"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "imx8mp_venice"
|
||||
|
||||
config IMX_CONFIG
|
||||
default "board/gateworks/venice/imximage-8mp-lpddr4.cfg"
|
||||
endif
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += venice.o gsc.o
|
||||
obj-y += venice.o eeprom.o
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
obj-y += spl.o
|
||||
|
@ -14,4 +14,7 @@ endif
|
|||
ifdef CONFIG_IMX8MN
|
||||
obj-$(CONFIG_IMX8M_LPDDR4) += lpddr4_timing_imx8mn.o
|
||||
endif
|
||||
ifdef CONFIG_IMX8MP
|
||||
obj-$(CONFIG_IMX8M_LPDDR4) += lpddr4_timing_imx8mp.o
|
||||
endif
|
||||
endif
|
||||
|
|
363
board/gateworks/venice/eeprom.c
Normal file
363
board/gateworks/venice/eeprom.c
Normal file
|
@ -0,0 +1,363 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2021 Gateworks Corporation
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <gsc.h>
|
||||
#include <hexdump.h>
|
||||
#include <i2c.h>
|
||||
#include <dm/uclass.h>
|
||||
|
||||
#include "eeprom.h"
|
||||
|
||||
/* I2C */
|
||||
#define SOM_EEPROM_BUSNO 0
|
||||
#define SOM_EEPROM_ADDR 0x51
|
||||
#define BASEBOARD_EEPROM_BUSNO 1
|
||||
#define BASEBOARD_EEPROM_ADDR 0x52
|
||||
|
||||
struct venice_board_info som_info;
|
||||
struct venice_board_info base_info;
|
||||
char venice_model[32];
|
||||
u32 venice_serial;
|
||||
|
||||
/* return a mac address from EEPROM info */
|
||||
int eeprom_getmac(int index, uint8_t *address)
|
||||
{
|
||||
int i, j;
|
||||
u32 maclow, machigh;
|
||||
u64 mac;
|
||||
|
||||
j = 0;
|
||||
if (som_info.macno) {
|
||||
maclow = som_info.mac[5];
|
||||
maclow |= som_info.mac[4] << 8;
|
||||
maclow |= som_info.mac[3] << 16;
|
||||
maclow |= som_info.mac[2] << 24;
|
||||
machigh = som_info.mac[1];
|
||||
machigh |= som_info.mac[0] << 8;
|
||||
mac = machigh;
|
||||
mac <<= 32;
|
||||
mac |= maclow;
|
||||
for (i = 0; i < som_info.macno; i++, j++) {
|
||||
if (index == j)
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
maclow = base_info.mac[5];
|
||||
maclow |= base_info.mac[4] << 8;
|
||||
maclow |= base_info.mac[3] << 16;
|
||||
maclow |= base_info.mac[2] << 24;
|
||||
machigh = base_info.mac[1];
|
||||
machigh |= base_info.mac[0] << 8;
|
||||
mac = machigh;
|
||||
mac <<= 32;
|
||||
mac |= maclow;
|
||||
for (i = 0; i < base_info.macno; i++, j++) {
|
||||
if (index == j)
|
||||
goto out;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
|
||||
out:
|
||||
mac += i;
|
||||
address[0] = (mac >> 40) & 0xff;
|
||||
address[1] = (mac >> 32) & 0xff;
|
||||
address[2] = (mac >> 24) & 0xff;
|
||||
address[3] = (mac >> 16) & 0xff;
|
||||
address[4] = (mac >> 8) & 0xff;
|
||||
address[5] = (mac >> 0) & 0xff;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int eeprom_read(int busno, int slave, int alen, struct venice_board_info *info)
|
||||
{
|
||||
int i;
|
||||
int chksum;
|
||||
unsigned char *buf = (unsigned char *)info;
|
||||
struct udevice *dev, *bus;
|
||||
int ret;
|
||||
|
||||
/* probe device */
|
||||
ret = uclass_get_device_by_seq(UCLASS_I2C, busno, &bus);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = dm_i2c_probe(bus, slave, 0, &dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* read eeprom config section */
|
||||
memset(info, 0, sizeof(*info));
|
||||
ret = i2c_set_chip_offset_len(dev, alen);
|
||||
if (ret) {
|
||||
puts("EEPROM: Failed to set alen\n");
|
||||
return ret;
|
||||
}
|
||||
ret = dm_i2c_read(dev, 0x00, buf, sizeof(*info));
|
||||
if (ret) {
|
||||
if (slave == SOM_EEPROM_ADDR)
|
||||
printf("EEPROM: Failed to read EEPROM\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* validate checksum */
|
||||
for (chksum = 0, i = 0; i < (int)sizeof(*info) - 2; i++)
|
||||
chksum += buf[i];
|
||||
if ((info->chksum[0] != chksum >> 8) ||
|
||||
(info->chksum[1] != (chksum & 0xff))) {
|
||||
printf("EEPROM: I2C%d@0x%02x: Invalid Checksum\n", busno, slave);
|
||||
print_hex_dump_bytes("", DUMP_PREFIX_NONE, buf, sizeof(*info));
|
||||
memset(info, 0, sizeof(*info));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* sanity check valid model */
|
||||
if (info->model[0] != 'G' || info->model[1] != 'W') {
|
||||
printf("EEPROM: I2C%d@0x%02x: Invalid Model in EEPROM\n", busno, slave);
|
||||
print_hex_dump_bytes("", DUMP_PREFIX_NONE, buf, sizeof(*info));
|
||||
memset(info, 0, sizeof(*info));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* determine BOM revision from model */
|
||||
int get_bom_rev(const char *str)
|
||||
{
|
||||
int rev_bom = 0;
|
||||
int i;
|
||||
|
||||
for (i = strlen(str) - 1; i > 0; i--) {
|
||||
if (str[i] == '-')
|
||||
break;
|
||||
if (str[i] >= '1' && str[i] <= '9') {
|
||||
rev_bom = str[i] - '0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rev_bom;
|
||||
}
|
||||
|
||||
/* determine PCB revision from model */
|
||||
char get_pcb_rev(const char *str)
|
||||
{
|
||||
char rev_pcb = 'A';
|
||||
int i;
|
||||
|
||||
for (i = strlen(str) - 1; i > 0; i--) {
|
||||
if (str[i] == '-')
|
||||
break;
|
||||
if (str[i] >= 'A') {
|
||||
rev_pcb = str[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rev_pcb;
|
||||
}
|
||||
|
||||
/*
|
||||
* get dt name based on model and detail level:
|
||||
*
|
||||
* For boards that are a combination of a SoM plus a Baseboard:
|
||||
* Venice SoM part numbers are GW70xx where xx is:
|
||||
* 7000-7019: same PCB with som dt of '0x'
|
||||
* 7020-7039: same PCB with som dt of '2x'
|
||||
* 7040-7059: same PCB with som dt of '4x'
|
||||
* 7060-7079: same PCB with som dt of '6x'
|
||||
* 7080-7099: same PCB with som dt of '8x'
|
||||
* Venice Baseboard part numbers are GW7xxx where xxx is:
|
||||
* 7100-7199: same PCB with base dt of '71xx'
|
||||
* 7200-7299: same PCB with base dt of '72xx'
|
||||
* 7300-7399: same PCB with base dt of '73xx'
|
||||
* 7400-7499: same PCB with base dt of '74xx'
|
||||
* 7500-7599: same PCB with base dt of '75xx'
|
||||
* 7600-7699: same PCB with base dt of '76xx'
|
||||
* 7700-7799: same PCB with base dt of '77xx'
|
||||
* 7800-7899: same PCB with base dt of '78xx'
|
||||
* DT name is comprised of:
|
||||
* gw<base dt>-<som dt>-[base-pcb-rev][base-bom-rev][som-pcb-rev][som-bom-rev]
|
||||
*
|
||||
* For board models from 7900-7999 each PCB is unique with its own dt:
|
||||
* DT name is comprised:
|
||||
* gw<model>-[pcb-rev][bom-rev]
|
||||
*
|
||||
*/
|
||||
#define snprintfcat(dest, sz, fmt, ...) \
|
||||
snprintf((dest) + strlen(dest), (sz) - strlen(dest), fmt, ##__VA_ARGS__)
|
||||
const char *eeprom_get_dtb_name(int level, char *buf, int sz)
|
||||
{
|
||||
#ifdef CONFIG_IMX8MM
|
||||
const char *pre = "imx8mm-venice-gw";
|
||||
#elif CONFIG_IMX8MN
|
||||
const char *pre = "imx8mn-venice-gw";
|
||||
#elif CONFIG_IMX8MP
|
||||
const char *pre = "imx8mp-venice-gw";
|
||||
#endif
|
||||
int model, rev_pcb, rev_bom;
|
||||
|
||||
model = ((som_info.model[2] - '0') * 1000)
|
||||
+ ((som_info.model[3] - '0') * 100)
|
||||
+ ((som_info.model[4] - '0') * 10)
|
||||
+ (som_info.model[5] - '0');
|
||||
rev_pcb = tolower(get_pcb_rev(som_info.model));
|
||||
rev_bom = get_bom_rev(som_info.model);
|
||||
|
||||
/* som + baseboard*/
|
||||
if (base_info.model[0]) {
|
||||
/* baseboard id: 7100-7199->71; 7200-7299->72; etc */
|
||||
int base = ((base_info.model[2] - '0') * 10) + (base_info.model[3] - '0');
|
||||
/* som id: 7000-7019->1; 7020-7039->2; etc */
|
||||
int som = ((model % 100) / 20) * 2;
|
||||
int rev_base_pcb = tolower(get_pcb_rev(base_info.model));
|
||||
int rev_base_bom = get_bom_rev(base_info.model);
|
||||
|
||||
snprintf(buf, sz, "%s%2dxx-%dx", pre, base, som);
|
||||
switch (level) {
|
||||
case 0: /* full model (ie gw73xx-0x-a1a1) */
|
||||
if (rev_base_bom)
|
||||
snprintfcat(buf, sz, "-%c%d", rev_base_pcb, rev_base_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "-%c", rev_base_pcb);
|
||||
if (rev_bom)
|
||||
snprintfcat(buf, sz, "%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "%c", rev_pcb);
|
||||
break;
|
||||
case 1: /* don't care about SoM revision */
|
||||
if (rev_base_bom)
|
||||
snprintfcat(buf, sz, "-%c%d", rev_base_pcb, rev_base_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "-%c", rev_base_pcb);
|
||||
snprintfcat(buf, sz, "xx");
|
||||
break;
|
||||
case 2: /* don't care about baseboard revision */
|
||||
snprintfcat(buf, sz, "-xx");
|
||||
if (rev_bom)
|
||||
snprintfcat(buf, sz, "%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "%c", rev_pcb);
|
||||
break;
|
||||
case 3: /* don't care about SoM/baseboard revision */
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
snprintf(buf, sz, "%s%04d", pre, model);
|
||||
switch (level) {
|
||||
case 0: /* full model wth PCB and BOM revision first (ie gw7901-a1) */
|
||||
if (rev_bom)
|
||||
snprintfcat(buf, sz, "-%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "-%c", rev_pcb);
|
||||
break;
|
||||
case 1: /* don't care about BOM revision */
|
||||
snprintfcat(buf, sz, "-%c", rev_pcb);
|
||||
break;
|
||||
case 2: /* don't care about PCB or BOM revision */
|
||||
break;
|
||||
case 3: /* don't care about last digit of model */
|
||||
buf[strlen(buf) - 1] = 'x';
|
||||
break;
|
||||
case 4: /* don't care about last two digits of model */
|
||||
buf[strlen(buf) - 1] = 'x';
|
||||
buf[strlen(buf) - 2] = 'x';
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
static int eeprom_info(bool verbose)
|
||||
{
|
||||
printf("Model : %s\n", venice_model);
|
||||
printf("Serial : %d\n", som_info.serial);
|
||||
printf("MFGDate : %02x-%02x-%02x%02x\n",
|
||||
som_info.mfgdate[0], som_info.mfgdate[1],
|
||||
som_info.mfgdate[2], som_info.mfgdate[3]);
|
||||
if (base_info.model[0] && verbose) {
|
||||
printf("SOM : %s %d %02x-%02x-%02x%02x\n",
|
||||
som_info.model, som_info.serial,
|
||||
som_info.mfgdate[0], som_info.mfgdate[1],
|
||||
som_info.mfgdate[2], som_info.mfgdate[3]);
|
||||
printf("BASE : %s %d %02x-%02x-%02x%02x\n",
|
||||
base_info.model, base_info.serial,
|
||||
base_info.mfgdate[0], base_info.mfgdate[1],
|
||||
base_info.mfgdate[2], base_info.mfgdate[3]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int eeprom_init(int quiet)
|
||||
{
|
||||
char rev_pcb;
|
||||
int rev_bom;
|
||||
int ret;
|
||||
|
||||
ret = eeprom_read(SOM_EEPROM_BUSNO, SOM_EEPROM_ADDR, 1, &som_info);
|
||||
if (ret) {
|
||||
puts("ERROR: Failed to probe EEPROM\n");
|
||||
memset(&som_info, 0, sizeof(som_info));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* read optional baseboard EEPROM */
|
||||
eeprom_read(BASEBOARD_EEPROM_BUSNO, BASEBOARD_EEPROM_ADDR, 2, &base_info);
|
||||
|
||||
/* create model strings */
|
||||
if (base_info.model[0]) {
|
||||
sprintf(venice_model, "GW%c%c%c%c-%c%c-",
|
||||
som_info.model[2], /* family */
|
||||
base_info.model[3], /* baseboard */
|
||||
base_info.model[4], base_info.model[5], /* subload of baseboard */
|
||||
som_info.model[4], som_info.model[5]); /* last 2digits of SOM */
|
||||
|
||||
/* baseboard revision */
|
||||
rev_pcb = get_pcb_rev(base_info.model);
|
||||
rev_bom = get_bom_rev(base_info.model);
|
||||
if (rev_bom)
|
||||
sprintf(venice_model + strlen(venice_model), "%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
sprintf(venice_model + strlen(venice_model), "%c", rev_pcb);
|
||||
/* som revision */
|
||||
rev_pcb = get_pcb_rev(som_info.model);
|
||||
rev_bom = get_bom_rev(som_info.model);
|
||||
if (rev_bom)
|
||||
sprintf(venice_model + strlen(venice_model), "%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
sprintf(venice_model + strlen(venice_model), "%c", rev_pcb);
|
||||
} else {
|
||||
strcpy(venice_model, som_info.model);
|
||||
}
|
||||
venice_serial = som_info.serial;
|
||||
|
||||
if (!quiet)
|
||||
eeprom_info(false);
|
||||
|
||||
return (16 << som_info.sdram_size);
|
||||
}
|
||||
|
||||
void board_gsc_info(void)
|
||||
{
|
||||
eeprom_info(true);
|
||||
}
|
||||
|
||||
const char *eeprom_get_model(void)
|
||||
{
|
||||
return venice_model;
|
||||
}
|
||||
|
||||
u32 eeprom_get_serial(void)
|
||||
{
|
||||
return venice_serial;
|
||||
}
|
|
@ -3,19 +3,8 @@
|
|||
* Copyright 2021 Gateworks Corporation
|
||||
*/
|
||||
|
||||
#ifndef _GSC_H_
|
||||
#define _GSC_H_
|
||||
|
||||
/* I2C bus numbers */
|
||||
#define GSC_BUSNO 0
|
||||
#define BASEBOARD_EEPROM_BUSNO 1
|
||||
|
||||
/* I2C slave addresses */
|
||||
#define GSC_SC_ADDR 0x20
|
||||
#define GSC_RTC_ADDR 0x68
|
||||
#define GSC_HWMON_ADDR 0x29
|
||||
#define GSC_EEPROM_ADDR 0x51
|
||||
#define BASEBOARD_EEPROM_ADDR 0x52
|
||||
#ifndef _VENICE_EEPROM_H_
|
||||
#define _VENICE_EEPROM_H_
|
||||
|
||||
struct venice_board_info {
|
||||
u8 mac[6]; /* 0x00: MAC base */
|
||||
|
@ -35,11 +24,10 @@ struct venice_board_info {
|
|||
u8 chksum[2]; /* 0x4E */
|
||||
};
|
||||
|
||||
int gsc_init(int quiet);
|
||||
int gsc_hwmon(void);
|
||||
const char *gsc_get_model(void);
|
||||
const char *gsc_get_dtb_name(int level, char *buf, int len);
|
||||
int gsc_getmac(int index, uint8_t *enetaddr);
|
||||
uint32_t gsc_get_serial(void);
|
||||
int eeprom_init(int quiet);
|
||||
const char *eeprom_get_model(void);
|
||||
const char *eeprom_get_dtb_name(int level, char *buf, int len);
|
||||
int eeprom_getmac(int index, uint8_t *enetaddr);
|
||||
uint32_t eeprom_get_serial(void);
|
||||
|
||||
#endif
|
|
@ -1,700 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2021 Gateworks Corporation
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <command.h>
|
||||
#include <hang.h>
|
||||
#include <hexdump.h>
|
||||
#include <i2c.h>
|
||||
#include <linux/delay.h>
|
||||
#include <dm/uclass.h>
|
||||
|
||||
#include "gsc.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
struct venice_board_info som_info;
|
||||
struct venice_board_info base_info;
|
||||
char venice_model[32];
|
||||
uint32_t venice_serial;
|
||||
|
||||
/* return a mac address from EEPROM info */
|
||||
int gsc_getmac(int index, uint8_t *address)
|
||||
{
|
||||
int i, j;
|
||||
u32 maclow, machigh;
|
||||
u64 mac;
|
||||
|
||||
j = 0;
|
||||
if (som_info.macno) {
|
||||
maclow = som_info.mac[5];
|
||||
maclow |= som_info.mac[4] << 8;
|
||||
maclow |= som_info.mac[3] << 16;
|
||||
maclow |= som_info.mac[2] << 24;
|
||||
machigh = som_info.mac[1];
|
||||
machigh |= som_info.mac[0] << 8;
|
||||
mac = machigh;
|
||||
mac <<= 32;
|
||||
mac |= maclow;
|
||||
for (i = 0; i < som_info.macno; i++, j++) {
|
||||
if (index == j)
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
maclow = base_info.mac[5];
|
||||
maclow |= base_info.mac[4] << 8;
|
||||
maclow |= base_info.mac[3] << 16;
|
||||
maclow |= base_info.mac[2] << 24;
|
||||
machigh = base_info.mac[1];
|
||||
machigh |= base_info.mac[0] << 8;
|
||||
mac = machigh;
|
||||
mac <<= 32;
|
||||
mac |= maclow;
|
||||
for (i = 0; i < base_info.macno; i++, j++) {
|
||||
if (index == j)
|
||||
goto out;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
|
||||
out:
|
||||
mac += i;
|
||||
address[0] = (mac >> 40) & 0xff;
|
||||
address[1] = (mac >> 32) & 0xff;
|
||||
address[2] = (mac >> 24) & 0xff;
|
||||
address[3] = (mac >> 16) & 0xff;
|
||||
address[4] = (mac >> 8) & 0xff;
|
||||
address[5] = (mac >> 0) & 0xff;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* System Controller registers */
|
||||
enum {
|
||||
GSC_SC_CTRL0 = 0,
|
||||
GSC_SC_CTRL1 = 1,
|
||||
GSC_SC_STATUS = 10,
|
||||
GSC_SC_FWCRC = 12,
|
||||
GSC_SC_FWVER = 14,
|
||||
GSC_SC_WP = 15,
|
||||
GSC_SC_RST_CAUSE = 16,
|
||||
GSC_SC_THERM_PROTECT = 19,
|
||||
};
|
||||
|
||||
/* System Controller Control1 bits */
|
||||
enum {
|
||||
GSC_SC_CTRL1_WDTIME = 4, /* 1 = 60s timeout, 0 = 30s timeout */
|
||||
GSC_SC_CTRL1_WDEN = 5, /* 1 = enable, 0 = disable */
|
||||
GSC_SC_CTRL1_BOOT_CHK = 6, /* 1 = enable alt boot check */
|
||||
GSC_SC_CTRL1_WDDIS = 7, /* 1 = disable boot watchdog */
|
||||
};
|
||||
|
||||
/* System Controller Interrupt bits */
|
||||
enum {
|
||||
GSC_SC_IRQ_PB = 0, /* Pushbutton switch */
|
||||
GSC_SC_IRQ_SECURE = 1, /* Secure Key erase operation complete */
|
||||
GSC_SC_IRQ_EEPROM_WP = 2, /* EEPROM write violation */
|
||||
GSC_SC_IRQ_GPIO = 4, /* GPIO change */
|
||||
GSC_SC_IRQ_TAMPER = 5, /* Tamper detect */
|
||||
GSC_SC_IRQ_WATCHDOG = 6, /* Watchdog trip */
|
||||
GSC_SC_IRQ_PBLONG = 7, /* Pushbutton long hold */
|
||||
};
|
||||
|
||||
/* System Controller WP bits */
|
||||
enum {
|
||||
GSC_SC_WP_ALL = 0, /* Write Protect All EEPROM regions */
|
||||
GSC_SC_WP_BOARDINFO = 1, /* Write Protect Board Info region */
|
||||
};
|
||||
|
||||
/* System Controller Reset Cause */
|
||||
enum {
|
||||
GSC_SC_RST_CAUSE_VIN = 0,
|
||||
GSC_SC_RST_CAUSE_PB = 1,
|
||||
GSC_SC_RST_CAUSE_WDT = 2,
|
||||
GSC_SC_RST_CAUSE_CPU = 3,
|
||||
GSC_SC_RST_CAUSE_TEMP_LOCAL = 4,
|
||||
GSC_SC_RST_CAUSE_TEMP_REMOTE = 5,
|
||||
GSC_SC_RST_CAUSE_SLEEP = 6,
|
||||
GSC_SC_RST_CAUSE_BOOT_WDT = 7,
|
||||
GSC_SC_RST_CAUSE_BOOT_WDT_MAN = 8,
|
||||
GSC_SC_RST_CAUSE_SOFT_PWR = 9,
|
||||
GSC_SC_RST_CAUSE_MAX = 10,
|
||||
};
|
||||
|
||||
#include <dm/device.h>
|
||||
static struct udevice *gsc_get_dev(int busno, int slave)
|
||||
{
|
||||
struct udevice *dev, *bus;
|
||||
int ret;
|
||||
|
||||
ret = uclass_get_device_by_seq(UCLASS_I2C, busno, &bus);
|
||||
if (ret) {
|
||||
printf("GSC : failed I2C%d probe: %d\n", busno, ret);
|
||||
return NULL;
|
||||
}
|
||||
ret = dm_i2c_probe(bus, slave, 0, &dev);
|
||||
if (ret)
|
||||
return NULL;
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
static int gsc_read_eeprom(int bus, int slave, int alen, struct venice_board_info *info)
|
||||
{
|
||||
int i;
|
||||
int chksum;
|
||||
unsigned char *buf = (unsigned char *)info;
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
/* probe device */
|
||||
dev = gsc_get_dev(bus, slave);
|
||||
if (!dev) {
|
||||
if (slave == GSC_EEPROM_ADDR)
|
||||
puts("ERROR: Failed to probe EEPROM\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* read eeprom config section */
|
||||
memset(info, 0, sizeof(*info));
|
||||
ret = i2c_set_chip_offset_len(dev, alen);
|
||||
if (ret) {
|
||||
puts("EEPROM: Failed to set alen\n");
|
||||
return ret;
|
||||
}
|
||||
ret = dm_i2c_read(dev, 0x00, buf, sizeof(*info));
|
||||
if (ret) {
|
||||
if (slave == GSC_EEPROM_ADDR)
|
||||
printf("EEPROM: Failed to read EEPROM\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* validate checksum */
|
||||
for (chksum = 0, i = 0; i < (int)sizeof(*info) - 2; i++)
|
||||
chksum += buf[i];
|
||||
if ((info->chksum[0] != chksum >> 8) ||
|
||||
(info->chksum[1] != (chksum & 0xff))) {
|
||||
printf("EEPROM: I2C%d@0x%02x: Invalid Checksum\n", bus, slave);
|
||||
print_hex_dump_bytes("", DUMP_PREFIX_NONE, buf, sizeof(*info));
|
||||
memset(info, 0, sizeof(*info));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* sanity check valid model */
|
||||
if (info->model[0] != 'G' || info->model[1] != 'W') {
|
||||
printf("EEPROM: I2C%d@0x%02x: Invalid Model in EEPROM\n", bus, slave);
|
||||
print_hex_dump_bytes("", DUMP_PREFIX_NONE, buf, sizeof(*info));
|
||||
memset(info, 0, sizeof(*info));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *gsc_get_rst_cause(struct udevice *dev)
|
||||
{
|
||||
static char str[64];
|
||||
static const char * const names[] = {
|
||||
"VIN",
|
||||
"PB",
|
||||
"WDT",
|
||||
"CPU",
|
||||
"TEMP_L",
|
||||
"TEMP_R",
|
||||
"SLEEP",
|
||||
"BOOT_WDT1",
|
||||
"BOOT_WDT2",
|
||||
"SOFT_PWR",
|
||||
};
|
||||
unsigned char reg;
|
||||
|
||||
/* reset cause */
|
||||
str[0] = 0;
|
||||
if (!dm_i2c_read(dev, GSC_SC_RST_CAUSE, ®, 1)) {
|
||||
if (reg < ARRAY_SIZE(names))
|
||||
sprintf(str, "%s", names[reg]);
|
||||
else
|
||||
sprintf(str, "0x%02x", reg);
|
||||
}
|
||||
|
||||
/* thermal protection */
|
||||
if (!dm_i2c_read(dev, GSC_SC_THERM_PROTECT, ®, 1)) {
|
||||
strcat(str, " Thermal Protection ");
|
||||
if (reg & BIT(0))
|
||||
strcat(str, "Enabled");
|
||||
else
|
||||
strcat(str, "Disabled");
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
/* display hardware monitor ADC channels */
|
||||
int gsc_hwmon(void)
|
||||
{
|
||||
const void *fdt = gd->fdt_blob;
|
||||
struct udevice *dev;
|
||||
int node, reg, mode, len, val, offset;
|
||||
const char *label;
|
||||
u8 buf[2];
|
||||
int ret;
|
||||
|
||||
node = fdt_node_offset_by_compatible(fdt, -1, "gw,gsc-adc");
|
||||
if (node <= 0)
|
||||
return node;
|
||||
|
||||
/* probe device */
|
||||
dev = gsc_get_dev(GSC_BUSNO, GSC_HWMON_ADDR);
|
||||
if (!dev) {
|
||||
puts("ERROR: Failed to probe GSC HWMON\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* iterate over hwmon nodes */
|
||||
node = fdt_first_subnode(fdt, node);
|
||||
while (node > 0) {
|
||||
reg = fdtdec_get_int(fdt, node, "reg", -1);
|
||||
mode = fdtdec_get_int(fdt, node, "gw,mode", -1);
|
||||
offset = fdtdec_get_int(fdt, node, "gw,voltage-offset-microvolt", 0);
|
||||
label = fdt_stringlist_get(fdt, node, "label", 0, NULL);
|
||||
|
||||
if ((reg == -1) || (mode == -1) || !label)
|
||||
printf("invalid dt:%s\n", fdt_get_name(fdt, node, NULL));
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
ret = dm_i2c_read(dev, reg, buf, sizeof(buf));
|
||||
if (ret) {
|
||||
printf("i2c error: %d\n", ret);
|
||||
continue;
|
||||
}
|
||||
val = buf[0] | buf[1] << 8;
|
||||
if (val >= 0) {
|
||||
const u32 *div;
|
||||
int r[2];
|
||||
|
||||
switch (mode) {
|
||||
case 0: /* temperature (C*10) */
|
||||
if (val > 0x8000)
|
||||
val -= 0xffff;
|
||||
printf("%-8s: %d.%ldC\n", label, val / 10, abs(val % 10));
|
||||
break;
|
||||
case 1: /* prescaled voltage */
|
||||
if (val != 0xffff)
|
||||
printf("%-8s: %d.%03dV\n", label, val / 1000, val % 1000);
|
||||
break;
|
||||
case 2: /* scaled based on ref volt and resolution */
|
||||
val *= 2500;
|
||||
val /= 1 << 12;
|
||||
|
||||
/* apply pre-scaler voltage divider */
|
||||
div = fdt_getprop(fdt, node, "gw,voltage-divider-ohms", &len);
|
||||
if (div && (len == sizeof(uint32_t) * 2)) {
|
||||
r[0] = fdt32_to_cpu(div[0]);
|
||||
r[1] = fdt32_to_cpu(div[1]);
|
||||
if (r[0] && r[1]) {
|
||||
val *= (r[0] + r[1]);
|
||||
val /= r[1];
|
||||
}
|
||||
}
|
||||
|
||||
/* adjust by offset */
|
||||
val += (offset / 1000);
|
||||
|
||||
printf("%-8s: %d.%03dV\n", label, val / 1000, val % 1000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
node = fdt_next_subnode(fdt, node);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* determine BOM revision from model */
|
||||
int get_bom_rev(const char *str)
|
||||
{
|
||||
int rev_bom = 0;
|
||||
int i;
|
||||
|
||||
for (i = strlen(str) - 1; i > 0; i--) {
|
||||
if (str[i] == '-')
|
||||
break;
|
||||
if (str[i] >= '1' && str[i] <= '9') {
|
||||
rev_bom = str[i] - '0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rev_bom;
|
||||
}
|
||||
|
||||
/* determine PCB revision from model */
|
||||
char get_pcb_rev(const char *str)
|
||||
{
|
||||
char rev_pcb = 'A';
|
||||
int i;
|
||||
|
||||
for (i = strlen(str) - 1; i > 0; i--) {
|
||||
if (str[i] == '-')
|
||||
break;
|
||||
if (str[i] >= 'A') {
|
||||
rev_pcb = str[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rev_pcb;
|
||||
}
|
||||
|
||||
/*
|
||||
* get dt name based on model and detail level:
|
||||
*
|
||||
* For boards that are a combination of a SoM plus a Baseboard:
|
||||
* Venice SoM part numbers are GW70xx where xx is:
|
||||
* 7000-7019: same PCB with som dt of '0x'
|
||||
* 7020-7039: same PCB with som dt of '2x'
|
||||
* 7040-7059: same PCB with som dt of '4x'
|
||||
* 7060-7079: same PCB with som dt of '6x'
|
||||
* 7080-7099: same PCB with som dt of '8x'
|
||||
* Venice Baseboard part numbers are GW7xxx where xxx is:
|
||||
* 7100-7199: same PCB with base dt of '71xx'
|
||||
* 7200-7299: same PCB with base dt of '72xx'
|
||||
* 7300-7399: same PCB with base dt of '73xx'
|
||||
* 7400-7499: same PCB with base dt of '74xx'
|
||||
* 7500-7599: same PCB with base dt of '75xx'
|
||||
* 7600-7699: same PCB with base dt of '76xx'
|
||||
* 7700-7799: same PCB with base dt of '77xx'
|
||||
* 7800-7899: same PCB with base dt of '78xx'
|
||||
* DT name is comprised of:
|
||||
* gw<base dt>-<som dt>-[base-pcb-rev][base-bom-rev][som-pcb-rev][som-bom-rev]
|
||||
*
|
||||
* For board models from 7900-7999 each PCB is unique with its own dt:
|
||||
* DT name is comprised:
|
||||
* gw<model>-[pcb-rev][bom-rev]
|
||||
*
|
||||
*/
|
||||
#define snprintfcat(dest, sz, fmt, ...) \
|
||||
snprintf((dest) + strlen(dest), (sz) - strlen(dest), fmt, ##__VA_ARGS__)
|
||||
const char *gsc_get_dtb_name(int level, char *buf, int sz)
|
||||
{
|
||||
#ifdef CONFIG_IMX8MM
|
||||
const char *pre = "imx8mm-venice-gw";
|
||||
#else
|
||||
const char *pre = "imx8mn-venice-gw";
|
||||
#endif
|
||||
int model, rev_pcb, rev_bom;
|
||||
|
||||
model = ((som_info.model[2] - '0') * 1000)
|
||||
+ ((som_info.model[3] - '0') * 100)
|
||||
+ ((som_info.model[4] - '0') * 10)
|
||||
+ (som_info.model[5] - '0');
|
||||
rev_pcb = tolower(get_pcb_rev(som_info.model));
|
||||
rev_bom = get_bom_rev(som_info.model);
|
||||
|
||||
/* som + baseboard*/
|
||||
if (base_info.model[0]) {
|
||||
/* baseboard id: 7100-7199->71; 7200-7299->72; etc */
|
||||
int base = ((base_info.model[2] - '0') * 10) + (base_info.model[3] - '0');
|
||||
/* som id: 7000-7019->1; 7020-7039->2; etc */
|
||||
int som = ((model % 100) / 20) * 2;
|
||||
int rev_base_pcb = tolower(get_pcb_rev(base_info.model));
|
||||
int rev_base_bom = get_bom_rev(base_info.model);
|
||||
|
||||
snprintf(buf, sz, "%s%2dxx-%dx", pre, base, som);
|
||||
switch (level) {
|
||||
case 0: /* full model (ie gw73xx-0x-a1a1) */
|
||||
if (rev_base_bom)
|
||||
snprintfcat(buf, sz, "-%c%d", rev_base_pcb, rev_base_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "-%c", rev_base_pcb);
|
||||
if (rev_bom)
|
||||
snprintfcat(buf, sz, "%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "%c", rev_pcb);
|
||||
break;
|
||||
case 1: /* don't care about SoM revision */
|
||||
if (rev_base_bom)
|
||||
snprintfcat(buf, sz, "-%c%d", rev_base_pcb, rev_base_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "-%c", rev_base_pcb);
|
||||
snprintfcat(buf, sz, "xx");
|
||||
break;
|
||||
case 2: /* don't care about baseboard revision */
|
||||
snprintfcat(buf, sz, "-xx");
|
||||
if (rev_bom)
|
||||
snprintfcat(buf, sz, "%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "%c", rev_pcb);
|
||||
break;
|
||||
case 3: /* don't care about SoM/baseboard revision */
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
snprintf(buf, sz, "%s%04d", pre, model);
|
||||
switch (level) {
|
||||
case 0: /* full model wth PCB and BOM revision first (ie gw7901-a1) */
|
||||
if (rev_bom)
|
||||
snprintfcat(buf, sz, "-%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
snprintfcat(buf, sz, "-%c", rev_pcb);
|
||||
break;
|
||||
case 1: /* don't care about BOM revision */
|
||||
snprintfcat(buf, sz, "-%c", rev_pcb);
|
||||
break;
|
||||
case 2: /* don't care about PCB or BOM revision */
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
static int gsc_read(void)
|
||||
{
|
||||
char rev_pcb;
|
||||
int rev_bom;
|
||||
int ret;
|
||||
|
||||
ret = gsc_read_eeprom(GSC_BUSNO, GSC_EEPROM_ADDR, 1, &som_info);
|
||||
if (ret) {
|
||||
memset(&som_info, 0, sizeof(som_info));
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* read optional baseboard EEPROM */
|
||||
gsc_read_eeprom(BASEBOARD_EEPROM_BUSNO, BASEBOARD_EEPROM_ADDR,
|
||||
2, &base_info);
|
||||
|
||||
/* create model strings */
|
||||
if (base_info.model[0]) {
|
||||
sprintf(venice_model, "GW%c%c%c%c-%c%c-",
|
||||
som_info.model[2], /* family */
|
||||
base_info.model[3], /* baseboard */
|
||||
base_info.model[4], base_info.model[5], /* subload of baseboard */
|
||||
som_info.model[4], som_info.model[5]); /* last 2digits of SOM */
|
||||
|
||||
/* baseboard revision */
|
||||
rev_pcb = get_pcb_rev(base_info.model);
|
||||
rev_bom = get_bom_rev(base_info.model);
|
||||
if (rev_bom)
|
||||
sprintf(venice_model + strlen(venice_model), "%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
sprintf(venice_model + strlen(venice_model), "%c", rev_pcb);
|
||||
/* som revision */
|
||||
rev_pcb = get_pcb_rev(som_info.model);
|
||||
rev_bom = get_bom_rev(som_info.model);
|
||||
if (rev_bom)
|
||||
sprintf(venice_model + strlen(venice_model), "%c%d", rev_pcb, rev_bom);
|
||||
else
|
||||
sprintf(venice_model + strlen(venice_model), "%c", rev_pcb);
|
||||
} else {
|
||||
strcpy(venice_model, som_info.model);
|
||||
}
|
||||
venice_serial = som_info.serial;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gsc_info(int verbose)
|
||||
{
|
||||
struct udevice *dev;
|
||||
unsigned char buf[16];
|
||||
|
||||
printf("Model : %s\n", venice_model);
|
||||
printf("Serial : %d\n", som_info.serial);
|
||||
printf("MFGDate : %02x-%02x-%02x%02x\n",
|
||||
som_info.mfgdate[0], som_info.mfgdate[1],
|
||||
som_info.mfgdate[2], som_info.mfgdate[3]);
|
||||
if (base_info.model[0] && verbose > 1) {
|
||||
printf("SOM : %s %d %02x-%02x-%02x%02x\n",
|
||||
som_info.model, som_info.serial,
|
||||
som_info.mfgdate[0], som_info.mfgdate[1],
|
||||
som_info.mfgdate[2], som_info.mfgdate[3]);
|
||||
printf("BASE : %s %d %02x-%02x-%02x%02x\n",
|
||||
base_info.model, base_info.serial,
|
||||
base_info.mfgdate[0], base_info.mfgdate[1],
|
||||
base_info.mfgdate[2], base_info.mfgdate[3]);
|
||||
}
|
||||
|
||||
/* Display RTC */
|
||||
puts("RTC : ");
|
||||
dev = gsc_get_dev(GSC_BUSNO, GSC_RTC_ADDR);
|
||||
if (!dev) {
|
||||
puts("Failed to probe GSC RTC\n");
|
||||
} else {
|
||||
dm_i2c_read(dev, 0, buf, 6);
|
||||
printf("%d\n", buf[0] | buf[1] << 8 | buf[2] << 16 | buf[3] << 24);
|
||||
}
|
||||
|
||||
/* Display hwmon */
|
||||
gsc_hwmon();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int gsc_init(int quiet)
|
||||
{
|
||||
unsigned char buf[16];
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* On a board with a missing/depleted backup battery for GSC, the
|
||||
* board may be ready to probe the GSC before its firmware is
|
||||
* running. We will wait here indefinately for the GSC/EEPROM.
|
||||
*/
|
||||
#ifdef CONFIG_IMX8MN
|
||||
// TODO:
|
||||
// IMX8MN boots quicker than IMX8MM and exposes issue
|
||||
// where because GSC I2C state machine isn't running and its
|
||||
// SCL/SDA are driven low spams i2c errors
|
||||
//
|
||||
// Put a loop here that somehow waits for I2C CLK/DAT to be high
|
||||
mdelay(40);
|
||||
#endif
|
||||
while (1) {
|
||||
/* probe device */
|
||||
dev = gsc_get_dev(GSC_BUSNO, GSC_SC_ADDR);
|
||||
if (dev)
|
||||
break;
|
||||
mdelay(1);
|
||||
}
|
||||
|
||||
ret = dm_i2c_read(dev, 0, buf, sizeof(buf));
|
||||
if (ret) {
|
||||
puts("ERROR: Failed reading GSC\n");
|
||||
return ret;
|
||||
}
|
||||
gsc_read();
|
||||
|
||||
/* banner */
|
||||
if (!quiet) {
|
||||
printf("GSC : v%d 0x%04x", buf[GSC_SC_FWVER],
|
||||
buf[GSC_SC_FWCRC] | buf[GSC_SC_FWCRC + 1] << 8);
|
||||
printf(" RST:%s", gsc_get_rst_cause(dev));
|
||||
printf("\n");
|
||||
gsc_info(1);
|
||||
}
|
||||
|
||||
if (ret)
|
||||
hang();
|
||||
|
||||
return (16 << som_info.sdram_size);
|
||||
}
|
||||
|
||||
const char *gsc_get_model(void)
|
||||
{
|
||||
return venice_model;
|
||||
}
|
||||
|
||||
uint32_t gsc_get_serial(void)
|
||||
{
|
||||
return venice_serial;
|
||||
}
|
||||
|
||||
#if !(IS_ENABLED(CONFIG_SPL_BUILD))
|
||||
static int gsc_sleep(unsigned long secs)
|
||||
{
|
||||
unsigned char reg;
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
/* probe device */
|
||||
dev = gsc_get_dev(GSC_BUSNO, GSC_SC_ADDR);
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
printf("GSC Sleeping for %ld seconds\n", secs);
|
||||
reg = (secs >> 24) & 0xff;
|
||||
ret = dm_i2c_write(dev, 9, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
reg = (secs >> 16) & 0xff;
|
||||
ret = dm_i2c_write(dev, 8, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
reg = (secs >> 8) & 0xff;
|
||||
ret = dm_i2c_write(dev, 7, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
reg = secs & 0xff;
|
||||
ret = dm_i2c_write(dev, 6, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = dm_i2c_read(dev, GSC_SC_CTRL1, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
reg |= (1 << 2);
|
||||
ret = dm_i2c_write(dev, GSC_SC_CTRL1, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
reg &= ~(1 << 2);
|
||||
reg |= 0x3;
|
||||
ret = dm_i2c_write(dev, GSC_SC_CTRL1, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
printf("i2c error\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int gsc_boot_wd_disable(void)
|
||||
{
|
||||
u8 reg;
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
/* probe device */
|
||||
dev = gsc_get_dev(GSC_BUSNO, GSC_SC_ADDR);
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
ret = dm_i2c_read(dev, GSC_SC_CTRL1, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
reg |= (1 << GSC_SC_CTRL1_WDDIS);
|
||||
reg &= ~(1 << GSC_SC_CTRL1_BOOT_CHK);
|
||||
ret = dm_i2c_write(dev, GSC_SC_CTRL1, ®, 1);
|
||||
if (ret)
|
||||
goto err;
|
||||
puts("GSC : boot watchdog disabled\n");
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
printf("i2c error");
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int do_gsc(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
|
||||
{
|
||||
if (argc < 2)
|
||||
return gsc_info(2);
|
||||
|
||||
if (strcasecmp(argv[1], "sleep") == 0) {
|
||||
if (argc < 3)
|
||||
return CMD_RET_USAGE;
|
||||
if (!gsc_sleep(dectoul(argv[2], NULL)))
|
||||
return CMD_RET_SUCCESS;
|
||||
} else if (strcasecmp(argv[1], "hwmon") == 0) {
|
||||
if (!gsc_hwmon())
|
||||
return CMD_RET_SUCCESS;
|
||||
} else if (strcasecmp(argv[1], "wd-disable") == 0) {
|
||||
if (!gsc_boot_wd_disable())
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
return CMD_RET_USAGE;
|
||||
}
|
||||
|
||||
U_BOOT_CMD(gsc, 4, 1, do_gsc, "Gateworks System Controller",
|
||||
"[sleep <secs>]|[hwmon]|[wd-disable]\n");
|
||||
#endif
|
9
board/gateworks/venice/imximage-8mp-lpddr4.cfg
Normal file
9
board/gateworks/venice/imximage-8mp-lpddr4.cfg
Normal file
|
@ -0,0 +1,9 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2022 Gateworks Corporation
|
||||
*/
|
||||
|
||||
|
||||
ROM_VERSION v2
|
||||
BOOT_FROM sd
|
||||
LOADER u-boot-spl-ddr.bin 0x920000
|
|
@ -15,6 +15,8 @@ extern struct dram_timing_info dram_timing_4gb;
|
|||
extern struct dram_timing_info dram_timing_1gb_single_die;
|
||||
extern struct dram_timing_info dram_timing_2gb_single_die;
|
||||
extern struct dram_timing_info dram_timing_2gb_dual_die;
|
||||
#elif CONFIG_IMX8MP
|
||||
extern struct dram_timing_info dram_timing_4gb_dual_die;
|
||||
#endif
|
||||
|
||||
#endif /* __LPDDR4_TIMING_H__ */
|
||||
|
|
1846
board/gateworks/venice/lpddr4_timing_imx8mp.c
Normal file
1846
board/gateworks/venice/lpddr4_timing_imx8mp.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -7,36 +7,29 @@
|
|||
#include <cpu_func.h>
|
||||
#include <hang.h>
|
||||
#include <i2c.h>
|
||||
#include <image.h>
|
||||
#include <init.h>
|
||||
#include <log.h>
|
||||
#include <spl.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/mach-imx/gpio.h>
|
||||
#include <asm/mach-imx/iomux-v3.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/imx8mm_pins.h>
|
||||
#include <asm/arch/imx8mn_pins.h>
|
||||
#include <asm/arch/imx8mp_pins.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/mach-imx/boot_mode.h>
|
||||
#include <asm/arch/ddr.h>
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
#include <dm/uclass.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <dm/device-internal.h>
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <power/bd71837.h>
|
||||
#include <power/mp5416.h>
|
||||
#include <power/pca9450.h>
|
||||
|
||||
#include "gsc.h"
|
||||
#include "eeprom.h"
|
||||
#include "lpddr4_timing.h"
|
||||
|
||||
#define PCIE_RSTN IMX_GPIO_NR(4, 6)
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
static void spl_dram_init(int size)
|
||||
{
|
||||
struct dram_timing_info *dram_timing;
|
||||
|
@ -59,14 +52,13 @@ static void spl_dram_init(int size)
|
|||
printf("Unknown DDR configuration: %d MiB\n", size);
|
||||
dram_timing = &dram_timing_1gb;
|
||||
size = 1024;
|
||||
#endif
|
||||
#ifdef CONFIG_IMX8MN
|
||||
#elif CONFIG_IMX8MN
|
||||
case 1024:
|
||||
dram_timing = &dram_timing_1gb_single_die;
|
||||
break;
|
||||
case 2048:
|
||||
if (!strcmp(gsc_get_model(), "GW7902-SP466-A") ||
|
||||
!strcmp(gsc_get_model(), "GW7902-SP466-B")) {
|
||||
if (!strcmp(eeprom_get_model(), "GW7902-SP466-A") ||
|
||||
!strcmp(eeprom_get_model(), "GW7902-SP466-B")) {
|
||||
dram_timing = &dram_timing_2gb_dual_die;
|
||||
} else {
|
||||
dram_timing = &dram_timing_2gb_single_die;
|
||||
|
@ -76,6 +68,14 @@ static void spl_dram_init(int size)
|
|||
printf("Unknown DDR configuration: %d MiB\n", size);
|
||||
dram_timing = &dram_timing_2gb_dual_die;
|
||||
size = 2048;
|
||||
#elif CONFIG_IMX8MP
|
||||
case 4096:
|
||||
dram_timing = &dram_timing_4gb_dual_die;
|
||||
break;
|
||||
default:
|
||||
printf("Unknown DDR configuration: %d GiB\n", size);
|
||||
dram_timing = &dram_timing_4gb_dual_die;
|
||||
size = 4096;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -99,8 +99,7 @@ static iomux_v3_cfg_t const uart_pads[] = {
|
|||
static iomux_v3_cfg_t const wdog_pads[] = {
|
||||
IMX8MM_PAD_GPIO1_IO02_WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
|
||||
};
|
||||
#endif
|
||||
#ifdef CONFIG_IMX8MN
|
||||
#elif CONFIG_IMX8MN
|
||||
static const iomux_v3_cfg_t uart_pads[] = {
|
||||
IMX8MN_PAD_UART2_RXD__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
IMX8MN_PAD_UART2_TXD__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
|
@ -109,6 +108,16 @@ static const iomux_v3_cfg_t uart_pads[] = {
|
|||
static const iomux_v3_cfg_t wdog_pads[] = {
|
||||
IMX8MN_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
|
||||
};
|
||||
#elif CONFIG_IMX8MP
|
||||
static const iomux_v3_cfg_t uart_pads[] = {
|
||||
MX8MP_PAD_UART2_RXD__UART2_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
MX8MP_PAD_UART2_TXD__UART2_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
static const iomux_v3_cfg_t wdog_pads[] = {
|
||||
MX8MP_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
int board_early_init_f(void)
|
||||
|
@ -149,7 +158,7 @@ static int dm_i2c_clrsetbits(struct udevice *dev, uint reg, uint clr, uint set)
|
|||
|
||||
static int power_init_board(void)
|
||||
{
|
||||
const char *model = gsc_get_model();
|
||||
const char *model = eeprom_get_model();
|
||||
struct udevice *bus;
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
@ -174,6 +183,41 @@ static int power_init_board(void)
|
|||
BIT(7) | MP5416_VSET_SW3_SVAL(920000));
|
||||
}
|
||||
|
||||
else if (!strncmp(model, "GW74", 4)) {
|
||||
ret = uclass_get_device_by_seq(UCLASS_I2C, 0, &bus);
|
||||
if (ret) {
|
||||
printf("PMIC : failed I2C1 probe: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
ret = dm_i2c_probe(bus, 0x25, 0, &dev);
|
||||
if (ret) {
|
||||
printf("PMIC : failed probe: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
puts("PMIC : PCA9450\n");
|
||||
|
||||
/* BUCKxOUT_DVS0/1 control BUCK123 output */
|
||||
dm_i2c_reg_write(dev, PCA9450_BUCK123_DVS, 0x29);
|
||||
|
||||
/* Buck 1 DVS control through PMIC_STBY_REQ */
|
||||
dm_i2c_reg_write(dev, PCA9450_BUCK1CTRL, 0x59);
|
||||
|
||||
/* Set DVS1 to 0.8v for suspend */
|
||||
dm_i2c_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x10);
|
||||
|
||||
/* increase VDD_DRAM to 0.95v for 3Ghz DDR */
|
||||
dm_i2c_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x1C);
|
||||
|
||||
/* VDD_DRAM off in suspend: B1_ENMODE=10 */
|
||||
dm_i2c_reg_write(dev, PCA9450_BUCK3CTRL, 0x4a);
|
||||
|
||||
/* set VDD_SNVS_0V8 from default 0.85V */
|
||||
dm_i2c_reg_write(dev, PCA9450_LDO2CTRL, 0xC0);
|
||||
|
||||
/* set WDOG_B_CFG to cold reset */
|
||||
dm_i2c_reg_write(dev, PCA9450_RESET_CTRL, 0xA1);
|
||||
}
|
||||
|
||||
else if ((!strncmp(model, "GW7901", 6)) ||
|
||||
(!strncmp(model, "GW7902", 6))) {
|
||||
if (!strncmp(model, "GW7901", 6))
|
||||
|
@ -243,22 +287,36 @@ void board_init_f(ulong dummy)
|
|||
hang();
|
||||
}
|
||||
|
||||
ret = uclass_get_device_by_name(UCLASS_CLK,
|
||||
"clock-controller@30380000",
|
||||
&dev);
|
||||
if (ret < 0) {
|
||||
printf("Failed to find clock node. Check device tree\n");
|
||||
hang();
|
||||
}
|
||||
|
||||
enable_tzc380();
|
||||
|
||||
/* need to hold PCIe switch in reset otherwise it can lock i2c bus EEPROM is on */
|
||||
gpio_request(PCIE_RSTN, "perst#");
|
||||
gpio_direction_output(PCIE_RSTN, 0);
|
||||
|
||||
/* GSC */
|
||||
dram_sz = gsc_init(0);
|
||||
/*
|
||||
* probe GSC device
|
||||
*
|
||||
* On a board with a missing/depleted backup battery for GSC, the
|
||||
* board may be ready to probe the GSC before its firmware is
|
||||
* running. We will wait here indefinately for the GSC EEPROM.
|
||||
*/
|
||||
#ifdef CONFIG_IMX8MN
|
||||
/*
|
||||
* IMX8MN boots quicker than IMX8MM and exposes issue
|
||||
* where because GSC I2C state machine isn't running and its
|
||||
* SCL/SDA are driven low the I2C driver spams 'Arbitration lost'
|
||||
* I2C errors.
|
||||
*
|
||||
* TODO: Put a loop here that somehow waits for I2C CLK/DAT to be high
|
||||
*/
|
||||
mdelay(50);
|
||||
#endif
|
||||
while (1) {
|
||||
if (!uclass_get_device_by_driver(UCLASS_MISC, DM_DRIVER_GET(gsc), &dev))
|
||||
break;
|
||||
mdelay(1);
|
||||
}
|
||||
dram_sz = eeprom_init(0);
|
||||
|
||||
/* PMIC */
|
||||
power_init_board();
|
||||
|
@ -272,15 +330,22 @@ void board_init_f(ulong dummy)
|
|||
/* determine prioritized order of boot devices to load U-Boot from */
|
||||
void board_boot_order(u32 *spl_boot_list)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
/*
|
||||
* If the SPL was loaded via serial loader, we try to get
|
||||
* U-Boot proper via USB SDP.
|
||||
*/
|
||||
if (spl_boot_device() == BOOT_DEVICE_BOARD)
|
||||
spl_boot_list[0] = BOOT_DEVICE_BOARD;
|
||||
if (spl_boot_device() == BOOT_DEVICE_BOARD) {
|
||||
#ifdef CONFIG_IMX8MM
|
||||
spl_boot_list[i++] = BOOT_DEVICE_BOARD;
|
||||
#else
|
||||
spl_boot_list[i++] = BOOT_DEVICE_BOOTROM;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* we have only eMMC in default venice dt */
|
||||
spl_boot_list[0] = BOOT_DEVICE_MMC1;
|
||||
spl_boot_list[i++] = BOOT_DEVICE_MMC1;
|
||||
}
|
||||
|
||||
/* return boot device based on where the SPL was loaded from */
|
||||
|
|
|
@ -3,21 +3,13 @@
|
|||
* Copyright 2021 Gateworks Corporation
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <init.h>
|
||||
#include <led.h>
|
||||
#include <linux/delay.h>
|
||||
#include <miiphy.h>
|
||||
#include <netdev.h>
|
||||
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#include "gsc.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
#include "eeprom.h"
|
||||
|
||||
int board_phys_sdram_size(phys_size_t *size)
|
||||
{
|
||||
|
@ -37,7 +29,7 @@ int board_fit_config_name_match(const char *name)
|
|||
char buf[32];
|
||||
|
||||
do {
|
||||
dtb = gsc_get_dtb_name(i++, buf, sizeof(buf));
|
||||
dtb = eeprom_get_dtb_name(i++, buf, sizeof(buf));
|
||||
if (!strcmp(dtb, name)) {
|
||||
if (!init++)
|
||||
printf("DTB : %s\n", name);
|
||||
|
@ -48,18 +40,36 @@ int board_fit_config_name_match(const char *name)
|
|||
return -1;
|
||||
}
|
||||
|
||||
#if (IS_ENABLED(CONFIG_FEC_MXC))
|
||||
#if (IS_ENABLED(CONFIG_NET))
|
||||
static int setup_fec(void)
|
||||
{
|
||||
struct iomuxc_gpr_base_regs *gpr =
|
||||
(struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;
|
||||
|
||||
#ifndef CONFIG_IMX8MP
|
||||
/* Use 125M anatop REF_CLK1 for ENET1, not from external */
|
||||
clrsetbits_le32(&gpr->gpr[1], 0x2000, 0);
|
||||
#else
|
||||
/* Enable RGMII TX clk output */
|
||||
setbits_le32(&gpr->gpr[1], BIT(22));
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int setup_eqos(void)
|
||||
{
|
||||
struct iomuxc_gpr_base_regs *gpr =
|
||||
(struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;
|
||||
|
||||
/* set INTF as RGMII, enable RGMII TXC clock */
|
||||
clrsetbits_le32(&gpr->gpr[1],
|
||||
IOMUXC_GPR_GPR1_GPR_ENET_QOS_INTF_SEL_MASK, BIT(16));
|
||||
setbits_le32(&gpr->gpr[1], BIT(19) | BIT(21));
|
||||
|
||||
return set_clk_eqos(ENET_125MHZ);
|
||||
}
|
||||
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
{
|
||||
unsigned short val;
|
||||
|
@ -96,16 +106,16 @@ int board_phy_config(struct phy_device *phydev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif // IS_ENABLED(CONFIG_FEC_MXC)
|
||||
#endif // IS_ENABLED(CONFIG_NET)
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
gsc_init(1);
|
||||
eeprom_init(1);
|
||||
|
||||
if (IS_ENABLED(CONFIG_FEC_MXC))
|
||||
setup_fec();
|
||||
|
||||
gsc_hwmon();
|
||||
if (IS_ENABLED(CONFIG_DWC_ETH_QOS))
|
||||
setup_eqos();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -122,13 +132,13 @@ int board_late_init(void)
|
|||
|
||||
/* Set board serial/model */
|
||||
if (!env_get("serial#"))
|
||||
env_set_ulong("serial#", gsc_get_serial());
|
||||
env_set("model", gsc_get_model());
|
||||
env_set_ulong("serial#", eeprom_get_serial());
|
||||
env_set("model", eeprom_get_model());
|
||||
|
||||
/* Set fdt_file vars */
|
||||
i = 0;
|
||||
do {
|
||||
str = gsc_get_dtb_name(i, fdt, sizeof(fdt));
|
||||
str = eeprom_get_dtb_name(i, fdt, sizeof(fdt));
|
||||
if (str) {
|
||||
sprintf(env, "fdt_file%d", i + 1);
|
||||
strcat(fdt, ".dtb");
|
||||
|
@ -146,7 +156,7 @@ int board_late_init(void)
|
|||
sprintf(env, "ethaddr");
|
||||
str = env_get(env);
|
||||
if (!str) {
|
||||
ret = gsc_getmac(i, enetaddr);
|
||||
ret = eeprom_getmac(i, enetaddr);
|
||||
if (!ret)
|
||||
eth_env_set_enetaddr(env, enetaddr);
|
||||
}
|
||||
|
@ -166,7 +176,7 @@ int ft_board_setup(void *blob, struct bd_info *bd)
|
|||
int off;
|
||||
|
||||
/* set board model dt prop */
|
||||
fdt_setprop_string(blob, 0, "board", gsc_get_model());
|
||||
fdt_setprop_string(blob, 0, "board", eeprom_get_model());
|
||||
|
||||
/* update temp thresholds */
|
||||
off = fdt_path_offset(blob, "/thermal-zones/cpu-thermal/trips");
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
if TARGET_APALIS_IMX8X
|
||||
|
||||
config SYS_BOARD
|
||||
default "apalis-imx8x"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "toradex"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "apalis-imx8x"
|
||||
|
||||
config TDX_CFG_BLOCK
|
||||
default y
|
||||
|
||||
config TDX_HAVE_MMC
|
||||
default y
|
||||
|
||||
config TDX_CFG_BLOCK_DEV
|
||||
default "0"
|
||||
|
||||
config TDX_CFG_BLOCK_PART
|
||||
default "1"
|
||||
|
||||
# Toradex config block in eMMC, at the end of 1st "boot sector"
|
||||
config TDX_CFG_BLOCK_OFFSET
|
||||
default "-512"
|
||||
|
||||
config IMX_CONFIG
|
||||
default "board/toradex/apalis-imx8x/apalis-imx8x-imximage.cfg"
|
||||
|
||||
source "board/toradex/common/Kconfig"
|
||||
|
||||
endif
|
|
@ -1,10 +0,0 @@
|
|||
Apalis iMX8X
|
||||
M: Marcel Ziswiler <marcel.ziswiler@toradex.com>
|
||||
W: http://developer.toradex.com/software/linux/linux-software
|
||||
S: Maintained
|
||||
F: arch/arm/dts/fsl-imx8x-apalis.dts
|
||||
F: arch/arm/dts/fsl-imx8x-apalis-u-boot.dtsi
|
||||
F: board/toradex/apalis-imx8x/
|
||||
F: configs/apalis-imx8x_defconfig
|
||||
F: doc/board/toradex/apalis-imx8x.rst
|
||||
F: include/configs/apalis-imx8x.h
|
|
@ -1,6 +0,0 @@
|
|||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Copyright 2020 Toradex
|
||||
#
|
||||
|
||||
obj-y += apalis-imx8x.o
|
|
@ -1,23 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2020 Toradex
|
||||
*
|
||||
* Refer doc/imx/mkimage/imx8image.txt for more details about how-to configure
|
||||
* and create imx8image boot image
|
||||
*/
|
||||
|
||||
|
||||
/* Boot from SD, sector size 0x400 */
|
||||
BOOT_FROM EMMC_FASTBOOT 0x400
|
||||
/* SoC type IMX8QX */
|
||||
SOC_TYPE IMX8QX
|
||||
/* Append seco container image */
|
||||
APPEND mx8qx-ahab-container.img
|
||||
/* Create the 2nd container */
|
||||
CONTAINER
|
||||
/* Add scfw image with exec attribute */
|
||||
IMAGE SCU mx8qx-apalis-scfw-tcm.bin
|
||||
/* Add ATF image with exec attribute */
|
||||
IMAGE A35 bl31.bin 0x80000000
|
||||
/* Add U-Boot image with load attribute */
|
||||
DATA A35 u-boot-dtb.bin 0x80020000
|
|
@ -1,155 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2020 Toradex
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <cpu_func.h>
|
||||
#include <init.h>
|
||||
|
||||
#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/sys_proto.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/io.h>
|
||||
#include <env.h>
|
||||
#include <errno.h>
|
||||
#include <linux/libfdt.h>
|
||||
|
||||
#include "../common/tdx-cfg-block.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#define UART_PAD_CTRL ((SC_PAD_CONFIG_OUT_IN << PADRING_CONFIG_SHIFT) | \
|
||||
(SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \
|
||||
(SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \
|
||||
(SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT))
|
||||
|
||||
static iomux_cfg_t uart1_pads[] = {
|
||||
SC_P_UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
SC_P_UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
};
|
||||
|
||||
static void setup_iomux_uart(void)
|
||||
{
|
||||
imx8_iomux_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
|
||||
}
|
||||
|
||||
void board_mem_get_layout(u64 *phys_sdram_1_start,
|
||||
u64 *phys_sdram_1_size,
|
||||
u64 *phys_sdram_2_start,
|
||||
u64 *phys_sdram_2_size)
|
||||
{
|
||||
u32 is_dualx = 0, val = 0;
|
||||
sc_err_t scierr = sc_misc_otp_fuse_read(-1, 6, &val);
|
||||
|
||||
if (scierr == SC_ERR_NONE) {
|
||||
/* DX has two A35 cores disabled */
|
||||
is_dualx = (val & 0xf) != 0x0;
|
||||
}
|
||||
|
||||
*phys_sdram_1_start = PHYS_SDRAM_1;
|
||||
if (is_dualx)
|
||||
/* Our DX based SKUs only have 1 GB RAM */
|
||||
*phys_sdram_1_size = SZ_1G;
|
||||
else
|
||||
*phys_sdram_1_size = PHYS_SDRAM_1_SIZE;
|
||||
*phys_sdram_2_start = PHYS_SDRAM_2;
|
||||
*phys_sdram_2_size = PHYS_SDRAM_2_SIZE;
|
||||
}
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
sc_pm_clock_rate_t rate;
|
||||
sc_err_t err = 0;
|
||||
|
||||
/*
|
||||
* This works around that having only UART3 up the baudrate is 1.2M
|
||||
* instead of 115.2k. Set UART0 clock root to 80 MHz
|
||||
*/
|
||||
rate = 80000000;
|
||||
err = sc_pm_set_clock_rate(-1, SC_R_UART_0, SC_PM_CLK_PER, &rate);
|
||||
if (err != SC_ERR_NONE)
|
||||
return 0;
|
||||
|
||||
/* Set UART3 clock root to 80 MHz and enable it */
|
||||
rate = SC_80MHZ;
|
||||
err = sc_pm_setup_uart(SC_R_UART_1, rate);
|
||||
if (err != SC_ERR_NONE)
|
||||
return 0;
|
||||
|
||||
setup_iomux_uart();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_DM_GPIO)
|
||||
static void board_gpio_init(void)
|
||||
{
|
||||
/* TODO */
|
||||
}
|
||||
#else
|
||||
static inline void board_gpio_init(void) {}
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_FEC_MXC)
|
||||
#include <miiphy.h>
|
||||
|
||||
int board_phy_config(struct phy_device *phydev)
|
||||
{
|
||||
if (phydev->drv->config)
|
||||
phydev->drv->config(phydev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int checkboard(void)
|
||||
{
|
||||
puts("Model: Toradex Apalis iMX8X\n");
|
||||
|
||||
build_info();
|
||||
print_bootinfo();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
board_gpio_init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Board specific reset that is system reset.
|
||||
*/
|
||||
void reset_cpu(void)
|
||||
{
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
return ft_common_board_setup(blob, bd);
|
||||
}
|
||||
#endif
|
||||
|
||||
int board_mmc_get_env_dev(int devno)
|
||||
{
|
||||
return devno;
|
||||
}
|
||||
|
||||
int board_late_init(void)
|
||||
{
|
||||
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
|
||||
/* TODO move to common */
|
||||
env_set("board_name", "Apalis iMX8X");
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -304,13 +304,6 @@ static void setup_dtemode_uart(void)
|
|||
clrbits_le32((u32 *)(UART4_BASE + UCR3), UCR3_DCD | UCR3_RI);
|
||||
clrbits_le32((u32 *)(UART5_BASE + UCR3), UCR3_DCD | UCR3_RI);
|
||||
}
|
||||
static void setup_dcemode_uart(void)
|
||||
{
|
||||
clrbits_le32((u32 *)(UART1_BASE + UFCR), UFCR_DCEDTE);
|
||||
clrbits_le32((u32 *)(UART2_BASE + UFCR), UFCR_DCEDTE);
|
||||
clrbits_le32((u32 *)(UART4_BASE + UFCR), UFCR_DCEDTE);
|
||||
clrbits_le32((u32 *)(UART5_BASE + UFCR), UFCR_DCEDTE);
|
||||
}
|
||||
|
||||
static void setup_iomux_dte_uart(void)
|
||||
{
|
||||
|
@ -318,12 +311,6 @@ static void setup_iomux_dte_uart(void)
|
|||
imx_iomux_v3_setup_multiple_pads(uart1_pads_dte,
|
||||
ARRAY_SIZE(uart1_pads_dte));
|
||||
}
|
||||
static void setup_iomux_dce_uart(void)
|
||||
{
|
||||
setup_dcemode_uart();
|
||||
imx_iomux_v3_setup_multiple_pads(uart1_pads_dce,
|
||||
ARRAY_SIZE(uart1_pads_dce));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USB_EHCI_MX6
|
||||
int board_ehci_hcd_init(int port)
|
||||
|
@ -665,11 +652,8 @@ int board_early_init_f(void)
|
|||
{
|
||||
imx_iomux_v3_setup_multiple_pads(pwr_intb_pads,
|
||||
ARRAY_SIZE(pwr_intb_pads));
|
||||
#ifndef CONFIG_TDX_APALIS_IMX6_V1_0
|
||||
setup_iomux_dte_uart();
|
||||
#else
|
||||
setup_iomux_dce_uart();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -714,23 +698,7 @@ int board_late_init(void)
|
|||
rev = get_board_revision();
|
||||
snprintf(env_str, ARRAY_SIZE(env_str), "%.4x", rev);
|
||||
env_set("board_rev", env_str);
|
||||
|
||||
#ifndef CONFIG_TDX_APALIS_IMX6_V1_0
|
||||
if ((rev & 0xfff0) == 0x0100) {
|
||||
char *fdt_env;
|
||||
|
||||
/* reconfigure the UART to DCE mode dynamically if on V1.0 HW */
|
||||
setup_iomux_dce_uart();
|
||||
|
||||
/* if using the default device tree, use version for V1.0 HW */
|
||||
fdt_env = env_get("fdt_file");
|
||||
if ((fdt_env != NULL) && (strcmp(FDT_FILE, fdt_env) == 0)) {
|
||||
env_set("fdt_file", FDT_FILE_V1_0);
|
||||
printf("patching fdt_file to " FDT_FILE_V1_0 "\n");
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_TDX_APALIS_IMX6_V1_0 */
|
||||
#endif /* CONFIG_REVISION_TAG */
|
||||
#endif /* CONFIG_BOARD_LATE_INIT */
|
||||
|
||||
#ifdef CONFIG_CMD_USB_SDP
|
||||
if (is_boot_from_usb()) {
|
||||
|
@ -1129,10 +1097,8 @@ void board_init_f(ulong dummy)
|
|||
/* UART clocks enabled and gd valid - init serial console */
|
||||
preloader_console_init();
|
||||
|
||||
#ifndef CONFIG_TDX_APALIS_IMX6_V1_0
|
||||
/* Make sure we use dte mode */
|
||||
setup_dtemode_uart();
|
||||
#endif
|
||||
|
||||
/* DDR initialization */
|
||||
spl_dram_init();
|
||||
|
|
|
@ -319,42 +319,18 @@ int ft_board_setup(void *blob, struct bd_info *bd)
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_EHCI_MX7
|
||||
static iomux_v3_cfg_t const usb_otg2_pads[] = {
|
||||
MX7D_PAD_UART3_CTS_B__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL),
|
||||
};
|
||||
|
||||
int board_ehci_hcd_init(int port)
|
||||
int board_fix_fdt(void *rw_fdt_blob)
|
||||
{
|
||||
switch (port) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
if (is_cpu_type(MXC_CPU_MX7S))
|
||||
return -ENODEV;
|
||||
/* i.MX 7Solo has only one single USB OTG1 but no USB host port */
|
||||
if (is_cpu_type(MXC_CPU_MX7S)) {
|
||||
int offset = fdt_path_offset(rw_fdt_blob, "/soc/bus@30800000/usb@30b20000");
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(usb_otg2_pads,
|
||||
ARRAY_SIZE(usb_otg2_pads));
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
return fdt_status_disabled(rw_fdt_blob, offset);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_usb_phy_mode(int port)
|
||||
{
|
||||
switch (port) {
|
||||
case 0:
|
||||
if (gpio_get_value(USB_CDET_GPIO))
|
||||
return USB_INIT_DEVICE;
|
||||
else
|
||||
return USB_INIT_HOST;
|
||||
case 1:
|
||||
default:
|
||||
return USB_INIT_HOST;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(CONFIG_BOARD_LATE_INIT)
|
||||
int board_late_init(void)
|
||||
{
|
||||
|
@ -373,4 +349,4 @@ int board_late_init(void)
|
|||
}
|
||||
#endif /* CONFIG_BOARD_LATE_INIT */
|
||||
|
||||
#endif
|
||||
#endif /* CONFIG_USB_EHCI_MX7 */
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
if TARGET_COLIBRI_PXA270
|
||||
|
||||
config SYS_BOARD
|
||||
default "colibri_pxa270"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "toradex"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "colibri_pxa270"
|
||||
|
||||
config TDX_CFG_BLOCK
|
||||
default y
|
||||
|
||||
config TDX_HAVE_NOR
|
||||
default y
|
||||
|
||||
config TDX_CFG_BLOCK_OFFSET
|
||||
default "262144"
|
||||
|
||||
source "board/toradex/common/Kconfig"
|
||||
|
||||
endif
|
|
@ -1,6 +0,0 @@
|
|||
COLIBRI_PXA270 BOARD
|
||||
M: Marek Vasut <marek.vasut@gmail.com>
|
||||
S: Maintained
|
||||
F: board/toradex/colibri_pxa270/
|
||||
F: include/configs/colibri_pxa270.h
|
||||
F: configs/colibri_pxa270_defconfig
|
|
@ -1,7 +0,0 @@
|
|||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Toradex Colibri PXA270 Support
|
||||
#
|
||||
# Copyright (C) 2010 Marek Vasut <marek.vasut@gmail.com>
|
||||
|
||||
obj-y := colibri_pxa270.o
|
|
@ -1,153 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Toradex Colibri PXA270 Support
|
||||
*
|
||||
* Copyright (C) 2010 Marek Vasut <marek.vasut@gmail.com>
|
||||
* Copyright (C) 2016-2019 Marcel Ziswiler <marcel.ziswiler@toradex.com>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <cpu_func.h>
|
||||
#include <dm.h>
|
||||
#include <init.h>
|
||||
#include <net.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/pxa.h>
|
||||
#include <asm/arch/regs-mmc.h>
|
||||
#include <asm/arch/regs-uart.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
#include <dm/platdata.h>
|
||||
#include <dm/platform_data/pxa_mmc_gen.h>
|
||||
#include <dm/platform_data/serial_pxa.h>
|
||||
#include <netdev.h>
|
||||
#include <serial.h>
|
||||
#include <usb.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <linux/delay.h>
|
||||
#include "../common/tdx-common.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
/* We have RAM, disable cache */
|
||||
dcache_disable();
|
||||
icache_disable();
|
||||
|
||||
/* arch number of Toradex Colibri PXA270 */
|
||||
gd->bd->bi_arch_number = MACH_TYPE_COLIBRI;
|
||||
|
||||
/* address of boot parameters */
|
||||
gd->bd->bi_boot_params = 0xa0000100;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int checkboard(void)
|
||||
{
|
||||
puts("Model: Toradex Colibri PXA270\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
|
||||
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
return ft_common_board_setup(blob, bd);
|
||||
}
|
||||
#endif
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
pxa2xx_dram_init();
|
||||
gd->ram_size = PHYS_SDRAM_1_SIZE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CMD_USB
|
||||
int board_usb_init(int index, enum usb_init_type init)
|
||||
{
|
||||
writel((readl(UHCHR) | UHCHR_PCPL | UHCHR_PSPL) &
|
||||
~(UHCHR_SSEP0 | UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE),
|
||||
UHCHR);
|
||||
|
||||
writel(readl(UHCHR) | UHCHR_FSBIR, UHCHR);
|
||||
|
||||
while (UHCHR & UHCHR_FSBIR)
|
||||
;
|
||||
|
||||
writel(readl(UHCHR) & ~UHCHR_SSE, UHCHR);
|
||||
writel((UHCHIE_UPRIE | UHCHIE_RWIE), UHCHIE);
|
||||
|
||||
/* Clear any OTG Pin Hold */
|
||||
if (readl(PSSR) & PSSR_OTGPH)
|
||||
writel(readl(PSSR) | PSSR_OTGPH, PSSR);
|
||||
|
||||
writel(readl(UHCRHDA) & ~(0x200), UHCRHDA);
|
||||
writel(readl(UHCRHDA) | 0x100, UHCRHDA);
|
||||
|
||||
/* Set port power control mask bits, only 3 ports. */
|
||||
writel(readl(UHCRHDB) | (0x7 << 17), UHCRHDB);
|
||||
|
||||
/* enable port 2 */
|
||||
writel(readl(UP2OCR) | UP2OCR_HXOE | UP2OCR_HXS |
|
||||
UP2OCR_DMPDE | UP2OCR_DPPDE, UP2OCR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_usb_cleanup(int index, enum usb_init_type init)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void usb_board_stop(void)
|
||||
{
|
||||
writel(readl(UHCHR) | UHCHR_FHR, UHCHR);
|
||||
udelay(11);
|
||||
writel(readl(UHCHR) & ~UHCHR_FHR, UHCHR);
|
||||
|
||||
writel(readl(UHCCOMS) | 1, UHCCOMS);
|
||||
udelay(10);
|
||||
|
||||
writel(readl(CKEN) & ~CKEN10_USBHOST, CKEN);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DRIVER_DM9000
|
||||
int board_eth_init(struct bd_info *bis)
|
||||
{
|
||||
return dm9000_initialize(bis);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CMD_MMC
|
||||
#if !CONFIG_IS_ENABLED(DM_MMC)
|
||||
int board_mmc_init(struct bd_info *bis)
|
||||
{
|
||||
pxa_mmc_register(0);
|
||||
return 0;
|
||||
}
|
||||
#else /* !CONFIG_IS_ENABLED(DM_MMC) */
|
||||
static const struct pxa_mmc_plat mmc_plat = {
|
||||
.base = (struct pxa_mmc_regs *)MMC0_BASE,
|
||||
};
|
||||
|
||||
U_BOOT_DRVINFO(pxa_mmcs) = {
|
||||
.name = "pxa_mmc",
|
||||
.plat = &mmc_plat,
|
||||
};
|
||||
#endif /* !CONFIG_IS_ENABLED(DM_MMC) */
|
||||
#endif
|
||||
|
||||
static const struct pxa_serial_plat serial_plat = {
|
||||
.base = (struct pxa_uart_regs *)FFUART_BASE,
|
||||
.port = FFUART_INDEX,
|
||||
.baudrate = CONFIG_BAUDRATE,
|
||||
};
|
||||
|
||||
U_BOOT_DRVINFO(pxa_serials) = {
|
||||
.name = "serial_pxa",
|
||||
.plat = &serial_plat,
|
||||
};
|
|
@ -13,7 +13,6 @@
|
|||
|
||||
#if defined(CONFIG_TARGET_APALIS_IMX6) || \
|
||||
defined(CONFIG_TARGET_APALIS_IMX8) || \
|
||||
defined(CONFIG_TARGET_APALIS_IMX8X) || \
|
||||
defined(CONFIG_TARGET_COLIBRI_IMX6) || \
|
||||
defined(CONFIG_TARGET_COLIBRI_IMX8X) || \
|
||||
defined(CONFIG_TARGET_VERDIN_IMX8MM) || \
|
||||
|
@ -23,11 +22,6 @@
|
|||
#else
|
||||
#define is_cpu_type(cpu) (0)
|
||||
#endif
|
||||
#if defined(CONFIG_CPU_PXA27X)
|
||||
#include <asm/arch-pxa/pxa.h>
|
||||
#else
|
||||
#define cpu_is_pxa27x(cpu) (0)
|
||||
#endif
|
||||
#include <cli.h>
|
||||
#include <console.h>
|
||||
#include <env.h>
|
||||
|
@ -370,16 +364,12 @@ static int get_cfgblock_interactive(void)
|
|||
/* Unknown module by default */
|
||||
tdx_hw_tag.prodid = 0;
|
||||
|
||||
if (cpu_is_pxa27x())
|
||||
sprintf(message, "Is the module the 312 MHz version? [y/N] ");
|
||||
else
|
||||
sprintf(message, "Is the module an IT version? [y/N] ");
|
||||
sprintf(message, "Is the module an IT version? [y/N] ");
|
||||
|
||||
len = cli_readline(message);
|
||||
it = console_buffer[0];
|
||||
|
||||
#if defined(CONFIG_TARGET_APALIS_IMX8) || \
|
||||
defined(CONFIG_TARGET_APALIS_IMX8X) || \
|
||||
defined(CONFIG_TARGET_COLIBRI_IMX6ULL) || \
|
||||
defined(CONFIG_TARGET_COLIBRI_IMX8X) || \
|
||||
defined(CONFIG_TARGET_VERDIN_IMX8MM) || \
|
||||
|
@ -451,16 +441,7 @@ static int get_cfgblock_interactive(void)
|
|||
tdx_hw_tag.prodid = APALIS_IMX8QP;
|
||||
}
|
||||
} else if (is_cpu_type(MXC_CPU_IMX8QXP)) {
|
||||
#ifdef CONFIG_TARGET_APALIS_IMX8X
|
||||
if (it == 'y' || it == 'Y' || wb == 'y' || wb == 'Y') {
|
||||
tdx_hw_tag.prodid = APALIS_IMX8QXP_WIFI_BT_IT;
|
||||
} else {
|
||||
if (gd->ram_size == 0x40000000)
|
||||
tdx_hw_tag.prodid = APALIS_IMX8DXP;
|
||||
else
|
||||
tdx_hw_tag.prodid = APALIS_IMX8QXP;
|
||||
}
|
||||
#elif CONFIG_TARGET_COLIBRI_IMX8X
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX8X
|
||||
if (it == 'y' || it == 'Y') {
|
||||
if (wb == 'y' || wb == 'Y')
|
||||
tdx_hw_tag.prodid = COLIBRI_IMX8QXP_WIFI_BT_IT;
|
||||
|
@ -511,11 +492,6 @@ static int get_cfgblock_interactive(void)
|
|||
tdx_hw_tag.prodid = COLIBRI_T20_256MB;
|
||||
else
|
||||
tdx_hw_tag.prodid = COLIBRI_T20_512MB;
|
||||
} else if (cpu_is_pxa27x()) {
|
||||
if (it == 'y' || it == 'Y')
|
||||
tdx_hw_tag.prodid = COLIBRI_PXA270_312MHZ;
|
||||
else
|
||||
tdx_hw_tag.prodid = COLIBRI_PXA270_520MHZ;
|
||||
}
|
||||
#if defined(CONFIG_TARGET_APALIS_T30) || defined(CONFIG_TARGET_COLIBRI_T30)
|
||||
else if (!strcmp("tegra30", soc)) {
|
||||
|
@ -563,10 +539,6 @@ static int get_cfgblock_interactive(void)
|
|||
tdx_hw_tag.ver_minor = console_buffer[2] - '0';
|
||||
tdx_hw_tag.ver_assembly = console_buffer[3] - 'A';
|
||||
|
||||
if (cpu_is_pxa27x() && tdx_hw_tag.ver_major == 1)
|
||||
tdx_hw_tag.prodid -= (COLIBRI_PXA270_312MHZ -
|
||||
COLIBRI_PXA270_V1_312MHZ);
|
||||
|
||||
while (len < 8) {
|
||||
sprintf(message, "Enter module serial number: ");
|
||||
len = cli_readline(message);
|
||||
|
|
|
@ -15,6 +15,7 @@ CONFIG_SYS_MEMTEST_END=0x89000000
|
|||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_REMAKE_ELF=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
CONFIG_LOG=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
|
|
|
@ -1,82 +0,0 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_IMX8=y
|
||||
CONFIG_SYS_TEXT_BASE=0x80020000
|
||||
CONFIG_SYS_MALLOC_LEN=0x2800000
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x4000
|
||||
CONFIG_NR_DRAM_BANKS=3
|
||||
CONFIG_ENV_SIZE=0x2000
|
||||
CONFIG_ENV_OFFSET=0xFFFFDE00
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-imx8qxp-apalis"
|
||||
CONFIG_TARGET_APALIS_IMX8X=y
|
||||
CONFIG_SYS_LOAD_ADDR=0x89000000
|
||||
CONFIG_SYS_MEMTEST_START=0x88000000
|
||||
CONFIG_SYS_MEMTEST_END=0x89000000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_REMAKE_ELF=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_LOG=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_BOARD_EARLY_INIT_F=y
|
||||
CONFIG_SYS_PROMPT="Apalis iMX8X # "
|
||||
CONFIG_CMD_CPU=y
|
||||
# CONFIG_BOOTM_NETBSD is not set
|
||||
CONFIG_CMD_ASKENV=y
|
||||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_DM=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_UUID=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_ENV_OVERWRITE=y
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_SYS_MMC_ENV_PART=1
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
CONFIG_USE_ETHPRIME=y
|
||||
CONFIG_ETHPRIME="eth0"
|
||||
CONFIG_VERSION_VARIABLE=y
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_IP_DEFRAG=y
|
||||
CONFIG_TFTP_BLOCKSIZE=4096
|
||||
CONFIG_TFTP_TSIZE=y
|
||||
CONFIG_BOOTCOUNT_LIMIT=y
|
||||
CONFIG_BOOTCOUNT_ENV=y
|
||||
CONFIG_CLK_IMX8=y
|
||||
CONFIG_CPU=y
|
||||
CONFIG_MXC_GPIO=y
|
||||
CONFIG_DM_I2C=y
|
||||
CONFIG_SYS_I2C_IMX_LPI2C=y
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_I2C_MUX_PCA954x=y
|
||||
CONFIG_MISC=y
|
||||
CONFIG_SUPPORT_EMMC_BOOT=y
|
||||
CONFIG_FSL_USDHC=y
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_ADDR_ENABLE=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_PHY_MICREL_KSZ90X1=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_FEC_MXC_SHARE_MDIO=y
|
||||
CONFIG_FEC_MXC_MDIO_BASE=0x5B040000
|
||||
CONFIG_FEC_MXC=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX8=y
|
||||
CONFIG_POWER_DOMAIN=y
|
||||
CONFIG_IMX8_POWER_DOMAIN=y
|
||||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_FSL_LPUART=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_IMX_SCU_THERMAL=y
|
||||
# CONFIG_EFI_LOADER is not set
|
|
@ -12,6 +12,7 @@ CONFIG_TEGRA124=y
|
|||
CONFIG_TARGET_APALIS_TK1=y
|
||||
CONFIG_SYS_LOAD_ADDR=0x81000000
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_BOOTCOMMAND="setenv fdtfile ${soc}-${fdt_module}-${fdt_board}.dtb && run distro_bootcmd"
|
||||
|
|
|
@ -26,8 +26,11 @@ CONFIG_SYS_MEMTEST_START=0x10000000
|
|||
CONFIG_SYS_MEMTEST_END=0x10010000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_BOOTCOMMAND="run distro_bootcmd; usb start; setenv stdout serial,vidconsole; setenv stdin serial,usbkbd"
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx6q-apalis-${fdt_board}.dtb"
|
||||
CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
|
@ -56,7 +59,6 @@ CONFIG_CMD_USB=y
|
|||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_CMD_NFS is not set
|
||||
CONFIG_CMD_BMP=y
|
||||
CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
|
@ -106,13 +108,4 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
|||
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_VIDEO_LOGO=y
|
||||
# CONFIG_VIDEO_BPP8 is not set
|
||||
# CONFIG_VIDEO_BPP32 is not set
|
||||
CONFIG_SYS_WHITE_ON_BLACK=y
|
||||
CONFIG_VIDEO_IPUV3=y
|
||||
CONFIG_SPLASH_SCREEN=y
|
||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||
CONFIG_BMP_16BPP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
|
|
|
@ -13,9 +13,10 @@ CONFIG_SYS_MEMTEST_START=0x80000000
|
|||
CONFIG_SYS_MEMTEST_END=0x88000000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="setenv fdtfile imx6ull-colibri${variant}-${fdt_board}.dtb"
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx6ull-colibri${variant}-${fdt_board}.dtb"
|
||||
# CONFIG_CONSOLE_MUX is not set
|
||||
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
|
@ -37,7 +38,6 @@ CONFIG_CMD_MMC=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_CMD_BMP=y
|
||||
CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_REGULATOR=y
|
||||
|
@ -79,10 +79,4 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
|||
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_VIDEO_LOGO=y
|
||||
CONFIG_SYS_WHITE_ON_BLACK=y
|
||||
CONFIG_SPLASH_SCREEN=y
|
||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||
CONFIG_BMP_16BPP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
|
|
|
@ -14,10 +14,11 @@ CONFIG_SYS_MEMTEST_START=0x80000000
|
|||
CONFIG_SYS_MEMTEST_END=0x88000000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_BOOTCOMMAND="run ubiboot || run distro_bootcmd;"
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="setenv fdtfile imx6ull-colibri${variant}-${fdt_board}.dtb"
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx6ull-colibri${variant}-${fdt_board}.dtb"
|
||||
# CONFIG_CONSOLE_MUX is not set
|
||||
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
|
@ -42,7 +43,6 @@ CONFIG_CMD_NAND_TORTURE=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_CMD_BMP=y
|
||||
CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_REGULATOR=y
|
||||
|
@ -95,12 +95,5 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
|||
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_VIDEO_LOGO=y
|
||||
CONFIG_SYS_WHITE_ON_BLACK=y
|
||||
CONFIG_VIDEO_MXS=y
|
||||
CONFIG_SPLASH_SCREEN=y
|
||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||
CONFIG_BMP_16BPP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
CONFIG_FDT_FIXUP_PARTITIONS=y
|
||||
|
|
|
@ -15,6 +15,7 @@ CONFIG_SYS_MEMTEST_END=0x89000000
|
|||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_REMAKE_ELF=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_LOG=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
|
|
|
@ -25,8 +25,11 @@ CONFIG_SYS_MEMTEST_START=0x10000000
|
|||
CONFIG_SYS_MEMTEST_END=0x10010000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_BOOTCOMMAND="run distro_bootcmd; usb start; setenv stdout serial,vidconsole; setenv stdin serial,usbkbd"
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx6dl-colibri-${fdt_board}.dtb"
|
||||
CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
|
@ -55,7 +58,6 @@ CONFIG_CMD_USB=y
|
|||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_CMD_NFS is not set
|
||||
CONFIG_CMD_BMP=y
|
||||
CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
|
@ -104,13 +106,4 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
|||
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_VIDEO_LOGO=y
|
||||
# CONFIG_VIDEO_BPP8 is not set
|
||||
# CONFIG_VIDEO_BPP32 is not set
|
||||
CONFIG_SYS_WHITE_ON_BLACK=y
|
||||
CONFIG_VIDEO_IPUV3=y
|
||||
CONFIG_SPLASH_SCREEN=y
|
||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||
CONFIG_BMP_16BPP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
|
|
|
@ -10,13 +10,16 @@ CONFIG_TARGET_COLIBRI_IMX7=y
|
|||
CONFIG_IMX_RDC=y
|
||||
CONFIG_IMX_BOOTAUX=y
|
||||
CONFIG_IMX_HAB=y
|
||||
CONFIG_OF_BOARD_FIXUP=y
|
||||
CONFIG_SYS_MEMTEST_START=0x80000000
|
||||
CONFIG_SYS_MEMTEST_END=0x8c000000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_BOOTCOMMAND="run ubiboot ; echo ; echo ubiboot failed ; run distro_bootcmd;"
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="setenv fdtfile ${soc}-colibri-${fdt_board}.dtb "
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile ${soc}-colibri-${fdt_board}.dtb "
|
||||
# CONFIG_CONSOLE_MUX is not set
|
||||
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
|
@ -38,9 +41,9 @@ CONFIG_CMD_MTD=y
|
|||
CONFIG_CMD_NAND_TRIMFFS=y
|
||||
CONFIG_CMD_NAND_TORTURE=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_BOOTP_PXE is not set
|
||||
CONFIG_CMD_BMP=y
|
||||
CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
# CONFIG_CMD_HASH is not set
|
||||
|
@ -90,12 +93,5 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
|||
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_VIDEO_LOGO=y
|
||||
CONFIG_SYS_WHITE_ON_BLACK=y
|
||||
CONFIG_VIDEO_MXS=y
|
||||
CONFIG_SPLASH_SCREEN=y
|
||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||
CONFIG_BMP_16BPP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
CONFIG_FDT_FIXUP_PARTITIONS=y
|
||||
|
|
|
@ -15,9 +15,10 @@ CONFIG_SYS_MEMTEST_START=0x80000000
|
|||
CONFIG_SYS_MEMTEST_END=0x8c000000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="setenv fdtfile ${soc}-colibri-emmc-${fdt_board}.dtb"
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile ${soc}-colibri-emmc-${fdt_board}.dtb"
|
||||
# CONFIG_CONSOLE_MUX is not set
|
||||
CONFIG_SYS_CONSOLE_IS_IN_ENV=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
|
@ -37,8 +38,8 @@ CONFIG_CMD_GPT=y
|
|||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_CMD_BMP=y
|
||||
CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
# CONFIG_CMD_HASH is not set
|
||||
|
@ -83,10 +84,4 @@ CONFIG_USB_GADGET_MANUFACTURER="Toradex"
|
|||
CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
CONFIG_VIDEO_LOGO=y
|
||||
CONFIG_SYS_WHITE_ON_BLACK=y
|
||||
CONFIG_SPLASH_SCREEN=y
|
||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||
CONFIG_BMP_16BPP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_SYS_DCACHE_OFF=y
|
||||
CONFIG_ARCH_CPU_INIT=y
|
||||
CONFIG_TARGET_COLIBRI_PXA270=y
|
||||
CONFIG_SYS_TEXT_BASE=0x0
|
||||
CONFIG_SYS_MALLOC_LEN=0x20000
|
||||
CONFIG_NR_DRAM_BANKS=1
|
||||
CONFIG_ENV_SIZE=0x40000
|
||||
CONFIG_ENV_SECT_SIZE=0x40000
|
||||
CONFIG_SYS_LOAD_ADDR=0xa0000000
|
||||
CONFIG_ENV_ADDR=0x80000
|
||||
CONFIG_ENV_VARS_UBOOT_CONFIG=y
|
||||
CONFIG_HAS_BOARD_SIZE_LIMIT=y
|
||||
CONFIG_BOARD_SIZE_LIMIT=262144
|
||||
CONFIG_TIMESTAMP=y
|
||||
CONFIG_SYS_MONITOR_BASE=0x00000000
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=tty0 console=ttyS0,115200"
|
||||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="if fatload mmc 0 0xa0000000 uImage; then bootm 0xa0000000; fi; if usb reset && fatload usb 0 0xa0000000 uImage; then bootm 0xa0000000; fi; bootm 0xc0000;"
|
||||
CONFIG_SYS_DEVICE_NULLDEV=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
# CONFIG_CMDLINE_EDITING is not set
|
||||
# CONFIG_AUTO_COMPLETE is not set
|
||||
# CONFIG_SYS_LONGHELP is not set
|
||||
CONFIG_SYS_PROMPT="$ "
|
||||
# CONFIG_CMD_ELF is not set
|
||||
# CONFIG_CMD_EXPORTENV is not set
|
||||
# CONFIG_CMD_IMPORTENV is not set
|
||||
CONFIG_CMD_DM=y
|
||||
# CONFIG_CMD_LOADB is not set
|
||||
# CONFIG_CMD_LOADS is not set
|
||||
CONFIG_CMD_MMC=y
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
CONFIG_CMD_DHCP=y
|
||||
CONFIG_BOOTP_BOOTFILESIZE=y
|
||||
CONFIG_CMD_PING=y
|
||||
CONFIG_CMD_EXT2=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_ENV_OVERWRITE=y
|
||||
CONFIG_ENV_IS_IN_FLASH=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
CONFIG_NET_RETRY_COUNT=10
|
||||
CONFIG_DM=y
|
||||
CONFIG_PXA_MMC_GENERIC=y
|
||||
CONFIG_MTD_NOR_FLASH=y
|
||||
CONFIG_FLASH_CFI_DRIVER=y
|
||||
CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
||||
CONFIG_SYS_FLASH_PROTECTION=y
|
||||
CONFIG_SYS_FLASH_CFI=y
|
||||
CONFIG_DRIVER_DM9000=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_PXA_SERIAL=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_REGEX is not set
|
||||
CONFIG_OF_LIBFDT=y
|
|
@ -25,7 +25,6 @@ CONFIG_CMD_MMC=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
# CONFIG_CMD_NFS is not set
|
||||
CONFIG_CMD_BMP=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_PMIC=y
|
||||
CONFIG_CMD_REGULATOR=y
|
||||
|
@ -69,8 +68,4 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
|||
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
# CONFIG_VIDEO_BPP8 is not set
|
||||
CONFIG_VIDEO_TEGRA20=y
|
||||
CONFIG_CONSOLE_SCROLL_LINES=10
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
|
|
|
@ -20,7 +20,7 @@ CONFIG_BOOTDELAY=1
|
|||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="run ubiboot || run distro_bootcmd;"
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="setenv fdtfile ${soc}-colibri-${fdt_board}.dtb"
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile ${soc}-colibri-${fdt_board}.dtb"
|
||||
CONFIG_LOGLEVEL=3
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
|
@ -52,7 +52,6 @@ CONFIG_CMD_DHCP=y
|
|||
# CONFIG_CMD_NFS is not set
|
||||
CONFIG_CMD_MII=y
|
||||
CONFIG_CMD_PING=y
|
||||
CONFIG_CMD_BMP=y
|
||||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_FS_GENERIC=y
|
||||
|
@ -99,10 +98,6 @@ CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
|||
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_DM_VIDEO=y
|
||||
# CONFIG_VIDEO_BPP8 is not set
|
||||
# CONFIG_VIDEO_BPP16 is not set
|
||||
CONFIG_SPLASH_SCREEN_ALIGN=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
CONFIG_FDT_FIXUP_PARTITIONS=y
|
||||
# CONFIG_EFI_LOADER is not set
|
||||
|
|
|
@ -14,11 +14,11 @@ CONFIG_SYS_I2C_MXC_I2C1=y
|
|||
CONFIG_SYS_I2C_MXC_I2C2=y
|
||||
CONFIG_SYS_I2C_MXC_I2C3=y
|
||||
CONFIG_CMD_EECONFIG=y
|
||||
CONFIG_CMD_GSC=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="imx6q-gw54xx"
|
||||
CONFIG_SPL_TEXT_BASE=0x00908000
|
||||
CONFIG_SPL_MMC=y
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL_STACK_R_ADDR=0x18000000
|
||||
CONFIG_SPL=y
|
||||
CONFIG_ENV_OFFSET_REDUND=0xD1400
|
||||
|
|
|
@ -14,11 +14,11 @@ CONFIG_SYS_I2C_MXC_I2C1=y
|
|||
CONFIG_SYS_I2C_MXC_I2C2=y
|
||||
CONFIG_SYS_I2C_MXC_I2C3=y
|
||||
CONFIG_CMD_EECONFIG=y
|
||||
CONFIG_CMD_GSC=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="imx6q-gw54xx"
|
||||
CONFIG_SPL_TEXT_BASE=0x00908000
|
||||
CONFIG_SPL_MMC=y
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL_STACK_R_ADDR=0x18000000
|
||||
CONFIG_SPL=y
|
||||
CONFIG_ENV_OFFSET_REDUND=0xD1400
|
||||
|
|
|
@ -14,11 +14,11 @@ CONFIG_SYS_I2C_MXC_I2C1=y
|
|||
CONFIG_SYS_I2C_MXC_I2C2=y
|
||||
CONFIG_SYS_I2C_MXC_I2C3=y
|
||||
CONFIG_CMD_EECONFIG=y
|
||||
CONFIG_CMD_GSC=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="imx6q-gw54xx"
|
||||
CONFIG_SPL_TEXT_BASE=0x00908000
|
||||
CONFIG_SPL_MMC=y
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL_STACK_R_ADDR=0x18000000
|
||||
CONFIG_SPL=y
|
||||
CONFIG_ENV_OFFSET_REDUND=0x1080000
|
||||
|
|
|
@ -79,6 +79,7 @@ CONFIG_DM_REGULATOR=y
|
|||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_PWM=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_PWM_IMX=y
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
|
|
|
@ -16,7 +16,7 @@ CONFIG_SPL_SERIAL=y
|
|||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL=y
|
||||
CONFIG_ENV_OFFSET_REDUND=0xff8000
|
||||
CONFIG_SYS_LOAD_ADDR=0x40480000
|
||||
CONFIG_SYS_LOAD_ADDR=0x48200000
|
||||
CONFIG_SYS_MEMTEST_START=0x40000000
|
||||
CONFIG_SYS_MEMTEST_END=0x80000000
|
||||
CONFIG_LTO=y
|
||||
|
@ -40,13 +40,17 @@ CONFIG_SPL_WATCHDOG=y
|
|||
CONFIG_SYS_PROMPT="u-boot=> "
|
||||
# CONFIG_CMD_EXPORTENV is not set
|
||||
# CONFIG_CMD_IMPORTENV is not set
|
||||
# CONFIG_CMD_CRC32 is not set
|
||||
CONFIG_CRC32_VERIFY=y
|
||||
CONFIG_CMD_MD5SUM=y
|
||||
CONFIG_MD5SUM_VERIFY=y
|
||||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_FUSE=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_UUID=y
|
||||
|
@ -71,6 +75,7 @@ CONFIG_SPL_CLK_COMPOSITE_CCF=y
|
|||
CONFIG_CLK_COMPOSITE_CCF=y
|
||||
CONFIG_SPL_CLK_IMX8MM=y
|
||||
CONFIG_CLK_IMX8MM=y
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_MXC_GPIO=y
|
||||
CONFIG_DM_I2C=y
|
||||
CONFIG_LED=y
|
||||
|
@ -98,6 +103,8 @@ CONFIG_MII=y
|
|||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX8M=y
|
||||
CONFIG_POWER_DOMAIN=y
|
||||
CONFIG_IMX8M_POWER_DOMAIN=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_DM_PMIC_BD71837=y
|
||||
CONFIG_SPL_DM_PMIC_BD71837=y
|
||||
|
@ -106,6 +113,8 @@ CONFIG_SPL_DM_PMIC_MP5416=y
|
|||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
# CONFIG_SPL_DM_SERIAL is not set
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SPL_SYSRESET=y
|
||||
|
@ -113,5 +122,22 @@ CONFIG_SYSRESET_PSCI=y
|
|||
CONFIG_SYSRESET_WATCHDOG=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_IMX_TMU=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_HOST_ETHER=y
|
||||
CONFIG_USB_ETHER_ASIX=y
|
||||
CONFIG_USB_ETHER_ASIX88179=y
|
||||
CONFIG_USB_ETHER_LAN75XX=y
|
||||
CONFIG_USB_ETHER_LAN78XX=y
|
||||
CONFIG_USB_ETHER_MCS7830=y
|
||||
CONFIG_USB_ETHER_RTL8152=y
|
||||
CONFIG_USB_ETHER_SMSC95XX=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="Gateworks"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x0525
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_IMX_WATCHDOG=y
|
||||
CONFIG_HEXDUMP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
|
|
|
@ -80,6 +80,7 @@ CONFIG_SPL_DM_PMIC_BD71837=y
|
|||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SYSRESET_PSCI=y
|
||||
|
|
|
@ -77,6 +77,7 @@ CONFIG_SPL_DM_PMIC_BD71837=y
|
|||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SYSRESET_PSCI=y
|
||||
|
|
|
@ -16,7 +16,7 @@ CONFIG_SPL_SERIAL=y
|
|||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x48000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x40480000
|
||||
CONFIG_SYS_LOAD_ADDR=0x42000000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_EXTERNAL_OFFSET=0x3000
|
||||
|
@ -76,6 +76,7 @@ CONFIG_PINCTRL_IMX8M=y
|
|||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SPL_SYSRESET=y
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_SPL_SYS_ICACHE_OFF=y
|
||||
CONFIG_SPL_SYS_DCACHE_OFF=y
|
||||
CONFIG_ARCH_IMX8M=y
|
||||
CONFIG_SYS_TEXT_BASE=0x40200000
|
||||
CONFIG_SYS_MALLOC_LEN=0x2000000
|
||||
|
@ -18,7 +16,7 @@ CONFIG_SPL_SERIAL=y
|
|||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x48000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x40480000
|
||||
CONFIG_SYS_LOAD_ADDR=0x42000000
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_EXTERNAL_OFFSET=0x3000
|
||||
|
@ -84,7 +82,6 @@ CONFIG_SPL_DM_REGULATOR=y
|
|||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
# CONFIG_SPL_DM_SERIAL is not set
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SPL_SYSRESET=y
|
||||
|
|
|
@ -13,10 +13,11 @@ CONFIG_SPL_TEXT_BASE=0x912000
|
|||
CONFIG_TARGET_IMX8MN_VENICE=y
|
||||
CONFIG_SPL_MMC=y
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL=y
|
||||
CONFIG_ENV_OFFSET_REDUND=0xff8000
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x48000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x40480000
|
||||
CONFIG_SYS_LOAD_ADDR=0x48200000
|
||||
CONFIG_SYS_MEMTEST_START=0x40000000
|
||||
CONFIG_SYS_MEMTEST_END=0x80000000
|
||||
CONFIG_LTO=y
|
||||
|
@ -40,13 +41,17 @@ CONFIG_SPL_WATCHDOG=y
|
|||
CONFIG_SYS_PROMPT="u-boot=> "
|
||||
# CONFIG_CMD_EXPORTENV is not set
|
||||
# CONFIG_CMD_IMPORTENV is not set
|
||||
# CONFIG_CMD_CRC32 is not set
|
||||
CONFIG_CRC32_VERIFY=y
|
||||
CONFIG_CMD_MD5SUM=y
|
||||
CONFIG_MD5SUM_VERIFY=y
|
||||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_FUSE=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_UUID=y
|
||||
|
@ -69,6 +74,7 @@ CONFIG_TFTP_BLOCKSIZE=4096
|
|||
CONFIG_SPL_DM=y
|
||||
CONFIG_SPL_CLK_IMX8MN=y
|
||||
CONFIG_CLK_IMX8MN=y
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_MXC_GPIO=y
|
||||
CONFIG_DM_I2C=y
|
||||
CONFIG_LED=y
|
||||
|
@ -96,6 +102,8 @@ CONFIG_MII=y
|
|||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX8M=y
|
||||
CONFIG_POWER_DOMAIN=y
|
||||
CONFIG_IMX8M_POWER_DOMAIN=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_DM_PMIC_BD71837=y
|
||||
CONFIG_SPL_DM_PMIC_BD71837=y
|
||||
|
@ -104,6 +112,8 @@ CONFIG_SPL_DM_PMIC_MP5416=y
|
|||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
# CONFIG_SPL_DM_SERIAL is not set
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SPL_SYSRESET=y
|
||||
|
@ -111,5 +121,22 @@ CONFIG_SYSRESET_PSCI=y
|
|||
CONFIG_SYSRESET_WATCHDOG=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_IMX_TMU=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_HOST_ETHER=y
|
||||
CONFIG_USB_ETHER_ASIX=y
|
||||
CONFIG_USB_ETHER_ASIX88179=y
|
||||
CONFIG_USB_ETHER_LAN75XX=y
|
||||
CONFIG_USB_ETHER_LAN78XX=y
|
||||
CONFIG_USB_ETHER_MCS7830=y
|
||||
CONFIG_USB_ETHER_RTL8152=y
|
||||
CONFIG_USB_ETHER_SMSC95XX=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="Gateworks"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x0525
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_GADGET_DOWNLOAD=y
|
||||
CONFIG_IMX_WATCHDOG=y
|
||||
CONFIG_HEXDUMP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
|
|
|
@ -91,6 +91,7 @@ CONFIG_DM_REGULATOR=y
|
|||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_SPL_POWER_I2C=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SPL_SYSRESET=y
|
||||
|
|
142
configs/imx8mp_venice_defconfig
Normal file
142
configs/imx8mp_venice_defconfig
Normal file
|
@ -0,0 +1,142 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_IMX8M=y
|
||||
CONFIG_SYS_TEXT_BASE=0x40200000
|
||||
CONFIG_SYS_MALLOC_LEN=0x2000000
|
||||
CONFIG_SPL_GPIO=y
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_ENV_SIZE=0x8000
|
||||
CONFIG_ENV_OFFSET=0xff0000
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="imx8mp-venice"
|
||||
CONFIG_SPL_TEXT_BASE=0x920000
|
||||
CONFIG_TARGET_IMX8MP_VENICE=y
|
||||
CONFIG_SPL_MMC=y
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_SPL=y
|
||||
CONFIG_ENV_OFFSET_REDUND=0xff8000
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x48000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x40480000
|
||||
CONFIG_SYS_MEMTEST_START=0x40000000
|
||||
CONFIG_SYS_MEMTEST_END=0x80000000
|
||||
CONFIG_LTO=y
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_EXTERNAL_OFFSET=0x3000
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
# CONFIG_USE_SPL_FIT_GENERATOR is not set
|
||||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
# CONFIG_USE_BOOTCOMMAND is not set
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="gsc wd-disable"
|
||||
CONFIG_BOARD_LATE_INIT=y
|
||||
CONFIG_SPL_BOOTROM_SUPPORT=y
|
||||
CONFIG_SPL_SEPARATE_BSS=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x300
|
||||
CONFIG_SPL_I2C=y
|
||||
CONFIG_SPL_WATCHDOG=y
|
||||
CONFIG_SYS_PROMPT="u-boot=> "
|
||||
# CONFIG_CMD_EXPORTENV is not set
|
||||
# CONFIG_CMD_IMPORTENV is not set
|
||||
CONFIG_CRC32_VERIFY=y
|
||||
CONFIG_CMD_MD5SUM=y
|
||||
CONFIG_MD5SUM_VERIFY=y
|
||||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_FUSE=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_UUID=y
|
||||
CONFIG_CMD_PMIC=y
|
||||
CONFIG_CMD_REGULATOR=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
# CONFIG_ISO_PARTITION is not set
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_OF_LIST="imx8mp-venice imx8mp-venice-gw74xx"
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_IP_DEFRAG=y
|
||||
CONFIG_TFTP_BLOCKSIZE=4096
|
||||
CONFIG_SPL_DM=y
|
||||
CONFIG_CLK_COMPOSITE_CCF=y
|
||||
CONFIG_CLK_IMX8MP=y
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_MXC_GPIO=y
|
||||
CONFIG_DM_I2C=y
|
||||
CONFIG_LED=y
|
||||
CONFIG_LED_BLINK=y
|
||||
CONFIG_LED_GPIO=y
|
||||
CONFIG_SPL_MISC=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_TI_DP83867=y
|
||||
CONFIG_PHY_FIXED=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_DM_MDIO=y
|
||||
CONFIG_DM_DSA=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_KSZ9477=y
|
||||
CONFIG_RGMII=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_PHY_IMX8MQ_USB=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX8M=y
|
||||
CONFIG_POWER_DOMAIN=y
|
||||
CONFIG_IMX8M_POWER_DOMAIN=y
|
||||
CONFIG_IMX8MP_HSIOMIX_BLKCTRL=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_DM_PMIC_BD71837=y
|
||||
CONFIG_SPL_DM_PMIC_BD71837=y
|
||||
CONFIG_DM_PMIC_MP5416=y
|
||||
CONFIG_SPL_DM_PMIC_MP5416=y
|
||||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
# CONFIG_SPL_DM_SERIAL is not set
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SPL_SYSRESET=y
|
||||
CONFIG_SYSRESET_PSCI=y
|
||||
CONFIG_SYSRESET_WATCHDOG=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_IMX_TMU=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_XHCI_DWC3_OF_SIMPLE=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_MXC_USB_OTG_HACTIVE=y
|
||||
CONFIG_USB_DWC3=y
|
||||
CONFIG_USB_DWC3_GENERIC=y
|
||||
CONFIG_USB_HOST_ETHER=y
|
||||
CONFIG_USB_ETHER_ASIX=y
|
||||
CONFIG_USB_ETHER_ASIX88179=y
|
||||
CONFIG_USB_ETHER_LAN75XX=y
|
||||
CONFIG_USB_ETHER_LAN78XX=y
|
||||
CONFIG_USB_ETHER_MCS7830=y
|
||||
CONFIG_USB_ETHER_RTL8152=y
|
||||
CONFIG_USB_ETHER_SMSC95XX=y
|
||||
CONFIG_IMX_WATCHDOG=y
|
||||
CONFIG_HEXDUMP=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
|
@ -80,6 +80,7 @@ CONFIG_DM_REGULATOR_FIXED=y
|
|||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_SPL_POWER_I2C=y
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_USB=y
|
||||
|
|
|
@ -21,12 +21,13 @@ CONFIG_SYS_MEMTEST_END=0x80000000
|
|||
CONFIG_DISTRO_DEFAULTS=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_EXTERNAL_OFFSET=0x3000
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
# CONFIG_USE_SPL_FIT_GENERATOR is not set
|
||||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
# CONFIG_USE_BOOTCOMMAND is not set
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="setenv fdtfile imx8mm-verdin-${variant}-${fdt_board}.dtb"
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx8mm-verdin-${variant}-${fdt_board}.dtb"
|
||||
CONFIG_LOG=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
|
|
|
@ -34,7 +34,7 @@ CONFIG_SPL_LOAD_FIT=y
|
|||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_PREBOOT="setenv fdtfile imx8mp-verdin-${variant}-${fdt_board}.dtb"
|
||||
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx8mp-verdin-${variant}-${fdt_board}.dtb"
|
||||
CONFIG_LOG=y
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
|
|
|
@ -42,7 +42,6 @@ Build U-Boot
|
|||
|
||||
$ export CROSS_COMPILE=aarch64-poky-linux-
|
||||
$ make imx8mn_ddr4_evk_defconfig
|
||||
$ export ATF_LOAD_ADDR=0x960000
|
||||
$ make
|
||||
|
||||
Burn the flash.bin to MicroSD card offset 32KB:
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
Apalis iMX8X V1.1A Module (SoC NXP i.MX8QXP RevB)
|
||||
=================================================
|
||||
|
||||
Quick Start
|
||||
-----------
|
||||
|
||||
- Get and Build the ARM trusted firmware
|
||||
- Get System Controller firmware
|
||||
- Get SECO container
|
||||
- Build U-Boot
|
||||
- Load U-Boot binary using uuu
|
||||
- Flash U-Boot binary into the eMMC
|
||||
- Boot
|
||||
|
||||
Note: builddir is U-Boot build directory (source directory for in-tree builds)
|
||||
|
||||
Get and Build the ARM Trusted Firmware
|
||||
--------------------------------------
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ cd $(builddir)
|
||||
$ git clone -b toradex_imx_5.4.70_2.3.0 http://git.toradex.com/cgit/imx-atf.git
|
||||
$ make PLAT=imx8qx bl31 -C imx-atf
|
||||
$ cp imx-atf/build/imx8qx/release/bl31.bin $(builddir)
|
||||
|
||||
Get System Controller firmware
|
||||
---------------------------------------
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ wget https://github.com/toradex/i.MX-System-Controller-Firmware/raw/master/src/scfw_export_mx8qx_b0/build_mx8qx_b0/mx8qx-apalis-scfw-tcm.bin
|
||||
|
||||
Get SECO container
|
||||
---------------------------------------
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-seco-3.7.4.bin
|
||||
$ sh imx-seco-3.7.4.bin
|
||||
$ cp imx-seco-3.7.4/firmware/seco/mx8qxb0-ahab-container.img $(builddir)/mx8qx-ahab-container.img
|
||||
|
||||
Build U-Boot
|
||||
------------
|
||||
.. code-block:: bash
|
||||
|
||||
$ make apalis-imx8x_defconfig
|
||||
$ make u-boot-dtb.imx
|
||||
|
||||
Load the U-Boot Binary Using UUU
|
||||
--------------------------------
|
||||
|
||||
Get the latest version of the universal update utility (uuu) aka ``mfgtools 3.0``:
|
||||
|
||||
https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fgithub.com%2FNXPmicro%2Fmfgtools%2Freleases
|
||||
|
||||
Put the module into USB recovery aka serial downloader mode, connect USB device
|
||||
to your host and execute uuu:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
sudo ./uuu $(builddir)/u-boot-dtb.imx
|
||||
|
||||
Flash the U-Boot Binary into the eMMC
|
||||
-------------------------------------
|
||||
|
||||
Burn the ``u-boot-dtb.imx`` binary to the primary eMMC hardware boot area
|
||||
partition and boot:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
load mmc 1:1 $loadaddr u-boot-dtb.imx
|
||||
setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt ${blkcnt} / 0x200
|
||||
mmc dev 0 1
|
||||
mmc write ${loadaddr} 0x0 ${blkcnt}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue