mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 07:31:15 +00:00
ARM: dts: imx: Add support for DH electronics i.MX8M Plus DHCOM and PDK2
Add support for DH electronics i.MX8M Plus DHCOM SoM on PDK2 carrier board. Currently supported are serial console, EQoS and FEC ethernets, eMMC, SD, SPI NOR and USB 3.0 host. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Fabio Estevam <festevam@denx.de> Cc: Peng Fan <peng.fan@nxp.com> Cc: Stefano Babic <sbabic@denx.de>
This commit is contained in:
parent
0539d16d22
commit
4d573d5c98
16 changed files with 4012 additions and 0 deletions
|
@ -939,6 +939,7 @@ dtb-$(CONFIG_ARCH_IMX8M) += \
|
|||
imx8mn-beacon-kit.dtb \
|
||||
imx8mq-mnt-reform2.dtb \
|
||||
imx8mq-phanbell.dtb \
|
||||
imx8mp-dhcom-pdk2.dtb \
|
||||
imx8mp-evk.dtb \
|
||||
imx8mp-phyboard-pollux-rdk.dtb \
|
||||
imx8mp-venice.dtb \
|
||||
|
|
141
arch/arm/dts/imx8mp-dhcom-pdk2-u-boot.dtsi
Normal file
141
arch/arm/dts/imx8mp-dhcom-pdk2-u-boot.dtsi
Normal file
|
@ -0,0 +1,141 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (C) 2022 Marek Vasut <marex@denx.de>
|
||||
*/
|
||||
|
||||
#include "imx8mp-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
eeprom0 = &eeprom0;
|
||||
eeprom1 = &eeprom1;
|
||||
mmc0 = &usdhc2; /* MicroSD */
|
||||
mmc1 = &usdhc3; /* eMMC */
|
||||
mmc2 = &usdhc1; /* SDIO */
|
||||
};
|
||||
|
||||
config {
|
||||
dh,ram-coding-gpios = <&gpio3 22 0>, <&gpio3 23 0>, <&gpio3 24 0>;
|
||||
};
|
||||
|
||||
wdt-reboot {
|
||||
compatible = "wdt-reboot";
|
||||
wdt = <&wdog1>;
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
&buck4 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&buck5 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&eqos {
|
||||
/delete-property/ assigned-clocks;
|
||||
/delete-property/ assigned-clock-parents;
|
||||
/delete-property/ assigned-clock-rates;
|
||||
};
|
||||
|
||||
&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;
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_i2c3 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_i2c3_gpio {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_pmic {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_uart1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2_100mhz {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2_200mhz {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2_vmmc {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc3 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc3_100mhz {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc3_100mhz {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&pmic {
|
||||
u-boot,dm-spl;
|
||||
|
||||
regulators {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
};
|
||||
|
||||
®_usdhc2_vmmc {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
/* SDIO WiFi */
|
||||
&usdhc1 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&usdhc3 {
|
||||
u-boot,dm-spl;
|
||||
};
|
||||
|
||||
&wdog1 {
|
||||
u-boot,dm-spl;
|
||||
};
|
152
arch/arm/dts/imx8mp-dhcom-pdk2.dts
Normal file
152
arch/arm/dts/imx8mp-dhcom-pdk2.dts
Normal file
|
@ -0,0 +1,152 @@
|
|||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (C) 2022 Marek Vasut <marex@denx.de>
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include <dt-bindings/leds/common.h>
|
||||
#include <dt-bindings/net/qca-ar803x.h>
|
||||
#include <dt-bindings/phy/phy-imx8-pcie.h>
|
||||
#include "imx8mp-dhcom-som.dtsi"
|
||||
|
||||
/ {
|
||||
model = "DH electronics i.MX8M Plus DHCOM Premium Developer Kit (2)";
|
||||
compatible = "dh,imx8mp-dhcom-pdk2", "fsl,imx8mp";
|
||||
|
||||
chosen {
|
||||
stdout-path = &uart1;
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
#size-cells = <0>;
|
||||
compatible = "gpio-keys";
|
||||
|
||||
button-0 {
|
||||
gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; /* GPIO A */
|
||||
label = "TA1-GPIO-A";
|
||||
linux,code = <KEY_A>;
|
||||
pinctrl-0 = <&pinctrl_dhcom_a>;
|
||||
pinctrl-names = "default";
|
||||
wakeup-source;
|
||||
};
|
||||
|
||||
button-1 {
|
||||
gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; /* GPIO B */
|
||||
label = "TA2-GPIO-B";
|
||||
linux,code = <KEY_B>;
|
||||
pinctrl-0 = <&pinctrl_dhcom_b>;
|
||||
pinctrl-names = "default";
|
||||
wakeup-source;
|
||||
};
|
||||
|
||||
button-2 {
|
||||
gpios = <&gpio5 2 GPIO_ACTIVE_LOW>; /* GPIO C */
|
||||
label = "TA3-GPIO-C";
|
||||
linux,code = <KEY_C>;
|
||||
pinctrl-0 = <&pinctrl_dhcom_c>;
|
||||
pinctrl-names = "default";
|
||||
wakeup-source;
|
||||
};
|
||||
|
||||
button-3 {
|
||||
gpios = <&gpio4 27 GPIO_ACTIVE_LOW>; /* GPIO D */
|
||||
label = "TA4-GPIO-D";
|
||||
linux,code = <KEY_D>;
|
||||
pinctrl-0 = <&pinctrl_dhcom_d>;
|
||||
pinctrl-names = "default";
|
||||
wakeup-source;
|
||||
};
|
||||
};
|
||||
|
||||
led {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
led-5 {
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
default-state = "off";
|
||||
function = LED_FUNCTION_INDICATOR;
|
||||
gpios = <&gpio5 22 GPIO_ACTIVE_HIGH>; /* GPIO E */
|
||||
pinctrl-0 = <&pinctrl_dhcom_e>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
led-6 {
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
default-state = "off";
|
||||
function = LED_FUNCTION_INDICATOR;
|
||||
gpios = <&gpio5 23 GPIO_ACTIVE_HIGH>; /* GPIO F */
|
||||
pinctrl-0 = <&pinctrl_dhcom_f>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
led-7 {
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
default-state = "off";
|
||||
function = LED_FUNCTION_INDICATOR;
|
||||
gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>; /* GPIO H */
|
||||
pinctrl-0 = <&pinctrl_dhcom_h>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
led-8 {
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
default-state = "off";
|
||||
function = LED_FUNCTION_INDICATOR;
|
||||
gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>; /* GPIO I */
|
||||
pinctrl-0 = <&pinctrl_dhcom_i>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* PDK2 carrier board uses SoM with KSZ9131 populated and connected to
|
||||
* SoM EQoS ethernet RGMII interface. Remove the other SoM PHY DT node.
|
||||
*/
|
||||
/delete-node/ ðphy0f;
|
||||
|
||||
/*
|
||||
* PDK2 carrier board has KSZ9021 PHY populated and connected to SoM FEC
|
||||
* ethernet RGMII interface. The SoM is not populated with second FEC PHY.
|
||||
*/
|
||||
/delete-node/ ðphy1f;
|
||||
|
||||
&fec { /* Second ethernet */
|
||||
phy-handle = <ðphypdk>;
|
||||
|
||||
mdio {
|
||||
ethphypdk: ethernet-phy@7 { /* KSZ 9021 */
|
||||
compatible = "ethernet-phy-ieee802.3-c22";
|
||||
interrupt-parent = <&gpio4>;
|
||||
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-0 = <&pinctrl_ethphy1>;
|
||||
pinctrl-names = "default";
|
||||
reg = <7>;
|
||||
reset-assert-us = <1000>;
|
||||
reset-deassert-us = <1000>;
|
||||
reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;
|
||||
rxc-skew-ps = <3000>;
|
||||
rxd0-skew-ps = <0>;
|
||||
rxd1-skew-ps = <0>;
|
||||
rxd2-skew-ps = <0>;
|
||||
rxd3-skew-ps = <0>;
|
||||
rxdv-skew-ps = <0>;
|
||||
txc-skew-ps = <3000>;
|
||||
txd0-skew-ps = <0>;
|
||||
txd1-skew-ps = <0>;
|
||||
txd2-skew-ps = <0>;
|
||||
txd3-skew-ps = <0>;
|
||||
txen-skew-ps = <0>;
|
||||
max-speed = <100>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&flexcan1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb3_1 {
|
||||
fsl,over-current-active-low;
|
||||
};
|
1042
arch/arm/dts/imx8mp-dhcom-som.dtsi
Normal file
1042
arch/arm/dts/imx8mp-dhcom-som.dtsi
Normal file
File diff suppressed because it is too large
Load diff
|
@ -148,6 +148,13 @@ config TARGET_IMX8MN_VENICE
|
|||
select GATEWORKS_SC
|
||||
select MISC
|
||||
|
||||
config TARGET_IMX8MP_DH_DHCOM_PDK2
|
||||
bool "DH electronics DHCOM Premium Developer Kit (2) i.MX8M Plus"
|
||||
select BINMAN
|
||||
select IMX8MP
|
||||
select IMX8M_LPDDR4
|
||||
select SUPPORT_SPL
|
||||
|
||||
config TARGET_IMX8MP_EVK
|
||||
bool "imx8mp LPDDR4 EVK board"
|
||||
select BINMAN
|
||||
|
@ -265,6 +272,7 @@ source "board/beacon/imx8mn/Kconfig"
|
|||
source "board/bsh/imx8mn_smm_s2/Kconfig"
|
||||
source "board/compulab/imx8mm-cl-iot-gate/Kconfig"
|
||||
source "board/data_modul/imx8mm_edm_sbc/Kconfig"
|
||||
source "board/dhelectronics/dh_imx8mp/Kconfig"
|
||||
source "board/engicam/imx8mm/Kconfig"
|
||||
source "board/freescale/imx8mq_evk/Kconfig"
|
||||
source "board/freescale/imx8mm_evk/Kconfig"
|
||||
|
|
15
board/dhelectronics/dh_imx8mp/Kconfig
Normal file
15
board/dhelectronics/dh_imx8mp/Kconfig
Normal file
|
@ -0,0 +1,15 @@
|
|||
if TARGET_IMX8MP_DH_DHCOM_PDK2
|
||||
|
||||
config SYS_BOARD
|
||||
default "dh_imx8mp"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "dhelectronics"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "imx8mp_dhcom_pdk2"
|
||||
|
||||
config IMX_CONFIG
|
||||
default "board/dhelectronics/dh_imx8mp/imximage-lpddr4.cfg"
|
||||
|
||||
endif
|
8
board/dhelectronics/dh_imx8mp/MAINTAINERS
Normal file
8
board/dhelectronics/dh_imx8mp/MAINTAINERS
Normal file
|
@ -0,0 +1,8 @@
|
|||
DH electronics DHCOM Premium Developer Kit (2) i.MX8M Plus
|
||||
M: Marek Vasut <marex@denx.de>
|
||||
S: Maintained
|
||||
F: arch/arm/dts/imx8mp-dhcom-pdk2.dts
|
||||
F: arch/arm/dts/imx8mp-dhcom-pdk2-u-boot.dtsi
|
||||
F: board/dhelectronics/imx8mp_dhcom_pdk2/
|
||||
F: configs/imx8mp_dhcom_pdk2_defconfig
|
||||
F: include/configs/imx8mp_dhcom_pdk2.h
|
13
board/dhelectronics/dh_imx8mp/Makefile
Normal file
13
board/dhelectronics/dh_imx8mp/Makefile
Normal file
|
@ -0,0 +1,13 @@
|
|||
#
|
||||
# Copyright (C) 2022 Marek Vasut <marex@denx.de>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
obj-y += spl.o lpddr4_timing_4G_32.o
|
||||
else
|
||||
obj-y += imx8mp_dhcom_pdk2.o
|
||||
endif
|
||||
|
||||
obj-y += common.o
|
37
board/dhelectronics/dh_imx8mp/common.c
Normal file
37
board/dhelectronics/dh_imx8mp/common.c
Normal file
|
@ -0,0 +1,37 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2022 Marek Vasut <marex@denx.de>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
#include "lpddr4_timing.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
u8 dh_get_memcfg(void)
|
||||
{
|
||||
struct gpio_desc gpio[4];
|
||||
u8 memcfg = 0;
|
||||
ofnode node;
|
||||
int i, ret;
|
||||
|
||||
node = ofnode_path("/config");
|
||||
if (!ofnode_valid(node)) {
|
||||
printf("%s: no /config node?\n", __func__);
|
||||
return BIT(2) | BIT(0);
|
||||
}
|
||||
|
||||
ret = gpio_request_list_by_name_nodev(node,
|
||||
"dh,ram-coding-gpios",
|
||||
gpio, ARRAY_SIZE(gpio),
|
||||
GPIOD_IS_IN);
|
||||
for (i = 0; i < ret; i++)
|
||||
memcfg |= !!dm_gpio_get_value(&(gpio[i])) << i;
|
||||
|
||||
gpio_free_list_nodev(gpio, ret);
|
||||
|
||||
return memcfg;
|
||||
}
|
186
board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
Normal file
186
board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
Normal file
|
@ -0,0 +1,186 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2022 Marek Vasut <marex@denx.de>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/io.h>
|
||||
#include <dm.h>
|
||||
#include <env.h>
|
||||
#include <env_internal.h>
|
||||
#include <i2c_eeprom.h>
|
||||
#include <malloc.h>
|
||||
#include <net.h>
|
||||
#include <miiphy.h>
|
||||
|
||||
#include "lpddr4_timing.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int mach_cpu_init(void)
|
||||
{
|
||||
icache_enable();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_phys_sdram_size(phys_size_t *size)
|
||||
{
|
||||
const u16 memsz[] = { 512, 1024, 1536, 2048, 3072, 4096, 6144, 8192 };
|
||||
u8 memcfg = dh_get_memcfg();
|
||||
|
||||
*size = (u64)memsz[memcfg] << 20ULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* IMX8M SNVS registers needed for the bootcount functionality */
|
||||
#define SNVS_BASE_ADDR 0x30370000
|
||||
#define SNVS_LPSR 0x4c
|
||||
#define SNVS_LPLVDR 0x64
|
||||
#define SNVS_LPPGDR_INIT 0x41736166
|
||||
|
||||
static void setup_snvs(void)
|
||||
{
|
||||
/* Enable SNVS clock */
|
||||
clock_enable(CCGR_SNVS, 1);
|
||||
/* Initialize glitch detect */
|
||||
writel(SNVS_LPPGDR_INIT, SNVS_BASE_ADDR + SNVS_LPLVDR);
|
||||
/* Clear interrupt status */
|
||||
writel(0xffffffff, SNVS_BASE_ADDR + SNVS_LPSR);
|
||||
}
|
||||
|
||||
static void 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));
|
||||
|
||||
set_clk_eqos(ENET_125MHZ);
|
||||
}
|
||||
|
||||
static void setup_fec(void)
|
||||
{
|
||||
struct iomuxc_gpr_base_regs *gpr =
|
||||
(struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;
|
||||
|
||||
/* Enable RGMII TX clk output. */
|
||||
setbits_le32(&gpr->gpr[1], BIT(22));
|
||||
|
||||
set_clk_enet(ENET_125MHZ);
|
||||
}
|
||||
|
||||
static int setup_mac_address_from_eeprom(char *alias, char *env, bool odd)
|
||||
{
|
||||
unsigned char enetaddr[6];
|
||||
struct udevice *dev;
|
||||
int ret, offset;
|
||||
|
||||
offset = fdt_path_offset(gd->fdt_blob, alias);
|
||||
if (offset < 0) {
|
||||
printf("%s: No eeprom0 path offset\n", __func__);
|
||||
return offset;
|
||||
}
|
||||
|
||||
ret = uclass_get_device_by_of_offset(UCLASS_I2C_EEPROM, offset, &dev);
|
||||
if (ret) {
|
||||
printf("Cannot find EEPROM!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = i2c_eeprom_read(dev, 0xfa, enetaddr, 0x6);
|
||||
if (ret) {
|
||||
printf("Error reading configuration EEPROM!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Populate second ethernet MAC from first ethernet EEPROM with MAC
|
||||
* address LSByte incremented by 1. This is only used on SoMs without
|
||||
* second ethernet EEPROM, i.e. early prototypes.
|
||||
*/
|
||||
if (odd)
|
||||
enetaddr[5]++;
|
||||
|
||||
eth_env_set_enetaddr(env, enetaddr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void setup_mac_address(void)
|
||||
{
|
||||
unsigned char enetaddr[6];
|
||||
bool skip_eth0 = false;
|
||||
bool skip_eth1 = false;
|
||||
int ret;
|
||||
|
||||
ret = eth_env_get_enetaddr("ethaddr", enetaddr);
|
||||
if (ret) /* ethaddr is already set */
|
||||
skip_eth0 = true;
|
||||
|
||||
ret = eth_env_get_enetaddr("eth1addr", enetaddr);
|
||||
if (ret) /* eth1addr is already set */
|
||||
skip_eth1 = true;
|
||||
|
||||
/* Both MAC addresses are already set in U-Boot environment. */
|
||||
if (skip_eth0 && skip_eth1)
|
||||
return;
|
||||
|
||||
/*
|
||||
* If IIM fuses contain valid MAC address, use it.
|
||||
* The IIM MAC address fuses are NOT programmed by default.
|
||||
*/
|
||||
imx_get_mac_from_fuse(0, enetaddr);
|
||||
if (is_valid_ethaddr(enetaddr)) {
|
||||
if (!skip_eth0)
|
||||
eth_env_set_enetaddr("ethaddr", enetaddr);
|
||||
/*
|
||||
* The LSbit of MAC address in fuses is always 0, use the
|
||||
* next consecutive MAC address for the second ethernet.
|
||||
*/
|
||||
enetaddr[5]++;
|
||||
if (!skip_eth1)
|
||||
eth_env_set_enetaddr("eth1addr", enetaddr);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Use on-SoM EEPROMs with pre-programmed MAC address. */
|
||||
if (!skip_eth0) {
|
||||
/* We cannot do much more if this returns -ve . */
|
||||
setup_mac_address_from_eeprom("eeprom0", "ethaddr", false);
|
||||
}
|
||||
|
||||
if (!skip_eth1) {
|
||||
ret = setup_mac_address_from_eeprom("eeprom1", "eth1addr",
|
||||
false);
|
||||
if (ret) { /* Second EEPROM might not be populated. */
|
||||
/* We cannot do much more if this returns -ve . */
|
||||
setup_mac_address_from_eeprom("eeprom0", "eth1addr",
|
||||
true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
setup_eqos();
|
||||
setup_fec();
|
||||
setup_snvs();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_late_init(void)
|
||||
{
|
||||
setup_mac_address();
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum env_location env_get_location(enum env_operation op, int prio)
|
||||
{
|
||||
return prio ? ENVL_UNKNOWN : ENVL_SPI_FLASH;
|
||||
}
|
8
board/dhelectronics/dh_imx8mp/imximage-lpddr4.cfg
Normal file
8
board/dhelectronics/dh_imx8mp/imximage-lpddr4.cfg
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2021 NXP
|
||||
*/
|
||||
|
||||
ROM_VERSION v2
|
||||
BOOT_FROM sd
|
||||
LOADER u-boot-spl-ddr.bin 0x920000
|
13
board/dhelectronics/dh_imx8mp/lpddr4_timing.h
Normal file
13
board/dhelectronics/dh_imx8mp/lpddr4_timing.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2022 Marek Vasut <marex@denx.de>
|
||||
*/
|
||||
|
||||
#ifndef __LPDDR4_TIMING_H__
|
||||
#define __LPDDR4_TIMING_H__
|
||||
|
||||
extern struct dram_timing_info dh_imx8mp_dhcom_dram_timing_32g_x32;
|
||||
|
||||
u8 dh_get_memcfg(void);
|
||||
|
||||
#endif /* __LPDDR4_TIMING_H__ */
|
1844
board/dhelectronics/dh_imx8mp/lpddr4_timing_4G_32.c
Normal file
1844
board/dhelectronics/dh_imx8mp/lpddr4_timing_4G_32.c
Normal file
File diff suppressed because it is too large
Load diff
187
board/dhelectronics/dh_imx8mp/spl.c
Normal file
187
board/dhelectronics/dh_imx8mp/spl.c
Normal file
|
@ -0,0 +1,187 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2022 Marek Vasut <marex@denx.de>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <hang.h>
|
||||
#include <image.h>
|
||||
#include <init.h>
|
||||
#include <spl.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm-generic/gpio.h>
|
||||
#include <asm/arch/clock.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 <dm/uclass.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <dm/device-internal.h>
|
||||
|
||||
#include <power/pmic.h>
|
||||
#include <power/pca9450.h>
|
||||
|
||||
#include "lpddr4_timing.h"
|
||||
|
||||
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 const iomux_v3_cfg_t uart_pads[] = {
|
||||
MX8MP_PAD_SAI2_RXFS__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
|
||||
MX8MP_PAD_SAI2_RXC__UART1_DCE_RX | 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),
|
||||
};
|
||||
|
||||
static void dh_imx8mp_early_init_f(void)
|
||||
{
|
||||
struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
|
||||
|
||||
set_wdog_reset(wdog);
|
||||
|
||||
imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
|
||||
}
|
||||
|
||||
static int dh_imx8mp_board_power_init(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
ret = pmic_get("pmic@25", &dev);
|
||||
if (ret == -ENODEV) {
|
||||
puts("Failed to get PMIC\n");
|
||||
return 0;
|
||||
}
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
/* BUCKxOUT_DVS0/1 control BUCK123 output. */
|
||||
pmic_reg_write(dev, PCA9450_BUCK123_DVS, 0x29);
|
||||
|
||||
/* Increase VDD_SOC to typical value 0.95V before first DRAM access. */
|
||||
if (IS_ENABLED(CONFIG_IMX8M_VDD_SOC_850MV))
|
||||
/* Set DVS0 to 0.85V for special case. */
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x14);
|
||||
else
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x1c);
|
||||
|
||||
/* Set DVS1 to 0.85v for suspend. */
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x14);
|
||||
|
||||
/*
|
||||
* Enable DVS control through PMIC_STBY_REQ and
|
||||
* set B1_ENMODE=1 (ON by PMIC_ON_REQ=H).
|
||||
*/
|
||||
pmic_reg_write(dev, PCA9450_BUCK1CTRL, 0x59);
|
||||
|
||||
/* Kernel uses OD/OD frequency for SoC. */
|
||||
|
||||
/* To avoid timing risk from SoC to ARM, increase VDD_ARM to OD voltage 0.95V */
|
||||
pmic_reg_write(dev, PCA9450_BUCK2OUT_DVS0, 0x1c);
|
||||
|
||||
/* Set WDOG_B_CFG to cold reset. */
|
||||
pmic_reg_write(dev, PCA9450_RESET_CTRL, 0xA1);
|
||||
|
||||
/* Set LDO4 and CONFIG2 to enable the I2C level translator. */
|
||||
pmic_reg_write(dev, PCA9450_LDO4CTRL, 0x59);
|
||||
pmic_reg_write(dev, PCA9450_CONFIG2, 0x1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dram_timing_info *dram_timing_info[8] = {
|
||||
NULL, /* 512 MiB */
|
||||
NULL, /* 1024 MiB */
|
||||
NULL, /* 1536 MiB */
|
||||
NULL, /* 2048 MiB */
|
||||
NULL, /* 3072 MiB */
|
||||
&dh_imx8mp_dhcom_dram_timing_32g_x32, /* 4096 MiB */
|
||||
NULL, /* 6144 MiB */
|
||||
NULL, /* 8192 MiB */
|
||||
};
|
||||
|
||||
static void spl_dram_init(void)
|
||||
{
|
||||
const u16 size[] = { 512, 1024, 1536, 2048, 3072, 4096, 6144, 8192 };
|
||||
u8 memcfg = dh_get_memcfg();
|
||||
int i;
|
||||
|
||||
printf("DDR: %d MiB [0x%x]\n", size[memcfg], memcfg);
|
||||
|
||||
if (!dram_timing_info[memcfg]) {
|
||||
printf("Unsupported DRAM strapping, trying lowest supported. MEMCFG=0x%x\n",
|
||||
memcfg);
|
||||
for (i = 0; i < ARRAY_SIZE(dram_timing_info); i++)
|
||||
if (dram_timing_info[i]) /* Configuration found */
|
||||
break;
|
||||
}
|
||||
|
||||
ddr_init(dram_timing_info[memcfg]);
|
||||
}
|
||||
|
||||
void spl_board_init(void)
|
||||
{
|
||||
/*
|
||||
* Set GIC clock to 500 MHz for OD VDD_SOC. Kernel driver does not
|
||||
* allow to change it. Should set the clock after PMIC setting done.
|
||||
* Default is 400 MHz (system_pll1_800m with div = 2) set by ROM for
|
||||
* ND VDD_SOC.
|
||||
*/
|
||||
clock_enable(CCGR_GIC, 0);
|
||||
clock_set_target_val(GIC_CLK_ROOT, CLK_ROOT_ON | CLK_ROOT_SOURCE_SEL(5));
|
||||
clock_enable(CCGR_GIC, 1);
|
||||
}
|
||||
|
||||
int spl_board_boot_device(enum boot_device boot_dev_spl)
|
||||
{
|
||||
return BOOT_DEVICE_BOOTROM;
|
||||
}
|
||||
|
||||
void board_init_f(ulong dummy)
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret;
|
||||
|
||||
arch_cpu_init();
|
||||
|
||||
init_uart_clk(0);
|
||||
|
||||
dh_imx8mp_early_init_f();
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
/* Clear the BSS. */
|
||||
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||
|
||||
ret = spl_early_init();
|
||||
if (ret) {
|
||||
debug("spl_early_init() failed: %d\n", ret);
|
||||
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();
|
||||
|
||||
dh_imx8mp_board_power_init();
|
||||
|
||||
/* DDR initialization */
|
||||
spl_dram_init();
|
||||
|
||||
board_init_r(NULL, 0);
|
||||
}
|
244
configs/imx8mp_dhcom_pdk2_defconfig
Normal file
244
configs/imx8mp_dhcom_pdk2_defconfig
Normal file
|
@ -0,0 +1,244 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_IMX8M=y
|
||||
CONFIG_SYS_TEXT_BASE=0x40200000
|
||||
CONFIG_SYS_MALLOC_LEN=0x1000000
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x18000
|
||||
CONFIG_SPL_GPIO=y
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
CONFIG_ENV_SIZE=0x10000
|
||||
CONFIG_ENV_OFFSET=0xFE0000
|
||||
CONFIG_ENV_SECT_SIZE=0x1000
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="imx8mp-dhcom-pdk2"
|
||||
CONFIG_SPL_TEXT_BASE=0x920000
|
||||
CONFIG_TARGET_IMX8MP_DH_DHCOM_PDK2=y
|
||||
CONFIG_SPL_MMC=y
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_BOOTCOUNT_BOOTLIMIT=3
|
||||
CONFIG_SYS_BOOTCOUNT_ADDR=0x30370090
|
||||
CONFIG_SPL=y
|
||||
CONFIG_SYS_BOOTCOUNT_SINGLEWORD=y
|
||||
CONFIG_DEBUG_UART_BASE=0x30860000
|
||||
CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_ENV_OFFSET_REDUND=0xFF0000
|
||||
CONFIG_IMX_BOOTAUX=y
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x48000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x50000000
|
||||
CONFIG_DEBUG_UART=y
|
||||
CONFIG_ENV_VARS_UBOOT_CONFIG=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_EXTERNAL_OFFSET=0x3000
|
||||
CONFIG_SPL_LOAD_FIT=y
|
||||
CONFIG_SPL_LOAD_FIT_ADDRESS=0x44000000
|
||||
# CONFIG_USE_SPL_FIT_GENERATOR is not set
|
||||
CONFIG_SUPPORT_RAW_INITRD=y
|
||||
CONFIG_OF_SYSTEM_SETUP=y
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_USE_BOOTCOMMAND=y
|
||||
CONFIG_BOOTCOMMAND="run dh_update_env distro_bootcmd ; reset"
|
||||
CONFIG_USE_PREBOOT=y
|
||||
CONFIG_DEFAULT_FDT_FILE="imx8mp-dhcom-pdk2.dtb"
|
||||
CONFIG_CONSOLE_MUX=y
|
||||
CONFIG_SYS_CONSOLE_ENV_OVERWRITE=y
|
||||
CONFIG_ARCH_MISC_INIT=y
|
||||
CONFIG_BOARD_LATE_INIT=y
|
||||
CONFIG_SPL_BOOTROM_SUPPORT=y
|
||||
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
|
||||
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_POWER=y
|
||||
CONFIG_SPL_WATCHDOG=y
|
||||
CONFIG_HUSH_PARSER=y
|
||||
CONFIG_SYS_PROMPT="u-boot=> "
|
||||
# CONFIG_BOOTM_NETBSD is not set
|
||||
# CONFIG_BOOTM_PLAN9 is not set
|
||||
# CONFIG_BOOTM_RTEMS is not set
|
||||
# CONFIG_BOOTM_VXWORKS is not set
|
||||
CONFIG_CMD_ASKENV=y
|
||||
# CONFIG_CMD_EXPORTENV is not set
|
||||
CONFIG_CMD_ERASEENV=y
|
||||
CONFIG_CRC32_VERIFY=y
|
||||
CONFIG_CMD_EEPROM=y
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2
|
||||
CONFIG_SYS_EEPROM_SIZE=16384
|
||||
CONFIG_SYS_EEPROM_PAGE_WRITE_BITS=6
|
||||
CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS=20
|
||||
CONFIG_CMD_MD5SUM=y
|
||||
CONFIG_MD5SUM_VERIFY=y
|
||||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_SHA1SUM=y
|
||||
CONFIG_SHA1SUM_VERIFY=y
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_DFU=y
|
||||
CONFIG_CMD_FUSE=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_GPT_RENAME=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_LSBLK=y
|
||||
CONFIG_CMD_MBR=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_BKOPS_ENABLE=y
|
||||
CONFIG_CMD_MTD=y
|
||||
CONFIG_CMD_PART=y
|
||||
CONFIG_CMD_READ=y
|
||||
CONFIG_CMD_SPI=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_CMD_DHCP=y
|
||||
CONFIG_CMD_MII=y
|
||||
CONFIG_CMD_PING=y
|
||||
CONFIG_CMD_PXE=y
|
||||
CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_GETTIME=y
|
||||
CONFIG_CMD_SYSBOOT=y
|
||||
CONFIG_CMD_UUID=y
|
||||
CONFIG_CMD_PMIC=y
|
||||
CONFIG_CMD_REGULATOR=y
|
||||
CONFIG_CMD_HASH=y
|
||||
CONFIG_CMD_SMC=y
|
||||
CONFIG_HASH_VERIFY=y
|
||||
CONFIG_CMD_BTRFS=y
|
||||
CONFIG_CMD_EXT2=y
|
||||
CONFIG_CMD_EXT4=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FAT=y
|
||||
CONFIG_CMD_FS_GENERIC=y
|
||||
CONFIG_CMD_FS_UUID=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES=y
|
||||
CONFIG_MTDIDS_DEFAULT="nor0=flash@0"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=flash@0:-(sf)"
|
||||
CONFIG_MMC_SPEED_MODE_SET=y
|
||||
CONFIG_PARTITION_TYPE_GUID=y
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_ENV_OVERWRITE=y
|
||||
CONFIG_ENV_IS_NOWHERE=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
CONFIG_ENV_SECT_SIZE_AUTO=y
|
||||
CONFIG_ENV_SPI_MAX_HZ=80000000
|
||||
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
|
||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
CONFIG_VERSION_VARIABLE=y
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_NETCONSOLE=y
|
||||
CONFIG_IP_DEFRAG=y
|
||||
CONFIG_TFTP_TSIZE=y
|
||||
CONFIG_SPL_DM=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_BOOTCOUNT_LIMIT=y
|
||||
CONFIG_SYS_BOOTCOUNT_MAGIC=0xB0C40000
|
||||
CONFIG_SPL_CLK_COMPOSITE_CCF=y
|
||||
CONFIG_CLK_COMPOSITE_CCF=y
|
||||
CONFIG_SPL_CLK_IMX8MP=y
|
||||
CONFIG_CLK_IMX8MP=y
|
||||
CONFIG_SAVED_DRAM_TIMING_BASE=0x40000000
|
||||
CONFIG_DFU_TFTP=y
|
||||
CONFIG_DFU_TIMEOUT=y
|
||||
CONFIG_DFU_MMC=y
|
||||
CONFIG_DFU_MTD=y
|
||||
CONFIG_DFU_RAM=y
|
||||
CONFIG_USB_FUNCTION_FASTBOOT=y
|
||||
CONFIG_FASTBOOT_BUF_ADDR=0x42800000
|
||||
CONFIG_FASTBOOT_BUF_SIZE=0x20000000
|
||||
CONFIG_FASTBOOT_FLASH=y
|
||||
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_MXC_GPIO=y
|
||||
CONFIG_DM_I2C=y
|
||||
# CONFIG_INPUT is not set
|
||||
CONFIG_LED=y
|
||||
CONFIG_LED_BLINK=y
|
||||
CONFIG_LED_GPIO=y
|
||||
CONFIG_MISC=y
|
||||
CONFIG_I2C_EEPROM=y
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR=0x50
|
||||
CONFIG_SUPPORT_EMMC_BOOT=y
|
||||
CONFIG_MMC_IO_VOLTAGE=y
|
||||
CONFIG_SPL_MMC_IO_VOLTAGE=y
|
||||
CONFIG_MMC_UHS_SUPPORT=y
|
||||
CONFIG_SPL_MMC_UHS_SUPPORT=y
|
||||
CONFIG_MMC_HS400_ES_SUPPORT=y
|
||||
CONFIG_MMC_HS400_SUPPORT=y
|
||||
CONFIG_FSL_USDHC=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_DM_MTD=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SF_DEFAULT_SPEED=50000000
|
||||
CONFIG_SPI_FLASH_SFDP_SUPPORT=y
|
||||
# CONFIG_SPI_FLASH_UNLOCK_ALL is not set
|
||||
CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_SPI_FLASH_MTD=y
|
||||
CONFIG_PHY_ATHEROS=y
|
||||
CONFIG_PHY_MICREL=y
|
||||
CONFIG_PHY_MICREL_KSZ90X1=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_DM_MDIO=y
|
||||
CONFIG_DM_ETH_PHY=y
|
||||
CONFIG_DWC_ETH_QOS=y
|
||||
CONFIG_DWC_ETH_QOS_IMX=y
|
||||
CONFIG_FEC_MXC=y
|
||||
CONFIG_RGMII=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_PHY_IMX8MQ_USB=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX8M=y
|
||||
CONFIG_POWER_DOMAIN=y
|
||||
CONFIG_IMX8M_POWER_DOMAIN=y
|
||||
CONFIG_IMX8MP_HSIOMIX_BLKCTRL=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_DM_PMIC_PCA9450=y
|
||||
CONFIG_SPL_DM_PMIC_PCA9450=y
|
||||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_SPL_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_PCA9450=y
|
||||
CONFIG_SPL_DM_REGULATOR_PCA9450=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_DM_RTC=y
|
||||
CONFIG_RTC_M41T62=y
|
||||
CONFIG_CONS_INDEX=2
|
||||
CONFIG_DM_SERIAL=y
|
||||
# CONFIG_SPL_DM_SERIAL is not set
|
||||
CONFIG_MXC_UART=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DM_SPI=y
|
||||
CONFIG_NXP_FSPI=y
|
||||
CONFIG_MXC_SPI=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_SPL_DM_USB is not set
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_USB_XHCI_DWC3_OF_SIMPLE=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_DWC3=y
|
||||
# CONFIG_USB_DWC3_GADGET is not set
|
||||
CONFIG_USB_DWC3_GENERIC=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="DH electronics"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x0525
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_SDP_LOADADDR=0x0
|
||||
CONFIG_USB_FUNCTION_ACM=y
|
||||
CONFIG_IMX_WATCHDOG=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
113
include/configs/imx8mp_dhcom_pdk2.h
Normal file
113
include/configs/imx8mp_dhcom_pdk2.h
Normal file
|
@ -0,0 +1,113 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2022 Marek Vasut <marex@denx.de>
|
||||
*/
|
||||
|
||||
#ifndef __IMX8MP_DHCOM_PDK2_H
|
||||
#define __IMX8MP_DHCOM_PDK2_H
|
||||
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/stringify.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
|
||||
#define CONFIG_SYS_BOOTM_LEN SZ_128M
|
||||
|
||||
#define CONFIG_SPL_MAX_SIZE (148 * 1024)
|
||||
#define CONFIG_SYS_MONITOR_LEN SZ_1M
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
#define CONFIG_SPL_STACK 0x96FC00
|
||||
#define CONFIG_SPL_BSS_START_ADDR 0x0096FC00
|
||||
#define CONFIG_SPL_BSS_MAX_SIZE 0x400 /* 1 KiB */
|
||||
#define CONFIG_SYS_SPL_MALLOC_START 0x4c000000
|
||||
#define CONFIG_SYS_SPL_MALLOC_SIZE SZ_512K /* 512 kiB */
|
||||
|
||||
/* For RAW image gives a error info not panic */
|
||||
#define CONFIG_SPL_ABORT_ON_RAW_IMAGE
|
||||
|
||||
#endif
|
||||
|
||||
/* Link Definitions */
|
||||
#define CONFIG_SYS_INIT_RAM_ADDR 0x40000000
|
||||
#define CONFIG_SYS_INIT_RAM_SIZE 0x200000
|
||||
#define CONFIG_SYS_INIT_SP_OFFSET \
|
||||
(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
|
||||
#define CONFIG_SYS_INIT_SP_ADDR \
|
||||
(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
|
||||
|
||||
#define CONFIG_SYS_SDRAM_BASE 0x40000000
|
||||
#define PHYS_SDRAM 0x40000000
|
||||
#define PHYS_SDRAM_SIZE 0x20000000 /* Minimum 512 MiB DDR */
|
||||
|
||||
#define CONFIG_MXC_UART_BASE UART1_BASE_ADDR
|
||||
|
||||
/* Monitor Command Prompt */
|
||||
#define CONFIG_SYS_CBSIZE 2048
|
||||
#define CONFIG_SYS_MAXARGS 64
|
||||
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
|
||||
#define CONFIG_SYS_PBSIZE \
|
||||
(CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
|
||||
|
||||
/* PHY needs a longer autonegotiation timeout after reset */
|
||||
#define PHY_ANEG_TIMEOUT 20000
|
||||
#define FEC_QUIRK_ENET_MAC
|
||||
|
||||
/* USDHC */
|
||||
#define CONFIG_SYS_FSL_USDHC_NUM 2
|
||||
#define CONFIG_SYS_FSL_ESDHC_ADDR 0
|
||||
|
||||
#if !defined(CONFIG_SPL_BUILD)
|
||||
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"altbootcmd=run bootcmd ; reset\0" \
|
||||
"bootlimit=3\0" \
|
||||
"kernel_addr_r=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
|
||||
"pxefile_addr_r=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
|
||||
"ramdisk_addr_r=0x58000000\0" \
|
||||
"scriptaddr=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
|
||||
/* Give slow devices beyond USB HUB chance to come up. */ \
|
||||
"usb_pgood_delay=2000\0" \
|
||||
"dfu_alt_info=" \
|
||||
/* RAM block at DRAM offset 256..768 MiB */ \
|
||||
"ram ram0=ram ram 0x50000000 0x20000000&" \
|
||||
/* 16 MiB SPI NOR */ \
|
||||
"mtd nor0=sf raw 0x0 0x1000000\0" \
|
||||
"dh_update_env=" \
|
||||
"setenv dh_update_env true ; saveenv ; saveenv\0" \
|
||||
"dh_update_sf_gen_fcfb=" \
|
||||
"setexpr sfaddr ${loadaddr} - 0x1000 ; " \
|
||||
"base ${sfaddr} ; " \
|
||||
"mw 0 0 0x400 ; " \
|
||||
"mw 0x400 0x42464346 ; " \
|
||||
"mw 0x404 0x56010000 ; " \
|
||||
"mw 0x40c 00030300 ; " \
|
||||
"mw 0x444 0x00020101 ; " \
|
||||
"mw 0x450 0x10000000 ; " \
|
||||
"mw 0x480 0x0818040b ; " \
|
||||
"mw 0x484 0x24043008 ; " \
|
||||
"mw 0x5c0 0x100 ; " \
|
||||
"mw 0x5c4 0x10000 ; " \
|
||||
"base 0\0" \
|
||||
"dh_update_sf_write_data=" \
|
||||
"setexpr sfaddr ${loadaddr} - 0x1000 ; " \
|
||||
"setexpr filesize ${filesize} + 0x1000 ; " \
|
||||
"sf probe && sf update ${sfaddr} 0 ${filesize}\0" \
|
||||
"dh_update_sd_to_sf=" \
|
||||
"load mmc 0:1 ${loadaddr} boot/flash.bin && " \
|
||||
"run dh_update_sf_gen_fcfb dh_update_sf_write_data\0" \
|
||||
"dh_update_emmc_to_sf=" \
|
||||
"load mmc 1:1 ${loadaddr} boot/flash.bin && " \
|
||||
"run dh_update_sf_gen_fcfb dh_update_sf_write_data\0" \
|
||||
BOOTENV
|
||||
|
||||
#define BOOT_TARGET_DEVICES(func) \
|
||||
func(MMC, mmc, 0) \
|
||||
func(MMC, mmc, 1) \
|
||||
func(USB, usb, 0) \
|
||||
func(DHCP, dhcp, na)
|
||||
|
||||
#include <config_distro_bootcmd.h>
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue