Merge tag 'u-boot-imx-master-20250522' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx
CI: https://source.denx.de/u-boot/custodians/u-boot-imx/-/pipelines/26275 - Fix boot regression on imx8mn_bsh_smm_s2/s2pro. - Fix reset on imx6ulz_smm_m2. - Adjust DDR initialization on imx6ulz_smm_m2. - Fix CAAM startup error.
This commit is contained in:
@@ -918,8 +918,7 @@ dtb-$(CONFIG_ARCH_IMX8M) += \
|
|||||||
imx8mq-librem5-r4.dtb
|
imx8mq-librem5-r4.dtb
|
||||||
|
|
||||||
dtb-$(CONFIG_ARCH_IMX9) += \
|
dtb-$(CONFIG_ARCH_IMX9) += \
|
||||||
imx93-var-som-symphony.dtb \
|
imx93-var-som-symphony.dtb
|
||||||
imx93-phyboard-segin.dtb
|
|
||||||
|
|
||||||
dtb-$(CONFIG_ARCH_IMXRT) += imxrt1020-evk.dtb \
|
dtb-$(CONFIG_ARCH_IMXRT) += imxrt1020-evk.dtb \
|
||||||
imxrt1170-evk.dtb \
|
imxrt1170-evk.dtb \
|
||||||
|
@@ -5,8 +5,12 @@
|
|||||||
* Author: Michael Trimarchi <michael@amarulasolutions.com>
|
* Author: Michael Trimarchi <michael@amarulasolutions.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
&{/soc} {
|
/ {
|
||||||
bootph-all;
|
wdt-reboot {
|
||||||
|
compatible = "wdt-reboot";
|
||||||
|
wdt = <&wdog1>;
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&aips2 {
|
&aips2 {
|
||||||
|
@@ -1,117 +0,0 @@
|
|||||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
|
||||||
* Author: Wadim Egorov <w.egorov@phytec.de>, Christoph Stoidner <c.stoidner@phytec.de>
|
|
||||||
* Copyright (C) 2024 Mathieu Othacehe <m.othacehe@gmail.com>
|
|
||||||
*
|
|
||||||
* Product homepage:
|
|
||||||
* phyBOARD-Segin carrier board is reused for the i.MX93 design.
|
|
||||||
* https://www.phytec.eu/en/produkte/single-board-computer/phyboard-segin-imx6ul/
|
|
||||||
*/
|
|
||||||
/dts-v1/;
|
|
||||||
|
|
||||||
#include "imx93-phycore-som.dtsi"
|
|
||||||
|
|
||||||
/{
|
|
||||||
model = "PHYTEC phyBOARD-Segin-i.MX93";
|
|
||||||
compatible = "phytec,imx93-phyboard-segin", "phytec,imx93-phycore-som",
|
|
||||||
"fsl,imx93";
|
|
||||||
|
|
||||||
chosen {
|
|
||||||
stdout-path = &lpuart1;
|
|
||||||
};
|
|
||||||
|
|
||||||
reg_usdhc2_vmmc: regulator-usdhc2 {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
enable-active-high;
|
|
||||||
gpio = <&gpio3 7 GPIO_ACTIVE_HIGH>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pinctrl_reg_usdhc2_vmmc>;
|
|
||||||
regulator-min-microvolt = <3300000>;
|
|
||||||
regulator-max-microvolt = <3300000>;
|
|
||||||
regulator-name = "VCC_SD";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Console */
|
|
||||||
&lpuart1 {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pinctrl_uart1>;
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
/* eMMC */
|
|
||||||
&usdhc1 {
|
|
||||||
no-1-8-v;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* SD-Card */
|
|
||||||
&usdhc2 {
|
|
||||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
|
||||||
pinctrl-0 = <&pinctrl_usdhc2_default>, <&pinctrl_usdhc2_cd>;
|
|
||||||
pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_cd>;
|
|
||||||
pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_cd>;
|
|
||||||
bus-width = <4>;
|
|
||||||
cd-gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
|
|
||||||
no-mmc;
|
|
||||||
no-sdio;
|
|
||||||
vmmc-supply = <®_usdhc2_vmmc>;
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&iomuxc {
|
|
||||||
pinctrl_uart1: uart1grp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_UART1_RXD__LPUART1_RX 0x31e
|
|
||||||
MX93_PAD_UART1_TXD__LPUART1_TX 0x30e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pinctrl_reg_usdhc2_vmmc: regusdhc2vmmcgrp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_SD2_RESET_B__GPIO3_IO07 0x31e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pinctrl_usdhc2_cd: usdhc2cdgrp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_SD2_CD_B__GPIO3_IO00 0x31e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pinctrl_usdhc2_default: usdhc2grp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_SD2_CLK__USDHC2_CLK 0x179e
|
|
||||||
MX93_PAD_SD2_CMD__USDHC2_CMD 0x139e
|
|
||||||
MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x138e
|
|
||||||
MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x138e
|
|
||||||
MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x138e
|
|
||||||
MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x139e
|
|
||||||
MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pinctrl_usdhc2_100mhz: usdhc2grp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_SD2_CLK__USDHC2_CLK 0x179e
|
|
||||||
MX93_PAD_SD2_CMD__USDHC2_CMD 0x139e
|
|
||||||
MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x138e
|
|
||||||
MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x138e
|
|
||||||
MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x139e
|
|
||||||
MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x139e
|
|
||||||
MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pinctrl_usdhc2_200mhz: usdhc2grp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_SD2_CLK__USDHC2_CLK 0x178e
|
|
||||||
MX93_PAD_SD2_CMD__USDHC2_CMD 0x139e
|
|
||||||
MX93_PAD_SD2_DATA0__USDHC2_DATA0 0x139e
|
|
||||||
MX93_PAD_SD2_DATA1__USDHC2_DATA1 0x139e
|
|
||||||
MX93_PAD_SD2_DATA2__USDHC2_DATA2 0x139e
|
|
||||||
MX93_PAD_SD2_DATA3__USDHC2_DATA3 0x139e
|
|
||||||
MX93_PAD_SD2_VSELECT__USDHC2_VSELECT 0x51e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
};
|
|
@@ -1,126 +0,0 @@
|
|||||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2023 PHYTEC Messtechnik GmbH
|
|
||||||
* Author: Wadim Egorov <w.egorov@phytec.de>, Christoph Stoidner <c.stoidner@phytec.de>
|
|
||||||
* Copyright (C) 2024 Mathieu Othacehe <m.othacehe@gmail.com>
|
|
||||||
*
|
|
||||||
* Product homepage:
|
|
||||||
* https://www.phytec.eu/en/produkte/system-on-modules/phycore-imx-91-93/
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <dt-bindings/leds/common.h>
|
|
||||||
|
|
||||||
#include "imx93.dtsi"
|
|
||||||
|
|
||||||
/{
|
|
||||||
model = "PHYTEC phyCORE-i.MX93";
|
|
||||||
compatible = "phytec,imx93-phycore-som", "fsl,imx93";
|
|
||||||
|
|
||||||
reserved-memory {
|
|
||||||
ranges;
|
|
||||||
#address-cells = <2>;
|
|
||||||
#size-cells = <2>;
|
|
||||||
|
|
||||||
linux,cma {
|
|
||||||
compatible = "shared-dma-pool";
|
|
||||||
reusable;
|
|
||||||
alloc-ranges = <0 0x80000000 0 0x40000000>;
|
|
||||||
size = <0 0x10000000>;
|
|
||||||
linux,cma-default;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
leds {
|
|
||||||
compatible = "gpio-leds";
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pinctrl_leds>;
|
|
||||||
|
|
||||||
led-0 {
|
|
||||||
color = <LED_COLOR_ID_GREEN>;
|
|
||||||
function = LED_FUNCTION_HEARTBEAT;
|
|
||||||
gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "heartbeat";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Ethernet */
|
|
||||||
&fec {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pinctrl_fec>;
|
|
||||||
phy-mode = "rmii";
|
|
||||||
phy-handle = <ðphy1>;
|
|
||||||
fsl,magic-packet;
|
|
||||||
assigned-clocks = <&clk IMX93_CLK_ENET_TIMER1>,
|
|
||||||
<&clk IMX93_CLK_ENET_REF>,
|
|
||||||
<&clk IMX93_CLK_ENET_REF_PHY>;
|
|
||||||
assigned-clock-parents = <&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>,
|
|
||||||
<&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>,
|
|
||||||
<&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>;
|
|
||||||
assigned-clock-rates = <100000000>, <50000000>, <50000000>;
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
mdio: mdio {
|
|
||||||
clock-frequency = <5000000>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
ethphy1: ethernet-phy@1 {
|
|
||||||
compatible = "ethernet-phy-ieee802.3-c22";
|
|
||||||
reg = <1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* eMMC */
|
|
||||||
&usdhc1 {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pinctrl_usdhc1>;
|
|
||||||
bus-width = <8>;
|
|
||||||
non-removable;
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Watchdog */
|
|
||||||
&wdog3 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&iomuxc {
|
|
||||||
pinctrl_fec: fecgrp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_ENET2_MDC__ENET1_MDC 0x50e
|
|
||||||
MX93_PAD_ENET2_MDIO__ENET1_MDIO 0x502
|
|
||||||
MX93_PAD_ENET2_RD0__ENET1_RGMII_RD0 0x57e
|
|
||||||
MX93_PAD_ENET2_RD1__ENET1_RGMII_RD1 0x57e
|
|
||||||
MX93_PAD_ENET2_RXC__ENET1_RX_ER 0x5fe
|
|
||||||
MX93_PAD_ENET2_RX_CTL__ENET1_RGMII_RX_CTL 0x57e
|
|
||||||
MX93_PAD_ENET2_TD0__ENET1_RGMII_TD0 0x50e
|
|
||||||
MX93_PAD_ENET2_TD1__ENET1_RGMII_TD1 0x50e
|
|
||||||
MX93_PAD_ENET2_TX_CTL__ENET1_RGMII_TX_CTL 0x50e
|
|
||||||
MX93_PAD_ENET2_TD2__ENET1_TX_CLK 0x4000050e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pinctrl_leds: ledsgrp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_I2C1_SDA__GPIO1_IO01 0x31e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pinctrl_usdhc1: usdhc1grp {
|
|
||||||
fsl,pins = <
|
|
||||||
MX93_PAD_SD1_CLK__USDHC1_CLK 0x179e
|
|
||||||
MX93_PAD_SD1_CMD__USDHC1_CMD 0x1386
|
|
||||||
MX93_PAD_SD1_DATA0__USDHC1_DATA0 0x138e
|
|
||||||
MX93_PAD_SD1_DATA1__USDHC1_DATA1 0x1386
|
|
||||||
MX93_PAD_SD1_DATA2__USDHC1_DATA2 0x138e
|
|
||||||
MX93_PAD_SD1_DATA3__USDHC1_DATA3 0x1386
|
|
||||||
MX93_PAD_SD1_DATA4__USDHC1_DATA4 0x1386
|
|
||||||
MX93_PAD_SD1_DATA5__USDHC1_DATA5 0x1386
|
|
||||||
MX93_PAD_SD1_DATA6__USDHC1_DATA6 0x1386
|
|
||||||
MX93_PAD_SD1_DATA7__USDHC1_DATA7 0x1386
|
|
||||||
MX93_PAD_SD1_STROBE__USDHC1_STROBE 0x179e
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
};
|
|
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
#if defined(CONFIG_IMX_HAB)
|
#if IS_ENABLED(CONFIG_IMX_HAB)
|
||||||
struct imx_fuse const imx_sec_config_fuse = {
|
struct imx_fuse const imx_sec_config_fuse = {
|
||||||
.bank = 1,
|
.bank = 1,
|
||||||
.word = 3,
|
.word = 3,
|
||||||
@@ -52,7 +52,7 @@ struct imx_fuse const imx_field_return_fuse = {
|
|||||||
|
|
||||||
int timer_init(void)
|
int timer_init(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_XPL_BUILD
|
#if IS_ENABLED(CONFIG_XPL_BUILD)
|
||||||
struct sctr_regs *sctr = (struct sctr_regs *)SYSCNT_CTRL_BASE_ADDR;
|
struct sctr_regs *sctr = (struct sctr_regs *)SYSCNT_CTRL_BASE_ADDR;
|
||||||
unsigned long freq = readl(&sctr->cntfid0);
|
unsigned long freq = readl(&sctr->cntfid0);
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ void set_wdog_reset(struct wdog_regs *wdog)
|
|||||||
setbits_le16(&wdog->wcr, WDOG_WDT_MASK | WDOG_WDZST_MASK);
|
setbits_le16(&wdog->wcr, WDOG_WDT_MASK | WDOG_WDZST_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ARMV8_PSCI
|
#if IS_ENABLED(CONFIG_ARMV8_PSCI)
|
||||||
#define PTE_MAP_NS PTE_BLOCK_NS
|
#define PTE_MAP_NS PTE_BLOCK_NS
|
||||||
#else
|
#else
|
||||||
#define PTE_MAP_NS 0
|
#define PTE_MAP_NS 0
|
||||||
@@ -700,11 +700,11 @@ int arch_cpu_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_IMX8MN) || defined(CONFIG_IMX8MP)
|
#if IS_ENABLED(CONFIG_IMX8MN) || IS_ENABLED(CONFIG_IMX8MP)
|
||||||
struct rom_api *g_rom_api = (struct rom_api *)0x980;
|
struct rom_api *g_rom_api = (struct rom_api *)0x980;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_IMX8M)
|
#if IS_ENABLED(CONFIG_IMX8M)
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
int imx8m_detect_secondary_image_boot(void)
|
int imx8m_detect_secondary_image_boot(void)
|
||||||
{
|
{
|
||||||
@@ -790,8 +790,8 @@ int boot_mode_getprisec(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_IMX8MN) || defined(CONFIG_IMX8MP)
|
#if IS_ENABLED(CONFIG_IMX8MN) || IS_ENABLED(CONFIG_IMX8MP)
|
||||||
#ifdef SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
|
#if IS_ENABLED(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION)
|
||||||
#define IMG_CNTN_SET1_OFFSET GENMASK(22, 19)
|
#define IMG_CNTN_SET1_OFFSET GENMASK(22, 19)
|
||||||
unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
|
unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
|
||||||
unsigned long raw_sect)
|
unsigned long raw_sect)
|
||||||
@@ -826,7 +826,7 @@ unsigned long arch_spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
|
|||||||
|
|
||||||
return raw_sect;
|
return raw_sect;
|
||||||
}
|
}
|
||||||
#endif /* SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION */
|
#endif /* CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool is_usb_boot(void)
|
bool is_usb_boot(void)
|
||||||
@@ -834,7 +834,7 @@ bool is_usb_boot(void)
|
|||||||
return get_boot_device() == USB_BOOT;
|
return get_boot_device() == USB_BOOT;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_OF_SYSTEM_SETUP
|
#if IS_ENABLED(CONFIG_OF_SYSTEM_SETUP)
|
||||||
bool check_fdt_new_path(void *blob)
|
bool check_fdt_new_path(void *blob)
|
||||||
{
|
{
|
||||||
const char *soc_path = "/soc@0";
|
const char *soc_path = "/soc@0";
|
||||||
@@ -880,7 +880,7 @@ add_status:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IMX8MQ
|
#if IS_ENABLED(CONFIG_IMX8MQ)
|
||||||
bool check_dcss_fused(void)
|
bool check_dcss_fused(void)
|
||||||
{
|
{
|
||||||
struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
|
struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
|
||||||
@@ -1026,7 +1026,7 @@ int disable_vpu_nodes(void *blob)
|
|||||||
return -EPERM;
|
return -EPERM;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_IMX8MN_LOW_DRIVE_MODE
|
#if IS_ENABLED(CONFIG_IMX8MN_LOW_DRIVE_MODE)
|
||||||
static int low_drive_gpu_freq(void *blob)
|
static int low_drive_gpu_freq(void *blob)
|
||||||
{
|
{
|
||||||
static const char *nodes_path_8mn[] = {
|
static const char *nodes_path_8mn[] = {
|
||||||
@@ -1311,7 +1311,7 @@ int ft_system_setup(void *blob, struct bd_info *bd)
|
|||||||
"/cpus/cpu@3",
|
"/cpus/cpu@3",
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_IMX8MQ
|
#if IS_ENABLED(CONFIG_IMX8MQ)
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int rc;
|
int rc;
|
||||||
int nodeoff;
|
int nodeoff;
|
||||||
@@ -1387,7 +1387,7 @@ usb_modify_speed:
|
|||||||
if (is_imx8md())
|
if (is_imx8md())
|
||||||
disable_cpu_nodes(blob, nodes_path, 2, 4);
|
disable_cpu_nodes(blob, nodes_path, 2, 4);
|
||||||
|
|
||||||
#elif defined(CONFIG_IMX8MM)
|
#elif IS_ENABLED(CONFIG_IMX8MM)
|
||||||
if (is_imx8mml() || is_imx8mmdl() || is_imx8mmsl())
|
if (is_imx8mml() || is_imx8mmdl() || is_imx8mmsl())
|
||||||
disable_vpu_nodes(blob);
|
disable_vpu_nodes(blob);
|
||||||
|
|
||||||
@@ -1396,10 +1396,10 @@ usb_modify_speed:
|
|||||||
else if (is_imx8mms() || is_imx8mmsl())
|
else if (is_imx8mms() || is_imx8mmsl())
|
||||||
disable_cpu_nodes(blob, nodes_path, 3, 4);
|
disable_cpu_nodes(blob, nodes_path, 3, 4);
|
||||||
|
|
||||||
#elif defined(CONFIG_IMX8MN)
|
#elif IS_ENABLED(CONFIG_IMX8MN)
|
||||||
if (is_imx8mnl() || is_imx8mndl() || is_imx8mnsl())
|
if (is_imx8mnl() || is_imx8mndl() || is_imx8mnsl())
|
||||||
disable_gpu_nodes(blob);
|
disable_gpu_nodes(blob);
|
||||||
#ifdef CONFIG_IMX8MN_LOW_DRIVE_MODE
|
#if IS_ENABLED(CONFIG_IMX8MN_LOW_DRIVE_MODE)
|
||||||
else {
|
else {
|
||||||
int ldm_gpu = low_drive_gpu_freq(blob);
|
int ldm_gpu = low_drive_gpu_freq(blob);
|
||||||
|
|
||||||
@@ -1415,7 +1415,7 @@ usb_modify_speed:
|
|||||||
else if (is_imx8mns() || is_imx8mnsl() || is_imx8mnus())
|
else if (is_imx8mns() || is_imx8mnsl() || is_imx8mnus())
|
||||||
disable_cpu_nodes(blob, nodes_path, 3, 4);
|
disable_cpu_nodes(blob, nodes_path, 3, 4);
|
||||||
|
|
||||||
#elif defined(CONFIG_IMX8MP)
|
#elif IS_ENABLED(CONFIG_IMX8MP)
|
||||||
if (is_imx8mpul()) {
|
if (is_imx8mpul()) {
|
||||||
/* Disable GPU */
|
/* Disable GPU */
|
||||||
disable_gpu_nodes(blob);
|
disable_gpu_nodes(blob);
|
||||||
@@ -1471,7 +1471,7 @@ void reset_cpu(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_MISC_INIT)
|
#if IS_ENABLED(CONFIG_ARCH_MISC_INIT)
|
||||||
int arch_misc_init(void)
|
int arch_misc_init(void)
|
||||||
{
|
{
|
||||||
if (IS_ENABLED(CONFIG_FSL_CAAM)) {
|
if (IS_ENABLED(CONFIG_FSL_CAAM)) {
|
||||||
@@ -1487,8 +1487,8 @@ int arch_misc_init(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_XPL_BUILD)
|
#if IS_ENABLED(CONFIG_XPL_BUILD)
|
||||||
#if defined(CONFIG_IMX8MQ) || defined(CONFIG_IMX8MM) || defined(CONFIG_IMX8MN)
|
#if IS_ENABLED(CONFIG_IMX8MQ) || IS_ENABLED(CONFIG_IMX8MM) || IS_ENABLED(CONFIG_IMX8MN)
|
||||||
bool serror_need_skip = true;
|
bool serror_need_skip = true;
|
||||||
|
|
||||||
void do_error(struct pt_regs *pt_regs)
|
void do_error(struct pt_regs *pt_regs)
|
||||||
@@ -1523,7 +1523,7 @@ void do_error(struct pt_regs *pt_regs)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_IMX8MN) || defined(CONFIG_IMX8MP)
|
#if IS_ENABLED(CONFIG_IMX8MN) || IS_ENABLED(CONFIG_IMX8MP)
|
||||||
enum env_location arch_env_get_location(enum env_operation op, int prio)
|
enum env_location arch_env_get_location(enum env_operation op, int prio)
|
||||||
{
|
{
|
||||||
enum boot_device dev = get_boot_device();
|
enum boot_device dev = get_boot_device();
|
||||||
@@ -1571,7 +1571,7 @@ enum env_location arch_env_get_location(enum env_operation op, int prio)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_IMX_BOOTAUX
|
#if IS_ENABLED(CONFIG_IMX_BOOTAUX)
|
||||||
const struct rproc_att hostmap[] = {
|
const struct rproc_att hostmap[] = {
|
||||||
/* aux core , host core, size */
|
/* aux core , host core, size */
|
||||||
{ 0x00000000, 0x007e0000, 0x00020000 },
|
{ 0x00000000, 0x007e0000, 0x00020000 },
|
||||||
|
@@ -73,6 +73,7 @@ config TARGET_PHYCORE_IMX93
|
|||||||
bool "phycore_imx93"
|
bool "phycore_imx93"
|
||||||
select IMX93
|
select IMX93
|
||||||
select IMX9_LPDDR4X
|
select IMX9_LPDDR4X
|
||||||
|
imply OF_UPSTREAM
|
||||||
select OF_BOARD_FIXUP
|
select OF_BOARD_FIXUP
|
||||||
select OF_BOARD_SETUP
|
select OF_BOARD_SETUP
|
||||||
|
|
||||||
|
@@ -35,12 +35,10 @@ ulong __weak spl_romapi_get_uboot_base(u32 image_offset, u32 rom_bt_dev)
|
|||||||
{
|
{
|
||||||
u32 sector = 0;
|
u32 sector = 0;
|
||||||
|
|
||||||
/*
|
#if IS_ENABLED(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR)
|
||||||
* Some boards use this value even though MMC is not enabled in SPL, for
|
|
||||||
* example imx8mn_bsh_smm_s2
|
|
||||||
*/
|
|
||||||
#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
|
|
||||||
sector = CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR;
|
sector = CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR;
|
||||||
|
#elif IS_ENABLED(CONFIG_SPL_NAND_RAW_U_BOOT_USE_SECTOR)
|
||||||
|
sector = CONFIG_SPL_NAND_RAW_U_BOOT_SECTOR;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return image_offset + sector * 512 - 0x8000;
|
return image_offset + sector * 512 - 0x8000;
|
||||||
|
@@ -2,5 +2,4 @@
|
|||||||
# (C) Copyright 2021 Amarula Solutions B.V.
|
# (C) Copyright 2021 Amarula Solutions B.V.
|
||||||
|
|
||||||
obj-y := imx6ulz_smm_m2.o
|
obj-y := imx6ulz_smm_m2.o
|
||||||
obj-$(CONFIG_XPL_BUILD) += spl.o
|
obj-$(CONFIG_XPL_BUILD) += spl.o ddr3l_timing_512m.o ddr3l_timing_256m.o ddr3l_timing_128m.o
|
||||||
|
|
||||||
|
169
board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c
Normal file
169
board/bsh/imx6ulz_smm_m2/ddr3l_timing_128m.c
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
#include "spl_mtypes.h"
|
||||||
|
|
||||||
|
static const struct dram_cfg_param ddr_ddrc_cfg_128mb[] = {
|
||||||
|
/* IOMUX */
|
||||||
|
|
||||||
|
/* DDR IO Type: */
|
||||||
|
{0x020e04b4, 0x000C0000}, /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE */
|
||||||
|
{0x020e04ac, 0x00000000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE */
|
||||||
|
|
||||||
|
/* Clock: */
|
||||||
|
{0x020e027c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */
|
||||||
|
|
||||||
|
/* Address: */
|
||||||
|
{0x020e0250, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS */
|
||||||
|
{0x020e024c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS */
|
||||||
|
{0x020e0490, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_ADDDS */
|
||||||
|
|
||||||
|
/* Control: */
|
||||||
|
{0x020e0288, 0x000C0028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET */
|
||||||
|
{0x020e0270, 0x00000000}, /*
|
||||||
|
* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured
|
||||||
|
* using Group Control Register IOMUXC_SW_PAD_CTL_GRP_CTLDS
|
||||||
|
*/
|
||||||
|
|
||||||
|
{0x020e0260, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 */
|
||||||
|
{0x020e0264, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 */
|
||||||
|
{0x020e04a0, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_CTLDS */
|
||||||
|
|
||||||
|
/* Data Strobes: */
|
||||||
|
{0x020e0494, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL */
|
||||||
|
{0x020e0280, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 */
|
||||||
|
{0x020e0284, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 */
|
||||||
|
|
||||||
|
/* Data: */
|
||||||
|
{0x020e04b0, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE */
|
||||||
|
{0x020e0498, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B0DS */
|
||||||
|
{0x020e04a4, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B1DS */
|
||||||
|
|
||||||
|
{0x020e0244, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 */
|
||||||
|
{0x020e0248, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* DDR Controller Registers
|
||||||
|
* =============================================================================
|
||||||
|
* Manufacturer:ISSI
|
||||||
|
* Device Part Number:IS43TR16640BL-125JBLI
|
||||||
|
* Clock Freq.: 400MHz
|
||||||
|
* Density per CS in Gb: 1
|
||||||
|
* Chip Selects used:1
|
||||||
|
* Number of Banks:8
|
||||||
|
* Row address: 13
|
||||||
|
* Column address: 10
|
||||||
|
* Data bus width16
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
{0x021b001c, 0x00008000}, /*
|
||||||
|
* MMDC0_MDSCR, set the Configuration request bit
|
||||||
|
* during MMDC set up
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* Calibration setup.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
{0x021b0800, 0xA1390003}, /*
|
||||||
|
* DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic
|
||||||
|
* HW ZQ calibration.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For target board, may need to run write leveling calibration to fine tune
|
||||||
|
* these settings.
|
||||||
|
*/
|
||||||
|
{0x021b080c, 0x00000000},
|
||||||
|
|
||||||
|
/* Read DQS Gating calibration */
|
||||||
|
{0x021b083c, 0x41480148}, /* MPDGCTRL0 PHY0 */
|
||||||
|
|
||||||
|
/* Read calibration */
|
||||||
|
{0x021b0848, 0x40403A3E}, /* MPRDDLCTL PHY0 */
|
||||||
|
|
||||||
|
/* Write calibration */
|
||||||
|
{0x021b0850, 0x4040362E}, /* MPWRDLCTL PHY0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read data bit delay: 3 is the recommended default value, although out of reset
|
||||||
|
* value is 0.
|
||||||
|
*/
|
||||||
|
{0x021b081c, 0x33333333}, /* MMDC_MPRDDQBY0DL */
|
||||||
|
{0x021b0820, 0x33333333}, /* MMDC_MPRDDQBY1DL */
|
||||||
|
|
||||||
|
/* Write data bit delay: */
|
||||||
|
{0x021b082c, 0xF3333333}, /* MMDC_MPWRDQBY0DL */
|
||||||
|
{0x021b0830, 0xF3333333}, /* MMDC_MPWRDQBY1DL */
|
||||||
|
|
||||||
|
/* DQS&CLK Duty Cycle */
|
||||||
|
{0x021b08c0, 0x00944009}, /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register */
|
||||||
|
|
||||||
|
/* Complete calibration by forced measurement: */
|
||||||
|
{0x021b08b8, 0x00000800}, /* DDR_PHY_P0_MPMUR0, frc_msr */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* Calibration setup end
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* MMDC init: */
|
||||||
|
{0x021b0004, 0x0002002D}, /* MMDC0_MDPDC */
|
||||||
|
{0x021b0008, 0x1B333030}, /* MMDC0_MDOTC */
|
||||||
|
{0x021b000c, 0x2B2F52F3}, /* MMDC0_MDCFG0 */
|
||||||
|
{0x021b0010, 0xB66D0B63}, /* MMDC0_MDCFG1 */
|
||||||
|
{0x021b0014, 0x01FF00DB}, /* MMDC0_MDCFG2 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MDMISC: RALAT kept to the high level of 5.
|
||||||
|
* MDMISC: consider reducing RALAT if your 528MHz board design allow that.
|
||||||
|
* Lower RALAT benefits:
|
||||||
|
* a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3
|
||||||
|
* b. Small performance improvement
|
||||||
|
*/
|
||||||
|
{0x021b0018, 0x00211740}, /* MMDC0_MDMISC */
|
||||||
|
{0x021b001c, 0x00008000}, /*
|
||||||
|
* MMDC0_MDSCR, set the Configuration request bit during
|
||||||
|
* MMDC set up
|
||||||
|
*/
|
||||||
|
{0x021b002c, 0x000026D2}, /* MMDC0_MDRWD */
|
||||||
|
{0x021b0030, 0x002F1023}, /* MMDC0_MDOR */
|
||||||
|
{0x021b0040, 0x00000043}, /* Chan0 CS0_END */
|
||||||
|
{0x021b0000, 0x82180000}, /* MMDC0_MDCTL */
|
||||||
|
|
||||||
|
{0x021b0890, 0x00400000}, /* MPPDCMPR2 */
|
||||||
|
|
||||||
|
/* Mode register writes */
|
||||||
|
{0x021b001c, 0x02808032}, /* MMDC0_MDSCR, MR2 write, CS0 */
|
||||||
|
{0x021b001c, 0x00008033}, /* MMDC0_MDSCR, MR3 write, CS0 */
|
||||||
|
{0x021b001c, 0x00048031}, /* MMDC0_MDSCR, MR1 write, CS0 */
|
||||||
|
{0x021b001c, 0x15208030}, /* MMDC0_MDSCR, MR0write, CS0 */
|
||||||
|
{0x021b001c, 0x04008040}, /*
|
||||||
|
* MMDC0_MDSCR, ZQ calibration command sent to device
|
||||||
|
* on CS0
|
||||||
|
*/
|
||||||
|
|
||||||
|
{0x021b0020, 0x00007800}, /* MMDC0_MDREF */
|
||||||
|
|
||||||
|
{0x021b0818, 0x00000227}, /* DDR_PHY_P0_MPODTCTRL */
|
||||||
|
|
||||||
|
{0x021b0004, 0x0002552D}, /* MMDC0_MDPDC now SDCTL power down enabled */
|
||||||
|
|
||||||
|
{0x021b0404, 0x00011006}, /*
|
||||||
|
* MMDC0_MAPSR ADOPT power down enabled,
|
||||||
|
* MMDC will enter automatically to self-refresh
|
||||||
|
* while the number of idle cycle reached.
|
||||||
|
*/
|
||||||
|
|
||||||
|
{0x021b001c, 0x00000000}, /*
|
||||||
|
* MMDC0_MDSCR, clear this register (especially the
|
||||||
|
* configuration bit as initialization is complete)
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
struct dram_timing_info bsh_dram_timing_128mb = {
|
||||||
|
.ddrc_cfg = ddr_ddrc_cfg_128mb,
|
||||||
|
.ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_128mb),
|
||||||
|
};
|
168
board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c
Normal file
168
board/bsh/imx6ulz_smm_m2/ddr3l_timing_256m.c
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
#include "spl_mtypes.h"
|
||||||
|
|
||||||
|
static const struct dram_cfg_param ddr_ddrc_cfg_256mb[] = {
|
||||||
|
/* IOMUX */
|
||||||
|
|
||||||
|
/* DDR IO Type: */
|
||||||
|
{0x020e04b4, 0x000C0000}, /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE */
|
||||||
|
{0x020e04ac, 0x00000000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE */
|
||||||
|
|
||||||
|
/* Clock: */
|
||||||
|
{0x020e027c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */
|
||||||
|
|
||||||
|
/* Address: */
|
||||||
|
{0x020e0250, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS */
|
||||||
|
{0x020e024c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS */
|
||||||
|
{0x020e0490, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_ADDDS */
|
||||||
|
|
||||||
|
/* Control: */
|
||||||
|
{0x020e0288, 0x000C0028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET */
|
||||||
|
{0x020e0270, 0x00000000}, /*
|
||||||
|
* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured
|
||||||
|
* using Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS
|
||||||
|
*/
|
||||||
|
|
||||||
|
{0x020e0260, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 */
|
||||||
|
{0x020e0264, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 */
|
||||||
|
{0x020e04a0, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_CTLDS */
|
||||||
|
|
||||||
|
/* Data Strobes: */
|
||||||
|
{0x020e0494, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL */
|
||||||
|
{0x020e0280, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 */
|
||||||
|
{0x020e0284, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 */
|
||||||
|
|
||||||
|
/* Data: */
|
||||||
|
{0x020e04b0, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE */
|
||||||
|
{0x020e0498, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B0DS */
|
||||||
|
{0x020e04a4, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B1DS */
|
||||||
|
|
||||||
|
{0x020e0244, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 */
|
||||||
|
{0x020e0248, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* DDR Controller Registers
|
||||||
|
* =============================================================================
|
||||||
|
* Manufacturer:ISSI
|
||||||
|
* Device Part Number:IS43TR16640BL-125JBLI
|
||||||
|
* Clock Freq.: 400MHz
|
||||||
|
* Density per CS in Gb: 2
|
||||||
|
* Chip Selects used:1
|
||||||
|
* Number of Banks:8
|
||||||
|
* Row address: 14
|
||||||
|
* Column address: 10
|
||||||
|
* Data bus width16
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
{0x021b001c, 0x00008000}, /*
|
||||||
|
* MMDC0_MDSCR, set the Configuration request bit during
|
||||||
|
* MMDC set up
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* Calibration setup.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
{0x021b0800, 0xA1390003}, /*
|
||||||
|
* DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic
|
||||||
|
* HW ZQ calibration
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For target board, may need to run write leveling calibration to fine tune these settings
|
||||||
|
*/
|
||||||
|
{0x021b080c, 0x00050005},
|
||||||
|
|
||||||
|
/* Read DQS Gating calibration */
|
||||||
|
{0x021b083c, 0x01480144}, /* MPDGCTRL0 PHY0 */
|
||||||
|
|
||||||
|
/* Read calibration */
|
||||||
|
{0x021b0848, 0x4040363A}, /* MPRDDLCTL PHY0 */
|
||||||
|
|
||||||
|
/* Write calibration */
|
||||||
|
{0x021b0850, 0x40402E2C}, /* MPWRDLCTL PHY0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read data bit delay: 3 is the reccommended default value, although out of reset value
|
||||||
|
* is 0
|
||||||
|
*/
|
||||||
|
{0x021b081c, 0x33333333}, /* MMDC_MPRDDQBY0DL */
|
||||||
|
{0x021b0820, 0x33333333}, /* MMDC_MPRDDQBY1DL */
|
||||||
|
|
||||||
|
/* Write data bit delay: */
|
||||||
|
{0x021b082c, 0xF3333333}, /* MMDC_MPWRDQBY0DL */
|
||||||
|
{0x021b0830, 0xF3333333}, /* MMDC_MPWRDQBY1DL */
|
||||||
|
|
||||||
|
/* DQS&CLK Duty Cycle */
|
||||||
|
{0x021b08c0, 0x00944009}, /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register */
|
||||||
|
|
||||||
|
/* Complete calibration by forced measurement: */
|
||||||
|
{0x021b08b8, 0x00000800}, /* DDR_PHY_P0_MPMUR0, frc_msr */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* Calibration setup end
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* MMDC init: */
|
||||||
|
{0x021b0004, 0x0002002D}, /* MMDC0_MDPDC */
|
||||||
|
{0x021b0008, 0x1B333030}, /* MMDC0_MDOTC */
|
||||||
|
{0x021b000c, 0x3F435333}, /* MMDC0_MDCFG0 */
|
||||||
|
{0x021b0010, 0xB68E0B63}, /* MMDC0_MDCFG1 */
|
||||||
|
{0x021b0014, 0x01FF00DB}, /* MMDC0_MDCFG2 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MDMISC: RALAT kept to the high level of 5.
|
||||||
|
* MDMISC: consider reducing RALAT if your 528MHz board design allow that.
|
||||||
|
* Lower RALAT benefits:
|
||||||
|
* a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3
|
||||||
|
* b. Small performence improvment
|
||||||
|
*/
|
||||||
|
{0x021b0018, 0x00211740}, /* MMDC0_MDMISC */
|
||||||
|
{0x021b001c, 0x00008000}, /*
|
||||||
|
* MMDC0_MDSCR, set the Configuration request bit during
|
||||||
|
* MMDC set up
|
||||||
|
*/
|
||||||
|
{0x021b002c, 0x000026D2}, /* MMDC0_MDRWD */
|
||||||
|
{0x021b0030, 0x00431023}, /* MMDC0_MDOR */
|
||||||
|
{0x021b0040, 0x00000047}, /* Chan0 CS0_END */
|
||||||
|
{0x021b0000, 0x83180000}, /* MMDC0_MDCTL */
|
||||||
|
|
||||||
|
{0x021b0890, 0x00400000}, /* MPPDCMPR2 */
|
||||||
|
|
||||||
|
/* Mode register writes */
|
||||||
|
{0x021b001c, 0x02808032}, /* MMDC0_MDSCR, MR2 write, CS0 */
|
||||||
|
{0x021b001c, 0x00008033}, /* MMDC0_MDSCR, MR3 write, CS0 */
|
||||||
|
{0x021b001c, 0x00048031}, /* MMDC0_MDSCR, MR1 write, CS0 */
|
||||||
|
{0x021b001c, 0x15208030}, /* MMDC0_MDSCR, MR0write, CS0 */
|
||||||
|
{0x021b001c, 0x04008040}, /*
|
||||||
|
* MMDC0_MDSCR, ZQ calibration command sent to device
|
||||||
|
* on CS0
|
||||||
|
*/
|
||||||
|
|
||||||
|
{0x021b0020, 0x00007800}, /* MMDC0_MDREF */
|
||||||
|
|
||||||
|
{0x021b0818, 0x00000227}, /* DDR_PHY_P0_MPODTCTRL */
|
||||||
|
|
||||||
|
{0x021b0004, 0x0002552D}, /* MMDC0_MDPDC now SDCTL power down enabled */
|
||||||
|
|
||||||
|
{0x021b0404, 0x00011006}, /*
|
||||||
|
* MMDC0_MAPSR ADOPT power down enabled, MMDC will enter
|
||||||
|
* automatically to self-refresh while the number of idle
|
||||||
|
* cycle reached
|
||||||
|
*/
|
||||||
|
|
||||||
|
{0x021b001c, 0x00000000}, /*
|
||||||
|
* MMDC0_MDSCR, clear this register (especially the
|
||||||
|
* configuration bit as initialization is complete)
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
struct dram_timing_info bsh_dram_timing_256mb = {
|
||||||
|
.ddrc_cfg = ddr_ddrc_cfg_256mb,
|
||||||
|
.ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_256mb),
|
||||||
|
};
|
168
board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c
Normal file
168
board/bsh/imx6ulz_smm_m2/ddr3l_timing_512m.c
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
#include "spl_mtypes.h"
|
||||||
|
|
||||||
|
static const struct dram_cfg_param ddr_ddrc_cfg_512mb[] = {
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* IOMUX
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* DDR IO Type: */
|
||||||
|
{0x020e04b4, 0x000C0000}, /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE */
|
||||||
|
{0x020e04ac, 0x00000000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE */
|
||||||
|
|
||||||
|
/* Clock: */
|
||||||
|
{0x020e027c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 */
|
||||||
|
|
||||||
|
/* Address: */
|
||||||
|
{0x020e0250, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS */
|
||||||
|
{0x020e024c, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS */
|
||||||
|
{0x020e0490, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_ADDDS */
|
||||||
|
|
||||||
|
/* Control: */
|
||||||
|
{0x020e0288, 0x000C0028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET */
|
||||||
|
{0x020e0270, 0x00000000}, /*
|
||||||
|
* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured using
|
||||||
|
* Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS
|
||||||
|
*/
|
||||||
|
{0x020e0260, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 */
|
||||||
|
{0x020e0264, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 */
|
||||||
|
{0x020e04a0, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_CTLDS */
|
||||||
|
|
||||||
|
/* Data Strobes: */
|
||||||
|
{0x020e0494, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL */
|
||||||
|
{0x020e0280, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 */
|
||||||
|
{0x020e0284, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 */
|
||||||
|
|
||||||
|
/* Data: */
|
||||||
|
{0x020e04b0, 0x00020000}, /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE */
|
||||||
|
{0x020e0498, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B0DS */
|
||||||
|
{0x020e04a4, 0x00000028}, /* IOMUXC_SW_PAD_CTL_GRP_B1DS */
|
||||||
|
|
||||||
|
{0x020e0244, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 */
|
||||||
|
{0x020e0248, 0x00000028}, /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* DDR Controller Registers
|
||||||
|
* =============================================================================
|
||||||
|
* Manufacturer:ISSI
|
||||||
|
* Device Part Number:IS43TR16640BL-125JBLI
|
||||||
|
* Clock Freq.: 400MHz
|
||||||
|
* Density per CS in Gb: 2
|
||||||
|
* Chip Selects used:1
|
||||||
|
* Number of Banks:8
|
||||||
|
* Row address: 14
|
||||||
|
* Column address: 10
|
||||||
|
* Data bus width16
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
{0x021b001c, 0x00008000}, /*
|
||||||
|
* MMDC0_MDSCR, set the Configuration request bit during
|
||||||
|
* MMDC set up
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* Calibration setup.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
{0x021b0800, 0xA1390003}, /*
|
||||||
|
* DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic
|
||||||
|
* HW ZQ calibration
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For target board may need to run write leveling calibration to fine tune these settings
|
||||||
|
*/
|
||||||
|
{0x021b080c, 0x00000000},
|
||||||
|
|
||||||
|
/* Read DQS Gating calibration */
|
||||||
|
{0x021b083c, 0x01440140}, /* MPDGCTRL0 PHY0 */
|
||||||
|
|
||||||
|
/* Read calibration */
|
||||||
|
{0x021b0848, 0x40403A3E}, /* MPRDDLCTL PHY0 */
|
||||||
|
|
||||||
|
/* Write calibration */
|
||||||
|
{0x021b0850, 0x4040322A}, /* MPWRDLCTL PHY0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read data bit delay: 3 is the reccommended default value, although out of reset value
|
||||||
|
* is 0
|
||||||
|
*/
|
||||||
|
{0x021b081c, 0x33333333}, /* MMDC_MPRDDQBY0DL */
|
||||||
|
{0x021b0820, 0x33333333}, /* MMDC_MPRDDQBY1DL */
|
||||||
|
|
||||||
|
/* Write data bit delay: */
|
||||||
|
{0x021b082c, 0xF3333333}, /* MMDC_MPWRDQBY0DL */
|
||||||
|
{0x021b0830, 0xF3333333}, /* MMDC_MPWRDQBY1DL */
|
||||||
|
|
||||||
|
/* DQS&CLK Duty Cycle */
|
||||||
|
{0x021b08c0, 0x00944009}, /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register */
|
||||||
|
|
||||||
|
/* Complete calibration by forced measurement: */
|
||||||
|
{0x021b08b8, 0x00000800}, /* DDR_PHY_P0_MPMUR0, frc_msr */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* =============================================================================
|
||||||
|
* Calibration setup end
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* MMDC init: */
|
||||||
|
{0x021b0004, 0x0002002D}, /* MMDC0_MDPDC */
|
||||||
|
{0x021b0008, 0x1B333030}, /* MMDC0_MDOTC */
|
||||||
|
{0x021b000c, 0x3F435333}, /* MMDC0_MDCFG0 */
|
||||||
|
{0x021b0010, 0xB68E0B63}, /* MMDC0_MDCFG1 */
|
||||||
|
{0x021b0014, 0x01FF00DB}, /* MMDC0_MDCFG2 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MDMISC: RALAT kept to the high level of 5.
|
||||||
|
* MDMISC: consider reducing RALAT if your 528MHz board design allow that.
|
||||||
|
* Lower RALAT benefits:
|
||||||
|
* a. better operation at low frequency, for LPDDR2 freq < 100MHz, change RALAT to 3
|
||||||
|
* b. Small performence improvment
|
||||||
|
*/
|
||||||
|
{0x021b0018, 0x00211740}, /* MMDC0_MDMISC */
|
||||||
|
{0x021b001c, 0x00008000}, /*
|
||||||
|
* MMDC0_MDSCR set the Configuration request bit during
|
||||||
|
* MMDC set up
|
||||||
|
*/
|
||||||
|
{0x021b002c, 0x000026D2}, /* MMDC0_MDRWD */
|
||||||
|
{0x021b0030, 0x00431023}, /* MMDC0_MDOR */
|
||||||
|
{0x021b0040, 0x0000004F}, /* Chan0 CS0_END */
|
||||||
|
{0x021b0000, 0x84180000}, /* MMDC0_MDCTL */
|
||||||
|
|
||||||
|
{0x021b0890, 0x00400000}, /* MPPDCMPR2 */
|
||||||
|
|
||||||
|
/* Mode register writes */
|
||||||
|
{0x021b001c, 0x02808032}, /* MMDC0_MDSCR, MR2 write, CS0 */
|
||||||
|
{0x021b001c, 0x00008033}, /* MMDC0_MDSCR, MR3 write, CS0 */
|
||||||
|
{0x021b001c, 0x00048031}, /* MMDC0_MDSCR, MR1 write, CS0 */
|
||||||
|
{0x021b001c, 0x15208030}, /* MMDC0_MDSCR, MR0write, CS0 */
|
||||||
|
{0x021b001c, 0x04008040}, /* MMDC0_MDSCR, ZQ calibration command sent to device on CS0 */
|
||||||
|
|
||||||
|
{0x021b0020, 0x00007800}, /* MMDC0_MDREF */
|
||||||
|
|
||||||
|
{0x021b0818, 0x00000227}, /* DDR_PHY_P0_MPODTCTRL */
|
||||||
|
|
||||||
|
{0x021b0004, 0x0002552D}, /* MMDC0_MDPDC now SDCTL power down enabled */
|
||||||
|
|
||||||
|
{0x021b0404, 0x00011006}, /*
|
||||||
|
* MMDC0_MAPSR ADOPT power down enabled, MMDC will enter
|
||||||
|
* automatically to self-refresh while the number of idle
|
||||||
|
* cycle reached
|
||||||
|
*/
|
||||||
|
|
||||||
|
{0x021b001c, 0x00000000}, /*
|
||||||
|
* MMDC0_MDSCR, clear this register (especially the configuration
|
||||||
|
* bit as initialization is complete)
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
|
struct dram_timing_info bsh_dram_timing_512mb = {
|
||||||
|
.ddrc_cfg = ddr_ddrc_cfg_512mb,
|
||||||
|
.ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_512mb),
|
||||||
|
};
|
@@ -13,10 +13,13 @@
|
|||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
#include <asm/mach-imx/iomux-v3.h>
|
#include <asm/mach-imx/iomux-v3.h>
|
||||||
#include <asm/mach-imx/boot_mode.h>
|
#include <asm/mach-imx/boot_mode.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
#include <linux/libfdt.h>
|
#include <linux/libfdt.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
#include <asm/arch/mx6-ddr.h>
|
#include <asm/arch/mx6-ddr.h>
|
||||||
|
|
||||||
|
#include "spl_mtypes.h"
|
||||||
|
|
||||||
#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
|
#define UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
|
||||||
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
|
||||||
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
|
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
|
||||||
@@ -31,69 +34,48 @@ static void setup_iomux_uart(void)
|
|||||||
imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads));
|
imx_iomux_v3_setup_multiple_pads(uart4_pads, ARRAY_SIZE(uart4_pads));
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct mx6ul_iomux_grp_regs mx6_grp_ioregs = {
|
static void ddr_cfg_write(const struct dram_timing_info *dram_timing_info)
|
||||||
.grp_addds = 0x00000028,
|
{
|
||||||
.grp_ddrmode_ctl = 0x00020000,
|
int i;
|
||||||
.grp_b0ds = 0x00000028,
|
const struct dram_cfg_param *ddrc_cfg = dram_timing_info->ddrc_cfg;
|
||||||
.grp_ctlds = 0x00000028,
|
const int ddrc_cfg_num = dram_timing_info->ddrc_cfg_num;
|
||||||
.grp_b1ds = 0x00000028,
|
struct mmdc_p_regs *mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR;
|
||||||
.grp_ddrpke = 0x00000000,
|
|
||||||
.grp_ddrmode = 0x00020000,
|
|
||||||
.grp_ddr_type = 0x000c0000,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mx6ul_iomux_ddr_regs mx6_ddr_ioregs = {
|
clrbits_le32(&mmdc0->mdctl, 1 << 31); /* clear SDE_0 */
|
||||||
.dram_dqm0 = 0x00000028,
|
clrbits_le32(&mmdc0->mdctl, 1 << 30); /* clear SDE_1 */
|
||||||
.dram_dqm1 = 0x00000028,
|
|
||||||
.dram_ras = 0x00000028,
|
|
||||||
.dram_cas = 0x00000028,
|
|
||||||
.dram_odt0 = 0x00000028,
|
|
||||||
.dram_odt1 = 0x00000028,
|
|
||||||
.dram_sdba2 = 0x00000000,
|
|
||||||
.dram_sdclk_0 = 0x00000028,
|
|
||||||
.dram_sdqs0 = 0x00000028,
|
|
||||||
.dram_sdqs1 = 0x00000028,
|
|
||||||
.dram_reset = 0x000c0028,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mx6_mmdc_calibration mx6_mmcd_calib = {
|
for (i = 0; i < ddrc_cfg_num; i++) {
|
||||||
.p0_mpwldectrl0 = 0x00000000,
|
debug("Writing 0x%x to register 0x%x\n", ddrc_cfg->val,
|
||||||
.p0_mpwldectrl1 = 0x00100010,
|
ddrc_cfg->reg);
|
||||||
.p0_mpdgctrl0 = 0x414c014c,
|
writel(ddrc_cfg->val, ddrc_cfg->reg);
|
||||||
.p0_mpdgctrl1 = 0x00000000,
|
ddrc_cfg++;
|
||||||
.p0_mprddlctl = 0x40403a42,
|
}
|
||||||
.p0_mpwrdlctl = 0x4040342e,
|
}
|
||||||
};
|
|
||||||
|
|
||||||
static struct mx6_ddr_sysinfo ddr_sysinfo = {
|
static void spl_dram_init(void)
|
||||||
.dsize = 0,
|
{
|
||||||
.cs1_mirror = 0,
|
/* Configure memory to maximum supported size for detection */
|
||||||
.cs_density = 32,
|
ddr_cfg_write(&bsh_dram_timing_512mb);
|
||||||
.ncs = 1,
|
|
||||||
.bi_on = 1,
|
|
||||||
.rtt_nom = 1,
|
|
||||||
.rtt_wr = 0,
|
|
||||||
.ralat = 5,
|
|
||||||
.walat = 1,
|
|
||||||
.mif3_mode = 3,
|
|
||||||
.rst_to_cke = 0x23, /* 33 cycles (JEDEC value for DDR3) - total of 500 us */
|
|
||||||
.sde_to_rst = 0x10, /* 14 cycles (JEDEC value for DDR3) - total of 200 us */
|
|
||||||
.refsel = 1,
|
|
||||||
.refr = 3,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mx6_ddr3_cfg mem_ddr = {
|
/* Detect memory physically present */
|
||||||
.mem_speed = 1333,
|
gd->ram_size = get_ram_size((void *)CFG_SYS_SDRAM_BASE, SZ_512M);
|
||||||
.density = 2,
|
|
||||||
.width = 16,
|
/* Reconfigure memory for actual detected size */
|
||||||
.banks = 8,
|
switch (gd->ram_size) {
|
||||||
.rowaddr = 13,
|
case SZ_512M:
|
||||||
.coladdr = 10,
|
/* Already configured, nothing to do */
|
||||||
.pagesz = 2,
|
break;
|
||||||
.trcd = 1350,
|
case SZ_256M:
|
||||||
.trcmin = 4950,
|
udelay(1);
|
||||||
.trasmin = 3600,
|
ddr_cfg_write(&bsh_dram_timing_256mb);
|
||||||
};
|
break;
|
||||||
|
case SZ_128M:
|
||||||
|
default:
|
||||||
|
udelay(1);
|
||||||
|
ddr_cfg_write(&bsh_dram_timing_128mb);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void ccgr_init(void)
|
static void ccgr_init(void)
|
||||||
{
|
{
|
||||||
@@ -108,20 +90,17 @@ static void ccgr_init(void)
|
|||||||
writel(0xFFFFFFFF, &ccm->CCGR6);
|
writel(0xFFFFFFFF, &ccm->CCGR6);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void imx6ul_spl_dram_cfg(void)
|
|
||||||
{
|
|
||||||
mx6ul_dram_iocfg(mem_ddr.width, &mx6_ddr_ioregs, &mx6_grp_ioregs);
|
|
||||||
mx6_dram_cfg(&ddr_sysinfo, &mx6_mmcd_calib, &mem_ddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void board_init_f(ulong dummy)
|
void board_init_f(ulong dummy)
|
||||||
{
|
{
|
||||||
ccgr_init();
|
ccgr_init();
|
||||||
|
|
||||||
|
/* DDR initialization */
|
||||||
|
spl_dram_init();
|
||||||
|
|
||||||
arch_cpu_init();
|
arch_cpu_init();
|
||||||
timer_init();
|
timer_init();
|
||||||
setup_iomux_uart();
|
setup_iomux_uart();
|
||||||
preloader_console_init();
|
preloader_console_init();
|
||||||
imx6ul_spl_dram_cfg();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_cpu(void)
|
void reset_cpu(void)
|
||||||
|
27
board/bsh/imx6ulz_smm_m2/spl_mtypes.h
Normal file
27
board/bsh/imx6ulz_smm_m2/spl_mtypes.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright 2025 BSH Hausgeraete GmbH
|
||||||
|
*
|
||||||
|
* Written by: Simon Holesch <simon.holesch@bshg.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SPL_MTYPES_H
|
||||||
|
#define SPL_MTYPES_H
|
||||||
|
|
||||||
|
#include <spl.h>
|
||||||
|
|
||||||
|
struct dram_cfg_param {
|
||||||
|
unsigned int reg;
|
||||||
|
unsigned int val;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct dram_timing_info {
|
||||||
|
const struct dram_cfg_param *ddrc_cfg;
|
||||||
|
unsigned int ddrc_cfg_num;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct dram_timing_info bsh_dram_timing_128mb;
|
||||||
|
extern struct dram_timing_info bsh_dram_timing_256mb;
|
||||||
|
extern struct dram_timing_info bsh_dram_timing_512mb;
|
||||||
|
|
||||||
|
#endif /* SPL_MTYPES_H */
|
@@ -43,8 +43,6 @@ void spl_board_init(void)
|
|||||||
|
|
||||||
int board_early_init_f(void)
|
int board_early_init_f(void)
|
||||||
{
|
{
|
||||||
init_uart_clk(3);
|
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_NAND_MXS)) {
|
if (IS_ENABLED(CONFIG_NAND_MXS)) {
|
||||||
init_nand_clk();
|
init_nand_clk();
|
||||||
}
|
}
|
||||||
|
@@ -115,8 +115,6 @@ void board_init_f(ulong dummy)
|
|||||||
|
|
||||||
arch_cpu_init();
|
arch_cpu_init();
|
||||||
|
|
||||||
init_uart_clk(1);
|
|
||||||
|
|
||||||
timer_init();
|
timer_init();
|
||||||
|
|
||||||
/* Clear the BSS. */
|
/* Clear the BSS. */
|
||||||
|
@@ -3,8 +3,6 @@ M: Mathieu Othacehe <m.othacehe@gmail.com>
|
|||||||
R: Christoph Stoidner <c.stoidner@phytec.de>
|
R: Christoph Stoidner <c.stoidner@phytec.de>
|
||||||
W: https://www.phytec.eu/en/produkte/system-on-modules/phycore-imx-91-93/
|
W: https://www.phytec.eu/en/produkte/system-on-modules/phycore-imx-91-93/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/dts/imx93-phyboard-segin.dts
|
|
||||||
F: arch/arm/dts/imx93-phycore-som.dtsi
|
|
||||||
F: arch/arm/dts/imx93-phyboard-segin-u-boot.dtsi
|
F: arch/arm/dts/imx93-phyboard-segin-u-boot.dtsi
|
||||||
F: board/phytec/phycore_imx93/
|
F: board/phytec/phycore_imx93/
|
||||||
F: board/phytec/common/imx93_som_detection.c
|
F: board/phytec/common/imx93_som_detection.c
|
||||||
|
@@ -974,6 +974,21 @@ config SPL_NAND_SUPPORT
|
|||||||
This enables the drivers in drivers/mtd/nand/raw as part of an SPL
|
This enables the drivers in drivers/mtd/nand/raw as part of an SPL
|
||||||
build.
|
build.
|
||||||
|
|
||||||
|
config SPL_NAND_RAW_U_BOOT_USE_SECTOR
|
||||||
|
bool "NAND raw mode: by sector"
|
||||||
|
depends on SPL_NAND_SUPPORT
|
||||||
|
select SPL_LOAD_BLOCK
|
||||||
|
help
|
||||||
|
Use sector number for specifying U-Boot location on NAND in
|
||||||
|
raw mode.
|
||||||
|
|
||||||
|
config SPL_NAND_RAW_U_BOOT_SECTOR
|
||||||
|
hex "Address on the NAND to load U-Boot from"
|
||||||
|
depends on SPL_NAND_RAW_U_BOOT_USE_SECTOR
|
||||||
|
help
|
||||||
|
Address on the NAND to load U-Boot from, when the NAND is being used
|
||||||
|
in raw mode. Units: NAND disk sectors (1 sector = 512 bytes).
|
||||||
|
|
||||||
config SPL_NAND_RAW_ONLY
|
config SPL_NAND_RAW_ONLY
|
||||||
bool "Support to boot only raw u-boot.bin images"
|
bool "Support to boot only raw u-boot.bin images"
|
||||||
depends on SPL_NAND_SUPPORT
|
depends on SPL_NAND_SUPPORT
|
||||||
|
@@ -64,6 +64,8 @@ CONFIG_DM_PMIC=y
|
|||||||
CONFIG_DM_REGULATOR=y
|
CONFIG_DM_REGULATOR=y
|
||||||
CONFIG_DM_REGULATOR_FIXED=y
|
CONFIG_DM_REGULATOR_FIXED=y
|
||||||
CONFIG_MXC_UART=y
|
CONFIG_MXC_UART=y
|
||||||
|
CONFIG_SYSRESET=y
|
||||||
|
CONFIG_SYSRESET_WATCHDOG=y
|
||||||
CONFIG_IMX_THERMAL=y
|
CONFIG_IMX_THERMAL=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_SPL_USB_HOST=y
|
CONFIG_SPL_USB_HOST=y
|
||||||
@@ -75,3 +77,4 @@ CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
|
|||||||
CONFIG_CI_UDC=y
|
CONFIG_CI_UDC=y
|
||||||
CONFIG_SDP_LOADADDR=0x877fffc0
|
CONFIG_SDP_LOADADDR=0x877fffc0
|
||||||
CONFIG_SPL_USB_SDP_SUPPORT=y
|
CONFIG_SPL_USB_SDP_SUPPORT=y
|
||||||
|
CONFIG_IMX_WATCHDOG=y
|
||||||
|
@@ -15,7 +15,6 @@ CONFIG_SYS_MONITOR_LEN=524288
|
|||||||
CONFIG_SPL_SERIAL=y
|
CONFIG_SPL_SERIAL=y
|
||||||
CONFIG_SPL_DRIVERS_MISC=y
|
CONFIG_SPL_DRIVERS_MISC=y
|
||||||
CONFIG_SPL_STACK=0x980000
|
CONFIG_SPL_STACK=0x980000
|
||||||
CONFIG_SPL_SYS_MALLOC_F_LEN=0x2000
|
|
||||||
CONFIG_SPL_TEXT_BASE=0x912000
|
CONFIG_SPL_TEXT_BASE=0x912000
|
||||||
CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
|
CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
|
||||||
CONFIG_SPL_BSS_START_ADDR=0x950000
|
CONFIG_SPL_BSS_START_ADDR=0x950000
|
||||||
@@ -47,6 +46,8 @@ CONFIG_SPL_DMA=y
|
|||||||
CONFIG_SPL_I2C=y
|
CONFIG_SPL_I2C=y
|
||||||
CONFIG_SPL_MTD=y
|
CONFIG_SPL_MTD=y
|
||||||
CONFIG_SPL_NAND_SUPPORT=y
|
CONFIG_SPL_NAND_SUPPORT=y
|
||||||
|
CONFIG_SPL_NAND_RAW_U_BOOT_USE_SECTOR=y
|
||||||
|
CONFIG_SPL_NAND_RAW_U_BOOT_SECTOR=0x300
|
||||||
CONFIG_SPL_NAND_BASE=y
|
CONFIG_SPL_NAND_BASE=y
|
||||||
CONFIG_SPL_NAND_IDENT=y
|
CONFIG_SPL_NAND_IDENT=y
|
||||||
CONFIG_SPL_POWER=y
|
CONFIG_SPL_POWER=y
|
||||||
|
@@ -16,7 +16,6 @@ CONFIG_SPL_MMC=y
|
|||||||
CONFIG_SPL_SERIAL=y
|
CONFIG_SPL_SERIAL=y
|
||||||
CONFIG_SPL_DRIVERS_MISC=y
|
CONFIG_SPL_DRIVERS_MISC=y
|
||||||
CONFIG_SPL_STACK=0x980000
|
CONFIG_SPL_STACK=0x980000
|
||||||
CONFIG_SPL_SYS_MALLOC_F_LEN=0x2000
|
|
||||||
CONFIG_SPL_TEXT_BASE=0x912000
|
CONFIG_SPL_TEXT_BASE=0x912000
|
||||||
CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
|
CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
|
||||||
CONFIG_SPL_BSS_START_ADDR=0x950000
|
CONFIG_SPL_BSS_START_ADDR=0x950000
|
||||||
|
@@ -12,7 +12,7 @@ CONFIG_ENV_SIZE=0x10000
|
|||||||
CONFIG_ENV_OFFSET=0x700000
|
CONFIG_ENV_OFFSET=0x700000
|
||||||
CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/imximage.cfg"
|
CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/imximage.cfg"
|
||||||
CONFIG_DM_GPIO=y
|
CONFIG_DM_GPIO=y
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="imx93-phyboard-segin"
|
CONFIG_DEFAULT_DEVICE_TREE="freescale/imx93-phyboard-segin"
|
||||||
CONFIG_AHAB_BOOT=y
|
CONFIG_AHAB_BOOT=y
|
||||||
CONFIG_TARGET_PHYCORE_IMX93=y
|
CONFIG_TARGET_PHYCORE_IMX93=y
|
||||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||||
|
@@ -217,13 +217,6 @@ static int jr_enqueue(uint32_t *desc_addr,
|
|||||||
|
|
||||||
jr->head = (head + 1) & (jr->size - 1);
|
jr->head = (head + 1) & (jr->size - 1);
|
||||||
|
|
||||||
/* Invalidate output ring */
|
|
||||||
start = (unsigned long)jr->output_ring &
|
|
||||||
~(ARCH_DMA_MINALIGN - 1);
|
|
||||||
end = ALIGN((unsigned long)jr->output_ring + jr->op_size,
|
|
||||||
ARCH_DMA_MINALIGN);
|
|
||||||
invalidate_dcache_range(start, end);
|
|
||||||
|
|
||||||
sec_out32(®s->irja, 1);
|
sec_out32(®s->irja, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -243,6 +236,7 @@ static int jr_dequeue(int sec_idx, struct caam_regs *caam)
|
|||||||
#else
|
#else
|
||||||
uint32_t *addr;
|
uint32_t *addr;
|
||||||
#endif
|
#endif
|
||||||
|
unsigned long start, end;
|
||||||
|
|
||||||
while (sec_in32(®s->orsf) && CIRC_CNT(jr->head, jr->tail,
|
while (sec_in32(®s->orsf) && CIRC_CNT(jr->head, jr->tail,
|
||||||
jr->size)) {
|
jr->size)) {
|
||||||
@@ -250,6 +244,11 @@ static int jr_dequeue(int sec_idx, struct caam_regs *caam)
|
|||||||
found = 0;
|
found = 0;
|
||||||
|
|
||||||
caam_dma_addr_t op_desc;
|
caam_dma_addr_t op_desc;
|
||||||
|
|
||||||
|
/* Invalidate output ring */
|
||||||
|
start = (unsigned long)jr->output_ring & ~(ARCH_DMA_MINALIGN - 1);
|
||||||
|
end = ALIGN((unsigned long)jr->output_ring + jr->op_size, ARCH_DMA_MINALIGN);
|
||||||
|
invalidate_dcache_range(start, end);
|
||||||
#ifdef CONFIG_CAAM_64BIT
|
#ifdef CONFIG_CAAM_64BIT
|
||||||
/* Read the 64 bit Descriptor address from Output Ring.
|
/* Read the 64 bit Descriptor address from Output Ring.
|
||||||
* The 32 bit hign and low part of the address will
|
* The 32 bit hign and low part of the address will
|
||||||
@@ -283,8 +282,13 @@ static int jr_dequeue(int sec_idx, struct caam_regs *caam)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Error condition if match not found */
|
/* Error condition if match not found */
|
||||||
if (!found)
|
if (!found) {
|
||||||
|
int slots_full = sec_in32(®s->orsf);
|
||||||
|
|
||||||
|
jr->tail = (jr->tail + slots_full) & (jr->size - 1);
|
||||||
|
sec_out32(®s->orjr, slots_full);
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
jr->info[idx].op_done = 1;
|
jr->info[idx].op_done = 1;
|
||||||
callback = (void *)jr->info[idx].callback;
|
callback = (void *)jr->info[idx].callback;
|
||||||
@@ -296,14 +300,14 @@ static int jr_dequeue(int sec_idx, struct caam_regs *caam)
|
|||||||
*/
|
*/
|
||||||
if (idx == tail)
|
if (idx == tail)
|
||||||
do {
|
do {
|
||||||
|
jr->info[tail].op_done = 0;
|
||||||
tail = (tail + 1) & (jr->size - 1);
|
tail = (tail + 1) & (jr->size - 1);
|
||||||
} while (jr->info[tail].op_done);
|
} while (jr->info[tail].op_done);
|
||||||
|
|
||||||
jr->tail = tail;
|
jr->tail = tail;
|
||||||
jr->read_idx = (jr->read_idx + 1) & (jr->size - 1);
|
|
||||||
|
|
||||||
sec_out32(®s->orjr, 1);
|
sec_out32(®s->orjr, 1);
|
||||||
jr->info[idx].op_done = 0;
|
|
||||||
|
|
||||||
callback(status, arg);
|
callback(status, arg);
|
||||||
}
|
}
|
||||||
@@ -378,7 +382,6 @@ static int jr_sw_cleanup(uint8_t sec_idx, struct caam_regs *caam)
|
|||||||
|
|
||||||
jr->head = 0;
|
jr->head = 0;
|
||||||
jr->tail = 0;
|
jr->tail = 0;
|
||||||
jr->read_idx = 0;
|
|
||||||
jr->write_idx = 0;
|
jr->write_idx = 0;
|
||||||
memset(jr->info, 0, sizeof(jr->info));
|
memset(jr->info, 0, sizeof(jr->info));
|
||||||
memset(jr->input_ring, 0, jr->size * sizeof(caam_dma_addr_t));
|
memset(jr->input_ring, 0, jr->size * sizeof(caam_dma_addr_t));
|
||||||
|
@@ -83,10 +83,6 @@ struct jobring {
|
|||||||
* in-order job completion
|
* in-order job completion
|
||||||
*/
|
*/
|
||||||
int tail;
|
int tail;
|
||||||
/* Read index of the output ring. It may not match with tail in case
|
|
||||||
* of out of order completetion
|
|
||||||
*/
|
|
||||||
int read_idx;
|
|
||||||
/* Write index to input ring. Would be always equal to head */
|
/* Write index to input ring. Would be always equal to head */
|
||||||
int write_idx;
|
int write_idx;
|
||||||
/* Size of the rings. */
|
/* Size of the rings. */
|
||||||
|
@@ -60,10 +60,8 @@
|
|||||||
BOOTENV
|
BOOTENV
|
||||||
|
|
||||||
/* Physical Memory Map */
|
/* Physical Memory Map */
|
||||||
#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
|
#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
|
||||||
#define PHYS_SDRAM_SIZE SZ_128M
|
#define CFG_SYS_SDRAM_BASE PHYS_SDRAM
|
||||||
|
|
||||||
#define CFG_SYS_SDRAM_BASE PHYS_SDRAM
|
|
||||||
#define CFG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
|
#define CFG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
|
||||||
#define CFG_SYS_INIT_RAM_SIZE IRAM_SIZE
|
#define CFG_SYS_INIT_RAM_SIZE IRAM_SIZE
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user