* [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
@ 2023-06-01 7:40 Johannes Zink
2023-06-01 7:53 ` Marco Felsch
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Johannes Zink @ 2023-06-01 7:40 UTC (permalink / raw)
To: barebox; +Cc: patchwork-jzi, Juergen Borleis, Johannes Zink
Add basic support for Koenig+Bauer Alphajet, based on a Congatec QMX8MP
SoM with a i.MX8MP SoC in the Industrial Temperature Grade 4GB Variant,
no inline ECC used.
Co-Developed-by: Juergen Borleis <j.borleis@pengutronix.de>
Signed-off-by: Juergen Borleis <j.borleis@pengutronix.de>
Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
---
Koenig+Bauer Alphajet is based on the Congatec QMX8MP, which is an
i.MX8MP based SoC. Building barebox for this target requires the usual
bl31 and lpddr4 training data in /firmware as described in [1].
The Congatec SoM is strapped and fused to boot from QSPI NOR flash,
which can easily be updated using the registered barebox update handler.
[1] https://www.barebox.org/doc/latest/boards/imx/nxp-imx8mp-evk.html
Best regards
Johannes
---
Bootlog:
barebox 2023.05.0-00196-g24e000914af6-dirty #151 Thu Jun 1 09:36:02 CEST
2023
Board: Koenig+Bauer Alphajet
deep-probe: supported due to kb,alphajet
detected i.MX8MP revision 1.1
i.MX8MP unique ID: 3a13efb20002aaff
netconsole: registered as netconsole-1
psci psci.of: detected version 1.1
imx-esdhc 30b40000.mmc@30b40000.of: registered as mmc0
mmc0: detected SD card version 2.0
mmc0: registered mmc0
imx-esdhc 30b60000.mmc@30b60000.of: registered as mmc2
mmc2: detected MMC card version 5.1
mmc2: registered mmc2.boot0
mmc2: registered mmc2.boot1
mmc2: registered mmc2
mdio_bus: miibus0: probed
xHCI xHCI0: USB XHCI 1.10
state: New state registered 'state'
state: Using bucket 0@0x00000000
malloc space: 0xbfcfbe80 -> 0xffcfbe7f (size 1 GiB)
found force-builtin environment, using defaultenv
Hit m for menu or any to stop autoboot: 3
barebox@Koenig+Bauer Alphajet:/
Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
---
arch/arm/boards/Makefile | 1 +
arch/arm/boards/kb-imx8mp-alphajet/Makefile | 4 +
arch/arm/boards/kb-imx8mp-alphajet/board.c | 60 +
| 10 +
arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c | 127 ++
arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c | 1832 ++++++++++++++++++++
arch/arm/dts/Makefile | 1 +
arch/arm/dts/imx8mp-cgtqx8p.dtsi | 1060 +++++++++++
arch/arm/dts/imx8mp-koenigbauer-alphajet.dts | 180 ++
arch/arm/mach-imx/Kconfig | 10 +
images/Makefile.imx | 5 +
11 files changed, 3290 insertions(+)
diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
index 2877debad535..67b2fc07a395 100644
--- a/arch/arm/boards/Makefile
+++ b/arch/arm/boards/Makefile
@@ -81,6 +81,7 @@ obj-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += nxp-imx8mq-evk/
obj-$(CONFIG_MACH_NXP_IMX8MM_EVK) += nxp-imx8mm-evk/
obj-$(CONFIG_MACH_NXP_IMX8MN_EVK) += nxp-imx8mn-evk/
obj-$(CONFIG_MACH_NXP_IMX8MP_EVK) += nxp-imx8mp-evk/
+obj-$(CONFIG_MACH_KB_ALPHAJET) += kb-imx8mp-alphajet/
obj-$(CONFIG_MACH_TQ_MBA8MPXL) += tqma8mpxl/
obj-$(CONFIG_MACH_OMAP343xSDP) += omap343xdsp/
obj-$(CONFIG_MACH_OMAP3EVM) += omap3evm/
diff --git a/arch/arm/boards/kb-imx8mp-alphajet/Makefile b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
new file mode 100644
index 000000000000..b3ae72be3e3b
--- /dev/null
+++ b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0+
+
+obj-y += board.o
+lwl-y += lowlevel.o lpddr4-timing.o
diff --git a/arch/arm/boards/kb-imx8mp-alphajet/board.c b/arch/arm/boards/kb-imx8mp-alphajet/board.c
new file mode 100644
index 000000000000..78cc60e2c3b1
--- /dev/null
+++ b/arch/arm/boards/kb-imx8mp-alphajet/board.c
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: GPL-2.0
+// SPDX-FileCopyrightText: 2023 Juergen Borleis, Pengutronix
+// SPDX-FileCopyrightText: 2023 Johannes Zink, Pengutronix
+
+#include <asm/memory.h>
+#include <bootsource.h>
+#include <common.h>
+#include <deep-probe.h>
+#include <init.h>
+#include <linux/phy.h>
+#include <linux/sizes.h>
+#include <mach/imx/bbu.h>
+#include <mach/imx/generic.h>
+#include <mach/imx/iomux-mx8mp.h>
+#include <gpio.h>
+#include <envfs.h>
+
+#define EQOS_PWR_PIN IMX_GPIO_NR(1, 5) /* ENET_PWREN# */
+static void setup_ethernet_phy(void)
+{
+ u32 val;
+
+ of_device_ensure_probed_by_alias("gpio0");
+
+ if (gpio_direction_output(EQOS_PWR_PIN, 0))
+ {
+ pr_err("eqos phy power: failed to request pin\n");
+ return;
+ }
+
+ /* the phy needs roughly 200ms delay after power-on */
+ mdelay(200);
+
+ /* Enable RGMII TX clk output */
+ val = readl(MX8MP_IOMUXC_GPR_BASE_ADDR + MX8MP_IOMUXC_GPR1);
+ val |= MX8MP_IOMUXC_GPR1_ENET1_RGMII_EN;
+ writel(val, MX8MP_IOMUXC_GPR_BASE_ADDR + MX8MP_IOMUXC_GPR1);
+}
+
+static int kb_alphajet_probe(struct device *dev)
+{
+ setup_ethernet_phy();
+
+ imx8m_bbu_internal_flexspi_nor_register_handler("QSPI", "/dev/m25p0.boot", BBU_HANDLER_FLAG_DEFAULT);
+
+ return 0;
+}
+
+static const struct of_device_id kb_alphajet_of_match[] = {
+ { .compatible = "kb,alphajet" },
+ { /* Sentinel */ }
+};
+BAREBOX_DEEP_PROBE_ENABLE(kb_alphajet_of_match);
+
+static struct driver kb_alphajet_board_driver = {
+ .name = "board-kb-alphajet",
+ .probe = kb_alphajet_probe,
+ .of_compatible = kb_alphajet_of_match,
+};
+coredevice_platform_driver(kb_alphajet_board_driver);
--git a/arch/arm/boards/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg b/arch/arm/boards/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
new file mode 100644
index 000000000000..70c57768ebac
--- /dev/null
+++ b/arch/arm/boards/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+soc imx8mp
+
+loadaddr 0x920000
+max_load_size 0x3f000
+ivtofs 0x0
+
+flexspi_ivtofs 0x0
+flexspi_fcfbofs 0x400
diff --git a/arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c b/arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c
new file mode 100644
index 000000000000..ca9569b8fb09
--- /dev/null
+++ b/arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c
@@ -0,0 +1,127 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <common.h>
+#include <debug_ll.h>
+#include <asm/barebox-arm.h>
+#include <asm/barebox-arm-head.h>
+#include <asm/cache.h>
+#include <asm/mmu.h>
+#include <asm/sections.h>
+#include <image-metadata.h>
+#include <mach/imx/atf.h>
+#include <mach/imx/debug_ll.h>
+#include <mach/imx/esdctl.h>
+#include <mach/imx/generic.h>
+#include <mach/imx/iomux-mx8mp.h>
+#include <mach/imx/imx8mp-regs.h>
+#include <mach/imx/imx8m-ccm-regs.h>
+#include <mach/imx/xload.h>
+#include <mfd/pca9450.h>
+#include <pbl/i2c.h>
+#include <pbl/pmic.h>
+#include <soc/fsl/fsl_udc.h>
+#include <soc/imx8m/ddr.h>
+
+extern char __dtb_z_imx8mp_koenigbauer_alphajet_start[];
+
+#define UART_PAD_CTRL MUX_PAD_CTRL(MX8MP_PAD_CTL_DSE6 | \
+ MX8MP_PAD_CTL_FSEL)
+/*
+ * SoC UART 1 is the standard console on the KB base board
+ */
+static void setup_uart(void)
+{
+ void __iomem *uart = IOMEM(MX8M_UART1_BASE_ADDR);
+
+ imx8m_early_setup_uart_clock();
+
+ imx8mp_setup_pad(MX8MP_PAD_UART1_TXD__UART1_DCE_TX | UART_PAD_CTRL);
+ imx8mp_setup_pad(MX8MP_PAD_UART1_RXD__UART1_DCE_RX | UART_PAD_CTRL);
+ imx8m_uart_setup(uart);
+
+ pbl_set_putc(imx_uart_putc, uart);
+
+ putc_ll('>');
+}
+
+#define I2C_PAD_CTRL MUX_PAD_CTRL(MX8MP_PAD_CTL_DSE6 | \
+ MX8MP_PAD_CTL_HYS | \
+ MX8MP_PAD_CTL_PUE | \
+ MX8MP_PAD_CTL_PE)
+
+static struct pmic_config pca9450_cfg[] = {
+ /* BUCKxOUT_DVS0/1 control BUCK123 output */
+ { PCA9450_BUCK123_DVS, 0x29 },
+ /*
+ * increase VDD_SOC to typical value 0.95V before first
+ * DRAM access, set DVS1 to 0.85v for suspend.
+ * Enable DVS control through PMIC_STBY_REQ and
+ * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
+ */
+ { PCA9450_BUCK1OUT_DVS0, 0x1C },
+ { PCA9450_BUCK1OUT_DVS1, 0x14 },
+ { PCA9450_BUCK1CTRL, 0x59 },
+ /* Kernel uses OD/OD freq for SOC */
+ /* To avoid timing risk from SOC to ARM, increase
+ * VDD_ARM to OD voltage 0.95v
+ */
+ { PCA9450_BUCK2OUT_DVS0, 0x1C },
+ /* set WDOG_B_CFG to cold reset */
+ { PCA9450_RESET_CTRL, 0xA1 },
+};
+
+static void power_init_board(void)
+{
+ struct pbl_i2c *i2c;
+
+ imx8mp_setup_pad(MX8MP_PAD_I2C1_SCL__I2C1_SCL | I2C_PAD_CTRL);
+ imx8mp_setup_pad(MX8MP_PAD_I2C1_SDA__I2C1_SDA | I2C_PAD_CTRL);
+
+ imx8mp_early_clock_init();
+ imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
+
+ i2c = imx8m_i2c_early_init(IOMEM(MX8MP_I2C1_BASE_ADDR));
+
+ pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
+}
+
+extern struct dram_timing_info dram_timing_4g;
+
+static void start_atf(void)
+{
+ /*
+ * If we are in EL3 we are running for the first time and need to
+ * initialize the DRAM and run TF-A (BL31). The TF-A will then jump
+ * to DRAM in EL2.
+ */
+ if (current_el() != 3)
+ return;
+
+ power_init_board();
+
+ imx8mp_ddr_init(&dram_timing_4g, DRAM_TYPE_LPDDR4);
+
+ imx8mp_load_and_start_image_via_tfa();
+}
+
+static __noreturn noinline void kb_alphajet_start(void)
+{
+ setup_uart();
+
+ start_atf();
+
+ /*
+ * Standard entry we hit once we initialized both DDR and ATF
+ */
+ imx8mp_barebox_entry(__dtb_z_imx8mp_koenigbauer_alphajet_start);
+}
+
+ENTRY_FUNCTION(start_kb_alphajet, r0, r1, r2)
+{
+ imx8mp_cpu_lowlevel_init();
+
+ relocate_to_current_adr();
+ setup_c();
+
+ kb_alphajet_start();
+}
diff --git a/arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c b/arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c
new file mode 100644
index 000000000000..6d10b530baf4
--- /dev/null
+++ b/arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c
@@ -0,0 +1,1832 @@
+// SPDX-License-Identifier: GPL-2.0+
+// SPDX-FileCopyrightText: 2019 NXP
+
+#include <common.h>
+#include <soc/imx8m/ddr.h>
+
+static struct dram_cfg_param ddr_ddrc_cfg_4g[] = {
+ /** Initialize DDRC registers **/
+ { 0x3d400304, 0x1 },
+ { 0x3d400030, 0x1 },
+ { 0x3d400000, 0xa3080020 },
+ { 0x3d400020, 0x1322 },
+ { 0x3d400024, 0x1e84800 },
+ { 0x3d400064, 0x3d0118 },
+ { 0x3d400070, 0x61027f10 },
+ { 0x3d400074, 0x7b0 },
+ { 0x3d4000d0, 0xc00307a3 },
+ { 0x3d4000d4, 0xc50000 },
+ { 0x3d4000dc, 0xf4003f },
+ { 0x3d4000e0, 0x330000 },
+ { 0x3d4000e8, 0x660048 },
+ { 0x3d4000ec, 0x160048 },
+ { 0x3d400100, 0x2028112a },
+ { 0x3d400104, 0x8083f },
+ { 0x3d40010c, 0xe0e000 },
+ { 0x3d400110, 0x12040a12 },
+ { 0x3d400114, 0x2050f0f },
+ { 0x3d400118, 0x1010009 },
+ { 0x3d40011c, 0x501 },
+ { 0x3d400130, 0x20800 },
+ { 0x3d400134, 0xe100002 },
+ { 0x3d400138, 0x120 },
+ { 0x3d400144, 0xc80064 },
+ { 0x3d400180, 0x3e8001e },
+ { 0x3d400184, 0x3207a12 },
+ { 0x3d400188, 0x0 },
+ { 0x3d400190, 0x49f820e },
+ { 0x3d400194, 0x80303 },
+ { 0x3d4001b4, 0x1f0e },
+ { 0x3d4001a0, 0xe0400018 },
+ { 0x3d4001a4, 0xdf00e4 },
+ { 0x3d4001a8, 0x80000000 },
+ { 0x3d4001b0, 0x11 },
+ { 0x3d4001c0, 0x1 },
+ { 0x3d4001c4, 0x1 },
+ { 0x3d4000f4, 0xc99 },
+ { 0x3d400108, 0x9121c1c },
+ { 0x3d400200, 0x17 },
+ { 0x3d40020c, 0x0 },
+ { 0x3d400210, 0x1f1f },
+ { 0x3d400204, 0x80808 },
+ { 0x3d400214, 0x7070707 },
+ { 0x3d400218, 0x7070707 },
+ { 0x3d40021c, 0xf0f },
+ { 0x3d400250, 0x1705 },
+ { 0x3d400254, 0x2c },
+ { 0x3d40025c, 0x4000030 },
+ { 0x3d400264, 0x900093e7 },
+ { 0x3d40026c, 0x2005574 },
+ { 0x3d400400, 0x111 },
+ { 0x3d400404, 0x72ff },
+ { 0x3d400408, 0x72ff },
+ { 0x3d400494, 0x2100e07 },
+ { 0x3d400498, 0x620096 },
+ { 0x3d40049c, 0x1100e07 },
+ { 0x3d4004a0, 0xc8012c },
+ { 0x3d402020, 0x1020 },
+ { 0x3d402024, 0x30d400 },
+ { 0x3d402050, 0x20d000 },
+ { 0x3d402064, 0x6001c },
+ { 0x3d4020dc, 0x840000 },
+ { 0x3d4020e0, 0x330000 },
+ { 0x3d4020e8, 0x660048 },
+ { 0x3d4020ec, 0x160048 },
+ { 0x3d402100, 0xa040105 },
+ { 0x3d402104, 0x30407 },
+ { 0x3d402108, 0x203060b },
+ { 0x3d40210c, 0x505000 },
+ { 0x3d402110, 0x2040202 },
+ { 0x3d402114, 0x2030202 },
+ { 0x3d402118, 0x1010004 },
+ { 0x3d40211c, 0x301 },
+ { 0x3d402130, 0x20300 },
+ { 0x3d402134, 0xa100002 },
+ { 0x3d402138, 0x1d },
+ { 0x3d402144, 0x14000a },
+ { 0x3d402180, 0x640004 },
+ { 0x3d402190, 0x3818200 },
+ { 0x3d402194, 0x80303 },
+ { 0x3d4021b4, 0x100 },
+ { 0x3d4020f4, 0xc99 },
+ { 0x3d403020, 0x1020 },
+ { 0x3d403024, 0xc3500 },
+ { 0x3d403050, 0x20d000 },
+ { 0x3d403064, 0x30007 },
+ { 0x3d4030dc, 0x840000 },
+ { 0x3d4030e0, 0x330000 },
+ { 0x3d4030e8, 0x660048 },
+ { 0x3d4030ec, 0x160048 },
+ { 0x3d403100, 0xa010102 },
+ { 0x3d403104, 0x30404 },
+ { 0x3d403108, 0x203060b },
+ { 0x3d40310c, 0x505000 },
+ { 0x3d403110, 0x2040202 },
+ { 0x3d403114, 0x2030202 },
+ { 0x3d403118, 0x1010004 },
+ { 0x3d40311c, 0x301 },
+ { 0x3d403130, 0x20300 },
+ { 0x3d403134, 0xa100002 },
+ { 0x3d403138, 0x8 },
+ { 0x3d403144, 0x50003 },
+ { 0x3d403180, 0x190004 },
+ { 0x3d403190, 0x3818200 },
+ { 0x3d403194, 0x80303 },
+ { 0x3d4031b4, 0x100 },
+ { 0x3d4030f4, 0xc99 },
+ { 0x3d400028, 0x0 },
+};
+
+/* PHY Initialize Configuration */
+static struct dram_cfg_param ddr_ddrphy_cfg[] = {
+ { 0x100a0, 0x0 },
+ { 0x100a1, 0x1 },
+ { 0x100a2, 0x2 },
+ { 0x100a3, 0x3 },
+ { 0x100a4, 0x4 },
+ { 0x100a5, 0x5 },
+ { 0x100a6, 0x6 },
+ { 0x100a7, 0x7 },
+ { 0x110a0, 0x0 },
+ { 0x110a1, 0x1 },
+ { 0x110a2, 0x3 },
+ { 0x110a3, 0x4 },
+ { 0x110a4, 0x5 },
+ { 0x110a5, 0x2 },
+ { 0x110a6, 0x7 },
+ { 0x110a7, 0x6 },
+ { 0x120a0, 0x0 },
+ { 0x120a1, 0x1 },
+ { 0x120a2, 0x3 },
+ { 0x120a3, 0x2 },
+ { 0x120a4, 0x5 },
+ { 0x120a5, 0x4 },
+ { 0x120a6, 0x7 },
+ { 0x120a7, 0x6 },
+ { 0x130a0, 0x0 },
+ { 0x130a1, 0x1 },
+ { 0x130a2, 0x2 },
+ { 0x130a3, 0x3 },
+ { 0x130a4, 0x4 },
+ { 0x130a5, 0x5 },
+ { 0x130a6, 0x6 },
+ { 0x130a7, 0x7 },
+ { 0x1005f, 0x1ff },
+ { 0x1015f, 0x1ff },
+ { 0x1105f, 0x1ff },
+ { 0x1115f, 0x1ff },
+ { 0x1205f, 0x1ff },
+ { 0x1215f, 0x1ff },
+ { 0x1305f, 0x1ff },
+ { 0x1315f, 0x1ff },
+ { 0x11005f, 0x1ff },
+ { 0x11015f, 0x1ff },
+ { 0x11105f, 0x1ff },
+ { 0x11115f, 0x1ff },
+ { 0x11205f, 0x1ff },
+ { 0x11215f, 0x1ff },
+ { 0x11305f, 0x1ff },
+ { 0x11315f, 0x1ff },
+ { 0x21005f, 0x1ff },
+ { 0x21015f, 0x1ff },
+ { 0x21105f, 0x1ff },
+ { 0x21115f, 0x1ff },
+ { 0x21205f, 0x1ff },
+ { 0x21215f, 0x1ff },
+ { 0x21305f, 0x1ff },
+ { 0x21315f, 0x1ff },
+ { 0x55, 0x1ff },
+ { 0x1055, 0x1ff },
+ { 0x2055, 0x1ff },
+ { 0x3055, 0x1ff },
+ { 0x4055, 0x1ff },
+ { 0x5055, 0x1ff },
+ { 0x6055, 0x1ff },
+ { 0x7055, 0x1ff },
+ { 0x8055, 0x1ff },
+ { 0x9055, 0x1ff },
+ { 0x200c5, 0x18 },
+ { 0x1200c5, 0x7 },
+ { 0x2200c5, 0x7 },
+ { 0x2002e, 0x2 },
+ { 0x12002e, 0x2 },
+ { 0x22002e, 0x2 },
+ { 0x90204, 0x0 },
+ { 0x190204, 0x0 },
+ { 0x290204, 0x0 },
+ { 0x20024, 0x1e3 },
+ { 0x2003a, 0x2 },
+ { 0x120024, 0x1e3 },
+ { 0x2003a, 0x2 },
+ { 0x220024, 0x1e3 },
+ { 0x2003a, 0x2 },
+ { 0x20056, 0x3 },
+ { 0x120056, 0x3 },
+ { 0x220056, 0x3 },
+ { 0x1004d, 0xe00 },
+ { 0x1014d, 0xe00 },
+ { 0x1104d, 0xe00 },
+ { 0x1114d, 0xe00 },
+ { 0x1204d, 0xe00 },
+ { 0x1214d, 0xe00 },
+ { 0x1304d, 0xe00 },
+ { 0x1314d, 0xe00 },
+ { 0x11004d, 0xe00 },
+ { 0x11014d, 0xe00 },
+ { 0x11104d, 0xe00 },
+ { 0x11114d, 0xe00 },
+ { 0x11204d, 0xe00 },
+ { 0x11214d, 0xe00 },
+ { 0x11304d, 0xe00 },
+ { 0x11314d, 0xe00 },
+ { 0x21004d, 0xe00 },
+ { 0x21014d, 0xe00 },
+ { 0x21104d, 0xe00 },
+ { 0x21114d, 0xe00 },
+ { 0x21204d, 0xe00 },
+ { 0x21214d, 0xe00 },
+ { 0x21304d, 0xe00 },
+ { 0x21314d, 0xe00 },
+ { 0x10049, 0xeba },
+ { 0x10149, 0xeba },
+ { 0x11049, 0xeba },
+ { 0x11149, 0xeba },
+ { 0x12049, 0xeba },
+ { 0x12149, 0xeba },
+ { 0x13049, 0xeba },
+ { 0x13149, 0xeba },
+ { 0x110049, 0xeba },
+ { 0x110149, 0xeba },
+ { 0x111049, 0xeba },
+ { 0x111149, 0xeba },
+ { 0x112049, 0xeba },
+ { 0x112149, 0xeba },
+ { 0x113049, 0xeba },
+ { 0x113149, 0xeba },
+ { 0x210049, 0xeba },
+ { 0x210149, 0xeba },
+ { 0x211049, 0xeba },
+ { 0x211149, 0xeba },
+ { 0x212049, 0xeba },
+ { 0x212149, 0xeba },
+ { 0x213049, 0xeba },
+ { 0x213149, 0xeba },
+ { 0x43, 0x63 },
+ { 0x1043, 0x63 },
+ { 0x2043, 0x63 },
+ { 0x3043, 0x63 },
+ { 0x4043, 0x63 },
+ { 0x5043, 0x63 },
+ { 0x6043, 0x63 },
+ { 0x7043, 0x63 },
+ { 0x8043, 0x63 },
+ { 0x9043, 0x63 },
+ { 0x20018, 0x3 },
+ { 0x20075, 0x4 },
+ { 0x20050, 0x0 },
+ { 0x20008, 0x3e8 },
+ { 0x120008, 0x64 },
+ { 0x220008, 0x19 },
+ { 0x20088, 0x9 },
+ { 0x200b2, 0x104 },
+ { 0x10043, 0x5a1 },
+ { 0x10143, 0x5a1 },
+ { 0x11043, 0x5a1 },
+ { 0x11143, 0x5a1 },
+ { 0x12043, 0x5a1 },
+ { 0x12143, 0x5a1 },
+ { 0x13043, 0x5a1 },
+ { 0x13143, 0x5a1 },
+ { 0x1200b2, 0x104 },
+ { 0x110043, 0x5a1 },
+ { 0x110143, 0x5a1 },
+ { 0x111043, 0x5a1 },
+ { 0x111143, 0x5a1 },
+ { 0x112043, 0x5a1 },
+ { 0x112143, 0x5a1 },
+ { 0x113043, 0x5a1 },
+ { 0x113143, 0x5a1 },
+ { 0x2200b2, 0x104 },
+ { 0x210043, 0x5a1 },
+ { 0x210143, 0x5a1 },
+ { 0x211043, 0x5a1 },
+ { 0x211143, 0x5a1 },
+ { 0x212043, 0x5a1 },
+ { 0x212143, 0x5a1 },
+ { 0x213043, 0x5a1 },
+ { 0x213143, 0x5a1 },
+ { 0x200fa, 0x1 },
+ { 0x1200fa, 0x1 },
+ { 0x2200fa, 0x1 },
+ { 0x20019, 0x1 },
+ { 0x120019, 0x1 },
+ { 0x220019, 0x1 },
+ { 0x200f0, 0x660 },
+ { 0x200f1, 0x0 },
+ { 0x200f2, 0x4444 },
+ { 0x200f3, 0x8888 },
+ { 0x200f4, 0x5665 },
+ { 0x200f5, 0x0 },
+ { 0x200f6, 0x0 },
+ { 0x200f7, 0xf000 },
+ { 0x20025, 0x0 },
+ { 0x2002d, 0x0 },
+ { 0x12002d, 0x0 },
+ { 0x22002d, 0x0 },
+ { 0x2007d, 0x212 },
+ { 0x12007d, 0x212 },
+ { 0x22007d, 0x212 },
+ { 0x2007c, 0x61 },
+ { 0x12007c, 0x61 },
+ { 0x22007c, 0x61 },
+ { 0x1004a, 0x500 },
+ { 0x1104a, 0x500 },
+ { 0x1204a, 0x500 },
+ { 0x1304a, 0x500 },
+ { 0x2002c, 0x0 },
+};
+
+/* ddr phy trained csr */
+static struct dram_cfg_param ddr_ddrphy_trained_csr[] = {
+ { 0x200b2, 0x0 },
+ { 0x1200b2, 0x0 },
+ { 0x2200b2, 0x0 },
+ { 0x200cb, 0x0 },
+ { 0x10043, 0x0 },
+ { 0x110043, 0x0 },
+ { 0x210043, 0x0 },
+ { 0x10143, 0x0 },
+ { 0x110143, 0x0 },
+ { 0x210143, 0x0 },
+ { 0x11043, 0x0 },
+ { 0x111043, 0x0 },
+ { 0x211043, 0x0 },
+ { 0x11143, 0x0 },
+ { 0x111143, 0x0 },
+ { 0x211143, 0x0 },
+ { 0x12043, 0x0 },
+ { 0x112043, 0x0 },
+ { 0x212043, 0x0 },
+ { 0x12143, 0x0 },
+ { 0x112143, 0x0 },
+ { 0x212143, 0x0 },
+ { 0x13043, 0x0 },
+ { 0x113043, 0x0 },
+ { 0x213043, 0x0 },
+ { 0x13143, 0x0 },
+ { 0x113143, 0x0 },
+ { 0x213143, 0x0 },
+ { 0x80, 0x0 },
+ { 0x100080, 0x0 },
+ { 0x200080, 0x0 },
+ { 0x1080, 0x0 },
+ { 0x101080, 0x0 },
+ { 0x201080, 0x0 },
+ { 0x2080, 0x0 },
+ { 0x102080, 0x0 },
+ { 0x202080, 0x0 },
+ { 0x3080, 0x0 },
+ { 0x103080, 0x0 },
+ { 0x203080, 0x0 },
+ { 0x4080, 0x0 },
+ { 0x104080, 0x0 },
+ { 0x204080, 0x0 },
+ { 0x5080, 0x0 },
+ { 0x105080, 0x0 },
+ { 0x205080, 0x0 },
+ { 0x6080, 0x0 },
+ { 0x106080, 0x0 },
+ { 0x206080, 0x0 },
+ { 0x7080, 0x0 },
+ { 0x107080, 0x0 },
+ { 0x207080, 0x0 },
+ { 0x8080, 0x0 },
+ { 0x108080, 0x0 },
+ { 0x208080, 0x0 },
+ { 0x9080, 0x0 },
+ { 0x109080, 0x0 },
+ { 0x209080, 0x0 },
+ { 0x10080, 0x0 },
+ { 0x110080, 0x0 },
+ { 0x210080, 0x0 },
+ { 0x10180, 0x0 },
+ { 0x110180, 0x0 },
+ { 0x210180, 0x0 },
+ { 0x11080, 0x0 },
+ { 0x111080, 0x0 },
+ { 0x211080, 0x0 },
+ { 0x11180, 0x0 },
+ { 0x111180, 0x0 },
+ { 0x211180, 0x0 },
+ { 0x12080, 0x0 },
+ { 0x112080, 0x0 },
+ { 0x212080, 0x0 },
+ { 0x12180, 0x0 },
+ { 0x112180, 0x0 },
+ { 0x212180, 0x0 },
+ { 0x13080, 0x0 },
+ { 0x113080, 0x0 },
+ { 0x213080, 0x0 },
+ { 0x13180, 0x0 },
+ { 0x113180, 0x0 },
+ { 0x213180, 0x0 },
+ { 0x10081, 0x0 },
+ { 0x110081, 0x0 },
+ { 0x210081, 0x0 },
+ { 0x10181, 0x0 },
+ { 0x110181, 0x0 },
+ { 0x210181, 0x0 },
+ { 0x11081, 0x0 },
+ { 0x111081, 0x0 },
+ { 0x211081, 0x0 },
+ { 0x11181, 0x0 },
+ { 0x111181, 0x0 },
+ { 0x211181, 0x0 },
+ { 0x12081, 0x0 },
+ { 0x112081, 0x0 },
+ { 0x212081, 0x0 },
+ { 0x12181, 0x0 },
+ { 0x112181, 0x0 },
+ { 0x212181, 0x0 },
+ { 0x13081, 0x0 },
+ { 0x113081, 0x0 },
+ { 0x213081, 0x0 },
+ { 0x13181, 0x0 },
+ { 0x113181, 0x0 },
+ { 0x213181, 0x0 },
+ { 0x100d0, 0x0 },
+ { 0x1100d0, 0x0 },
+ { 0x2100d0, 0x0 },
+ { 0x101d0, 0x0 },
+ { 0x1101d0, 0x0 },
+ { 0x2101d0, 0x0 },
+ { 0x110d0, 0x0 },
+ { 0x1110d0, 0x0 },
+ { 0x2110d0, 0x0 },
+ { 0x111d0, 0x0 },
+ { 0x1111d0, 0x0 },
+ { 0x2111d0, 0x0 },
+ { 0x120d0, 0x0 },
+ { 0x1120d0, 0x0 },
+ { 0x2120d0, 0x0 },
+ { 0x121d0, 0x0 },
+ { 0x1121d0, 0x0 },
+ { 0x2121d0, 0x0 },
+ { 0x130d0, 0x0 },
+ { 0x1130d0, 0x0 },
+ { 0x2130d0, 0x0 },
+ { 0x131d0, 0x0 },
+ { 0x1131d0, 0x0 },
+ { 0x2131d0, 0x0 },
+ { 0x100d1, 0x0 },
+ { 0x1100d1, 0x0 },
+ { 0x2100d1, 0x0 },
+ { 0x101d1, 0x0 },
+ { 0x1101d1, 0x0 },
+ { 0x2101d1, 0x0 },
+ { 0x110d1, 0x0 },
+ { 0x1110d1, 0x0 },
+ { 0x2110d1, 0x0 },
+ { 0x111d1, 0x0 },
+ { 0x1111d1, 0x0 },
+ { 0x2111d1, 0x0 },
+ { 0x120d1, 0x0 },
+ { 0x1120d1, 0x0 },
+ { 0x2120d1, 0x0 },
+ { 0x121d1, 0x0 },
+ { 0x1121d1, 0x0 },
+ { 0x2121d1, 0x0 },
+ { 0x130d1, 0x0 },
+ { 0x1130d1, 0x0 },
+ { 0x2130d1, 0x0 },
+ { 0x131d1, 0x0 },
+ { 0x1131d1, 0x0 },
+ { 0x2131d1, 0x0 },
+ { 0x10068, 0x0 },
+ { 0x10168, 0x0 },
+ { 0x10268, 0x0 },
+ { 0x10368, 0x0 },
+ { 0x10468, 0x0 },
+ { 0x10568, 0x0 },
+ { 0x10668, 0x0 },
+ { 0x10768, 0x0 },
+ { 0x10868, 0x0 },
+ { 0x11068, 0x0 },
+ { 0x11168, 0x0 },
+ { 0x11268, 0x0 },
+ { 0x11368, 0x0 },
+ { 0x11468, 0x0 },
+ { 0x11568, 0x0 },
+ { 0x11668, 0x0 },
+ { 0x11768, 0x0 },
+ { 0x11868, 0x0 },
+ { 0x12068, 0x0 },
+ { 0x12168, 0x0 },
+ { 0x12268, 0x0 },
+ { 0x12368, 0x0 },
+ { 0x12468, 0x0 },
+ { 0x12568, 0x0 },
+ { 0x12668, 0x0 },
+ { 0x12768, 0x0 },
+ { 0x12868, 0x0 },
+ { 0x13068, 0x0 },
+ { 0x13168, 0x0 },
+ { 0x13268, 0x0 },
+ { 0x13368, 0x0 },
+ { 0x13468, 0x0 },
+ { 0x13568, 0x0 },
+ { 0x13668, 0x0 },
+ { 0x13768, 0x0 },
+ { 0x13868, 0x0 },
+ { 0x10069, 0x0 },
+ { 0x10169, 0x0 },
+ { 0x10269, 0x0 },
+ { 0x10369, 0x0 },
+ { 0x10469, 0x0 },
+ { 0x10569, 0x0 },
+ { 0x10669, 0x0 },
+ { 0x10769, 0x0 },
+ { 0x10869, 0x0 },
+ { 0x11069, 0x0 },
+ { 0x11169, 0x0 },
+ { 0x11269, 0x0 },
+ { 0x11369, 0x0 },
+ { 0x11469, 0x0 },
+ { 0x11569, 0x0 },
+ { 0x11669, 0x0 },
+ { 0x11769, 0x0 },
+ { 0x11869, 0x0 },
+ { 0x12069, 0x0 },
+ { 0x12169, 0x0 },
+ { 0x12269, 0x0 },
+ { 0x12369, 0x0 },
+ { 0x12469, 0x0 },
+ { 0x12569, 0x0 },
+ { 0x12669, 0x0 },
+ { 0x12769, 0x0 },
+ { 0x12869, 0x0 },
+ { 0x13069, 0x0 },
+ { 0x13169, 0x0 },
+ { 0x13269, 0x0 },
+ { 0x13369, 0x0 },
+ { 0x13469, 0x0 },
+ { 0x13569, 0x0 },
+ { 0x13669, 0x0 },
+ { 0x13769, 0x0 },
+ { 0x13869, 0x0 },
+ { 0x1008c, 0x0 },
+ { 0x11008c, 0x0 },
+ { 0x21008c, 0x0 },
+ { 0x1018c, 0x0 },
+ { 0x11018c, 0x0 },
+ { 0x21018c, 0x0 },
+ { 0x1108c, 0x0 },
+ { 0x11108c, 0x0 },
+ { 0x21108c, 0x0 },
+ { 0x1118c, 0x0 },
+ { 0x11118c, 0x0 },
+ { 0x21118c, 0x0 },
+ { 0x1208c, 0x0 },
+ { 0x11208c, 0x0 },
+ { 0x21208c, 0x0 },
+ { 0x1218c, 0x0 },
+ { 0x11218c, 0x0 },
+ { 0x21218c, 0x0 },
+ { 0x1308c, 0x0 },
+ { 0x11308c, 0x0 },
+ { 0x21308c, 0x0 },
+ { 0x1318c, 0x0 },
+ { 0x11318c, 0x0 },
+ { 0x21318c, 0x0 },
+ { 0x1008d, 0x0 },
+ { 0x11008d, 0x0 },
+ { 0x21008d, 0x0 },
+ { 0x1018d, 0x0 },
+ { 0x11018d, 0x0 },
+ { 0x21018d, 0x0 },
+ { 0x1108d, 0x0 },
+ { 0x11108d, 0x0 },
+ { 0x21108d, 0x0 },
+ { 0x1118d, 0x0 },
+ { 0x11118d, 0x0 },
+ { 0x21118d, 0x0 },
+ { 0x1208d, 0x0 },
+ { 0x11208d, 0x0 },
+ { 0x21208d, 0x0 },
+ { 0x1218d, 0x0 },
+ { 0x11218d, 0x0 },
+ { 0x21218d, 0x0 },
+ { 0x1308d, 0x0 },
+ { 0x11308d, 0x0 },
+ { 0x21308d, 0x0 },
+ { 0x1318d, 0x0 },
+ { 0x11318d, 0x0 },
+ { 0x21318d, 0x0 },
+ { 0x100c0, 0x0 },
+ { 0x1100c0, 0x0 },
+ { 0x2100c0, 0x0 },
+ { 0x101c0, 0x0 },
+ { 0x1101c0, 0x0 },
+ { 0x2101c0, 0x0 },
+ { 0x102c0, 0x0 },
+ { 0x1102c0, 0x0 },
+ { 0x2102c0, 0x0 },
+ { 0x103c0, 0x0 },
+ { 0x1103c0, 0x0 },
+ { 0x2103c0, 0x0 },
+ { 0x104c0, 0x0 },
+ { 0x1104c0, 0x0 },
+ { 0x2104c0, 0x0 },
+ { 0x105c0, 0x0 },
+ { 0x1105c0, 0x0 },
+ { 0x2105c0, 0x0 },
+ { 0x106c0, 0x0 },
+ { 0x1106c0, 0x0 },
+ { 0x2106c0, 0x0 },
+ { 0x107c0, 0x0 },
+ { 0x1107c0, 0x0 },
+ { 0x2107c0, 0x0 },
+ { 0x108c0, 0x0 },
+ { 0x1108c0, 0x0 },
+ { 0x2108c0, 0x0 },
+ { 0x110c0, 0x0 },
+ { 0x1110c0, 0x0 },
+ { 0x2110c0, 0x0 },
+ { 0x111c0, 0x0 },
+ { 0x1111c0, 0x0 },
+ { 0x2111c0, 0x0 },
+ { 0x112c0, 0x0 },
+ { 0x1112c0, 0x0 },
+ { 0x2112c0, 0x0 },
+ { 0x113c0, 0x0 },
+ { 0x1113c0, 0x0 },
+ { 0x2113c0, 0x0 },
+ { 0x114c0, 0x0 },
+ { 0x1114c0, 0x0 },
+ { 0x2114c0, 0x0 },
+ { 0x115c0, 0x0 },
+ { 0x1115c0, 0x0 },
+ { 0x2115c0, 0x0 },
+ { 0x116c0, 0x0 },
+ { 0x1116c0, 0x0 },
+ { 0x2116c0, 0x0 },
+ { 0x117c0, 0x0 },
+ { 0x1117c0, 0x0 },
+ { 0x2117c0, 0x0 },
+ { 0x118c0, 0x0 },
+ { 0x1118c0, 0x0 },
+ { 0x2118c0, 0x0 },
+ { 0x120c0, 0x0 },
+ { 0x1120c0, 0x0 },
+ { 0x2120c0, 0x0 },
+ { 0x121c0, 0x0 },
+ { 0x1121c0, 0x0 },
+ { 0x2121c0, 0x0 },
+ { 0x122c0, 0x0 },
+ { 0x1122c0, 0x0 },
+ { 0x2122c0, 0x0 },
+ { 0x123c0, 0x0 },
+ { 0x1123c0, 0x0 },
+ { 0x2123c0, 0x0 },
+ { 0x124c0, 0x0 },
+ { 0x1124c0, 0x0 },
+ { 0x2124c0, 0x0 },
+ { 0x125c0, 0x0 },
+ { 0x1125c0, 0x0 },
+ { 0x2125c0, 0x0 },
+ { 0x126c0, 0x0 },
+ { 0x1126c0, 0x0 },
+ { 0x2126c0, 0x0 },
+ { 0x127c0, 0x0 },
+ { 0x1127c0, 0x0 },
+ { 0x2127c0, 0x0 },
+ { 0x128c0, 0x0 },
+ { 0x1128c0, 0x0 },
+ { 0x2128c0, 0x0 },
+ { 0x130c0, 0x0 },
+ { 0x1130c0, 0x0 },
+ { 0x2130c0, 0x0 },
+ { 0x131c0, 0x0 },
+ { 0x1131c0, 0x0 },
+ { 0x2131c0, 0x0 },
+ { 0x132c0, 0x0 },
+ { 0x1132c0, 0x0 },
+ { 0x2132c0, 0x0 },
+ { 0x133c0, 0x0 },
+ { 0x1133c0, 0x0 },
+ { 0x2133c0, 0x0 },
+ { 0x134c0, 0x0 },
+ { 0x1134c0, 0x0 },
+ { 0x2134c0, 0x0 },
+ { 0x135c0, 0x0 },
+ { 0x1135c0, 0x0 },
+ { 0x2135c0, 0x0 },
+ { 0x136c0, 0x0 },
+ { 0x1136c0, 0x0 },
+ { 0x2136c0, 0x0 },
+ { 0x137c0, 0x0 },
+ { 0x1137c0, 0x0 },
+ { 0x2137c0, 0x0 },
+ { 0x138c0, 0x0 },
+ { 0x1138c0, 0x0 },
+ { 0x2138c0, 0x0 },
+ { 0x100c1, 0x0 },
+ { 0x1100c1, 0x0 },
+ { 0x2100c1, 0x0 },
+ { 0x101c1, 0x0 },
+ { 0x1101c1, 0x0 },
+ { 0x2101c1, 0x0 },
+ { 0x102c1, 0x0 },
+ { 0x1102c1, 0x0 },
+ { 0x2102c1, 0x0 },
+ { 0x103c1, 0x0 },
+ { 0x1103c1, 0x0 },
+ { 0x2103c1, 0x0 },
+ { 0x104c1, 0x0 },
+ { 0x1104c1, 0x0 },
+ { 0x2104c1, 0x0 },
+ { 0x105c1, 0x0 },
+ { 0x1105c1, 0x0 },
+ { 0x2105c1, 0x0 },
+ { 0x106c1, 0x0 },
+ { 0x1106c1, 0x0 },
+ { 0x2106c1, 0x0 },
+ { 0x107c1, 0x0 },
+ { 0x1107c1, 0x0 },
+ { 0x2107c1, 0x0 },
+ { 0x108c1, 0x0 },
+ { 0x1108c1, 0x0 },
+ { 0x2108c1, 0x0 },
+ { 0x110c1, 0x0 },
+ { 0x1110c1, 0x0 },
+ { 0x2110c1, 0x0 },
+ { 0x111c1, 0x0 },
+ { 0x1111c1, 0x0 },
+ { 0x2111c1, 0x0 },
+ { 0x112c1, 0x0 },
+ { 0x1112c1, 0x0 },
+ { 0x2112c1, 0x0 },
+ { 0x113c1, 0x0 },
+ { 0x1113c1, 0x0 },
+ { 0x2113c1, 0x0 },
+ { 0x114c1, 0x0 },
+ { 0x1114c1, 0x0 },
+ { 0x2114c1, 0x0 },
+ { 0x115c1, 0x0 },
+ { 0x1115c1, 0x0 },
+ { 0x2115c1, 0x0 },
+ { 0x116c1, 0x0 },
+ { 0x1116c1, 0x0 },
+ { 0x2116c1, 0x0 },
+ { 0x117c1, 0x0 },
+ { 0x1117c1, 0x0 },
+ { 0x2117c1, 0x0 },
+ { 0x118c1, 0x0 },
+ { 0x1118c1, 0x0 },
+ { 0x2118c1, 0x0 },
+ { 0x120c1, 0x0 },
+ { 0x1120c1, 0x0 },
+ { 0x2120c1, 0x0 },
+ { 0x121c1, 0x0 },
+ { 0x1121c1, 0x0 },
+ { 0x2121c1, 0x0 },
+ { 0x122c1, 0x0 },
+ { 0x1122c1, 0x0 },
+ { 0x2122c1, 0x0 },
+ { 0x123c1, 0x0 },
+ { 0x1123c1, 0x0 },
+ { 0x2123c1, 0x0 },
+ { 0x124c1, 0x0 },
+ { 0x1124c1, 0x0 },
+ { 0x2124c1, 0x0 },
+ { 0x125c1, 0x0 },
+ { 0x1125c1, 0x0 },
+ { 0x2125c1, 0x0 },
+ { 0x126c1, 0x0 },
+ { 0x1126c1, 0x0 },
+ { 0x2126c1, 0x0 },
+ { 0x127c1, 0x0 },
+ { 0x1127c1, 0x0 },
+ { 0x2127c1, 0x0 },
+ { 0x128c1, 0x0 },
+ { 0x1128c1, 0x0 },
+ { 0x2128c1, 0x0 },
+ { 0x130c1, 0x0 },
+ { 0x1130c1, 0x0 },
+ { 0x2130c1, 0x0 },
+ { 0x131c1, 0x0 },
+ { 0x1131c1, 0x0 },
+ { 0x2131c1, 0x0 },
+ { 0x132c1, 0x0 },
+ { 0x1132c1, 0x0 },
+ { 0x2132c1, 0x0 },
+ { 0x133c1, 0x0 },
+ { 0x1133c1, 0x0 },
+ { 0x2133c1, 0x0 },
+ { 0x134c1, 0x0 },
+ { 0x1134c1, 0x0 },
+ { 0x2134c1, 0x0 },
+ { 0x135c1, 0x0 },
+ { 0x1135c1, 0x0 },
+ { 0x2135c1, 0x0 },
+ { 0x136c1, 0x0 },
+ { 0x1136c1, 0x0 },
+ { 0x2136c1, 0x0 },
+ { 0x137c1, 0x0 },
+ { 0x1137c1, 0x0 },
+ { 0x2137c1, 0x0 },
+ { 0x138c1, 0x0 },
+ { 0x1138c1, 0x0 },
+ { 0x2138c1, 0x0 },
+ { 0x10020, 0x0 },
+ { 0x110020, 0x0 },
+ { 0x210020, 0x0 },
+ { 0x11020, 0x0 },
+ { 0x111020, 0x0 },
+ { 0x211020, 0x0 },
+ { 0x12020, 0x0 },
+ { 0x112020, 0x0 },
+ { 0x212020, 0x0 },
+ { 0x13020, 0x0 },
+ { 0x113020, 0x0 },
+ { 0x213020, 0x0 },
+ { 0x20072, 0x0 },
+ { 0x20073, 0x0 },
+ { 0x20074, 0x0 },
+ { 0x100aa, 0x0 },
+ { 0x110aa, 0x0 },
+ { 0x120aa, 0x0 },
+ { 0x130aa, 0x0 },
+ { 0x20010, 0x0 },
+ { 0x120010, 0x0 },
+ { 0x220010, 0x0 },
+ { 0x20011, 0x0 },
+ { 0x120011, 0x0 },
+ { 0x220011, 0x0 },
+ { 0x100ae, 0x0 },
+ { 0x1100ae, 0x0 },
+ { 0x2100ae, 0x0 },
+ { 0x100af, 0x0 },
+ { 0x1100af, 0x0 },
+ { 0x2100af, 0x0 },
+ { 0x110ae, 0x0 },
+ { 0x1110ae, 0x0 },
+ { 0x2110ae, 0x0 },
+ { 0x110af, 0x0 },
+ { 0x1110af, 0x0 },
+ { 0x2110af, 0x0 },
+ { 0x120ae, 0x0 },
+ { 0x1120ae, 0x0 },
+ { 0x2120ae, 0x0 },
+ { 0x120af, 0x0 },
+ { 0x1120af, 0x0 },
+ { 0x2120af, 0x0 },
+ { 0x130ae, 0x0 },
+ { 0x1130ae, 0x0 },
+ { 0x2130ae, 0x0 },
+ { 0x130af, 0x0 },
+ { 0x1130af, 0x0 },
+ { 0x2130af, 0x0 },
+ { 0x20020, 0x0 },
+ { 0x120020, 0x0 },
+ { 0x220020, 0x0 },
+ { 0x100a0, 0x0 },
+ { 0x100a1, 0x0 },
+ { 0x100a2, 0x0 },
+ { 0x100a3, 0x0 },
+ { 0x100a4, 0x0 },
+ { 0x100a5, 0x0 },
+ { 0x100a6, 0x0 },
+ { 0x100a7, 0x0 },
+ { 0x110a0, 0x0 },
+ { 0x110a1, 0x0 },
+ { 0x110a2, 0x0 },
+ { 0x110a3, 0x0 },
+ { 0x110a4, 0x0 },
+ { 0x110a5, 0x0 },
+ { 0x110a6, 0x0 },
+ { 0x110a7, 0x0 },
+ { 0x120a0, 0x0 },
+ { 0x120a1, 0x0 },
+ { 0x120a2, 0x0 },
+ { 0x120a3, 0x0 },
+ { 0x120a4, 0x0 },
+ { 0x120a5, 0x0 },
+ { 0x120a6, 0x0 },
+ { 0x120a7, 0x0 },
+ { 0x130a0, 0x0 },
+ { 0x130a1, 0x0 },
+ { 0x130a2, 0x0 },
+ { 0x130a3, 0x0 },
+ { 0x130a4, 0x0 },
+ { 0x130a5, 0x0 },
+ { 0x130a6, 0x0 },
+ { 0x130a7, 0x0 },
+ { 0x2007c, 0x0 },
+ { 0x12007c, 0x0 },
+ { 0x22007c, 0x0 },
+ { 0x2007d, 0x0 },
+ { 0x12007d, 0x0 },
+ { 0x22007d, 0x0 },
+ { 0x400fd, 0x0 },
+ { 0x400c0, 0x0 },
+ { 0x90201, 0x0 },
+ { 0x190201, 0x0 },
+ { 0x290201, 0x0 },
+ { 0x90202, 0x0 },
+ { 0x190202, 0x0 },
+ { 0x290202, 0x0 },
+ { 0x90203, 0x0 },
+ { 0x190203, 0x0 },
+ { 0x290203, 0x0 },
+ { 0x90204, 0x0 },
+ { 0x190204, 0x0 },
+ { 0x290204, 0x0 },
+ { 0x90205, 0x0 },
+ { 0x190205, 0x0 },
+ { 0x290205, 0x0 },
+ { 0x90206, 0x0 },
+ { 0x190206, 0x0 },
+ { 0x290206, 0x0 },
+ { 0x90207, 0x0 },
+ { 0x190207, 0x0 },
+ { 0x290207, 0x0 },
+ { 0x90208, 0x0 },
+ { 0x190208, 0x0 },
+ { 0x290208, 0x0 },
+ { 0x10062, 0x0 },
+ { 0x10162, 0x0 },
+ { 0x10262, 0x0 },
+ { 0x10362, 0x0 },
+ { 0x10462, 0x0 },
+ { 0x10562, 0x0 },
+ { 0x10662, 0x0 },
+ { 0x10762, 0x0 },
+ { 0x10862, 0x0 },
+ { 0x11062, 0x0 },
+ { 0x11162, 0x0 },
+ { 0x11262, 0x0 },
+ { 0x11362, 0x0 },
+ { 0x11462, 0x0 },
+ { 0x11562, 0x0 },
+ { 0x11662, 0x0 },
+ { 0x11762, 0x0 },
+ { 0x11862, 0x0 },
+ { 0x12062, 0x0 },
+ { 0x12162, 0x0 },
+ { 0x12262, 0x0 },
+ { 0x12362, 0x0 },
+ { 0x12462, 0x0 },
+ { 0x12562, 0x0 },
+ { 0x12662, 0x0 },
+ { 0x12762, 0x0 },
+ { 0x12862, 0x0 },
+ { 0x13062, 0x0 },
+ { 0x13162, 0x0 },
+ { 0x13262, 0x0 },
+ { 0x13362, 0x0 },
+ { 0x13462, 0x0 },
+ { 0x13562, 0x0 },
+ { 0x13662, 0x0 },
+ { 0x13762, 0x0 },
+ { 0x13862, 0x0 },
+ { 0x20077, 0x0 },
+ { 0x10001, 0x0 },
+ { 0x11001, 0x0 },
+ { 0x12001, 0x0 },
+ { 0x13001, 0x0 },
+ { 0x10040, 0x0 },
+ { 0x10140, 0x0 },
+ { 0x10240, 0x0 },
+ { 0x10340, 0x0 },
+ { 0x10440, 0x0 },
+ { 0x10540, 0x0 },
+ { 0x10640, 0x0 },
+ { 0x10740, 0x0 },
+ { 0x10840, 0x0 },
+ { 0x10030, 0x0 },
+ { 0x10130, 0x0 },
+ { 0x10230, 0x0 },
+ { 0x10330, 0x0 },
+ { 0x10430, 0x0 },
+ { 0x10530, 0x0 },
+ { 0x10630, 0x0 },
+ { 0x10730, 0x0 },
+ { 0x10830, 0x0 },
+ { 0x11040, 0x0 },
+ { 0x11140, 0x0 },
+ { 0x11240, 0x0 },
+ { 0x11340, 0x0 },
+ { 0x11440, 0x0 },
+ { 0x11540, 0x0 },
+ { 0x11640, 0x0 },
+ { 0x11740, 0x0 },
+ { 0x11840, 0x0 },
+ { 0x11030, 0x0 },
+ { 0x11130, 0x0 },
+ { 0x11230, 0x0 },
+ { 0x11330, 0x0 },
+ { 0x11430, 0x0 },
+ { 0x11530, 0x0 },
+ { 0x11630, 0x0 },
+ { 0x11730, 0x0 },
+ { 0x11830, 0x0 },
+ { 0x12040, 0x0 },
+ { 0x12140, 0x0 },
+ { 0x12240, 0x0 },
+ { 0x12340, 0x0 },
+ { 0x12440, 0x0 },
+ { 0x12540, 0x0 },
+ { 0x12640, 0x0 },
+ { 0x12740, 0x0 },
+ { 0x12840, 0x0 },
+ { 0x12030, 0x0 },
+ { 0x12130, 0x0 },
+ { 0x12230, 0x0 },
+ { 0x12330, 0x0 },
+ { 0x12430, 0x0 },
+ { 0x12530, 0x0 },
+ { 0x12630, 0x0 },
+ { 0x12730, 0x0 },
+ { 0x12830, 0x0 },
+ { 0x13040, 0x0 },
+ { 0x13140, 0x0 },
+ { 0x13240, 0x0 },
+ { 0x13340, 0x0 },
+ { 0x13440, 0x0 },
+ { 0x13540, 0x0 },
+ { 0x13640, 0x0 },
+ { 0x13740, 0x0 },
+ { 0x13840, 0x0 },
+ { 0x13030, 0x0 },
+ { 0x13130, 0x0 },
+ { 0x13230, 0x0 },
+ { 0x13330, 0x0 },
+ { 0x13430, 0x0 },
+ { 0x13530, 0x0 },
+ { 0x13630, 0x0 },
+ { 0x13730, 0x0 },
+ { 0x13830, 0x0 },
+};
+
+static struct dram_cfg_param ddr_fsp0_cfg_4g[] = {
+ { 0xd0000, 0x0 },
+ { 0x54003, 0xfa0 },
+ { 0x54004, 0x2 },
+ { 0x54005, 0x2228 },
+ { 0x54006, 0x14 },
+ { 0x54008, 0x131f },
+ { 0x54009, 0xc8 },
+ { 0x5400b, 0x2 },
+ { 0x5400f, 0x100 },
+ { 0x54012, 0x310 },
+ { 0x54019, 0x3ff4 },
+ { 0x5401a, 0x33 },
+ { 0x5401b, 0x4866 },
+ { 0x5401c, 0x4800 },
+ { 0x5401e, 0x16 },
+ { 0x5401f, 0x3ff4 },
+ { 0x54020, 0x33 },
+ { 0x54021, 0x4866 },
+ { 0x54022, 0x4800 },
+ { 0x54024, 0x16 },
+ { 0x5402b, 0x1000 },
+ { 0x5402c, 0x3 },
+ { 0x54032, 0xf400 },
+ { 0x54033, 0x333f },
+ { 0x54034, 0x6600 },
+ { 0x54035, 0x48 },
+ { 0x54036, 0x48 },
+ { 0x54037, 0x1600 },
+ { 0x54038, 0xf400 },
+ { 0x54039, 0x333f },
+ { 0x5403a, 0x6600 },
+ { 0x5403b, 0x48 },
+ { 0x5403c, 0x48 },
+ { 0x5403d, 0x1600 },
+ { 0xd0000, 0x1 },
+};
+
+static struct dram_cfg_param ddr_fsp1_cfg_4g[] = {
+ { 0xd0000, 0x0 },
+ { 0x54002, 0x101 },
+ { 0x54003, 0x190 },
+ { 0x54004, 0x2 },
+ { 0x54005, 0x2228 },
+ { 0x54006, 0x14 },
+ { 0x54008, 0x121f },
+ { 0x54009, 0xc8 },
+ { 0x5400b, 0x2 },
+ { 0x5400f, 0x100 },
+ { 0x54012, 0x310 },
+ { 0x54019, 0x84 },
+ { 0x5401a, 0x33 },
+ { 0x5401b, 0x4866 },
+ { 0x5401c, 0x4800 },
+ { 0x5401e, 0x16 },
+ { 0x5401f, 0x84 },
+ { 0x54020, 0x33 },
+ { 0x54021, 0x4866 },
+ { 0x54022, 0x4800 },
+ { 0x54024, 0x16 },
+ { 0x5402b, 0x1000 },
+ { 0x5402c, 0x3 },
+ { 0x54032, 0x8400 },
+ { 0x54033, 0x3300 },
+ { 0x54034, 0x6600 },
+ { 0x54035, 0x48 },
+ { 0x54036, 0x48 },
+ { 0x54037, 0x1600 },
+ { 0x54038, 0x8400 },
+ { 0x54039, 0x3300 },
+ { 0x5403a, 0x6600 },
+ { 0x5403b, 0x48 },
+ { 0x5403c, 0x48 },
+ { 0x5403d, 0x1600 },
+ { 0xd0000, 0x1 },
+};
+
+static struct dram_cfg_param ddr_fsp2_cfg_4g[] = {
+ { 0xd0000, 0x0 },
+ { 0x54002, 0x102 },
+ { 0x54003, 0x64 },
+ { 0x54004, 0x2 },
+ { 0x54005, 0x2228 },
+ { 0x54006, 0x14 },
+ { 0x54008, 0x121f },
+ { 0x54009, 0xc8 },
+ { 0x5400b, 0x2 },
+ { 0x5400f, 0x100 },
+ { 0x54012, 0x310 },
+ { 0x54019, 0x84 },
+ { 0x5401a, 0x33 },
+ { 0x5401b, 0x4866 },
+ { 0x5401c, 0x4800 },
+ { 0x5401e, 0x16 },
+ { 0x5401f, 0x84 },
+ { 0x54020, 0x33 },
+ { 0x54021, 0x4866 },
+ { 0x54022, 0x4800 },
+ { 0x54024, 0x16 },
+ { 0x5402b, 0x1000 },
+ { 0x5402c, 0x3 },
+ { 0x54032, 0x8400 },
+ { 0x54033, 0x3300 },
+ { 0x54034, 0x6600 },
+ { 0x54035, 0x48 },
+ { 0x54036, 0x48 },
+ { 0x54037, 0x1600 },
+ { 0x54038, 0x8400 },
+ { 0x54039, 0x3300 },
+ { 0x5403a, 0x6600 },
+ { 0x5403b, 0x48 },
+ { 0x5403c, 0x48 },
+ { 0x5403d, 0x1600 },
+ { 0xd0000, 0x1 },
+};
+
+static struct dram_cfg_param ddr_fsp0_2d_cfg_4g[] = {
+ { 0xd0000, 0x0 },
+ { 0x54003, 0xfa0 },
+ { 0x54004, 0x2 },
+ { 0x54005, 0x2228 },
+ { 0x54006, 0x14 },
+ { 0x54008, 0x61 },
+ { 0x54009, 0xc8 },
+ { 0x5400b, 0x2 },
+ { 0x5400f, 0x100 },
+ { 0x54010, 0x1f7f },
+ { 0x54012, 0x310 },
+ { 0x54019, 0x3ff4 },
+ { 0x5401a, 0x33 },
+ { 0x5401b, 0x4866 },
+ { 0x5401c, 0x4800 },
+ { 0x5401e, 0x16 },
+ { 0x5401f, 0x3ff4 },
+ { 0x54020, 0x33 },
+ { 0x54021, 0x4866 },
+ { 0x54022, 0x4800 },
+ { 0x54024, 0x16 },
+ { 0x5402b, 0x1000 },
+ { 0x5402c, 0x3 },
+ { 0x54032, 0xf400 },
+ { 0x54033, 0x333f },
+ { 0x54034, 0x6600 },
+ { 0x54035, 0x48 },
+ { 0x54036, 0x48 },
+ { 0x54037, 0x1600 },
+ { 0x54038, 0xf400 },
+ { 0x54039, 0x333f },
+ { 0x5403a, 0x6600 },
+ { 0x5403b, 0x48 },
+ { 0x5403c, 0x48 },
+ { 0x5403d, 0x1600 },
+ { 0xd0000, 0x1 },
+};
+
+/* DRAM PHY init engine image */
+static struct dram_cfg_param ddr_phy_pie[] = {
+ { 0xd0000, 0x0 },
+ { 0x90000, 0x10 },
+ { 0x90001, 0x400 },
+ { 0x90002, 0x10e },
+ { 0x90003, 0x0 },
+ { 0x90004, 0x0 },
+ { 0x90005, 0x8 },
+ { 0x90029, 0xb },
+ { 0x9002a, 0x480 },
+ { 0x9002b, 0x109 },
+ { 0x9002c, 0x8 },
+ { 0x9002d, 0x448 },
+ { 0x9002e, 0x139 },
+ { 0x9002f, 0x8 },
+ { 0x90030, 0x478 },
+ { 0x90031, 0x109 },
+ { 0x90032, 0x0 },
+ { 0x90033, 0xe8 },
+ { 0x90034, 0x109 },
+ { 0x90035, 0x2 },
+ { 0x90036, 0x10 },
+ { 0x90037, 0x139 },
+ { 0x90038, 0xb },
+ { 0x90039, 0x7c0 },
+ { 0x9003a, 0x139 },
+ { 0x9003b, 0x44 },
+ { 0x9003c, 0x633 },
+ { 0x9003d, 0x159 },
+ { 0x9003e, 0x14f },
+ { 0x9003f, 0x630 },
+ { 0x90040, 0x159 },
+ { 0x90041, 0x47 },
+ { 0x90042, 0x633 },
+ { 0x90043, 0x149 },
+ { 0x90044, 0x4f },
+ { 0x90045, 0x633 },
+ { 0x90046, 0x179 },
+ { 0x90047, 0x8 },
+ { 0x90048, 0xe0 },
+ { 0x90049, 0x109 },
+ { 0x9004a, 0x0 },
+ { 0x9004b, 0x7c8 },
+ { 0x9004c, 0x109 },
+ { 0x9004d, 0x0 },
+ { 0x9004e, 0x1 },
+ { 0x9004f, 0x8 },
+ { 0x90050, 0x0 },
+ { 0x90051, 0x45a },
+ { 0x90052, 0x9 },
+ { 0x90053, 0x0 },
+ { 0x90054, 0x448 },
+ { 0x90055, 0x109 },
+ { 0x90056, 0x40 },
+ { 0x90057, 0x633 },
+ { 0x90058, 0x179 },
+ { 0x90059, 0x1 },
+ { 0x9005a, 0x618 },
+ { 0x9005b, 0x109 },
+ { 0x9005c, 0x40c0 },
+ { 0x9005d, 0x633 },
+ { 0x9005e, 0x149 },
+ { 0x9005f, 0x8 },
+ { 0x90060, 0x4 },
+ { 0x90061, 0x48 },
+ { 0x90062, 0x4040 },
+ { 0x90063, 0x633 },
+ { 0x90064, 0x149 },
+ { 0x90065, 0x0 },
+ { 0x90066, 0x4 },
+ { 0x90067, 0x48 },
+ { 0x90068, 0x40 },
+ { 0x90069, 0x633 },
+ { 0x9006a, 0x149 },
+ { 0x9006b, 0x10 },
+ { 0x9006c, 0x4 },
+ { 0x9006d, 0x18 },
+ { 0x9006e, 0x0 },
+ { 0x9006f, 0x4 },
+ { 0x90070, 0x78 },
+ { 0x90071, 0x549 },
+ { 0x90072, 0x633 },
+ { 0x90073, 0x159 },
+ { 0x90074, 0xd49 },
+ { 0x90075, 0x633 },
+ { 0x90076, 0x159 },
+ { 0x90077, 0x94a },
+ { 0x90078, 0x633 },
+ { 0x90079, 0x159 },
+ { 0x9007a, 0x441 },
+ { 0x9007b, 0x633 },
+ { 0x9007c, 0x149 },
+ { 0x9007d, 0x42 },
+ { 0x9007e, 0x633 },
+ { 0x9007f, 0x149 },
+ { 0x90080, 0x1 },
+ { 0x90081, 0x633 },
+ { 0x90082, 0x149 },
+ { 0x90083, 0x0 },
+ { 0x90084, 0xe0 },
+ { 0x90085, 0x109 },
+ { 0x90086, 0xa },
+ { 0x90087, 0x10 },
+ { 0x90088, 0x109 },
+ { 0x90089, 0x9 },
+ { 0x9008a, 0x3c0 },
+ { 0x9008b, 0x149 },
+ { 0x9008c, 0x9 },
+ { 0x9008d, 0x3c0 },
+ { 0x9008e, 0x159 },
+ { 0x9008f, 0x18 },
+ { 0x90090, 0x10 },
+ { 0x90091, 0x109 },
+ { 0x90092, 0x0 },
+ { 0x90093, 0x3c0 },
+ { 0x90094, 0x109 },
+ { 0x90095, 0x18 },
+ { 0x90096, 0x4 },
+ { 0x90097, 0x48 },
+ { 0x90098, 0x18 },
+ { 0x90099, 0x4 },
+ { 0x9009a, 0x58 },
+ { 0x9009b, 0xb },
+ { 0x9009c, 0x10 },
+ { 0x9009d, 0x109 },
+ { 0x9009e, 0x1 },
+ { 0x9009f, 0x10 },
+ { 0x900a0, 0x109 },
+ { 0x900a1, 0x5 },
+ { 0x900a2, 0x7c0 },
+ { 0x900a3, 0x109 },
+ { 0x40000, 0x811 },
+ { 0x40020, 0x880 },
+ { 0x40040, 0x0 },
+ { 0x40060, 0x0 },
+ { 0x40001, 0x4008 },
+ { 0x40021, 0x83 },
+ { 0x40041, 0x4f },
+ { 0x40061, 0x0 },
+ { 0x40002, 0x4040 },
+ { 0x40022, 0x83 },
+ { 0x40042, 0x51 },
+ { 0x40062, 0x0 },
+ { 0x40003, 0x811 },
+ { 0x40023, 0x880 },
+ { 0x40043, 0x0 },
+ { 0x40063, 0x0 },
+ { 0x40004, 0x720 },
+ { 0x40024, 0xf },
+ { 0x40044, 0x1740 },
+ { 0x40064, 0x0 },
+ { 0x40005, 0x16 },
+ { 0x40025, 0x83 },
+ { 0x40045, 0x4b },
+ { 0x40065, 0x0 },
+ { 0x40006, 0x716 },
+ { 0x40026, 0xf },
+ { 0x40046, 0x2001 },
+ { 0x40066, 0x0 },
+ { 0x40007, 0x716 },
+ { 0x40027, 0xf },
+ { 0x40047, 0x2800 },
+ { 0x40067, 0x0 },
+ { 0x40008, 0x716 },
+ { 0x40028, 0xf },
+ { 0x40048, 0xf00 },
+ { 0x40068, 0x0 },
+ { 0x40009, 0x720 },
+ { 0x40029, 0xf },
+ { 0x40049, 0x1400 },
+ { 0x40069, 0x0 },
+ { 0x4000a, 0xe08 },
+ { 0x4002a, 0xc15 },
+ { 0x4004a, 0x0 },
+ { 0x4006a, 0x0 },
+ { 0x4000b, 0x625 },
+ { 0x4002b, 0x15 },
+ { 0x4004b, 0x0 },
+ { 0x4006b, 0x0 },
+ { 0x4000c, 0x4028 },
+ { 0x4002c, 0x80 },
+ { 0x4004c, 0x0 },
+ { 0x4006c, 0x0 },
+ { 0x4000d, 0xe08 },
+ { 0x4002d, 0xc1a },
+ { 0x4004d, 0x0 },
+ { 0x4006d, 0x0 },
+ { 0x4000e, 0x625 },
+ { 0x4002e, 0x1a },
+ { 0x4004e, 0x0 },
+ { 0x4006e, 0x0 },
+ { 0x4000f, 0x4040 },
+ { 0x4002f, 0x80 },
+ { 0x4004f, 0x0 },
+ { 0x4006f, 0x0 },
+ { 0x40010, 0x2604 },
+ { 0x40030, 0x15 },
+ { 0x40050, 0x0 },
+ { 0x40070, 0x0 },
+ { 0x40011, 0x708 },
+ { 0x40031, 0x5 },
+ { 0x40051, 0x0 },
+ { 0x40071, 0x2002 },
+ { 0x40012, 0x8 },
+ { 0x40032, 0x80 },
+ { 0x40052, 0x0 },
+ { 0x40072, 0x0 },
+ { 0x40013, 0x2604 },
+ { 0x40033, 0x1a },
+ { 0x40053, 0x0 },
+ { 0x40073, 0x0 },
+ { 0x40014, 0x708 },
+ { 0x40034, 0xa },
+ { 0x40054, 0x0 },
+ { 0x40074, 0x2002 },
+ { 0x40015, 0x4040 },
+ { 0x40035, 0x80 },
+ { 0x40055, 0x0 },
+ { 0x40075, 0x0 },
+ { 0x40016, 0x60a },
+ { 0x40036, 0x15 },
+ { 0x40056, 0x1200 },
+ { 0x40076, 0x0 },
+ { 0x40017, 0x61a },
+ { 0x40037, 0x15 },
+ { 0x40057, 0x1300 },
+ { 0x40077, 0x0 },
+ { 0x40018, 0x60a },
+ { 0x40038, 0x1a },
+ { 0x40058, 0x1200 },
+ { 0x40078, 0x0 },
+ { 0x40019, 0x642 },
+ { 0x40039, 0x1a },
+ { 0x40059, 0x1300 },
+ { 0x40079, 0x0 },
+ { 0x4001a, 0x4808 },
+ { 0x4003a, 0x880 },
+ { 0x4005a, 0x0 },
+ { 0x4007a, 0x0 },
+ { 0x900a4, 0x0 },
+ { 0x900a5, 0x790 },
+ { 0x900a6, 0x11a },
+ { 0x900a7, 0x8 },
+ { 0x900a8, 0x7aa },
+ { 0x900a9, 0x2a },
+ { 0x900aa, 0x10 },
+ { 0x900ab, 0x7b2 },
+ { 0x900ac, 0x2a },
+ { 0x900ad, 0x0 },
+ { 0x900ae, 0x7c8 },
+ { 0x900af, 0x109 },
+ { 0x900b0, 0x10 },
+ { 0x900b1, 0x10 },
+ { 0x900b2, 0x109 },
+ { 0x900b3, 0x10 },
+ { 0x900b4, 0x2a8 },
+ { 0x900b5, 0x129 },
+ { 0x900b6, 0x8 },
+ { 0x900b7, 0x370 },
+ { 0x900b8, 0x129 },
+ { 0x900b9, 0xa },
+ { 0x900ba, 0x3c8 },
+ { 0x900bb, 0x1a9 },
+ { 0x900bc, 0xc },
+ { 0x900bd, 0x408 },
+ { 0x900be, 0x199 },
+ { 0x900bf, 0x14 },
+ { 0x900c0, 0x790 },
+ { 0x900c1, 0x11a },
+ { 0x900c2, 0x8 },
+ { 0x900c3, 0x4 },
+ { 0x900c4, 0x18 },
+ { 0x900c5, 0xe },
+ { 0x900c6, 0x408 },
+ { 0x900c7, 0x199 },
+ { 0x900c8, 0x8 },
+ { 0x900c9, 0x8568 },
+ { 0x900ca, 0x108 },
+ { 0x900cb, 0x18 },
+ { 0x900cc, 0x790 },
+ { 0x900cd, 0x16a },
+ { 0x900ce, 0x8 },
+ { 0x900cf, 0x1d8 },
+ { 0x900d0, 0x169 },
+ { 0x900d1, 0x10 },
+ { 0x900d2, 0x8558 },
+ { 0x900d3, 0x168 },
+ { 0x900d4, 0x70 },
+ { 0x900d5, 0x788 },
+ { 0x900d6, 0x16a },
+ { 0x900d7, 0x1ff8 },
+ { 0x900d8, 0x85a8 },
+ { 0x900d9, 0x1e8 },
+ { 0x900da, 0x50 },
+ { 0x900db, 0x798 },
+ { 0x900dc, 0x16a },
+ { 0x900dd, 0x60 },
+ { 0x900de, 0x7a0 },
+ { 0x900df, 0x16a },
+ { 0x900e0, 0x8 },
+ { 0x900e1, 0x8310 },
+ { 0x900e2, 0x168 },
+ { 0x900e3, 0x8 },
+ { 0x900e4, 0xa310 },
+ { 0x900e5, 0x168 },
+ { 0x900e6, 0xa },
+ { 0x900e7, 0x408 },
+ { 0x900e8, 0x169 },
+ { 0x900e9, 0x6e },
+ { 0x900ea, 0x0 },
+ { 0x900eb, 0x68 },
+ { 0x900ec, 0x0 },
+ { 0x900ed, 0x408 },
+ { 0x900ee, 0x169 },
+ { 0x900ef, 0x0 },
+ { 0x900f0, 0x8310 },
+ { 0x900f1, 0x168 },
+ { 0x900f2, 0x0 },
+ { 0x900f3, 0xa310 },
+ { 0x900f4, 0x168 },
+ { 0x900f5, 0x1ff8 },
+ { 0x900f6, 0x85a8 },
+ { 0x900f7, 0x1e8 },
+ { 0x900f8, 0x68 },
+ { 0x900f9, 0x798 },
+ { 0x900fa, 0x16a },
+ { 0x900fb, 0x78 },
+ { 0x900fc, 0x7a0 },
+ { 0x900fd, 0x16a },
+ { 0x900fe, 0x68 },
+ { 0x900ff, 0x790 },
+ { 0x90100, 0x16a },
+ { 0x90101, 0x8 },
+ { 0x90102, 0x8b10 },
+ { 0x90103, 0x168 },
+ { 0x90104, 0x8 },
+ { 0x90105, 0xab10 },
+ { 0x90106, 0x168 },
+ { 0x90107, 0xa },
+ { 0x90108, 0x408 },
+ { 0x90109, 0x169 },
+ { 0x9010a, 0x58 },
+ { 0x9010b, 0x0 },
+ { 0x9010c, 0x68 },
+ { 0x9010d, 0x0 },
+ { 0x9010e, 0x408 },
+ { 0x9010f, 0x169 },
+ { 0x90110, 0x0 },
+ { 0x90111, 0x8b10 },
+ { 0x90112, 0x168 },
+ { 0x90113, 0x1 },
+ { 0x90114, 0xab10 },
+ { 0x90115, 0x168 },
+ { 0x90116, 0x0 },
+ { 0x90117, 0x1d8 },
+ { 0x90118, 0x169 },
+ { 0x90119, 0x80 },
+ { 0x9011a, 0x790 },
+ { 0x9011b, 0x16a },
+ { 0x9011c, 0x18 },
+ { 0x9011d, 0x7aa },
+ { 0x9011e, 0x6a },
+ { 0x9011f, 0xa },
+ { 0x90120, 0x0 },
+ { 0x90121, 0x1e9 },
+ { 0x90122, 0x8 },
+ { 0x90123, 0x8080 },
+ { 0x90124, 0x108 },
+ { 0x90125, 0xf },
+ { 0x90126, 0x408 },
+ { 0x90127, 0x169 },
+ { 0x90128, 0xc },
+ { 0x90129, 0x0 },
+ { 0x9012a, 0x68 },
+ { 0x9012b, 0x9 },
+ { 0x9012c, 0x0 },
+ { 0x9012d, 0x1a9 },
+ { 0x9012e, 0x0 },
+ { 0x9012f, 0x408 },
+ { 0x90130, 0x169 },
+ { 0x90131, 0x0 },
+ { 0x90132, 0x8080 },
+ { 0x90133, 0x108 },
+ { 0x90134, 0x8 },
+ { 0x90135, 0x7aa },
+ { 0x90136, 0x6a },
+ { 0x90137, 0x0 },
+ { 0x90138, 0x8568 },
+ { 0x90139, 0x108 },
+ { 0x9013a, 0xb7 },
+ { 0x9013b, 0x790 },
+ { 0x9013c, 0x16a },
+ { 0x9013d, 0x1f },
+ { 0x9013e, 0x0 },
+ { 0x9013f, 0x68 },
+ { 0x90140, 0x8 },
+ { 0x90141, 0x8558 },
+ { 0x90142, 0x168 },
+ { 0x90143, 0xf },
+ { 0x90144, 0x408 },
+ { 0x90145, 0x169 },
+ { 0x90146, 0xd },
+ { 0x90147, 0x0 },
+ { 0x90148, 0x68 },
+ { 0x90149, 0x0 },
+ { 0x9014a, 0x408 },
+ { 0x9014b, 0x169 },
+ { 0x9014c, 0x0 },
+ { 0x9014d, 0x8558 },
+ { 0x9014e, 0x168 },
+ { 0x9014f, 0x8 },
+ { 0x90150, 0x3c8 },
+ { 0x90151, 0x1a9 },
+ { 0x90152, 0x3 },
+ { 0x90153, 0x370 },
+ { 0x90154, 0x129 },
+ { 0x90155, 0x20 },
+ { 0x90156, 0x2aa },
+ { 0x90157, 0x9 },
+ { 0x90158, 0x8 },
+ { 0x90159, 0xe8 },
+ { 0x9015a, 0x109 },
+ { 0x9015b, 0x0 },
+ { 0x9015c, 0x8140 },
+ { 0x9015d, 0x10c },
+ { 0x9015e, 0x10 },
+ { 0x9015f, 0x8138 },
+ { 0x90160, 0x104 },
+ { 0x90161, 0x8 },
+ { 0x90162, 0x448 },
+ { 0x90163, 0x109 },
+ { 0x90164, 0xf },
+ { 0x90165, 0x7c0 },
+ { 0x90166, 0x109 },
+ { 0x90167, 0x0 },
+ { 0x90168, 0xe8 },
+ { 0x90169, 0x109 },
+ { 0x9016a, 0x47 },
+ { 0x9016b, 0x630 },
+ { 0x9016c, 0x109 },
+ { 0x9016d, 0x8 },
+ { 0x9016e, 0x618 },
+ { 0x9016f, 0x109 },
+ { 0x90170, 0x8 },
+ { 0x90171, 0xe0 },
+ { 0x90172, 0x109 },
+ { 0x90173, 0x0 },
+ { 0x90174, 0x7c8 },
+ { 0x90175, 0x109 },
+ { 0x90176, 0x8 },
+ { 0x90177, 0x8140 },
+ { 0x90178, 0x10c },
+ { 0x90179, 0x0 },
+ { 0x9017a, 0x478 },
+ { 0x9017b, 0x109 },
+ { 0x9017c, 0x0 },
+ { 0x9017d, 0x1 },
+ { 0x9017e, 0x8 },
+ { 0x9017f, 0x8 },
+ { 0x90180, 0x4 },
+ { 0x90181, 0x0 },
+ { 0x90006, 0x8 },
+ { 0x90007, 0x7c8 },
+ { 0x90008, 0x109 },
+ { 0x90009, 0x0 },
+ { 0x9000a, 0x400 },
+ { 0x9000b, 0x106 },
+ { 0xd00e7, 0x400 },
+ { 0x90017, 0x0 },
+ { 0x9001f, 0x29 },
+ { 0x90026, 0x68 },
+ { 0x400d0, 0x0 },
+ { 0x400d1, 0x101 },
+ { 0x400d2, 0x105 },
+ { 0x400d3, 0x107 },
+ { 0x400d4, 0x10f },
+ { 0x400d5, 0x202 },
+ { 0x400d6, 0x20a },
+ { 0x400d7, 0x20b },
+ { 0x2003a, 0x2 },
+ { 0x200be, 0x3 },
+ { 0x2000b, 0x7d },
+ { 0x2000c, 0xfa },
+ { 0x2000d, 0x9c4 },
+ { 0x2000e, 0x2c },
+ { 0x12000b, 0xc },
+ { 0x12000c, 0x19 },
+ { 0x12000d, 0xfa },
+ { 0x12000e, 0x10 },
+ { 0x22000b, 0x3 },
+ { 0x22000c, 0x6 },
+ { 0x22000d, 0x3e },
+ { 0x22000e, 0x10 },
+ { 0x9000c, 0x0 },
+ { 0x9000d, 0x173 },
+ { 0x9000e, 0x60 },
+ { 0x9000f, 0x6110 },
+ { 0x90010, 0x2152 },
+ { 0x90011, 0xdfbd },
+ { 0x90012, 0x2060 },
+ { 0x90013, 0x6152 },
+ { 0x20010, 0x5a },
+ { 0x20011, 0x3 },
+ { 0x40080, 0xe0 },
+ { 0x40081, 0x12 },
+ { 0x40082, 0xe0 },
+ { 0x40083, 0x12 },
+ { 0x40084, 0xe0 },
+ { 0x40085, 0x12 },
+ { 0x140080, 0xe0 },
+ { 0x140081, 0x12 },
+ { 0x140082, 0xe0 },
+ { 0x140083, 0x12 },
+ { 0x140084, 0xe0 },
+ { 0x140085, 0x12 },
+ { 0x240080, 0xe0 },
+ { 0x240081, 0x12 },
+ { 0x240082, 0xe0 },
+ { 0x240083, 0x12 },
+ { 0x240084, 0xe0 },
+ { 0x240085, 0x12 },
+ { 0x400fd, 0xf },
+ { 0x10011, 0x1 },
+ { 0x10012, 0x1 },
+ { 0x10013, 0x180 },
+ { 0x10018, 0x1 },
+ { 0x10002, 0x6209 },
+ { 0x100b2, 0x1 },
+ { 0x101b4, 0x1 },
+ { 0x102b4, 0x1 },
+ { 0x103b4, 0x1 },
+ { 0x104b4, 0x1 },
+ { 0x105b4, 0x1 },
+ { 0x106b4, 0x1 },
+ { 0x107b4, 0x1 },
+ { 0x108b4, 0x1 },
+ { 0x11011, 0x1 },
+ { 0x11012, 0x1 },
+ { 0x11013, 0x180 },
+ { 0x11018, 0x1 },
+ { 0x11002, 0x6209 },
+ { 0x110b2, 0x1 },
+ { 0x111b4, 0x1 },
+ { 0x112b4, 0x1 },
+ { 0x113b4, 0x1 },
+ { 0x114b4, 0x1 },
+ { 0x115b4, 0x1 },
+ { 0x116b4, 0x1 },
+ { 0x117b4, 0x1 },
+ { 0x118b4, 0x1 },
+ { 0x12011, 0x1 },
+ { 0x12012, 0x1 },
+ { 0x12013, 0x180 },
+ { 0x12018, 0x1 },
+ { 0x12002, 0x6209 },
+ { 0x120b2, 0x1 },
+ { 0x121b4, 0x1 },
+ { 0x122b4, 0x1 },
+ { 0x123b4, 0x1 },
+ { 0x124b4, 0x1 },
+ { 0x125b4, 0x1 },
+ { 0x126b4, 0x1 },
+ { 0x127b4, 0x1 },
+ { 0x128b4, 0x1 },
+ { 0x13011, 0x1 },
+ { 0x13012, 0x1 },
+ { 0x13013, 0x180 },
+ { 0x13018, 0x1 },
+ { 0x13002, 0x6209 },
+ { 0x130b2, 0x1 },
+ { 0x131b4, 0x1 },
+ { 0x132b4, 0x1 },
+ { 0x133b4, 0x1 },
+ { 0x134b4, 0x1 },
+ { 0x135b4, 0x1 },
+ { 0x136b4, 0x1 },
+ { 0x137b4, 0x1 },
+ { 0x138b4, 0x1 },
+ { 0x20089, 0x1 },
+ { 0x20088, 0x19 },
+ { 0xc0080, 0x2 },
+ { 0xd0000, 0x1 }
+};
+
+static struct dram_fsp_msg ddr_dram_fsp_msg_4g[] = {
+ {
+ /* P0 4000mts 1D */
+ .drate = 4000,
+ .fw_type = FW_1D_IMAGE,
+ .fsp_cfg = ddr_fsp0_cfg_4g,
+ .fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_cfg_4g),
+ }, {
+ /* P1 400mts 1D */
+ .drate = 400,
+ .fw_type = FW_1D_IMAGE,
+ .fsp_cfg = ddr_fsp1_cfg_4g,
+ .fsp_cfg_num = ARRAY_SIZE(ddr_fsp1_cfg_4g),
+ }, {
+ /* P2 100mts 1D */
+ .drate = 100,
+ .fw_type = FW_1D_IMAGE,
+ .fsp_cfg = ddr_fsp2_cfg_4g,
+ .fsp_cfg_num = ARRAY_SIZE(ddr_fsp2_cfg_4g),
+ }, {
+ /* P0 4000mts 2D */
+ .drate = 4000,
+ .fw_type = FW_2D_IMAGE,
+ .fsp_cfg = ddr_fsp0_2d_cfg_4g,
+ .fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_2d_cfg_4g),
+ },
+};
+
+struct dram_timing_info dram_timing_4g = {
+ .ddrc_cfg = ddr_ddrc_cfg_4g,
+ .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_4g),
+ .ddrphy_cfg = ddr_ddrphy_cfg,
+ .ddrphy_cfg_num = ARRAY_SIZE(ddr_ddrphy_cfg),
+ .fsp_msg = ddr_dram_fsp_msg_4g,
+ .fsp_msg_num = ARRAY_SIZE(ddr_dram_fsp_msg_4g),
+ .ddrphy_trained_csr = ddr_ddrphy_trained_csr,
+ .ddrphy_trained_csr_num = ARRAY_SIZE(ddr_ddrphy_trained_csr),
+ .ddrphy_pie = ddr_phy_pie,
+ .ddrphy_pie_num = ARRAY_SIZE(ddr_phy_pie),
+ .fsp_table = { 4000, 400, 100, },
+};
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 98f4c4e0194b..3527b67366b7 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -85,6 +85,7 @@ lwl-$(CONFIG_MACH_PINE64_QUARTZ64) += rk3566-quartz64-a.dtb.o
lwl-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += armada-xp-openblocks-ax3-4-bb.dtb.o
lwl-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += kirkwood-openblocks_a6-bb.dtb.o
lwl-$(CONFIG_MACH_POLYHEX_DEBIX) += imx8mp-debix-model-a.dtb.o
+lwl-$(CONFIG_MACH_KB_ALPHAJET) += imx8mp-koenigbauer-alphajet.dtb.o
lwl-$(CONFIG_MACH_PROTONIC_IMX6) += \
imx6q-prti6q.dtb.o \
imx6q-prtwd2.dtb.o \
diff --git a/arch/arm/dts/imx8mp-cgtqx8p.dtsi b/arch/arm/dts/imx8mp-cgtqx8p.dtsi
new file mode 100644
index 000000000000..ea64efb28590
--- /dev/null
+++ b/arch/arm/dts/imx8mp-cgtqx8p.dtsi
@@ -0,0 +1,1060 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright 2019 NXP
+ * Copyright 2022 congatec GmbH
+ * Copyright 2023 Pengutronix, Johannes Zink <j.zink@pengutronix.de>
+ */
+
+#include <arm64/freescale/imx8mp.dtsi>
+#include "imx8mp.dtsi"
+#include <dt-bindings/usb/pd.h>
+#include <dt-bindings/phy/phy-imx8-pcie.h>
+#include <dt-bindings/net/ti-dp83867.h>
+
+/ {
+ model = "conga-QMX8-Plus";
+ compatible = "cgt,qx8p", "fsl,imx8mp";
+
+ aliases {
+ ethernet0 = &eqos;
+ rtc0 = &rtc_ext; /* Use external I2C RTC M4162 as rtc0 */
+ rtc1 = &snvs_rtc; /* And the internal one as rtc1 */
+ };
+
+ pcie0_refclk: pcie0-reclk {
+ compatible = "fixed-clock";
+ #clock-cells= <0>;
+ clock-frequency = <100000000>;
+ };
+
+ reg_usb1_host_vbus: regulator-usb1-vbus {
+ compatible = "regulator-fixed";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_usb1_vbus>;
+ regulator-name = "usb1_host_vbus";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ gpio = <&gpio4 17 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ reg_usb2_host_vbus: regulator-usb2-vbus {
+ compatible = "regulator-fixed";
+ regulator-name = "usb2_host_vbus";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_usb2_vbus>;
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ gpio = <&gpio4 16 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ /* reset line for SD1 (Q7 sd) interface */
+ reg_usdhc1_vmmc: regulator-usdhc1 {
+ compatible = "regulator-fixed";
+ regulator-name = "3v3-sd1";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_reg_usdhc1_vmmc>;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&gpio2 10 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ startup-delay-us = <100>;
+ off-on-delay-us = <12000>;
+ };
+
+ /* reset line for SD2 (onboard usd) interface */
+ reg_usdhc2_vmmc: regulator-usdhc2 {
+ compatible = "regulator-fixed";
+ regulator-name = "3v3-sd2";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_reg_usdhc2_vmmc>;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&gpio2 19 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ startup-delay-us = <100>;
+ off-on-delay-us = <12000>;
+ };
+
+ /* reset line for SD3 (onboard emmc) interface */
+ reg_usdhc3_vmmc: regulator-usdhc3 {
+ compatible = "regulator-fixed";
+ regulator-name = "3v3-sd3";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_reg_usdhc3_vmmc>;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&gpio3 16 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ startup-delay-us = <100>;
+ off-on-delay-us = <12000>;
+ };
+
+ reg_lfp_vdd: regulator-lfp-vdd {
+ compatible = "regulator-fixed";
+ regulator-name = "Display_Panel_Vdd";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_display_vdd_en>;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&gpio4 1 GPIO_ACTIVE_HIGH>; // LFP0_VDD_EN
+ };
+
+ reg_backlight_enable: regulator-backlight {
+ compatible = "regulator-fixed";
+ regulator-name = "backlight";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_lvds0_backlight>;
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&gpio4 0 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+
+ lvds0_backlight: lvds0-backlight {
+ compatible = "pwm-backlight";
+ pwms = <&pwm2 0 100000 0>;
+ power-supply = <®_backlight_enable>;
+ brightness-levels = <0 100>;
+ num-interpolated-steps = <100>;
+ default-brightness-level = <80>;
+ };
+
+ fan0: pwm-fan {
+ compatible = "pwm-fan";
+ pwms = <&pwm4 4 100000 0>;
+ /* Tacho- input */
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_interrupt_fan_in>;
+ #cooling-cells = <2>;
+ interrupt-parent = <&gpio5>;
+ interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
+ status = "disabled";
+ };
+};
+
+&A53_0 {
+ cpu-supply = <&buck2>;
+};
+
+&A53_1 {
+ cpu-supply = <&buck2>;
+};
+
+&A53_2 {
+ cpu-supply = <&buck2>;
+};
+
+&A53_3 {
+ cpu-supply = <&buck2>;
+};
+
+&pwm1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_pwm1>;
+};
+
+&pwm2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_pwm2>;
+};
+
+&pwm4 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_pwm4>;
+};
+
+&ecspi1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1_cs>;
+ cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+};
+
+&ecspi2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs0>;
+ cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>;
+};
+
+
+&eqos {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_eqos>, <&pinctrl_gbe0_rst>;
+ phy-mode = "rgmii-id";
+ phy-handle = <ðphy0>;
+
+ mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ /* on-SoM phy */
+ ethphy0: ethernet-phy@0 {
+ compatible = "ethernet-phy-ieee802.3-c22";
+ reg = <0>;
+ reset-gpios = <&gpio4 25 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <1000>;
+ reset-deassert-us = <1000>;
+ ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
+ ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
+ ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
+ ti,clk-output-sel = <DP83867_CLK_O_SEL_OFF>;
+ };
+ };
+};
+
+&flexspi {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_flexspi0>;
+ status = "okay";
+
+ w25q64fw: flash@0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <80000000>;
+ spi-tx-bus-width = <4>;
+ spi-rx-bus-width = <4>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "boot";
+ reg = <0x0000000 0x400000>;
+ };
+
+ partition@400000 {
+ label = "failsafe";
+ reg = <0x400000 0x3e0000>;
+ };
+
+ partition@7e0000 {
+ label = "reserved";
+ reg = <0x7e0000 0x20000>;
+ read-only;
+ };
+ };
+};
+
+&flexcan1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_flexcan1>;
+};
+
+&flexcan2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_flexcan2>;
+};
+
+&i2c1 {
+ clock-frequency = <400000>;
+ pinctrl-names = "default", "gpio";
+ pinctrl-0 = <&pinctrl_i2c1>;
+ pinctrl-1 = <&pinctrl_i2c1_gpio>;
+ scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ status = "okay";
+
+ pca9450: pmic@25 {
+ compatible = "nxp,pca9450c";
+ reg = <0x25>;
+ pinctrl-0 = <&pinctrl_pmic>;
+ interrupt-parent = <&gpio4>; /* PMIC_nINT */
+ interrupts = <5 IRQ_TYPE_LEVEL_LOW>;
+
+ regulators {
+ buck1: BUCK1 {
+ regulator-name = "BUCK1";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <2187500>;
+ regulator-boot-on;
+ regulator-always-on;
+ regulator-ramp-delay = <3125>;
+ };
+
+ buck2: BUCK2 {
+ regulator-name = "BUCK2";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <2187500>;
+ regulator-boot-on;
+ regulator-always-on;
+ regulator-ramp-delay = <3125>;
+ };
+
+ buck3: BUCK3 {
+ regulator-name = "BUCK3";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <3400000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ buck5: BUCK5 {
+ regulator-name = "BUCK5";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <3400000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ buck6: BUCK6 {
+ regulator-name = "BUCK6";
+ regulator-min-microvolt = <600000>;
+ regulator-max-microvolt = <3400000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo1: LDO1 {
+ regulator-name = "LDO1";
+ regulator-min-microvolt = <1600000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo2: LDO2 {
+ regulator-name = "LDO2";
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <1150000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo3: LDO3 {
+ regulator-name = "LDO3";
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo4: LDO4 {
+ regulator-name = "LDO4";
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo5: LDO5 {
+ regulator-name = "LDO5";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ };
+ };
+ };
+};
+
+&i2c2 {
+ pinctrl-names = "default", "gpio";
+ pinctrl-0 = <&pinctrl_i2c2>;
+ pinctrl-1 = <&pinctrl_i2c2_gpio>;
+ scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+};
+
+&i2c3 {
+ pinctrl-names = "default", "gpio";
+ pinctrl-0 = <&pinctrl_i2c3>;
+ pinctrl-1 = <&pinctrl_i2c3_gpio>;
+ scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+};
+
+/* i2c-5: RTC */
+&i2c5 {
+ clock-frequency = <100000>;
+ pinctrl-names = "default", "gpio";
+ pinctrl-0 = <&pinctrl_i2c5>;
+ pinctrl-1 = <&pinctrl_i2c5_gpio>;
+ scl-gpios = <&gpio5 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio5 4 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ status = "okay";
+
+ rtc_ext: rtc@68 {
+ compatible = "microcrystal,rv4162";
+ reg = <0x68>;
+ };
+};
+
+/* i2c-6: i2c splitter */
+&i2c6 {
+ clock-frequency = <100000>;
+ pinctrl-names = "default", "gpio";
+ pinctrl-0 = <&pinctrl_i2c6>;
+ pinctrl-1 = <&pinctrl_i2c6_gpio>;
+ scl-gpios = <&gpio3 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ sda-gpios = <&gpio3 20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+
+ status = "okay";
+
+ mux@70 {
+ compatible = "nxp,pca9548";
+ reg = <0x70>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ /* MIPI CSI 1 */
+ imux0: i2c@0 {
+ reg = <0>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ /* MIPI CSI 2 */
+ imux1: i2c@1 {
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ /* Q-Seven LVDS_DID */
+ imux2: i2c@2 {
+ reg = <2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ /* Q-Seven LVDS_BLC */
+ imux3: i2c@3 {
+ reg = <3>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ /* Ports 4 .. 7 not used */
+ };
+};
+
+&pcie {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_pcie>;
+ reset-gpio = <&gpio4 12 GPIO_ACTIVE_LOW>;
+ fsl,max-link-speed = <2>;
+};
+
+&pcie_phy {
+ fsl,refclk-pad-mode = <IMX8_PCIE_REFCLK_PAD_INPUT>;
+ clocks = <&pcie0_refclk>;
+ clock-names= "ref";
+};
+
+&uart1 { /* UART0-Connector on Qseven */
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_uart1>;
+ uart-has-rtscts;
+};
+
+&uart2 {
+ /* console - on-SoM connector */
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_uart2>;
+ status = "okay";
+};
+
+&uart4 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_uart4>;
+ status = "okay";
+};
+
+&usb3_phy0 { /* On-SoM Hub */
+ fsl,phy-tx-vref-tune = <8>; //note: downstream
+ fsl,phy-tx-preemp-amp-tune = <3>; //note: downstream
+ vbus-supply = <®_usb1_host_vbus>;
+ status = "okay";
+};
+
+&usb3_0 {
+ status = "okay";
+};
+
+&usb_dwc3_0 { /* Q7 USB_P1 */
+ dr_mode = "otg";
+ usb-role-switch;
+ role-switch-default-mode = "host";
+
+ connector {
+ compatible = "gpio-usb-b-connector", "usb-b-connector";
+ id-gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_usb1>, <&pinctrl_usb_overcurrent>;
+ };
+};
+
+&usb3_phy1 {
+ vbus-supply = <®_usb2_host_vbus>;
+ status = "okay";
+};
+
+&usb3_1 {
+ status = "okay";
+};
+
+&usb_dwc3_1 { /* Q7 USB_P0 */
+ dr_mode = "host";
+ status = "okay";
+};
+
+/* Q7 SD-Card interface */
+&usdhc1 {
+ pinctrl-names = "default", "state_100mhz", "state_200mhz";
+ pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_usdhc1_gpio>;
+ pinctrl-1 = <&pinctrl_usdhc1_100mhz>, <&pinctrl_usdhc1_gpio>;
+ pinctrl-2 = <&pinctrl_usdhc1_200mhz>, <&pinctrl_usdhc1_gpio>;
+ cd-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
+ wp-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
+ vmmc-supply = <®_usdhc1_vmmc>;
+ bus-width = <4>;
+};
+
+/* onboard micro-SD card slot */
+&usdhc2 {
+ pinctrl-names = "default", "state_100mhz", "state_200mhz";
+ pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
+ pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
+ pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
+ cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
+ vmmc-supply = <®_usdhc2_vmmc>;
+ bus-width = <4>;
+ status = "okay";
+};
+
+/* onboard emmc */
+&usdhc3 {
+ pinctrl-names = "default", "state_100mhz", "state_200mhz";
+ pinctrl-0 = <&pinctrl_usdhc3>;
+ pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
+ pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
+ vmmc-supply = <®_usdhc3_vmmc>;
+ bus-width = <8>;
+ non-removable;
+ no-sd;
+ no-sdio;
+ status = "okay";
+};
+
+&wdog1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_wdog>;
+ fsl,ext-reset-output;
+ status = "okay";
+};
+
+&gpio1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_gbe0_phy_reg>;
+};
+
+&gpio4 {
+ stby_en-hog {
+ gpio-hog;
+ gpios = <11 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "CB_STBY_EN";
+ };
+};
+
+&iomuxc {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_hog>, <&pinctrl_android_buttons>, <&pinctrl_pm>, <&pinctrl_q7_suspend>, <&pinctrl_q7_wdt>;
+
+ /* Peripheral */
+ pinctrl_hog: hog-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_RXD7__GPIO4_IO09 0x01C0 /* PM_WAKE# (X19:32) */
+ MX8MP_IOMUXC_SAI1_TXD7__GPIO4_IO19 0x01C0 /* SMB_ALERT# (X19:20) */
+ MX8MP_IOMUXC_SAI3_TXFS__GPIO4_IO31 0x01C0 /* I2S_RST# */
+ >;
+ };
+
+ pinctrl_display_vdd_en: lvds-vdd-enable-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_RXC__GPIO4_IO01 0x0100 /* LFP_VDD_EN */
+ >;
+ };
+
+ pinctrl_hdmi: hdmi-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_HDMI_DDC_SCL__HDMIMIX_HDMI_SCL 0x400001c3
+ MX8MP_IOMUXC_HDMI_DDC_SDA__HDMIMIX_HDMI_SDA 0x400001c3
+ MX8MP_IOMUXC_HDMI_HPD__HDMIMIX_HDMI_HPD 0x40000019
+ MX8MP_IOMUXC_HDMI_CEC__HDMIMIX_HDMI_CEC 0x40000019
+ >;
+ };
+
+ /* On module Android buttons (X7) */
+ pinctrl_android_buttons: androidbutton-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_RXD5__GPIO4_IO07 0x01C0 /* X7-2: Btn Vol Up */
+ MX8MP_IOMUXC_SD1_DATA4__GPIO2_IO06 0x01C0 /* X7-3: Btn Home */
+ MX8MP_IOMUXC_SD1_DATA5__GPIO2_IO07 0x01C0 /* X7-4: Btn Search */
+ MX8MP_IOMUXC_SD1_DATA6__GPIO2_IO08 0x01C0 /* X7-5: Btn Back */
+ MX8MP_IOMUXC_SAI1_RXD6__GPIO4_IO08 0x01C0 /* X7-6: Btn Menu */
+ MX8MP_IOMUXC_SD1_DATA7__GPIO2_IO09 0x01C0 /* X7-7: Btn Vol Down */
+ >;
+ };
+
+ /* Q-Seven PM signals */
+ pinctrl_pm: pm-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_RXD0__GPIO4_IO02 0x01C0 /* Q7-21: Sleep Btn */
+ MX8MP_IOMUXC_SAI1_TXFS__GPIO4_IO10 0x01C0 /* Q7-22: Lid Btn */
+ MX8MP_IOMUXC_SAI1_RXD4__GPIO4_IO06 0x01C0 /* Q7-27: Bat Low */
+ MX8MP_IOMUXC_SAI1_RXD1__GPIO4_IO03 0x01C0 /* Q7-69: Thrm */
+ MX8MP_IOMUXC_SAI1_MCLK__GPIO4_IO20 0x01C0 /* Q7-71: Thrm Trip (X19:19) */
+ >;
+ };
+
+ /* Q-Seven WDT */
+ pinctrl_q7_wdt: q7-wdt-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_RXD2__GPIO4_IO04 0x01C0 /* Q7-70: WDT Trig */
+ MX8MP_IOMUXC_SAI1_TXD1__GPIO4_IO13 0x0100 /* Q7-72: WDT Out */
+ >;
+ };
+
+ /* Q-Seven Suspend signals */
+ pinctrl_q7_suspend: q7-suspend-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_TXC__GPIO4_IO11 0x0100 /* Q7-18: SUS_S3# (enable signal from pmic) */
+ MX8MP_IOMUXC_SAI3_TXD__GPIO5_IO01 0x0100 /* Q7-19: SUS_STAT | GP_OUT0*/
+ >;
+ };
+
+ /* USB OverCurrent */
+ pinctrl_usb_overcurrent: usb-overcurrent-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_GPIO1_IO13__USB1_OTG_OC 0x01C0
+ MX8MP_IOMUXC_SAI3_RXC__GPIO4_IO29 0x01C0 /* USB1 OC as gpio */
+ >;
+ };
+
+ pinctrl_pwm1: pwm1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SPDIF_EXT_CLK__PWM1_OUT 0x116
+ >;
+ };
+
+ pinctrl_pwm2: pwm2-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI5_RXD0__PWM2_OUT 0x116
+ >;
+ };
+
+ pinctrl_pwm4: pwm4-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI3_MCLK__PWM4_OUT 0x116
+ >;
+ };
+
+ pinctrl_ecspi1: ecspi1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_ECSPI1_SCLK__ECSPI1_SCLK 0x82
+ MX8MP_IOMUXC_ECSPI1_MOSI__ECSPI1_MOSI 0x82
+ MX8MP_IOMUXC_ECSPI1_MISO__ECSPI1_MISO 0x82
+ >;
+ };
+
+ pinctrl_ecspi1_cs: ecspi1cs-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x01C0
+ >;
+ };
+
+ pinctrl_ecspi2: ecspi2-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_ECSPI2_SCLK__ECSPI2_SCLK 0x82
+ MX8MP_IOMUXC_ECSPI2_MOSI__ECSPI2_MOSI 0x82
+ MX8MP_IOMUXC_ECSPI2_MISO__ECSPI2_MISO 0x82
+ >;
+ };
+
+ pinctrl_ecspi2_cs0: ecspi2cs0-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_ECSPI2_SS0__GPIO5_IO13 0x01C0
+ >;
+ };
+
+ pinctrl_ecspi2_cs1: ecspi2cs1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI5_MCLK__GPIO3_IO25 0x01C0
+ >;
+ };
+
+ pinctrl_eqos: eqos-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_ENET_MDC__ENET_QOS_MDC 0x3
+ MX8MP_IOMUXC_ENET_MDIO__ENET_QOS_MDIO 0x3
+ MX8MP_IOMUXC_ENET_RD0__ENET_QOS_RGMII_RD0 0x91
+ MX8MP_IOMUXC_ENET_RD1__ENET_QOS_RGMII_RD1 0x91
+ MX8MP_IOMUXC_ENET_RD2__ENET_QOS_RGMII_RD2 0x91
+ MX8MP_IOMUXC_ENET_RD3__ENET_QOS_RGMII_RD3 0x91
+ MX8MP_IOMUXC_ENET_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK 0x91
+ MX8MP_IOMUXC_ENET_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x91
+ MX8MP_IOMUXC_ENET_TD0__ENET_QOS_RGMII_TD0 0x1f
+ MX8MP_IOMUXC_ENET_TD1__ENET_QOS_RGMII_TD1 0x1f
+ MX8MP_IOMUXC_ENET_TD2__ENET_QOS_RGMII_TD2 0x1f
+ MX8MP_IOMUXC_ENET_TD3__ENET_QOS_RGMII_TD3 0x1f
+ MX8MP_IOMUXC_ENET_TX_CTL__ENET_QOS_RGMII_TX_CTL 0x1f
+ MX8MP_IOMUXC_ENET_TXC__CCM_ENET_QOS_CLOCK_GENERATE_TX_CLK 0x1f
+
+ /* PTP capture INT */
+ MX8MP_IOMUXC_SAI2_TXD0__ENET_QOS_1588_EVENT2_IN 0x1c0
+ >;
+ };
+
+ pinctrl_flexcan1: flexcan1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI5_RXD2__CAN1_RX 0x150
+ MX8MP_IOMUXC_SAI5_RXD1__CAN1_TX 0x150
+ >;
+ };
+
+ pinctrl_flexcan2: flexcan2-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_UART3_TXD__CAN2_RX 0x150
+ MX8MP_IOMUXC_UART3_RXD__CAN2_TX 0x150
+ >;
+ };
+
+ pinctrl_flexspi0: flexspi0-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_NAND_ALE__FLEXSPI_A_SCLK 0x1c0
+ MX8MP_IOMUXC_NAND_CE0_B__FLEXSPI_A_SS0_B 0x82
+ MX8MP_IOMUXC_NAND_DATA00__FLEXSPI_A_DATA00 0x82
+ MX8MP_IOMUXC_NAND_DATA01__FLEXSPI_A_DATA01 0x82
+ MX8MP_IOMUXC_NAND_DATA02__FLEXSPI_A_DATA02 0x82
+ MX8MP_IOMUXC_NAND_DATA03__FLEXSPI_A_DATA03 0x82
+ >;
+ };
+
+ pinctrl_i2c1: i2c1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_I2C1_SCL__I2C1_SCL 0x400001c3
+ MX8MP_IOMUXC_I2C1_SDA__I2C1_SDA 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c1_gpio: i2c1-gpio-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_I2C1_SCL__GPIO5_IO14 0x400001c3
+ MX8MP_IOMUXC_I2C1_SDA__GPIO5_IO15 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c2: i2c2-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_I2C2_SCL__I2C2_SCL 0x400001c3
+ MX8MP_IOMUXC_I2C2_SDA__I2C2_SDA 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c3: i2c3-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_I2C3_SCL__I2C3_SCL 0x400001c3
+ MX8MP_IOMUXC_I2C3_SDA__I2C3_SDA 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c5: i2c5-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SPDIF_TX__I2C5_SCL 0x400001c3
+ MX8MP_IOMUXC_SPDIF_RX__I2C5_SDA 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c6: i2c6-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI5_RXFS__I2C6_SCL 0x400001c3
+ MX8MP_IOMUXC_SAI5_RXC__I2C6_SDA 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c2_gpio: i2c2grp-gpio-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_I2C2_SCL__GPIO5_IO16 0x400001c3
+ MX8MP_IOMUXC_I2C2_SDA__GPIO5_IO17 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c3_gpio: i2c3grp-gpio-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_I2C3_SCL__GPIO5_IO18 0x400001c3
+ MX8MP_IOMUXC_I2C3_SDA__GPIO5_IO19 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c5_gpio: i2c5grp-gpio-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SPDIF_TX__GPIO5_IO03 0x400001c3
+ MX8MP_IOMUXC_SPDIF_RX__GPIO5_IO04 0x400001c3
+ >;
+ };
+
+ pinctrl_i2c6_gpio: i2c6grp-gpio-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI5_RXFS__GPIO3_IO19 0x400001c3
+ MX8MP_IOMUXC_SAI5_RXC__GPIO3_IO20 0x400001c3
+ >;
+ };
+
+ pinctrl_pcie: pcie-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_I2C4_SCL__PCIE_CLKREQ_B 0x160 /* #OE of on-SoM PCIe clk generator */
+ MX8MP_IOMUXC_I2C4_SDA__GPIO5_IO21 0x41 /* WAKE */
+ MX8MP_IOMUXC_SAI1_TXD0__GPIO4_IO12 0x0100 /* reset */
+ >;
+ };
+
+ pinctrl_pmic: pmicirq-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_RXD3__GPIO4_IO05 0x41
+ >;
+ };
+
+ pinctrl_sai5: sai5-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI2_MCLK__AUDIOMIX_SAI5_MCLK 0xd6
+ MX8MP_IOMUXC_SAI2_RXC__AUDIOMIX_SAI5_TX_BCLK 0xd6
+ MX8MP_IOMUXC_SAI2_RXFS__AUDIOMIX_SAI5_TX_SYNC 0xd6
+ MX8MP_IOMUXC_SAI3_RXD__AUDIOMIX_SAI5_RX_DATA00 0xd6
+ MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI5_TX_DATA00 0xd6
+ >;
+ };
+
+ pinctrl_uart1: uart1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_UART1_RXD__UART1_DCE_RX 0x49
+ MX8MP_IOMUXC_UART1_TXD__UART1_DCE_TX 0x49
+ MX8MP_IOMUXC_SAI2_RXD0__UART1_DCE_RTS 0x49
+ MX8MP_IOMUXC_SAI2_TXFS__UART1_DCE_CTS 0x49
+ >;
+ };
+
+ pinctrl_uart2: uart2-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_UART2_RXD__UART2_DCE_RX 0x49
+ MX8MP_IOMUXC_UART2_TXD__UART2_DCE_TX 0x49
+ >;
+ };
+
+ pinctrl_uart4: uart4-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_UART4_RXD__UART4_DCE_RX 0x49
+ MX8MP_IOMUXC_UART4_TXD__UART4_DCE_TX 0x49
+ >;
+ };
+
+ pinctrl_usb1: usb1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_GPIO1_IO10__GPIO1_IO10 0x140 /* USB1 ID */
+ >;
+ };
+
+ /* Q7 sd-card interface */
+ pinctrl_usdhc1: usdhc1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x190
+ MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d0
+ MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d0
+ MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d0
+ MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d0
+ MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d0
+ MX8MP_IOMUXC_GPIO1_IO03__USDHC1_VSELECT 0xc1
+ >;
+ };
+
+ pinctrl_usdhc1_100mhz: usdhc1-100mhz-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x194
+ MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d4
+ MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d4
+ MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d4
+ MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d4
+ MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d4
+ MX8MP_IOMUXC_GPIO1_IO03__USDHC1_VSELECT 0xc1
+ >;
+ };
+
+ pinctrl_usdhc1_200mhz: usdhc1-200mhz-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x196
+ MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d6
+ MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d6
+ MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d6
+ MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d6
+ MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d6
+ MX8MP_IOMUXC_GPIO1_IO03__USDHC1_VSELECT 0xc1
+ >;
+ };
+
+ pinctrl_usdhc1_gpio: usdhc1-gpio-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_GPIO1_IO06__GPIO1_IO06 0x1c4 /* Q7-43: SD CD*/
+ MX8MP_IOMUXC_GPIO1_IO07__GPIO1_IO07 0x1c4 /* Q7-46: SD WP*/
+ >;
+ };
+
+ pinctrl_reg_usdhc1_vmmc: usdhc1-vmmc-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD1_RESET_B__GPIO2_IO10 0x41 /* reset */
+ >;
+ };
+
+ /* onboard usd-slot */
+ pinctrl_usdhc2: usdhc2-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x190
+ MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD 0x1d0
+ MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0 0x1d0
+ MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1 0x1d0
+ MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2 0x1d0
+ MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x1d0
+ MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT 0xc1
+ >;
+ };
+
+ pinctrl_usdhc2_100mhz: usdhc2-100mhz-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x194
+ MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD 0x1d4
+ MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0 0x1d4
+ MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1 0x1d4
+ MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2 0x1d4
+ MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x1d4
+ MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT 0xc1
+ >;
+ };
+
+ pinctrl_usdhc2_200mhz: usdhc2-200mhz-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x196
+ MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD 0x1d6
+ MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0 0x1d6
+ MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1 0x1d6
+ MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2 0x1d6
+ MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x1d6
+ MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT 0xc1
+ >;
+ };
+
+ pinctrl_usdhc2_gpio: usdhc2-gpio-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD2_CD_B__GPIO2_IO12 0x1c4
+ >;
+ };
+
+ pinctrl_reg_usdhc2_vmmc: usdhc2-vmmc-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SD2_RESET_B__GPIO2_IO19 0x41
+ >;
+ };
+
+ /* eMMC */
+ pinctrl_usdhc3: usdhc3-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x190
+ MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d0
+ MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d0
+ MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d0
+ MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d0
+ MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d0
+ MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d0
+ MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d0
+ MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d0
+ MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d0
+ MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x190
+ >;
+ };
+
+ pinctrl_usdhc3_100mhz: usdhc3-100mhz-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x194
+ MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d4
+ MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d4
+ MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d4
+ MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d4
+ MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d4
+ MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d4
+ MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d4
+ MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d4
+ MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d4
+ MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x194
+ >;
+ };
+
+ pinctrl_usdhc3_200mhz: usdhc3-200mhz-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x196
+ MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d6
+ MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d6
+ MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d6
+ MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d6
+ MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d6
+ MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d6
+ MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d6
+ MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d6
+ MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d6
+ MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x196
+ >;
+ };
+
+ pinctrl_reg_usdhc3_vmmc: usdhc3-gpio-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_NAND_READY_B__GPIO3_IO16 0x41
+ >;
+ };
+
+ pinctrl_wdog: wdog-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_GPIO1_IO02__WDOG1_WDOG_B 0xc6
+ >;
+ };
+
+ pinctrl_gpt1_capture1: gpt1-capture1-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI3_TXC__GPT1_CAPTURE1 0x01C0
+ >;
+ };
+
+ pinctrl_interrupt_fan_in: fan-in-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI3_TXC__GPIO5_IO00 0x01C0
+ >;
+ };
+
+ pinctrl_usb1_vbus: usb1-vbus-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_TXD5__GPIO4_IO17 0x0100 /* USB1_PWR */
+ >;
+ };
+
+ pinctrl_usb2_vbus: usb2-vbus-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_TXD4__GPIO4_IO16 0x0100 /* USB0S_PWR */
+ >;
+ };
+
+ pinctrl_gbe0_phy_reg: gbe0-phy-reg-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_GPIO1_IO05__GPIO1_IO05 0x01C0 /* GBE0_PWR_EN# */
+ >;
+ };
+
+ pinctrl_gbe0_rst: gbe0-rst-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI2_TXC__GPIO4_IO25 0x01C0 /* GBE0_RST# */
+ >;
+ };
+
+ pinctrl_lvds0_backlight: lvds0-backlight-grp {
+ fsl,pins = <
+ MX8MP_IOMUXC_SAI1_RXFS__GPIO4_IO00 0x0100 /* BL_EN */
+ >;
+ };
+};
diff --git a/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts
new file mode 100644
index 000000000000..1b2e8272aad6
--- /dev/null
+++ b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts
@@ -0,0 +1,180 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright 2023 Pengutronix, Johannes Zink <j.zink@pengutronix.de>
+ */
+/dts-v1/;
+
+#include "imx8mp-cgtqx8p.dtsi"
+
+/ {
+ model = "Koenig+Bauer Alphajet";
+ compatible = "kb,alphajet", "cgt,qxp8p", "fsl,imx8mp";
+
+ aliases {
+ state = &state_emmc;
+ };
+
+ chosen {
+ stdout-path = &uart1; // labeled UART0 on baseboard, on connector J12
+ environment-emmc {
+ compatible = "barebox,environment";
+ device-path = &env_emmc;
+ };
+ };
+
+ display {
+ compatible = "innolux,g101ice-l01";
+ backlight = <&lvds0_backlight>;
+ power-supply = <®_lfp_vdd>;
+
+ port {
+ panel_in_lvds0: endpoint {
+ remote-endpoint = <&ldb_lvds_ch0>;
+ };
+ };
+ };
+
+ state_emmc: state {
+ compatible = "barebox,state";
+ magic = <0xabff4b1f>;
+ backend-type = "raw";
+ backend = <&backend_state_emmc>;
+ backend-storage-type="direct";
+ backend-stridesize = <0x40>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ bootstate {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ system0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ remaining_attempts@0 {
+ reg = <0x0 0x4>;
+ type = "uint32";
+ default = <2>;
+ };
+
+ priority@4 {
+ reg = <0x4 0x4>;
+ type= "uint32";
+ default = <21>;
+ };
+ };
+
+ system1 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ remaining_attempts@8 {
+ reg = <0x8 0x4>;
+ type = "uint32";
+ default = <2>;
+ };
+
+ priority@c {
+ reg = <0xC 0x4>;
+ type= "uint32";
+ default = <20>;
+ };
+ };
+
+ last_chosen@10 {
+ reg = <0x10 0x4>;
+ type = "uint32";
+ };
+
+ };
+
+ };
+};
+
+&eqos { /* baseboard connects to on-SoM PHY */
+ status = "okay";
+};
+
+&gpu2d {
+ status = "okay";
+};
+
+&gpu3d {
+ status = "okay";
+};
+
+&lcdif2 {
+ assigned-clock-rates = <0>, <995400000>; /* pin IMX8MP_VIDEO_PLL1 to provide bitclock needed by lvds panel */
+ status = "okay";
+};
+
+&lvds0_backlight {
+ status = "okay";
+};
+
+&lvds_bridge {
+ status = "okay";
+
+ ports {
+ port@1 {
+ ldb_lvds_ch0: endpoint {
+ remote-endpoint = <&panel_in_lvds0>;
+ };
+ };
+ };
+};
+
+&pcie {
+ status = "okay";
+};
+
+&pcie_phy {
+ status = "okay";
+};
+
+
+&pwm2 { /* for PWM Backlight */
+ status = "okay";
+};
+
+&uart1 { /* labeled UART0 on base board */
+ /delete-property/ uart-has-rtscts; //not connected on baseboard
+ status = "okay";
+};
+
+&usb_dwc3_0 { /* Baseboard J13 Top Connector */
+ //fixme: overcurrent Pin is handled via TUSB8041 (which one?)
+ status = "okay";
+};
+
+&usdhc1 { /* Baseboard J8 - uSD card slot */
+ status = "okay";
+ /delete-property/ cd-gpios; /* no CD is tied to GND on baseboard */
+ /delete-property/ wp-gpios; /* no WP is tied to GND on baseboard */
+ broken-cd; /* do not wait for CD interrupt */
+};
+
+&usdhc2 { /* on-SoM micro-SD card slot is not used*/
+ status = "disabled";
+};
+
+&usdhc3 { /* on-SoM emmc */
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "barebox";
+ reg = <0x0 0xe0000>;
+ };
+
+ env_emmc: partition@e0000 {
+ label = "barebox-environment";
+ reg = <0xe0000 0x20000>;
+ };
+
+ backend_state_emmc: partition@100000 {
+ label = "state";
+ reg = <0x100000 0x20000>;
+ };
+};
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 4c93c1244a6a..058f0625addf 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -653,6 +653,16 @@ config MACH_NXP_IMX8MQ_EVK
select ARM_SMCCC
select MCI_IMX_ESDHC_PBL
+config MACH_KB_ALPHAJET
+ bool "Koenig+Bauer AlphaJet Board"
+ select ARCH_IMX8MP
+ select FIRMWARE_IMX_LPDDR4_PMU_TRAIN
+ select FIRMWARE_IMX8MP_ATF
+ select ARM_SMCCC
+ select MCI_IMX_ESDHC_PBL
+ select IMX8M_DRAM
+ select I2C_IMX_EARLY
+
config MACH_PHYTEC_SOM_IMX8MQ
bool "Phytec i.MX8M SOM"
select ARCH_IMX8MQ
diff --git a/images/Makefile.imx b/images/Makefile.imx
index 9e70ba50a162..bfb2fcdd8ede 100644
--- a/images/Makefile.imx
+++ b/images/Makefile.imx
@@ -473,6 +473,11 @@ CFG_start_variscite_imx8mp_dart.pblb.imximg = $(board)/variscite-dt8mcustomboard
FILE_barebox-variscite-imx8mp-dart-cb.img = start_variscite_imx8mp_dart.pblb.pimximg
image-$(CONFIG_MACH_VARISCITE_DT8MCUSTOMBOARD_IMX8MP) += barebox-variscite-imx8mp-dart-cb.img
+pblb-$(CONFIG_MACH_KB_ALPHAJET) += start_congatec_qx8p
+CFG_start_kb_alphajet.pblb.imximg = $(board)/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
+FILE_barebox-kb-alphajet.img = start_kb_alphajet.pblb.pimximg
+image-$(CONFIG_MACH_KB_ALPHAJET) += barebox-kb-alphajet.img
+
# ----------------------- i.MX8mq based boards --------------------------
pblb-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += start_nxp_imx8mq_evk
CFG_start_nxp_imx8mq_evk.pblb.imximg = $(board)/nxp-imx8mq-evk/flash-header-imx8mq-evk.imxcfg
---
base-commit: 64c528dd0bff0953192d90fbbc34b3d45d8116d0
change-id: 20230601-koenigbauer-alphajet-upstreaming-2085dc8b9f77
Best regards,
--
Johannes Zink <j.zink@pengutronix.de>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 7:40 [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board Johannes Zink
@ 2023-06-01 7:53 ` Marco Felsch
2023-06-01 8:28 ` Sascha Hauer
2023-06-01 8:49 ` Ahmad Fatoum
2 siblings, 0 replies; 10+ messages in thread
From: Marco Felsch @ 2023-06-01 7:53 UTC (permalink / raw)
To: Johannes Zink; +Cc: barebox, patchwork-jzi, Juergen Borleis
Hi Johannes,
On 23-06-01, Johannes Zink wrote:
> Add basic support for Koenig+Bauer Alphajet, based on a Congatec QMX8MP
> SoM with a i.MX8MP SoC in the Industrial Temperature Grade 4GB Variant,
> no inline ECC used.
>
> Co-Developed-by: Juergen Borleis <j.borleis@pengutronix.de>
> Signed-off-by: Juergen Borleis <j.borleis@pengutronix.de>
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> ---
> Koenig+Bauer Alphajet is based on the Congatec QMX8MP, which is an
> i.MX8MP based SoC. Building barebox for this target requires the usual
> bl31 and lpddr4 training data in /firmware as described in [1].
>
> The Congatec SoM is strapped and fused to boot from QSPI NOR flash,
> which can easily be updated using the registered barebox update handler.
>
> [1] https://www.barebox.org/doc/latest/boards/imx/nxp-imx8mp-evk.html
>
> Best regards
> Johannes
> ---
> Bootlog:
>
> barebox 2023.05.0-00196-g24e000914af6-dirty #151 Thu Jun 1 09:36:02 CEST
> 2023
>
> Board: Koenig+Bauer Alphajet
> deep-probe: supported due to kb,alphajet
> detected i.MX8MP revision 1.1
> i.MX8MP unique ID: 3a13efb20002aaff
> netconsole: registered as netconsole-1
> psci psci.of: detected version 1.1
> imx-esdhc 30b40000.mmc@30b40000.of: registered as mmc0
> mmc0: detected SD card version 2.0
> mmc0: registered mmc0
> imx-esdhc 30b60000.mmc@30b60000.of: registered as mmc2
> mmc2: detected MMC card version 5.1
> mmc2: registered mmc2.boot0
> mmc2: registered mmc2.boot1
> mmc2: registered mmc2
> mdio_bus: miibus0: probed
> xHCI xHCI0: USB XHCI 1.10
> state: New state registered 'state'
> state: Using bucket 0@0x00000000
> malloc space: 0xbfcfbe80 -> 0xffcfbe7f (size 1 GiB)
> found force-builtin environment, using defaultenv
>
> Hit m for menu or any to stop autoboot: 3
> barebox@Koenig+Bauer Alphajet:/
>
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> ---
> arch/arm/boards/Makefile | 1 +
> arch/arm/boards/kb-imx8mp-alphajet/Makefile | 4 +
> arch/arm/boards/kb-imx8mp-alphajet/board.c | 60 +
> .../flash-header-imx8mp-cgtqx8p.imxcfg | 10 +
> arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c | 127 ++
> arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c | 1832 ++++++++++++++++++++
> arch/arm/dts/Makefile | 1 +
> arch/arm/dts/imx8mp-cgtqx8p.dtsi | 1060 +++++++++++
> arch/arm/dts/imx8mp-koenigbauer-alphajet.dts | 180 ++
> arch/arm/mach-imx/Kconfig | 10 +
> images/Makefile.imx | 5 +
> 11 files changed, 3290 insertions(+)
>
> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
> index 2877debad535..67b2fc07a395 100644
> --- a/arch/arm/boards/Makefile
> +++ b/arch/arm/boards/Makefile
> @@ -81,6 +81,7 @@ obj-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += nxp-imx8mq-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MM_EVK) += nxp-imx8mm-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MN_EVK) += nxp-imx8mn-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MP_EVK) += nxp-imx8mp-evk/
> +obj-$(CONFIG_MACH_KB_ALPHAJET) += kb-imx8mp-alphajet/
> obj-$(CONFIG_MACH_TQ_MBA8MPXL) += tqma8mpxl/
> obj-$(CONFIG_MACH_OMAP343xSDP) += omap343xdsp/
> obj-$(CONFIG_MACH_OMAP3EVM) += omap3evm/
> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/Makefile b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
> new file mode 100644
> index 000000000000..b3ae72be3e3b
> --- /dev/null
> +++ b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
> @@ -0,0 +1,4 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +
> +obj-y += board.o
> +lwl-y += lowlevel.o lpddr4-timing.o
> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/board.c b/arch/arm/boards/kb-imx8mp-alphajet/board.c
> new file mode 100644
> index 000000000000..78cc60e2c3b1
> --- /dev/null
> +++ b/arch/arm/boards/kb-imx8mp-alphajet/board.c
> @@ -0,0 +1,60 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// SPDX-FileCopyrightText: 2023 Juergen Borleis, Pengutronix
> +// SPDX-FileCopyrightText: 2023 Johannes Zink, Pengutronix
> +
> +#include <asm/memory.h>
> +#include <bootsource.h>
> +#include <common.h>
> +#include <deep-probe.h>
> +#include <init.h>
> +#include <linux/phy.h>
> +#include <linux/sizes.h>
> +#include <mach/imx/bbu.h>
> +#include <mach/imx/generic.h>
> +#include <mach/imx/iomux-mx8mp.h>
> +#include <gpio.h>
> +#include <envfs.h>
> +
> +#define EQOS_PWR_PIN IMX_GPIO_NR(1, 5) /* ENET_PWREN# */
> +static void setup_ethernet_phy(void)
> +{
> + u32 val;
> +
> + of_device_ensure_probed_by_alias("gpio0");
> +
> + if (gpio_direction_output(EQOS_PWR_PIN, 0))
> + {
Nit:
if () {
}
Apart this and a few minor dts(i) style issues the patch lgtm. The
dts(i) style issues can be fixed while upstreaming the dts(i). Feel
free to add my:
Reviewed-by: Marco Felsch <m.felsch@pengutronix.de>
> + pr_err("eqos phy power: failed to request pin\n");
> + return;
> + }
> +
> + /* the phy needs roughly 200ms delay after power-on */
> + mdelay(200);
> +
> + /* Enable RGMII TX clk output */
> + val = readl(MX8MP_IOMUXC_GPR_BASE_ADDR + MX8MP_IOMUXC_GPR1);
> + val |= MX8MP_IOMUXC_GPR1_ENET1_RGMII_EN;
> + writel(val, MX8MP_IOMUXC_GPR_BASE_ADDR + MX8MP_IOMUXC_GPR1);
> +}
> +
> +static int kb_alphajet_probe(struct device *dev)
> +{
> + setup_ethernet_phy();
> +
> + imx8m_bbu_internal_flexspi_nor_register_handler("QSPI", "/dev/m25p0.boot", BBU_HANDLER_FLAG_DEFAULT);
> +
> + return 0;
> +}
> +
> +static const struct of_device_id kb_alphajet_of_match[] = {
> + { .compatible = "kb,alphajet" },
> + { /* Sentinel */ }
> +};
> +BAREBOX_DEEP_PROBE_ENABLE(kb_alphajet_of_match);
> +
> +static struct driver kb_alphajet_board_driver = {
> + .name = "board-kb-alphajet",
> + .probe = kb_alphajet_probe,
> + .of_compatible = kb_alphajet_of_match,
> +};
> +coredevice_platform_driver(kb_alphajet_board_driver);
> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg b/arch/arm/boards/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
> new file mode 100644
> index 000000000000..70c57768ebac
> --- /dev/null
> +++ b/arch/arm/boards/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
> @@ -0,0 +1,10 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +
> +soc imx8mp
> +
> +loadaddr 0x920000
> +max_load_size 0x3f000
> +ivtofs 0x0
> +
> +flexspi_ivtofs 0x0
> +flexspi_fcfbofs 0x400
> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c b/arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c
> new file mode 100644
> index 000000000000..ca9569b8fb09
> --- /dev/null
> +++ b/arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c
> @@ -0,0 +1,127 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +#include <common.h>
> +#include <debug_ll.h>
> +#include <asm/barebox-arm.h>
> +#include <asm/barebox-arm-head.h>
> +#include <asm/cache.h>
> +#include <asm/mmu.h>
> +#include <asm/sections.h>
> +#include <image-metadata.h>
> +#include <mach/imx/atf.h>
> +#include <mach/imx/debug_ll.h>
> +#include <mach/imx/esdctl.h>
> +#include <mach/imx/generic.h>
> +#include <mach/imx/iomux-mx8mp.h>
> +#include <mach/imx/imx8mp-regs.h>
> +#include <mach/imx/imx8m-ccm-regs.h>
> +#include <mach/imx/xload.h>
> +#include <mfd/pca9450.h>
> +#include <pbl/i2c.h>
> +#include <pbl/pmic.h>
> +#include <soc/fsl/fsl_udc.h>
> +#include <soc/imx8m/ddr.h>
> +
> +extern char __dtb_z_imx8mp_koenigbauer_alphajet_start[];
> +
> +#define UART_PAD_CTRL MUX_PAD_CTRL(MX8MP_PAD_CTL_DSE6 | \
> + MX8MP_PAD_CTL_FSEL)
> +/*
> + * SoC UART 1 is the standard console on the KB base board
> + */
> +static void setup_uart(void)
> +{
> + void __iomem *uart = IOMEM(MX8M_UART1_BASE_ADDR);
> +
> + imx8m_early_setup_uart_clock();
> +
> + imx8mp_setup_pad(MX8MP_PAD_UART1_TXD__UART1_DCE_TX | UART_PAD_CTRL);
> + imx8mp_setup_pad(MX8MP_PAD_UART1_RXD__UART1_DCE_RX | UART_PAD_CTRL);
> + imx8m_uart_setup(uart);
> +
> + pbl_set_putc(imx_uart_putc, uart);
> +
> + putc_ll('>');
> +}
> +
> +#define I2C_PAD_CTRL MUX_PAD_CTRL(MX8MP_PAD_CTL_DSE6 | \
> + MX8MP_PAD_CTL_HYS | \
> + MX8MP_PAD_CTL_PUE | \
> + MX8MP_PAD_CTL_PE)
> +
> +static struct pmic_config pca9450_cfg[] = {
> + /* BUCKxOUT_DVS0/1 control BUCK123 output */
> + { PCA9450_BUCK123_DVS, 0x29 },
> + /*
> + * increase VDD_SOC to typical value 0.95V before first
> + * DRAM access, set DVS1 to 0.85v for suspend.
> + * Enable DVS control through PMIC_STBY_REQ and
> + * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
> + */
> + { PCA9450_BUCK1OUT_DVS0, 0x1C },
> + { PCA9450_BUCK1OUT_DVS1, 0x14 },
> + { PCA9450_BUCK1CTRL, 0x59 },
> + /* Kernel uses OD/OD freq for SOC */
> + /* To avoid timing risk from SOC to ARM, increase
> + * VDD_ARM to OD voltage 0.95v
> + */
> + { PCA9450_BUCK2OUT_DVS0, 0x1C },
> + /* set WDOG_B_CFG to cold reset */
> + { PCA9450_RESET_CTRL, 0xA1 },
> +};
> +
> +static void power_init_board(void)
> +{
> + struct pbl_i2c *i2c;
> +
> + imx8mp_setup_pad(MX8MP_PAD_I2C1_SCL__I2C1_SCL | I2C_PAD_CTRL);
> + imx8mp_setup_pad(MX8MP_PAD_I2C1_SDA__I2C1_SDA | I2C_PAD_CTRL);
> +
> + imx8mp_early_clock_init();
> + imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> +
> + i2c = imx8m_i2c_early_init(IOMEM(MX8MP_I2C1_BASE_ADDR));
> +
> + pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
> +}
> +
> +extern struct dram_timing_info dram_timing_4g;
> +
> +static void start_atf(void)
> +{
> + /*
> + * If we are in EL3 we are running for the first time and need to
> + * initialize the DRAM and run TF-A (BL31). The TF-A will then jump
> + * to DRAM in EL2.
> + */
> + if (current_el() != 3)
> + return;
> +
> + power_init_board();
> +
> + imx8mp_ddr_init(&dram_timing_4g, DRAM_TYPE_LPDDR4);
> +
> + imx8mp_load_and_start_image_via_tfa();
> +}
> +
> +static __noreturn noinline void kb_alphajet_start(void)
> +{
> + setup_uart();
> +
> + start_atf();
> +
> + /*
> + * Standard entry we hit once we initialized both DDR and ATF
> + */
> + imx8mp_barebox_entry(__dtb_z_imx8mp_koenigbauer_alphajet_start);
> +}
> +
> +ENTRY_FUNCTION(start_kb_alphajet, r0, r1, r2)
> +{
> + imx8mp_cpu_lowlevel_init();
> +
> + relocate_to_current_adr();
> + setup_c();
> +
> + kb_alphajet_start();
> +}
> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c b/arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c
> new file mode 100644
> index 000000000000..6d10b530baf4
> --- /dev/null
> +++ b/arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c
> @@ -0,0 +1,1832 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// SPDX-FileCopyrightText: 2019 NXP
> +
> +#include <common.h>
> +#include <soc/imx8m/ddr.h>
> +
> +static struct dram_cfg_param ddr_ddrc_cfg_4g[] = {
> + /** Initialize DDRC registers **/
> + { 0x3d400304, 0x1 },
> + { 0x3d400030, 0x1 },
> + { 0x3d400000, 0xa3080020 },
> + { 0x3d400020, 0x1322 },
> + { 0x3d400024, 0x1e84800 },
> + { 0x3d400064, 0x3d0118 },
> + { 0x3d400070, 0x61027f10 },
> + { 0x3d400074, 0x7b0 },
> + { 0x3d4000d0, 0xc00307a3 },
> + { 0x3d4000d4, 0xc50000 },
> + { 0x3d4000dc, 0xf4003f },
> + { 0x3d4000e0, 0x330000 },
> + { 0x3d4000e8, 0x660048 },
> + { 0x3d4000ec, 0x160048 },
> + { 0x3d400100, 0x2028112a },
> + { 0x3d400104, 0x8083f },
> + { 0x3d40010c, 0xe0e000 },
> + { 0x3d400110, 0x12040a12 },
> + { 0x3d400114, 0x2050f0f },
> + { 0x3d400118, 0x1010009 },
> + { 0x3d40011c, 0x501 },
> + { 0x3d400130, 0x20800 },
> + { 0x3d400134, 0xe100002 },
> + { 0x3d400138, 0x120 },
> + { 0x3d400144, 0xc80064 },
> + { 0x3d400180, 0x3e8001e },
> + { 0x3d400184, 0x3207a12 },
> + { 0x3d400188, 0x0 },
> + { 0x3d400190, 0x49f820e },
> + { 0x3d400194, 0x80303 },
> + { 0x3d4001b4, 0x1f0e },
> + { 0x3d4001a0, 0xe0400018 },
> + { 0x3d4001a4, 0xdf00e4 },
> + { 0x3d4001a8, 0x80000000 },
> + { 0x3d4001b0, 0x11 },
> + { 0x3d4001c0, 0x1 },
> + { 0x3d4001c4, 0x1 },
> + { 0x3d4000f4, 0xc99 },
> + { 0x3d400108, 0x9121c1c },
> + { 0x3d400200, 0x17 },
> + { 0x3d40020c, 0x0 },
> + { 0x3d400210, 0x1f1f },
> + { 0x3d400204, 0x80808 },
> + { 0x3d400214, 0x7070707 },
> + { 0x3d400218, 0x7070707 },
> + { 0x3d40021c, 0xf0f },
> + { 0x3d400250, 0x1705 },
> + { 0x3d400254, 0x2c },
> + { 0x3d40025c, 0x4000030 },
> + { 0x3d400264, 0x900093e7 },
> + { 0x3d40026c, 0x2005574 },
> + { 0x3d400400, 0x111 },
> + { 0x3d400404, 0x72ff },
> + { 0x3d400408, 0x72ff },
> + { 0x3d400494, 0x2100e07 },
> + { 0x3d400498, 0x620096 },
> + { 0x3d40049c, 0x1100e07 },
> + { 0x3d4004a0, 0xc8012c },
> + { 0x3d402020, 0x1020 },
> + { 0x3d402024, 0x30d400 },
> + { 0x3d402050, 0x20d000 },
> + { 0x3d402064, 0x6001c },
> + { 0x3d4020dc, 0x840000 },
> + { 0x3d4020e0, 0x330000 },
> + { 0x3d4020e8, 0x660048 },
> + { 0x3d4020ec, 0x160048 },
> + { 0x3d402100, 0xa040105 },
> + { 0x3d402104, 0x30407 },
> + { 0x3d402108, 0x203060b },
> + { 0x3d40210c, 0x505000 },
> + { 0x3d402110, 0x2040202 },
> + { 0x3d402114, 0x2030202 },
> + { 0x3d402118, 0x1010004 },
> + { 0x3d40211c, 0x301 },
> + { 0x3d402130, 0x20300 },
> + { 0x3d402134, 0xa100002 },
> + { 0x3d402138, 0x1d },
> + { 0x3d402144, 0x14000a },
> + { 0x3d402180, 0x640004 },
> + { 0x3d402190, 0x3818200 },
> + { 0x3d402194, 0x80303 },
> + { 0x3d4021b4, 0x100 },
> + { 0x3d4020f4, 0xc99 },
> + { 0x3d403020, 0x1020 },
> + { 0x3d403024, 0xc3500 },
> + { 0x3d403050, 0x20d000 },
> + { 0x3d403064, 0x30007 },
> + { 0x3d4030dc, 0x840000 },
> + { 0x3d4030e0, 0x330000 },
> + { 0x3d4030e8, 0x660048 },
> + { 0x3d4030ec, 0x160048 },
> + { 0x3d403100, 0xa010102 },
> + { 0x3d403104, 0x30404 },
> + { 0x3d403108, 0x203060b },
> + { 0x3d40310c, 0x505000 },
> + { 0x3d403110, 0x2040202 },
> + { 0x3d403114, 0x2030202 },
> + { 0x3d403118, 0x1010004 },
> + { 0x3d40311c, 0x301 },
> + { 0x3d403130, 0x20300 },
> + { 0x3d403134, 0xa100002 },
> + { 0x3d403138, 0x8 },
> + { 0x3d403144, 0x50003 },
> + { 0x3d403180, 0x190004 },
> + { 0x3d403190, 0x3818200 },
> + { 0x3d403194, 0x80303 },
> + { 0x3d4031b4, 0x100 },
> + { 0x3d4030f4, 0xc99 },
> + { 0x3d400028, 0x0 },
> +};
> +
> +/* PHY Initialize Configuration */
> +static struct dram_cfg_param ddr_ddrphy_cfg[] = {
> + { 0x100a0, 0x0 },
> + { 0x100a1, 0x1 },
> + { 0x100a2, 0x2 },
> + { 0x100a3, 0x3 },
> + { 0x100a4, 0x4 },
> + { 0x100a5, 0x5 },
> + { 0x100a6, 0x6 },
> + { 0x100a7, 0x7 },
> + { 0x110a0, 0x0 },
> + { 0x110a1, 0x1 },
> + { 0x110a2, 0x3 },
> + { 0x110a3, 0x4 },
> + { 0x110a4, 0x5 },
> + { 0x110a5, 0x2 },
> + { 0x110a6, 0x7 },
> + { 0x110a7, 0x6 },
> + { 0x120a0, 0x0 },
> + { 0x120a1, 0x1 },
> + { 0x120a2, 0x3 },
> + { 0x120a3, 0x2 },
> + { 0x120a4, 0x5 },
> + { 0x120a5, 0x4 },
> + { 0x120a6, 0x7 },
> + { 0x120a7, 0x6 },
> + { 0x130a0, 0x0 },
> + { 0x130a1, 0x1 },
> + { 0x130a2, 0x2 },
> + { 0x130a3, 0x3 },
> + { 0x130a4, 0x4 },
> + { 0x130a5, 0x5 },
> + { 0x130a6, 0x6 },
> + { 0x130a7, 0x7 },
> + { 0x1005f, 0x1ff },
> + { 0x1015f, 0x1ff },
> + { 0x1105f, 0x1ff },
> + { 0x1115f, 0x1ff },
> + { 0x1205f, 0x1ff },
> + { 0x1215f, 0x1ff },
> + { 0x1305f, 0x1ff },
> + { 0x1315f, 0x1ff },
> + { 0x11005f, 0x1ff },
> + { 0x11015f, 0x1ff },
> + { 0x11105f, 0x1ff },
> + { 0x11115f, 0x1ff },
> + { 0x11205f, 0x1ff },
> + { 0x11215f, 0x1ff },
> + { 0x11305f, 0x1ff },
> + { 0x11315f, 0x1ff },
> + { 0x21005f, 0x1ff },
> + { 0x21015f, 0x1ff },
> + { 0x21105f, 0x1ff },
> + { 0x21115f, 0x1ff },
> + { 0x21205f, 0x1ff },
> + { 0x21215f, 0x1ff },
> + { 0x21305f, 0x1ff },
> + { 0x21315f, 0x1ff },
> + { 0x55, 0x1ff },
> + { 0x1055, 0x1ff },
> + { 0x2055, 0x1ff },
> + { 0x3055, 0x1ff },
> + { 0x4055, 0x1ff },
> + { 0x5055, 0x1ff },
> + { 0x6055, 0x1ff },
> + { 0x7055, 0x1ff },
> + { 0x8055, 0x1ff },
> + { 0x9055, 0x1ff },
> + { 0x200c5, 0x18 },
> + { 0x1200c5, 0x7 },
> + { 0x2200c5, 0x7 },
> + { 0x2002e, 0x2 },
> + { 0x12002e, 0x2 },
> + { 0x22002e, 0x2 },
> + { 0x90204, 0x0 },
> + { 0x190204, 0x0 },
> + { 0x290204, 0x0 },
> + { 0x20024, 0x1e3 },
> + { 0x2003a, 0x2 },
> + { 0x120024, 0x1e3 },
> + { 0x2003a, 0x2 },
> + { 0x220024, 0x1e3 },
> + { 0x2003a, 0x2 },
> + { 0x20056, 0x3 },
> + { 0x120056, 0x3 },
> + { 0x220056, 0x3 },
> + { 0x1004d, 0xe00 },
> + { 0x1014d, 0xe00 },
> + { 0x1104d, 0xe00 },
> + { 0x1114d, 0xe00 },
> + { 0x1204d, 0xe00 },
> + { 0x1214d, 0xe00 },
> + { 0x1304d, 0xe00 },
> + { 0x1314d, 0xe00 },
> + { 0x11004d, 0xe00 },
> + { 0x11014d, 0xe00 },
> + { 0x11104d, 0xe00 },
> + { 0x11114d, 0xe00 },
> + { 0x11204d, 0xe00 },
> + { 0x11214d, 0xe00 },
> + { 0x11304d, 0xe00 },
> + { 0x11314d, 0xe00 },
> + { 0x21004d, 0xe00 },
> + { 0x21014d, 0xe00 },
> + { 0x21104d, 0xe00 },
> + { 0x21114d, 0xe00 },
> + { 0x21204d, 0xe00 },
> + { 0x21214d, 0xe00 },
> + { 0x21304d, 0xe00 },
> + { 0x21314d, 0xe00 },
> + { 0x10049, 0xeba },
> + { 0x10149, 0xeba },
> + { 0x11049, 0xeba },
> + { 0x11149, 0xeba },
> + { 0x12049, 0xeba },
> + { 0x12149, 0xeba },
> + { 0x13049, 0xeba },
> + { 0x13149, 0xeba },
> + { 0x110049, 0xeba },
> + { 0x110149, 0xeba },
> + { 0x111049, 0xeba },
> + { 0x111149, 0xeba },
> + { 0x112049, 0xeba },
> + { 0x112149, 0xeba },
> + { 0x113049, 0xeba },
> + { 0x113149, 0xeba },
> + { 0x210049, 0xeba },
> + { 0x210149, 0xeba },
> + { 0x211049, 0xeba },
> + { 0x211149, 0xeba },
> + { 0x212049, 0xeba },
> + { 0x212149, 0xeba },
> + { 0x213049, 0xeba },
> + { 0x213149, 0xeba },
> + { 0x43, 0x63 },
> + { 0x1043, 0x63 },
> + { 0x2043, 0x63 },
> + { 0x3043, 0x63 },
> + { 0x4043, 0x63 },
> + { 0x5043, 0x63 },
> + { 0x6043, 0x63 },
> + { 0x7043, 0x63 },
> + { 0x8043, 0x63 },
> + { 0x9043, 0x63 },
> + { 0x20018, 0x3 },
> + { 0x20075, 0x4 },
> + { 0x20050, 0x0 },
> + { 0x20008, 0x3e8 },
> + { 0x120008, 0x64 },
> + { 0x220008, 0x19 },
> + { 0x20088, 0x9 },
> + { 0x200b2, 0x104 },
> + { 0x10043, 0x5a1 },
> + { 0x10143, 0x5a1 },
> + { 0x11043, 0x5a1 },
> + { 0x11143, 0x5a1 },
> + { 0x12043, 0x5a1 },
> + { 0x12143, 0x5a1 },
> + { 0x13043, 0x5a1 },
> + { 0x13143, 0x5a1 },
> + { 0x1200b2, 0x104 },
> + { 0x110043, 0x5a1 },
> + { 0x110143, 0x5a1 },
> + { 0x111043, 0x5a1 },
> + { 0x111143, 0x5a1 },
> + { 0x112043, 0x5a1 },
> + { 0x112143, 0x5a1 },
> + { 0x113043, 0x5a1 },
> + { 0x113143, 0x5a1 },
> + { 0x2200b2, 0x104 },
> + { 0x210043, 0x5a1 },
> + { 0x210143, 0x5a1 },
> + { 0x211043, 0x5a1 },
> + { 0x211143, 0x5a1 },
> + { 0x212043, 0x5a1 },
> + { 0x212143, 0x5a1 },
> + { 0x213043, 0x5a1 },
> + { 0x213143, 0x5a1 },
> + { 0x200fa, 0x1 },
> + { 0x1200fa, 0x1 },
> + { 0x2200fa, 0x1 },
> + { 0x20019, 0x1 },
> + { 0x120019, 0x1 },
> + { 0x220019, 0x1 },
> + { 0x200f0, 0x660 },
> + { 0x200f1, 0x0 },
> + { 0x200f2, 0x4444 },
> + { 0x200f3, 0x8888 },
> + { 0x200f4, 0x5665 },
> + { 0x200f5, 0x0 },
> + { 0x200f6, 0x0 },
> + { 0x200f7, 0xf000 },
> + { 0x20025, 0x0 },
> + { 0x2002d, 0x0 },
> + { 0x12002d, 0x0 },
> + { 0x22002d, 0x0 },
> + { 0x2007d, 0x212 },
> + { 0x12007d, 0x212 },
> + { 0x22007d, 0x212 },
> + { 0x2007c, 0x61 },
> + { 0x12007c, 0x61 },
> + { 0x22007c, 0x61 },
> + { 0x1004a, 0x500 },
> + { 0x1104a, 0x500 },
> + { 0x1204a, 0x500 },
> + { 0x1304a, 0x500 },
> + { 0x2002c, 0x0 },
> +};
> +
> +/* ddr phy trained csr */
> +static struct dram_cfg_param ddr_ddrphy_trained_csr[] = {
> + { 0x200b2, 0x0 },
> + { 0x1200b2, 0x0 },
> + { 0x2200b2, 0x0 },
> + { 0x200cb, 0x0 },
> + { 0x10043, 0x0 },
> + { 0x110043, 0x0 },
> + { 0x210043, 0x0 },
> + { 0x10143, 0x0 },
> + { 0x110143, 0x0 },
> + { 0x210143, 0x0 },
> + { 0x11043, 0x0 },
> + { 0x111043, 0x0 },
> + { 0x211043, 0x0 },
> + { 0x11143, 0x0 },
> + { 0x111143, 0x0 },
> + { 0x211143, 0x0 },
> + { 0x12043, 0x0 },
> + { 0x112043, 0x0 },
> + { 0x212043, 0x0 },
> + { 0x12143, 0x0 },
> + { 0x112143, 0x0 },
> + { 0x212143, 0x0 },
> + { 0x13043, 0x0 },
> + { 0x113043, 0x0 },
> + { 0x213043, 0x0 },
> + { 0x13143, 0x0 },
> + { 0x113143, 0x0 },
> + { 0x213143, 0x0 },
> + { 0x80, 0x0 },
> + { 0x100080, 0x0 },
> + { 0x200080, 0x0 },
> + { 0x1080, 0x0 },
> + { 0x101080, 0x0 },
> + { 0x201080, 0x0 },
> + { 0x2080, 0x0 },
> + { 0x102080, 0x0 },
> + { 0x202080, 0x0 },
> + { 0x3080, 0x0 },
> + { 0x103080, 0x0 },
> + { 0x203080, 0x0 },
> + { 0x4080, 0x0 },
> + { 0x104080, 0x0 },
> + { 0x204080, 0x0 },
> + { 0x5080, 0x0 },
> + { 0x105080, 0x0 },
> + { 0x205080, 0x0 },
> + { 0x6080, 0x0 },
> + { 0x106080, 0x0 },
> + { 0x206080, 0x0 },
> + { 0x7080, 0x0 },
> + { 0x107080, 0x0 },
> + { 0x207080, 0x0 },
> + { 0x8080, 0x0 },
> + { 0x108080, 0x0 },
> + { 0x208080, 0x0 },
> + { 0x9080, 0x0 },
> + { 0x109080, 0x0 },
> + { 0x209080, 0x0 },
> + { 0x10080, 0x0 },
> + { 0x110080, 0x0 },
> + { 0x210080, 0x0 },
> + { 0x10180, 0x0 },
> + { 0x110180, 0x0 },
> + { 0x210180, 0x0 },
> + { 0x11080, 0x0 },
> + { 0x111080, 0x0 },
> + { 0x211080, 0x0 },
> + { 0x11180, 0x0 },
> + { 0x111180, 0x0 },
> + { 0x211180, 0x0 },
> + { 0x12080, 0x0 },
> + { 0x112080, 0x0 },
> + { 0x212080, 0x0 },
> + { 0x12180, 0x0 },
> + { 0x112180, 0x0 },
> + { 0x212180, 0x0 },
> + { 0x13080, 0x0 },
> + { 0x113080, 0x0 },
> + { 0x213080, 0x0 },
> + { 0x13180, 0x0 },
> + { 0x113180, 0x0 },
> + { 0x213180, 0x0 },
> + { 0x10081, 0x0 },
> + { 0x110081, 0x0 },
> + { 0x210081, 0x0 },
> + { 0x10181, 0x0 },
> + { 0x110181, 0x0 },
> + { 0x210181, 0x0 },
> + { 0x11081, 0x0 },
> + { 0x111081, 0x0 },
> + { 0x211081, 0x0 },
> + { 0x11181, 0x0 },
> + { 0x111181, 0x0 },
> + { 0x211181, 0x0 },
> + { 0x12081, 0x0 },
> + { 0x112081, 0x0 },
> + { 0x212081, 0x0 },
> + { 0x12181, 0x0 },
> + { 0x112181, 0x0 },
> + { 0x212181, 0x0 },
> + { 0x13081, 0x0 },
> + { 0x113081, 0x0 },
> + { 0x213081, 0x0 },
> + { 0x13181, 0x0 },
> + { 0x113181, 0x0 },
> + { 0x213181, 0x0 },
> + { 0x100d0, 0x0 },
> + { 0x1100d0, 0x0 },
> + { 0x2100d0, 0x0 },
> + { 0x101d0, 0x0 },
> + { 0x1101d0, 0x0 },
> + { 0x2101d0, 0x0 },
> + { 0x110d0, 0x0 },
> + { 0x1110d0, 0x0 },
> + { 0x2110d0, 0x0 },
> + { 0x111d0, 0x0 },
> + { 0x1111d0, 0x0 },
> + { 0x2111d0, 0x0 },
> + { 0x120d0, 0x0 },
> + { 0x1120d0, 0x0 },
> + { 0x2120d0, 0x0 },
> + { 0x121d0, 0x0 },
> + { 0x1121d0, 0x0 },
> + { 0x2121d0, 0x0 },
> + { 0x130d0, 0x0 },
> + { 0x1130d0, 0x0 },
> + { 0x2130d0, 0x0 },
> + { 0x131d0, 0x0 },
> + { 0x1131d0, 0x0 },
> + { 0x2131d0, 0x0 },
> + { 0x100d1, 0x0 },
> + { 0x1100d1, 0x0 },
> + { 0x2100d1, 0x0 },
> + { 0x101d1, 0x0 },
> + { 0x1101d1, 0x0 },
> + { 0x2101d1, 0x0 },
> + { 0x110d1, 0x0 },
> + { 0x1110d1, 0x0 },
> + { 0x2110d1, 0x0 },
> + { 0x111d1, 0x0 },
> + { 0x1111d1, 0x0 },
> + { 0x2111d1, 0x0 },
> + { 0x120d1, 0x0 },
> + { 0x1120d1, 0x0 },
> + { 0x2120d1, 0x0 },
> + { 0x121d1, 0x0 },
> + { 0x1121d1, 0x0 },
> + { 0x2121d1, 0x0 },
> + { 0x130d1, 0x0 },
> + { 0x1130d1, 0x0 },
> + { 0x2130d1, 0x0 },
> + { 0x131d1, 0x0 },
> + { 0x1131d1, 0x0 },
> + { 0x2131d1, 0x0 },
> + { 0x10068, 0x0 },
> + { 0x10168, 0x0 },
> + { 0x10268, 0x0 },
> + { 0x10368, 0x0 },
> + { 0x10468, 0x0 },
> + { 0x10568, 0x0 },
> + { 0x10668, 0x0 },
> + { 0x10768, 0x0 },
> + { 0x10868, 0x0 },
> + { 0x11068, 0x0 },
> + { 0x11168, 0x0 },
> + { 0x11268, 0x0 },
> + { 0x11368, 0x0 },
> + { 0x11468, 0x0 },
> + { 0x11568, 0x0 },
> + { 0x11668, 0x0 },
> + { 0x11768, 0x0 },
> + { 0x11868, 0x0 },
> + { 0x12068, 0x0 },
> + { 0x12168, 0x0 },
> + { 0x12268, 0x0 },
> + { 0x12368, 0x0 },
> + { 0x12468, 0x0 },
> + { 0x12568, 0x0 },
> + { 0x12668, 0x0 },
> + { 0x12768, 0x0 },
> + { 0x12868, 0x0 },
> + { 0x13068, 0x0 },
> + { 0x13168, 0x0 },
> + { 0x13268, 0x0 },
> + { 0x13368, 0x0 },
> + { 0x13468, 0x0 },
> + { 0x13568, 0x0 },
> + { 0x13668, 0x0 },
> + { 0x13768, 0x0 },
> + { 0x13868, 0x0 },
> + { 0x10069, 0x0 },
> + { 0x10169, 0x0 },
> + { 0x10269, 0x0 },
> + { 0x10369, 0x0 },
> + { 0x10469, 0x0 },
> + { 0x10569, 0x0 },
> + { 0x10669, 0x0 },
> + { 0x10769, 0x0 },
> + { 0x10869, 0x0 },
> + { 0x11069, 0x0 },
> + { 0x11169, 0x0 },
> + { 0x11269, 0x0 },
> + { 0x11369, 0x0 },
> + { 0x11469, 0x0 },
> + { 0x11569, 0x0 },
> + { 0x11669, 0x0 },
> + { 0x11769, 0x0 },
> + { 0x11869, 0x0 },
> + { 0x12069, 0x0 },
> + { 0x12169, 0x0 },
> + { 0x12269, 0x0 },
> + { 0x12369, 0x0 },
> + { 0x12469, 0x0 },
> + { 0x12569, 0x0 },
> + { 0x12669, 0x0 },
> + { 0x12769, 0x0 },
> + { 0x12869, 0x0 },
> + { 0x13069, 0x0 },
> + { 0x13169, 0x0 },
> + { 0x13269, 0x0 },
> + { 0x13369, 0x0 },
> + { 0x13469, 0x0 },
> + { 0x13569, 0x0 },
> + { 0x13669, 0x0 },
> + { 0x13769, 0x0 },
> + { 0x13869, 0x0 },
> + { 0x1008c, 0x0 },
> + { 0x11008c, 0x0 },
> + { 0x21008c, 0x0 },
> + { 0x1018c, 0x0 },
> + { 0x11018c, 0x0 },
> + { 0x21018c, 0x0 },
> + { 0x1108c, 0x0 },
> + { 0x11108c, 0x0 },
> + { 0x21108c, 0x0 },
> + { 0x1118c, 0x0 },
> + { 0x11118c, 0x0 },
> + { 0x21118c, 0x0 },
> + { 0x1208c, 0x0 },
> + { 0x11208c, 0x0 },
> + { 0x21208c, 0x0 },
> + { 0x1218c, 0x0 },
> + { 0x11218c, 0x0 },
> + { 0x21218c, 0x0 },
> + { 0x1308c, 0x0 },
> + { 0x11308c, 0x0 },
> + { 0x21308c, 0x0 },
> + { 0x1318c, 0x0 },
> + { 0x11318c, 0x0 },
> + { 0x21318c, 0x0 },
> + { 0x1008d, 0x0 },
> + { 0x11008d, 0x0 },
> + { 0x21008d, 0x0 },
> + { 0x1018d, 0x0 },
> + { 0x11018d, 0x0 },
> + { 0x21018d, 0x0 },
> + { 0x1108d, 0x0 },
> + { 0x11108d, 0x0 },
> + { 0x21108d, 0x0 },
> + { 0x1118d, 0x0 },
> + { 0x11118d, 0x0 },
> + { 0x21118d, 0x0 },
> + { 0x1208d, 0x0 },
> + { 0x11208d, 0x0 },
> + { 0x21208d, 0x0 },
> + { 0x1218d, 0x0 },
> + { 0x11218d, 0x0 },
> + { 0x21218d, 0x0 },
> + { 0x1308d, 0x0 },
> + { 0x11308d, 0x0 },
> + { 0x21308d, 0x0 },
> + { 0x1318d, 0x0 },
> + { 0x11318d, 0x0 },
> + { 0x21318d, 0x0 },
> + { 0x100c0, 0x0 },
> + { 0x1100c0, 0x0 },
> + { 0x2100c0, 0x0 },
> + { 0x101c0, 0x0 },
> + { 0x1101c0, 0x0 },
> + { 0x2101c0, 0x0 },
> + { 0x102c0, 0x0 },
> + { 0x1102c0, 0x0 },
> + { 0x2102c0, 0x0 },
> + { 0x103c0, 0x0 },
> + { 0x1103c0, 0x0 },
> + { 0x2103c0, 0x0 },
> + { 0x104c0, 0x0 },
> + { 0x1104c0, 0x0 },
> + { 0x2104c0, 0x0 },
> + { 0x105c0, 0x0 },
> + { 0x1105c0, 0x0 },
> + { 0x2105c0, 0x0 },
> + { 0x106c0, 0x0 },
> + { 0x1106c0, 0x0 },
> + { 0x2106c0, 0x0 },
> + { 0x107c0, 0x0 },
> + { 0x1107c0, 0x0 },
> + { 0x2107c0, 0x0 },
> + { 0x108c0, 0x0 },
> + { 0x1108c0, 0x0 },
> + { 0x2108c0, 0x0 },
> + { 0x110c0, 0x0 },
> + { 0x1110c0, 0x0 },
> + { 0x2110c0, 0x0 },
> + { 0x111c0, 0x0 },
> + { 0x1111c0, 0x0 },
> + { 0x2111c0, 0x0 },
> + { 0x112c0, 0x0 },
> + { 0x1112c0, 0x0 },
> + { 0x2112c0, 0x0 },
> + { 0x113c0, 0x0 },
> + { 0x1113c0, 0x0 },
> + { 0x2113c0, 0x0 },
> + { 0x114c0, 0x0 },
> + { 0x1114c0, 0x0 },
> + { 0x2114c0, 0x0 },
> + { 0x115c0, 0x0 },
> + { 0x1115c0, 0x0 },
> + { 0x2115c0, 0x0 },
> + { 0x116c0, 0x0 },
> + { 0x1116c0, 0x0 },
> + { 0x2116c0, 0x0 },
> + { 0x117c0, 0x0 },
> + { 0x1117c0, 0x0 },
> + { 0x2117c0, 0x0 },
> + { 0x118c0, 0x0 },
> + { 0x1118c0, 0x0 },
> + { 0x2118c0, 0x0 },
> + { 0x120c0, 0x0 },
> + { 0x1120c0, 0x0 },
> + { 0x2120c0, 0x0 },
> + { 0x121c0, 0x0 },
> + { 0x1121c0, 0x0 },
> + { 0x2121c0, 0x0 },
> + { 0x122c0, 0x0 },
> + { 0x1122c0, 0x0 },
> + { 0x2122c0, 0x0 },
> + { 0x123c0, 0x0 },
> + { 0x1123c0, 0x0 },
> + { 0x2123c0, 0x0 },
> + { 0x124c0, 0x0 },
> + { 0x1124c0, 0x0 },
> + { 0x2124c0, 0x0 },
> + { 0x125c0, 0x0 },
> + { 0x1125c0, 0x0 },
> + { 0x2125c0, 0x0 },
> + { 0x126c0, 0x0 },
> + { 0x1126c0, 0x0 },
> + { 0x2126c0, 0x0 },
> + { 0x127c0, 0x0 },
> + { 0x1127c0, 0x0 },
> + { 0x2127c0, 0x0 },
> + { 0x128c0, 0x0 },
> + { 0x1128c0, 0x0 },
> + { 0x2128c0, 0x0 },
> + { 0x130c0, 0x0 },
> + { 0x1130c0, 0x0 },
> + { 0x2130c0, 0x0 },
> + { 0x131c0, 0x0 },
> + { 0x1131c0, 0x0 },
> + { 0x2131c0, 0x0 },
> + { 0x132c0, 0x0 },
> + { 0x1132c0, 0x0 },
> + { 0x2132c0, 0x0 },
> + { 0x133c0, 0x0 },
> + { 0x1133c0, 0x0 },
> + { 0x2133c0, 0x0 },
> + { 0x134c0, 0x0 },
> + { 0x1134c0, 0x0 },
> + { 0x2134c0, 0x0 },
> + { 0x135c0, 0x0 },
> + { 0x1135c0, 0x0 },
> + { 0x2135c0, 0x0 },
> + { 0x136c0, 0x0 },
> + { 0x1136c0, 0x0 },
> + { 0x2136c0, 0x0 },
> + { 0x137c0, 0x0 },
> + { 0x1137c0, 0x0 },
> + { 0x2137c0, 0x0 },
> + { 0x138c0, 0x0 },
> + { 0x1138c0, 0x0 },
> + { 0x2138c0, 0x0 },
> + { 0x100c1, 0x0 },
> + { 0x1100c1, 0x0 },
> + { 0x2100c1, 0x0 },
> + { 0x101c1, 0x0 },
> + { 0x1101c1, 0x0 },
> + { 0x2101c1, 0x0 },
> + { 0x102c1, 0x0 },
> + { 0x1102c1, 0x0 },
> + { 0x2102c1, 0x0 },
> + { 0x103c1, 0x0 },
> + { 0x1103c1, 0x0 },
> + { 0x2103c1, 0x0 },
> + { 0x104c1, 0x0 },
> + { 0x1104c1, 0x0 },
> + { 0x2104c1, 0x0 },
> + { 0x105c1, 0x0 },
> + { 0x1105c1, 0x0 },
> + { 0x2105c1, 0x0 },
> + { 0x106c1, 0x0 },
> + { 0x1106c1, 0x0 },
> + { 0x2106c1, 0x0 },
> + { 0x107c1, 0x0 },
> + { 0x1107c1, 0x0 },
> + { 0x2107c1, 0x0 },
> + { 0x108c1, 0x0 },
> + { 0x1108c1, 0x0 },
> + { 0x2108c1, 0x0 },
> + { 0x110c1, 0x0 },
> + { 0x1110c1, 0x0 },
> + { 0x2110c1, 0x0 },
> + { 0x111c1, 0x0 },
> + { 0x1111c1, 0x0 },
> + { 0x2111c1, 0x0 },
> + { 0x112c1, 0x0 },
> + { 0x1112c1, 0x0 },
> + { 0x2112c1, 0x0 },
> + { 0x113c1, 0x0 },
> + { 0x1113c1, 0x0 },
> + { 0x2113c1, 0x0 },
> + { 0x114c1, 0x0 },
> + { 0x1114c1, 0x0 },
> + { 0x2114c1, 0x0 },
> + { 0x115c1, 0x0 },
> + { 0x1115c1, 0x0 },
> + { 0x2115c1, 0x0 },
> + { 0x116c1, 0x0 },
> + { 0x1116c1, 0x0 },
> + { 0x2116c1, 0x0 },
> + { 0x117c1, 0x0 },
> + { 0x1117c1, 0x0 },
> + { 0x2117c1, 0x0 },
> + { 0x118c1, 0x0 },
> + { 0x1118c1, 0x0 },
> + { 0x2118c1, 0x0 },
> + { 0x120c1, 0x0 },
> + { 0x1120c1, 0x0 },
> + { 0x2120c1, 0x0 },
> + { 0x121c1, 0x0 },
> + { 0x1121c1, 0x0 },
> + { 0x2121c1, 0x0 },
> + { 0x122c1, 0x0 },
> + { 0x1122c1, 0x0 },
> + { 0x2122c1, 0x0 },
> + { 0x123c1, 0x0 },
> + { 0x1123c1, 0x0 },
> + { 0x2123c1, 0x0 },
> + { 0x124c1, 0x0 },
> + { 0x1124c1, 0x0 },
> + { 0x2124c1, 0x0 },
> + { 0x125c1, 0x0 },
> + { 0x1125c1, 0x0 },
> + { 0x2125c1, 0x0 },
> + { 0x126c1, 0x0 },
> + { 0x1126c1, 0x0 },
> + { 0x2126c1, 0x0 },
> + { 0x127c1, 0x0 },
> + { 0x1127c1, 0x0 },
> + { 0x2127c1, 0x0 },
> + { 0x128c1, 0x0 },
> + { 0x1128c1, 0x0 },
> + { 0x2128c1, 0x0 },
> + { 0x130c1, 0x0 },
> + { 0x1130c1, 0x0 },
> + { 0x2130c1, 0x0 },
> + { 0x131c1, 0x0 },
> + { 0x1131c1, 0x0 },
> + { 0x2131c1, 0x0 },
> + { 0x132c1, 0x0 },
> + { 0x1132c1, 0x0 },
> + { 0x2132c1, 0x0 },
> + { 0x133c1, 0x0 },
> + { 0x1133c1, 0x0 },
> + { 0x2133c1, 0x0 },
> + { 0x134c1, 0x0 },
> + { 0x1134c1, 0x0 },
> + { 0x2134c1, 0x0 },
> + { 0x135c1, 0x0 },
> + { 0x1135c1, 0x0 },
> + { 0x2135c1, 0x0 },
> + { 0x136c1, 0x0 },
> + { 0x1136c1, 0x0 },
> + { 0x2136c1, 0x0 },
> + { 0x137c1, 0x0 },
> + { 0x1137c1, 0x0 },
> + { 0x2137c1, 0x0 },
> + { 0x138c1, 0x0 },
> + { 0x1138c1, 0x0 },
> + { 0x2138c1, 0x0 },
> + { 0x10020, 0x0 },
> + { 0x110020, 0x0 },
> + { 0x210020, 0x0 },
> + { 0x11020, 0x0 },
> + { 0x111020, 0x0 },
> + { 0x211020, 0x0 },
> + { 0x12020, 0x0 },
> + { 0x112020, 0x0 },
> + { 0x212020, 0x0 },
> + { 0x13020, 0x0 },
> + { 0x113020, 0x0 },
> + { 0x213020, 0x0 },
> + { 0x20072, 0x0 },
> + { 0x20073, 0x0 },
> + { 0x20074, 0x0 },
> + { 0x100aa, 0x0 },
> + { 0x110aa, 0x0 },
> + { 0x120aa, 0x0 },
> + { 0x130aa, 0x0 },
> + { 0x20010, 0x0 },
> + { 0x120010, 0x0 },
> + { 0x220010, 0x0 },
> + { 0x20011, 0x0 },
> + { 0x120011, 0x0 },
> + { 0x220011, 0x0 },
> + { 0x100ae, 0x0 },
> + { 0x1100ae, 0x0 },
> + { 0x2100ae, 0x0 },
> + { 0x100af, 0x0 },
> + { 0x1100af, 0x0 },
> + { 0x2100af, 0x0 },
> + { 0x110ae, 0x0 },
> + { 0x1110ae, 0x0 },
> + { 0x2110ae, 0x0 },
> + { 0x110af, 0x0 },
> + { 0x1110af, 0x0 },
> + { 0x2110af, 0x0 },
> + { 0x120ae, 0x0 },
> + { 0x1120ae, 0x0 },
> + { 0x2120ae, 0x0 },
> + { 0x120af, 0x0 },
> + { 0x1120af, 0x0 },
> + { 0x2120af, 0x0 },
> + { 0x130ae, 0x0 },
> + { 0x1130ae, 0x0 },
> + { 0x2130ae, 0x0 },
> + { 0x130af, 0x0 },
> + { 0x1130af, 0x0 },
> + { 0x2130af, 0x0 },
> + { 0x20020, 0x0 },
> + { 0x120020, 0x0 },
> + { 0x220020, 0x0 },
> + { 0x100a0, 0x0 },
> + { 0x100a1, 0x0 },
> + { 0x100a2, 0x0 },
> + { 0x100a3, 0x0 },
> + { 0x100a4, 0x0 },
> + { 0x100a5, 0x0 },
> + { 0x100a6, 0x0 },
> + { 0x100a7, 0x0 },
> + { 0x110a0, 0x0 },
> + { 0x110a1, 0x0 },
> + { 0x110a2, 0x0 },
> + { 0x110a3, 0x0 },
> + { 0x110a4, 0x0 },
> + { 0x110a5, 0x0 },
> + { 0x110a6, 0x0 },
> + { 0x110a7, 0x0 },
> + { 0x120a0, 0x0 },
> + { 0x120a1, 0x0 },
> + { 0x120a2, 0x0 },
> + { 0x120a3, 0x0 },
> + { 0x120a4, 0x0 },
> + { 0x120a5, 0x0 },
> + { 0x120a6, 0x0 },
> + { 0x120a7, 0x0 },
> + { 0x130a0, 0x0 },
> + { 0x130a1, 0x0 },
> + { 0x130a2, 0x0 },
> + { 0x130a3, 0x0 },
> + { 0x130a4, 0x0 },
> + { 0x130a5, 0x0 },
> + { 0x130a6, 0x0 },
> + { 0x130a7, 0x0 },
> + { 0x2007c, 0x0 },
> + { 0x12007c, 0x0 },
> + { 0x22007c, 0x0 },
> + { 0x2007d, 0x0 },
> + { 0x12007d, 0x0 },
> + { 0x22007d, 0x0 },
> + { 0x400fd, 0x0 },
> + { 0x400c0, 0x0 },
> + { 0x90201, 0x0 },
> + { 0x190201, 0x0 },
> + { 0x290201, 0x0 },
> + { 0x90202, 0x0 },
> + { 0x190202, 0x0 },
> + { 0x290202, 0x0 },
> + { 0x90203, 0x0 },
> + { 0x190203, 0x0 },
> + { 0x290203, 0x0 },
> + { 0x90204, 0x0 },
> + { 0x190204, 0x0 },
> + { 0x290204, 0x0 },
> + { 0x90205, 0x0 },
> + { 0x190205, 0x0 },
> + { 0x290205, 0x0 },
> + { 0x90206, 0x0 },
> + { 0x190206, 0x0 },
> + { 0x290206, 0x0 },
> + { 0x90207, 0x0 },
> + { 0x190207, 0x0 },
> + { 0x290207, 0x0 },
> + { 0x90208, 0x0 },
> + { 0x190208, 0x0 },
> + { 0x290208, 0x0 },
> + { 0x10062, 0x0 },
> + { 0x10162, 0x0 },
> + { 0x10262, 0x0 },
> + { 0x10362, 0x0 },
> + { 0x10462, 0x0 },
> + { 0x10562, 0x0 },
> + { 0x10662, 0x0 },
> + { 0x10762, 0x0 },
> + { 0x10862, 0x0 },
> + { 0x11062, 0x0 },
> + { 0x11162, 0x0 },
> + { 0x11262, 0x0 },
> + { 0x11362, 0x0 },
> + { 0x11462, 0x0 },
> + { 0x11562, 0x0 },
> + { 0x11662, 0x0 },
> + { 0x11762, 0x0 },
> + { 0x11862, 0x0 },
> + { 0x12062, 0x0 },
> + { 0x12162, 0x0 },
> + { 0x12262, 0x0 },
> + { 0x12362, 0x0 },
> + { 0x12462, 0x0 },
> + { 0x12562, 0x0 },
> + { 0x12662, 0x0 },
> + { 0x12762, 0x0 },
> + { 0x12862, 0x0 },
> + { 0x13062, 0x0 },
> + { 0x13162, 0x0 },
> + { 0x13262, 0x0 },
> + { 0x13362, 0x0 },
> + { 0x13462, 0x0 },
> + { 0x13562, 0x0 },
> + { 0x13662, 0x0 },
> + { 0x13762, 0x0 },
> + { 0x13862, 0x0 },
> + { 0x20077, 0x0 },
> + { 0x10001, 0x0 },
> + { 0x11001, 0x0 },
> + { 0x12001, 0x0 },
> + { 0x13001, 0x0 },
> + { 0x10040, 0x0 },
> + { 0x10140, 0x0 },
> + { 0x10240, 0x0 },
> + { 0x10340, 0x0 },
> + { 0x10440, 0x0 },
> + { 0x10540, 0x0 },
> + { 0x10640, 0x0 },
> + { 0x10740, 0x0 },
> + { 0x10840, 0x0 },
> + { 0x10030, 0x0 },
> + { 0x10130, 0x0 },
> + { 0x10230, 0x0 },
> + { 0x10330, 0x0 },
> + { 0x10430, 0x0 },
> + { 0x10530, 0x0 },
> + { 0x10630, 0x0 },
> + { 0x10730, 0x0 },
> + { 0x10830, 0x0 },
> + { 0x11040, 0x0 },
> + { 0x11140, 0x0 },
> + { 0x11240, 0x0 },
> + { 0x11340, 0x0 },
> + { 0x11440, 0x0 },
> + { 0x11540, 0x0 },
> + { 0x11640, 0x0 },
> + { 0x11740, 0x0 },
> + { 0x11840, 0x0 },
> + { 0x11030, 0x0 },
> + { 0x11130, 0x0 },
> + { 0x11230, 0x0 },
> + { 0x11330, 0x0 },
> + { 0x11430, 0x0 },
> + { 0x11530, 0x0 },
> + { 0x11630, 0x0 },
> + { 0x11730, 0x0 },
> + { 0x11830, 0x0 },
> + { 0x12040, 0x0 },
> + { 0x12140, 0x0 },
> + { 0x12240, 0x0 },
> + { 0x12340, 0x0 },
> + { 0x12440, 0x0 },
> + { 0x12540, 0x0 },
> + { 0x12640, 0x0 },
> + { 0x12740, 0x0 },
> + { 0x12840, 0x0 },
> + { 0x12030, 0x0 },
> + { 0x12130, 0x0 },
> + { 0x12230, 0x0 },
> + { 0x12330, 0x0 },
> + { 0x12430, 0x0 },
> + { 0x12530, 0x0 },
> + { 0x12630, 0x0 },
> + { 0x12730, 0x0 },
> + { 0x12830, 0x0 },
> + { 0x13040, 0x0 },
> + { 0x13140, 0x0 },
> + { 0x13240, 0x0 },
> + { 0x13340, 0x0 },
> + { 0x13440, 0x0 },
> + { 0x13540, 0x0 },
> + { 0x13640, 0x0 },
> + { 0x13740, 0x0 },
> + { 0x13840, 0x0 },
> + { 0x13030, 0x0 },
> + { 0x13130, 0x0 },
> + { 0x13230, 0x0 },
> + { 0x13330, 0x0 },
> + { 0x13430, 0x0 },
> + { 0x13530, 0x0 },
> + { 0x13630, 0x0 },
> + { 0x13730, 0x0 },
> + { 0x13830, 0x0 },
> +};
> +
> +static struct dram_cfg_param ddr_fsp0_cfg_4g[] = {
> + { 0xd0000, 0x0 },
> + { 0x54003, 0xfa0 },
> + { 0x54004, 0x2 },
> + { 0x54005, 0x2228 },
> + { 0x54006, 0x14 },
> + { 0x54008, 0x131f },
> + { 0x54009, 0xc8 },
> + { 0x5400b, 0x2 },
> + { 0x5400f, 0x100 },
> + { 0x54012, 0x310 },
> + { 0x54019, 0x3ff4 },
> + { 0x5401a, 0x33 },
> + { 0x5401b, 0x4866 },
> + { 0x5401c, 0x4800 },
> + { 0x5401e, 0x16 },
> + { 0x5401f, 0x3ff4 },
> + { 0x54020, 0x33 },
> + { 0x54021, 0x4866 },
> + { 0x54022, 0x4800 },
> + { 0x54024, 0x16 },
> + { 0x5402b, 0x1000 },
> + { 0x5402c, 0x3 },
> + { 0x54032, 0xf400 },
> + { 0x54033, 0x333f },
> + { 0x54034, 0x6600 },
> + { 0x54035, 0x48 },
> + { 0x54036, 0x48 },
> + { 0x54037, 0x1600 },
> + { 0x54038, 0xf400 },
> + { 0x54039, 0x333f },
> + { 0x5403a, 0x6600 },
> + { 0x5403b, 0x48 },
> + { 0x5403c, 0x48 },
> + { 0x5403d, 0x1600 },
> + { 0xd0000, 0x1 },
> +};
> +
> +static struct dram_cfg_param ddr_fsp1_cfg_4g[] = {
> + { 0xd0000, 0x0 },
> + { 0x54002, 0x101 },
> + { 0x54003, 0x190 },
> + { 0x54004, 0x2 },
> + { 0x54005, 0x2228 },
> + { 0x54006, 0x14 },
> + { 0x54008, 0x121f },
> + { 0x54009, 0xc8 },
> + { 0x5400b, 0x2 },
> + { 0x5400f, 0x100 },
> + { 0x54012, 0x310 },
> + { 0x54019, 0x84 },
> + { 0x5401a, 0x33 },
> + { 0x5401b, 0x4866 },
> + { 0x5401c, 0x4800 },
> + { 0x5401e, 0x16 },
> + { 0x5401f, 0x84 },
> + { 0x54020, 0x33 },
> + { 0x54021, 0x4866 },
> + { 0x54022, 0x4800 },
> + { 0x54024, 0x16 },
> + { 0x5402b, 0x1000 },
> + { 0x5402c, 0x3 },
> + { 0x54032, 0x8400 },
> + { 0x54033, 0x3300 },
> + { 0x54034, 0x6600 },
> + { 0x54035, 0x48 },
> + { 0x54036, 0x48 },
> + { 0x54037, 0x1600 },
> + { 0x54038, 0x8400 },
> + { 0x54039, 0x3300 },
> + { 0x5403a, 0x6600 },
> + { 0x5403b, 0x48 },
> + { 0x5403c, 0x48 },
> + { 0x5403d, 0x1600 },
> + { 0xd0000, 0x1 },
> +};
> +
> +static struct dram_cfg_param ddr_fsp2_cfg_4g[] = {
> + { 0xd0000, 0x0 },
> + { 0x54002, 0x102 },
> + { 0x54003, 0x64 },
> + { 0x54004, 0x2 },
> + { 0x54005, 0x2228 },
> + { 0x54006, 0x14 },
> + { 0x54008, 0x121f },
> + { 0x54009, 0xc8 },
> + { 0x5400b, 0x2 },
> + { 0x5400f, 0x100 },
> + { 0x54012, 0x310 },
> + { 0x54019, 0x84 },
> + { 0x5401a, 0x33 },
> + { 0x5401b, 0x4866 },
> + { 0x5401c, 0x4800 },
> + { 0x5401e, 0x16 },
> + { 0x5401f, 0x84 },
> + { 0x54020, 0x33 },
> + { 0x54021, 0x4866 },
> + { 0x54022, 0x4800 },
> + { 0x54024, 0x16 },
> + { 0x5402b, 0x1000 },
> + { 0x5402c, 0x3 },
> + { 0x54032, 0x8400 },
> + { 0x54033, 0x3300 },
> + { 0x54034, 0x6600 },
> + { 0x54035, 0x48 },
> + { 0x54036, 0x48 },
> + { 0x54037, 0x1600 },
> + { 0x54038, 0x8400 },
> + { 0x54039, 0x3300 },
> + { 0x5403a, 0x6600 },
> + { 0x5403b, 0x48 },
> + { 0x5403c, 0x48 },
> + { 0x5403d, 0x1600 },
> + { 0xd0000, 0x1 },
> +};
> +
> +static struct dram_cfg_param ddr_fsp0_2d_cfg_4g[] = {
> + { 0xd0000, 0x0 },
> + { 0x54003, 0xfa0 },
> + { 0x54004, 0x2 },
> + { 0x54005, 0x2228 },
> + { 0x54006, 0x14 },
> + { 0x54008, 0x61 },
> + { 0x54009, 0xc8 },
> + { 0x5400b, 0x2 },
> + { 0x5400f, 0x100 },
> + { 0x54010, 0x1f7f },
> + { 0x54012, 0x310 },
> + { 0x54019, 0x3ff4 },
> + { 0x5401a, 0x33 },
> + { 0x5401b, 0x4866 },
> + { 0x5401c, 0x4800 },
> + { 0x5401e, 0x16 },
> + { 0x5401f, 0x3ff4 },
> + { 0x54020, 0x33 },
> + { 0x54021, 0x4866 },
> + { 0x54022, 0x4800 },
> + { 0x54024, 0x16 },
> + { 0x5402b, 0x1000 },
> + { 0x5402c, 0x3 },
> + { 0x54032, 0xf400 },
> + { 0x54033, 0x333f },
> + { 0x54034, 0x6600 },
> + { 0x54035, 0x48 },
> + { 0x54036, 0x48 },
> + { 0x54037, 0x1600 },
> + { 0x54038, 0xf400 },
> + { 0x54039, 0x333f },
> + { 0x5403a, 0x6600 },
> + { 0x5403b, 0x48 },
> + { 0x5403c, 0x48 },
> + { 0x5403d, 0x1600 },
> + { 0xd0000, 0x1 },
> +};
> +
> +/* DRAM PHY init engine image */
> +static struct dram_cfg_param ddr_phy_pie[] = {
> + { 0xd0000, 0x0 },
> + { 0x90000, 0x10 },
> + { 0x90001, 0x400 },
> + { 0x90002, 0x10e },
> + { 0x90003, 0x0 },
> + { 0x90004, 0x0 },
> + { 0x90005, 0x8 },
> + { 0x90029, 0xb },
> + { 0x9002a, 0x480 },
> + { 0x9002b, 0x109 },
> + { 0x9002c, 0x8 },
> + { 0x9002d, 0x448 },
> + { 0x9002e, 0x139 },
> + { 0x9002f, 0x8 },
> + { 0x90030, 0x478 },
> + { 0x90031, 0x109 },
> + { 0x90032, 0x0 },
> + { 0x90033, 0xe8 },
> + { 0x90034, 0x109 },
> + { 0x90035, 0x2 },
> + { 0x90036, 0x10 },
> + { 0x90037, 0x139 },
> + { 0x90038, 0xb },
> + { 0x90039, 0x7c0 },
> + { 0x9003a, 0x139 },
> + { 0x9003b, 0x44 },
> + { 0x9003c, 0x633 },
> + { 0x9003d, 0x159 },
> + { 0x9003e, 0x14f },
> + { 0x9003f, 0x630 },
> + { 0x90040, 0x159 },
> + { 0x90041, 0x47 },
> + { 0x90042, 0x633 },
> + { 0x90043, 0x149 },
> + { 0x90044, 0x4f },
> + { 0x90045, 0x633 },
> + { 0x90046, 0x179 },
> + { 0x90047, 0x8 },
> + { 0x90048, 0xe0 },
> + { 0x90049, 0x109 },
> + { 0x9004a, 0x0 },
> + { 0x9004b, 0x7c8 },
> + { 0x9004c, 0x109 },
> + { 0x9004d, 0x0 },
> + { 0x9004e, 0x1 },
> + { 0x9004f, 0x8 },
> + { 0x90050, 0x0 },
> + { 0x90051, 0x45a },
> + { 0x90052, 0x9 },
> + { 0x90053, 0x0 },
> + { 0x90054, 0x448 },
> + { 0x90055, 0x109 },
> + { 0x90056, 0x40 },
> + { 0x90057, 0x633 },
> + { 0x90058, 0x179 },
> + { 0x90059, 0x1 },
> + { 0x9005a, 0x618 },
> + { 0x9005b, 0x109 },
> + { 0x9005c, 0x40c0 },
> + { 0x9005d, 0x633 },
> + { 0x9005e, 0x149 },
> + { 0x9005f, 0x8 },
> + { 0x90060, 0x4 },
> + { 0x90061, 0x48 },
> + { 0x90062, 0x4040 },
> + { 0x90063, 0x633 },
> + { 0x90064, 0x149 },
> + { 0x90065, 0x0 },
> + { 0x90066, 0x4 },
> + { 0x90067, 0x48 },
> + { 0x90068, 0x40 },
> + { 0x90069, 0x633 },
> + { 0x9006a, 0x149 },
> + { 0x9006b, 0x10 },
> + { 0x9006c, 0x4 },
> + { 0x9006d, 0x18 },
> + { 0x9006e, 0x0 },
> + { 0x9006f, 0x4 },
> + { 0x90070, 0x78 },
> + { 0x90071, 0x549 },
> + { 0x90072, 0x633 },
> + { 0x90073, 0x159 },
> + { 0x90074, 0xd49 },
> + { 0x90075, 0x633 },
> + { 0x90076, 0x159 },
> + { 0x90077, 0x94a },
> + { 0x90078, 0x633 },
> + { 0x90079, 0x159 },
> + { 0x9007a, 0x441 },
> + { 0x9007b, 0x633 },
> + { 0x9007c, 0x149 },
> + { 0x9007d, 0x42 },
> + { 0x9007e, 0x633 },
> + { 0x9007f, 0x149 },
> + { 0x90080, 0x1 },
> + { 0x90081, 0x633 },
> + { 0x90082, 0x149 },
> + { 0x90083, 0x0 },
> + { 0x90084, 0xe0 },
> + { 0x90085, 0x109 },
> + { 0x90086, 0xa },
> + { 0x90087, 0x10 },
> + { 0x90088, 0x109 },
> + { 0x90089, 0x9 },
> + { 0x9008a, 0x3c0 },
> + { 0x9008b, 0x149 },
> + { 0x9008c, 0x9 },
> + { 0x9008d, 0x3c0 },
> + { 0x9008e, 0x159 },
> + { 0x9008f, 0x18 },
> + { 0x90090, 0x10 },
> + { 0x90091, 0x109 },
> + { 0x90092, 0x0 },
> + { 0x90093, 0x3c0 },
> + { 0x90094, 0x109 },
> + { 0x90095, 0x18 },
> + { 0x90096, 0x4 },
> + { 0x90097, 0x48 },
> + { 0x90098, 0x18 },
> + { 0x90099, 0x4 },
> + { 0x9009a, 0x58 },
> + { 0x9009b, 0xb },
> + { 0x9009c, 0x10 },
> + { 0x9009d, 0x109 },
> + { 0x9009e, 0x1 },
> + { 0x9009f, 0x10 },
> + { 0x900a0, 0x109 },
> + { 0x900a1, 0x5 },
> + { 0x900a2, 0x7c0 },
> + { 0x900a3, 0x109 },
> + { 0x40000, 0x811 },
> + { 0x40020, 0x880 },
> + { 0x40040, 0x0 },
> + { 0x40060, 0x0 },
> + { 0x40001, 0x4008 },
> + { 0x40021, 0x83 },
> + { 0x40041, 0x4f },
> + { 0x40061, 0x0 },
> + { 0x40002, 0x4040 },
> + { 0x40022, 0x83 },
> + { 0x40042, 0x51 },
> + { 0x40062, 0x0 },
> + { 0x40003, 0x811 },
> + { 0x40023, 0x880 },
> + { 0x40043, 0x0 },
> + { 0x40063, 0x0 },
> + { 0x40004, 0x720 },
> + { 0x40024, 0xf },
> + { 0x40044, 0x1740 },
> + { 0x40064, 0x0 },
> + { 0x40005, 0x16 },
> + { 0x40025, 0x83 },
> + { 0x40045, 0x4b },
> + { 0x40065, 0x0 },
> + { 0x40006, 0x716 },
> + { 0x40026, 0xf },
> + { 0x40046, 0x2001 },
> + { 0x40066, 0x0 },
> + { 0x40007, 0x716 },
> + { 0x40027, 0xf },
> + { 0x40047, 0x2800 },
> + { 0x40067, 0x0 },
> + { 0x40008, 0x716 },
> + { 0x40028, 0xf },
> + { 0x40048, 0xf00 },
> + { 0x40068, 0x0 },
> + { 0x40009, 0x720 },
> + { 0x40029, 0xf },
> + { 0x40049, 0x1400 },
> + { 0x40069, 0x0 },
> + { 0x4000a, 0xe08 },
> + { 0x4002a, 0xc15 },
> + { 0x4004a, 0x0 },
> + { 0x4006a, 0x0 },
> + { 0x4000b, 0x625 },
> + { 0x4002b, 0x15 },
> + { 0x4004b, 0x0 },
> + { 0x4006b, 0x0 },
> + { 0x4000c, 0x4028 },
> + { 0x4002c, 0x80 },
> + { 0x4004c, 0x0 },
> + { 0x4006c, 0x0 },
> + { 0x4000d, 0xe08 },
> + { 0x4002d, 0xc1a },
> + { 0x4004d, 0x0 },
> + { 0x4006d, 0x0 },
> + { 0x4000e, 0x625 },
> + { 0x4002e, 0x1a },
> + { 0x4004e, 0x0 },
> + { 0x4006e, 0x0 },
> + { 0x4000f, 0x4040 },
> + { 0x4002f, 0x80 },
> + { 0x4004f, 0x0 },
> + { 0x4006f, 0x0 },
> + { 0x40010, 0x2604 },
> + { 0x40030, 0x15 },
> + { 0x40050, 0x0 },
> + { 0x40070, 0x0 },
> + { 0x40011, 0x708 },
> + { 0x40031, 0x5 },
> + { 0x40051, 0x0 },
> + { 0x40071, 0x2002 },
> + { 0x40012, 0x8 },
> + { 0x40032, 0x80 },
> + { 0x40052, 0x0 },
> + { 0x40072, 0x0 },
> + { 0x40013, 0x2604 },
> + { 0x40033, 0x1a },
> + { 0x40053, 0x0 },
> + { 0x40073, 0x0 },
> + { 0x40014, 0x708 },
> + { 0x40034, 0xa },
> + { 0x40054, 0x0 },
> + { 0x40074, 0x2002 },
> + { 0x40015, 0x4040 },
> + { 0x40035, 0x80 },
> + { 0x40055, 0x0 },
> + { 0x40075, 0x0 },
> + { 0x40016, 0x60a },
> + { 0x40036, 0x15 },
> + { 0x40056, 0x1200 },
> + { 0x40076, 0x0 },
> + { 0x40017, 0x61a },
> + { 0x40037, 0x15 },
> + { 0x40057, 0x1300 },
> + { 0x40077, 0x0 },
> + { 0x40018, 0x60a },
> + { 0x40038, 0x1a },
> + { 0x40058, 0x1200 },
> + { 0x40078, 0x0 },
> + { 0x40019, 0x642 },
> + { 0x40039, 0x1a },
> + { 0x40059, 0x1300 },
> + { 0x40079, 0x0 },
> + { 0x4001a, 0x4808 },
> + { 0x4003a, 0x880 },
> + { 0x4005a, 0x0 },
> + { 0x4007a, 0x0 },
> + { 0x900a4, 0x0 },
> + { 0x900a5, 0x790 },
> + { 0x900a6, 0x11a },
> + { 0x900a7, 0x8 },
> + { 0x900a8, 0x7aa },
> + { 0x900a9, 0x2a },
> + { 0x900aa, 0x10 },
> + { 0x900ab, 0x7b2 },
> + { 0x900ac, 0x2a },
> + { 0x900ad, 0x0 },
> + { 0x900ae, 0x7c8 },
> + { 0x900af, 0x109 },
> + { 0x900b0, 0x10 },
> + { 0x900b1, 0x10 },
> + { 0x900b2, 0x109 },
> + { 0x900b3, 0x10 },
> + { 0x900b4, 0x2a8 },
> + { 0x900b5, 0x129 },
> + { 0x900b6, 0x8 },
> + { 0x900b7, 0x370 },
> + { 0x900b8, 0x129 },
> + { 0x900b9, 0xa },
> + { 0x900ba, 0x3c8 },
> + { 0x900bb, 0x1a9 },
> + { 0x900bc, 0xc },
> + { 0x900bd, 0x408 },
> + { 0x900be, 0x199 },
> + { 0x900bf, 0x14 },
> + { 0x900c0, 0x790 },
> + { 0x900c1, 0x11a },
> + { 0x900c2, 0x8 },
> + { 0x900c3, 0x4 },
> + { 0x900c4, 0x18 },
> + { 0x900c5, 0xe },
> + { 0x900c6, 0x408 },
> + { 0x900c7, 0x199 },
> + { 0x900c8, 0x8 },
> + { 0x900c9, 0x8568 },
> + { 0x900ca, 0x108 },
> + { 0x900cb, 0x18 },
> + { 0x900cc, 0x790 },
> + { 0x900cd, 0x16a },
> + { 0x900ce, 0x8 },
> + { 0x900cf, 0x1d8 },
> + { 0x900d0, 0x169 },
> + { 0x900d1, 0x10 },
> + { 0x900d2, 0x8558 },
> + { 0x900d3, 0x168 },
> + { 0x900d4, 0x70 },
> + { 0x900d5, 0x788 },
> + { 0x900d6, 0x16a },
> + { 0x900d7, 0x1ff8 },
> + { 0x900d8, 0x85a8 },
> + { 0x900d9, 0x1e8 },
> + { 0x900da, 0x50 },
> + { 0x900db, 0x798 },
> + { 0x900dc, 0x16a },
> + { 0x900dd, 0x60 },
> + { 0x900de, 0x7a0 },
> + { 0x900df, 0x16a },
> + { 0x900e0, 0x8 },
> + { 0x900e1, 0x8310 },
> + { 0x900e2, 0x168 },
> + { 0x900e3, 0x8 },
> + { 0x900e4, 0xa310 },
> + { 0x900e5, 0x168 },
> + { 0x900e6, 0xa },
> + { 0x900e7, 0x408 },
> + { 0x900e8, 0x169 },
> + { 0x900e9, 0x6e },
> + { 0x900ea, 0x0 },
> + { 0x900eb, 0x68 },
> + { 0x900ec, 0x0 },
> + { 0x900ed, 0x408 },
> + { 0x900ee, 0x169 },
> + { 0x900ef, 0x0 },
> + { 0x900f0, 0x8310 },
> + { 0x900f1, 0x168 },
> + { 0x900f2, 0x0 },
> + { 0x900f3, 0xa310 },
> + { 0x900f4, 0x168 },
> + { 0x900f5, 0x1ff8 },
> + { 0x900f6, 0x85a8 },
> + { 0x900f7, 0x1e8 },
> + { 0x900f8, 0x68 },
> + { 0x900f9, 0x798 },
> + { 0x900fa, 0x16a },
> + { 0x900fb, 0x78 },
> + { 0x900fc, 0x7a0 },
> + { 0x900fd, 0x16a },
> + { 0x900fe, 0x68 },
> + { 0x900ff, 0x790 },
> + { 0x90100, 0x16a },
> + { 0x90101, 0x8 },
> + { 0x90102, 0x8b10 },
> + { 0x90103, 0x168 },
> + { 0x90104, 0x8 },
> + { 0x90105, 0xab10 },
> + { 0x90106, 0x168 },
> + { 0x90107, 0xa },
> + { 0x90108, 0x408 },
> + { 0x90109, 0x169 },
> + { 0x9010a, 0x58 },
> + { 0x9010b, 0x0 },
> + { 0x9010c, 0x68 },
> + { 0x9010d, 0x0 },
> + { 0x9010e, 0x408 },
> + { 0x9010f, 0x169 },
> + { 0x90110, 0x0 },
> + { 0x90111, 0x8b10 },
> + { 0x90112, 0x168 },
> + { 0x90113, 0x1 },
> + { 0x90114, 0xab10 },
> + { 0x90115, 0x168 },
> + { 0x90116, 0x0 },
> + { 0x90117, 0x1d8 },
> + { 0x90118, 0x169 },
> + { 0x90119, 0x80 },
> + { 0x9011a, 0x790 },
> + { 0x9011b, 0x16a },
> + { 0x9011c, 0x18 },
> + { 0x9011d, 0x7aa },
> + { 0x9011e, 0x6a },
> + { 0x9011f, 0xa },
> + { 0x90120, 0x0 },
> + { 0x90121, 0x1e9 },
> + { 0x90122, 0x8 },
> + { 0x90123, 0x8080 },
> + { 0x90124, 0x108 },
> + { 0x90125, 0xf },
> + { 0x90126, 0x408 },
> + { 0x90127, 0x169 },
> + { 0x90128, 0xc },
> + { 0x90129, 0x0 },
> + { 0x9012a, 0x68 },
> + { 0x9012b, 0x9 },
> + { 0x9012c, 0x0 },
> + { 0x9012d, 0x1a9 },
> + { 0x9012e, 0x0 },
> + { 0x9012f, 0x408 },
> + { 0x90130, 0x169 },
> + { 0x90131, 0x0 },
> + { 0x90132, 0x8080 },
> + { 0x90133, 0x108 },
> + { 0x90134, 0x8 },
> + { 0x90135, 0x7aa },
> + { 0x90136, 0x6a },
> + { 0x90137, 0x0 },
> + { 0x90138, 0x8568 },
> + { 0x90139, 0x108 },
> + { 0x9013a, 0xb7 },
> + { 0x9013b, 0x790 },
> + { 0x9013c, 0x16a },
> + { 0x9013d, 0x1f },
> + { 0x9013e, 0x0 },
> + { 0x9013f, 0x68 },
> + { 0x90140, 0x8 },
> + { 0x90141, 0x8558 },
> + { 0x90142, 0x168 },
> + { 0x90143, 0xf },
> + { 0x90144, 0x408 },
> + { 0x90145, 0x169 },
> + { 0x90146, 0xd },
> + { 0x90147, 0x0 },
> + { 0x90148, 0x68 },
> + { 0x90149, 0x0 },
> + { 0x9014a, 0x408 },
> + { 0x9014b, 0x169 },
> + { 0x9014c, 0x0 },
> + { 0x9014d, 0x8558 },
> + { 0x9014e, 0x168 },
> + { 0x9014f, 0x8 },
> + { 0x90150, 0x3c8 },
> + { 0x90151, 0x1a9 },
> + { 0x90152, 0x3 },
> + { 0x90153, 0x370 },
> + { 0x90154, 0x129 },
> + { 0x90155, 0x20 },
> + { 0x90156, 0x2aa },
> + { 0x90157, 0x9 },
> + { 0x90158, 0x8 },
> + { 0x90159, 0xe8 },
> + { 0x9015a, 0x109 },
> + { 0x9015b, 0x0 },
> + { 0x9015c, 0x8140 },
> + { 0x9015d, 0x10c },
> + { 0x9015e, 0x10 },
> + { 0x9015f, 0x8138 },
> + { 0x90160, 0x104 },
> + { 0x90161, 0x8 },
> + { 0x90162, 0x448 },
> + { 0x90163, 0x109 },
> + { 0x90164, 0xf },
> + { 0x90165, 0x7c0 },
> + { 0x90166, 0x109 },
> + { 0x90167, 0x0 },
> + { 0x90168, 0xe8 },
> + { 0x90169, 0x109 },
> + { 0x9016a, 0x47 },
> + { 0x9016b, 0x630 },
> + { 0x9016c, 0x109 },
> + { 0x9016d, 0x8 },
> + { 0x9016e, 0x618 },
> + { 0x9016f, 0x109 },
> + { 0x90170, 0x8 },
> + { 0x90171, 0xe0 },
> + { 0x90172, 0x109 },
> + { 0x90173, 0x0 },
> + { 0x90174, 0x7c8 },
> + { 0x90175, 0x109 },
> + { 0x90176, 0x8 },
> + { 0x90177, 0x8140 },
> + { 0x90178, 0x10c },
> + { 0x90179, 0x0 },
> + { 0x9017a, 0x478 },
> + { 0x9017b, 0x109 },
> + { 0x9017c, 0x0 },
> + { 0x9017d, 0x1 },
> + { 0x9017e, 0x8 },
> + { 0x9017f, 0x8 },
> + { 0x90180, 0x4 },
> + { 0x90181, 0x0 },
> + { 0x90006, 0x8 },
> + { 0x90007, 0x7c8 },
> + { 0x90008, 0x109 },
> + { 0x90009, 0x0 },
> + { 0x9000a, 0x400 },
> + { 0x9000b, 0x106 },
> + { 0xd00e7, 0x400 },
> + { 0x90017, 0x0 },
> + { 0x9001f, 0x29 },
> + { 0x90026, 0x68 },
> + { 0x400d0, 0x0 },
> + { 0x400d1, 0x101 },
> + { 0x400d2, 0x105 },
> + { 0x400d3, 0x107 },
> + { 0x400d4, 0x10f },
> + { 0x400d5, 0x202 },
> + { 0x400d6, 0x20a },
> + { 0x400d7, 0x20b },
> + { 0x2003a, 0x2 },
> + { 0x200be, 0x3 },
> + { 0x2000b, 0x7d },
> + { 0x2000c, 0xfa },
> + { 0x2000d, 0x9c4 },
> + { 0x2000e, 0x2c },
> + { 0x12000b, 0xc },
> + { 0x12000c, 0x19 },
> + { 0x12000d, 0xfa },
> + { 0x12000e, 0x10 },
> + { 0x22000b, 0x3 },
> + { 0x22000c, 0x6 },
> + { 0x22000d, 0x3e },
> + { 0x22000e, 0x10 },
> + { 0x9000c, 0x0 },
> + { 0x9000d, 0x173 },
> + { 0x9000e, 0x60 },
> + { 0x9000f, 0x6110 },
> + { 0x90010, 0x2152 },
> + { 0x90011, 0xdfbd },
> + { 0x90012, 0x2060 },
> + { 0x90013, 0x6152 },
> + { 0x20010, 0x5a },
> + { 0x20011, 0x3 },
> + { 0x40080, 0xe0 },
> + { 0x40081, 0x12 },
> + { 0x40082, 0xe0 },
> + { 0x40083, 0x12 },
> + { 0x40084, 0xe0 },
> + { 0x40085, 0x12 },
> + { 0x140080, 0xe0 },
> + { 0x140081, 0x12 },
> + { 0x140082, 0xe0 },
> + { 0x140083, 0x12 },
> + { 0x140084, 0xe0 },
> + { 0x140085, 0x12 },
> + { 0x240080, 0xe0 },
> + { 0x240081, 0x12 },
> + { 0x240082, 0xe0 },
> + { 0x240083, 0x12 },
> + { 0x240084, 0xe0 },
> + { 0x240085, 0x12 },
> + { 0x400fd, 0xf },
> + { 0x10011, 0x1 },
> + { 0x10012, 0x1 },
> + { 0x10013, 0x180 },
> + { 0x10018, 0x1 },
> + { 0x10002, 0x6209 },
> + { 0x100b2, 0x1 },
> + { 0x101b4, 0x1 },
> + { 0x102b4, 0x1 },
> + { 0x103b4, 0x1 },
> + { 0x104b4, 0x1 },
> + { 0x105b4, 0x1 },
> + { 0x106b4, 0x1 },
> + { 0x107b4, 0x1 },
> + { 0x108b4, 0x1 },
> + { 0x11011, 0x1 },
> + { 0x11012, 0x1 },
> + { 0x11013, 0x180 },
> + { 0x11018, 0x1 },
> + { 0x11002, 0x6209 },
> + { 0x110b2, 0x1 },
> + { 0x111b4, 0x1 },
> + { 0x112b4, 0x1 },
> + { 0x113b4, 0x1 },
> + { 0x114b4, 0x1 },
> + { 0x115b4, 0x1 },
> + { 0x116b4, 0x1 },
> + { 0x117b4, 0x1 },
> + { 0x118b4, 0x1 },
> + { 0x12011, 0x1 },
> + { 0x12012, 0x1 },
> + { 0x12013, 0x180 },
> + { 0x12018, 0x1 },
> + { 0x12002, 0x6209 },
> + { 0x120b2, 0x1 },
> + { 0x121b4, 0x1 },
> + { 0x122b4, 0x1 },
> + { 0x123b4, 0x1 },
> + { 0x124b4, 0x1 },
> + { 0x125b4, 0x1 },
> + { 0x126b4, 0x1 },
> + { 0x127b4, 0x1 },
> + { 0x128b4, 0x1 },
> + { 0x13011, 0x1 },
> + { 0x13012, 0x1 },
> + { 0x13013, 0x180 },
> + { 0x13018, 0x1 },
> + { 0x13002, 0x6209 },
> + { 0x130b2, 0x1 },
> + { 0x131b4, 0x1 },
> + { 0x132b4, 0x1 },
> + { 0x133b4, 0x1 },
> + { 0x134b4, 0x1 },
> + { 0x135b4, 0x1 },
> + { 0x136b4, 0x1 },
> + { 0x137b4, 0x1 },
> + { 0x138b4, 0x1 },
> + { 0x20089, 0x1 },
> + { 0x20088, 0x19 },
> + { 0xc0080, 0x2 },
> + { 0xd0000, 0x1 }
> +};
> +
> +static struct dram_fsp_msg ddr_dram_fsp_msg_4g[] = {
> + {
> + /* P0 4000mts 1D */
> + .drate = 4000,
> + .fw_type = FW_1D_IMAGE,
> + .fsp_cfg = ddr_fsp0_cfg_4g,
> + .fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_cfg_4g),
> + }, {
> + /* P1 400mts 1D */
> + .drate = 400,
> + .fw_type = FW_1D_IMAGE,
> + .fsp_cfg = ddr_fsp1_cfg_4g,
> + .fsp_cfg_num = ARRAY_SIZE(ddr_fsp1_cfg_4g),
> + }, {
> + /* P2 100mts 1D */
> + .drate = 100,
> + .fw_type = FW_1D_IMAGE,
> + .fsp_cfg = ddr_fsp2_cfg_4g,
> + .fsp_cfg_num = ARRAY_SIZE(ddr_fsp2_cfg_4g),
> + }, {
> + /* P0 4000mts 2D */
> + .drate = 4000,
> + .fw_type = FW_2D_IMAGE,
> + .fsp_cfg = ddr_fsp0_2d_cfg_4g,
> + .fsp_cfg_num = ARRAY_SIZE(ddr_fsp0_2d_cfg_4g),
> + },
> +};
> +
> +struct dram_timing_info dram_timing_4g = {
> + .ddrc_cfg = ddr_ddrc_cfg_4g,
> + .ddrc_cfg_num = ARRAY_SIZE(ddr_ddrc_cfg_4g),
> + .ddrphy_cfg = ddr_ddrphy_cfg,
> + .ddrphy_cfg_num = ARRAY_SIZE(ddr_ddrphy_cfg),
> + .fsp_msg = ddr_dram_fsp_msg_4g,
> + .fsp_msg_num = ARRAY_SIZE(ddr_dram_fsp_msg_4g),
> + .ddrphy_trained_csr = ddr_ddrphy_trained_csr,
> + .ddrphy_trained_csr_num = ARRAY_SIZE(ddr_ddrphy_trained_csr),
> + .ddrphy_pie = ddr_phy_pie,
> + .ddrphy_pie_num = ARRAY_SIZE(ddr_phy_pie),
> + .fsp_table = { 4000, 400, 100, },
> +};
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index 98f4c4e0194b..3527b67366b7 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -85,6 +85,7 @@ lwl-$(CONFIG_MACH_PINE64_QUARTZ64) += rk3566-quartz64-a.dtb.o
> lwl-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += armada-xp-openblocks-ax3-4-bb.dtb.o
> lwl-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += kirkwood-openblocks_a6-bb.dtb.o
> lwl-$(CONFIG_MACH_POLYHEX_DEBIX) += imx8mp-debix-model-a.dtb.o
> +lwl-$(CONFIG_MACH_KB_ALPHAJET) += imx8mp-koenigbauer-alphajet.dtb.o
> lwl-$(CONFIG_MACH_PROTONIC_IMX6) += \
> imx6q-prti6q.dtb.o \
> imx6q-prtwd2.dtb.o \
> diff --git a/arch/arm/dts/imx8mp-cgtqx8p.dtsi b/arch/arm/dts/imx8mp-cgtqx8p.dtsi
> new file mode 100644
> index 000000000000..ea64efb28590
> --- /dev/null
> +++ b/arch/arm/dts/imx8mp-cgtqx8p.dtsi
> @@ -0,0 +1,1060 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright 2019 NXP
> + * Copyright 2022 congatec GmbH
> + * Copyright 2023 Pengutronix, Johannes Zink <j.zink@pengutronix.de>
> + */
> +
> +#include <arm64/freescale/imx8mp.dtsi>
> +#include "imx8mp.dtsi"
> +#include <dt-bindings/usb/pd.h>
> +#include <dt-bindings/phy/phy-imx8-pcie.h>
> +#include <dt-bindings/net/ti-dp83867.h>
> +
> +/ {
> + model = "conga-QMX8-Plus";
> + compatible = "cgt,qx8p", "fsl,imx8mp";
> +
> + aliases {
> + ethernet0 = &eqos;
> + rtc0 = &rtc_ext; /* Use external I2C RTC M4162 as rtc0 */
> + rtc1 = &snvs_rtc; /* And the internal one as rtc1 */
> + };
> +
> + pcie0_refclk: pcie0-reclk {
> + compatible = "fixed-clock";
> + #clock-cells= <0>;
> + clock-frequency = <100000000>;
> + };
> +
> + reg_usb1_host_vbus: regulator-usb1-vbus {
> + compatible = "regulator-fixed";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_usb1_vbus>;
> + regulator-name = "usb1_host_vbus";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + gpio = <&gpio4 17 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + };
> +
> + reg_usb2_host_vbus: regulator-usb2-vbus {
> + compatible = "regulator-fixed";
> + regulator-name = "usb2_host_vbus";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_usb2_vbus>;
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + gpio = <&gpio4 16 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + };
> +
> + /* reset line for SD1 (Q7 sd) interface */
> + reg_usdhc1_vmmc: regulator-usdhc1 {
> + compatible = "regulator-fixed";
> + regulator-name = "3v3-sd1";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_reg_usdhc1_vmmc>;
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + gpio = <&gpio2 10 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + startup-delay-us = <100>;
> + off-on-delay-us = <12000>;
> + };
> +
> + /* reset line for SD2 (onboard usd) interface */
> + reg_usdhc2_vmmc: regulator-usdhc2 {
> + compatible = "regulator-fixed";
> + regulator-name = "3v3-sd2";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_reg_usdhc2_vmmc>;
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + gpio = <&gpio2 19 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + startup-delay-us = <100>;
> + off-on-delay-us = <12000>;
> + };
> +
> + /* reset line for SD3 (onboard emmc) interface */
> + reg_usdhc3_vmmc: regulator-usdhc3 {
> + compatible = "regulator-fixed";
> + regulator-name = "3v3-sd3";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_reg_usdhc3_vmmc>;
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + gpio = <&gpio3 16 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + startup-delay-us = <100>;
> + off-on-delay-us = <12000>;
> + };
> +
> + reg_lfp_vdd: regulator-lfp-vdd {
> + compatible = "regulator-fixed";
> + regulator-name = "Display_Panel_Vdd";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_display_vdd_en>;
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + gpio = <&gpio4 1 GPIO_ACTIVE_HIGH>; // LFP0_VDD_EN
> + };
> +
> + reg_backlight_enable: regulator-backlight {
> + compatible = "regulator-fixed";
> + regulator-name = "backlight";
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_lvds0_backlight>;
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + gpio = <&gpio4 0 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + };
> +
> +
> + lvds0_backlight: lvds0-backlight {
> + compatible = "pwm-backlight";
> + pwms = <&pwm2 0 100000 0>;
> + power-supply = <®_backlight_enable>;
> + brightness-levels = <0 100>;
> + num-interpolated-steps = <100>;
> + default-brightness-level = <80>;
> + };
> +
> + fan0: pwm-fan {
> + compatible = "pwm-fan";
> + pwms = <&pwm4 4 100000 0>;
> + /* Tacho- input */
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_interrupt_fan_in>;
> + #cooling-cells = <2>;
> + interrupt-parent = <&gpio5>;
> + interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
> + status = "disabled";
> + };
> +};
> +
> +&A53_0 {
> + cpu-supply = <&buck2>;
> +};
> +
> +&A53_1 {
> + cpu-supply = <&buck2>;
> +};
> +
> +&A53_2 {
> + cpu-supply = <&buck2>;
> +};
> +
> +&A53_3 {
> + cpu-supply = <&buck2>;
> +};
> +
> +&pwm1 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_pwm1>;
> +};
> +
> +&pwm2 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_pwm2>;
> +};
> +
> +&pwm4 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_pwm4>;
> +};
> +
> +&ecspi1 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1_cs>;
> + cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> +};
> +
> +&ecspi2 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_ecspi2 &pinctrl_ecspi2_cs0>;
> + cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>;
> +};
> +
> +
> +&eqos {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_eqos>, <&pinctrl_gbe0_rst>;
> + phy-mode = "rgmii-id";
> + phy-handle = <ðphy0>;
> +
> + mdio {
> + compatible = "snps,dwmac-mdio";
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + /* on-SoM phy */
> + ethphy0: ethernet-phy@0 {
> + compatible = "ethernet-phy-ieee802.3-c22";
> + reg = <0>;
> + reset-gpios = <&gpio4 25 GPIO_ACTIVE_LOW>;
> + reset-assert-us = <1000>;
> + reset-deassert-us = <1000>;
> + ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
> + ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
> + ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
> + ti,clk-output-sel = <DP83867_CLK_O_SEL_OFF>;
> + };
> + };
> +};
> +
> +&flexspi {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_flexspi0>;
> + status = "okay";
> +
> + w25q64fw: flash@0 {
> + compatible = "jedec,spi-nor";
> + reg = <0>;
> + spi-max-frequency = <80000000>;
> + spi-tx-bus-width = <4>;
> + spi-rx-bus-width = <4>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + partition@0 {
> + label = "boot";
> + reg = <0x0000000 0x400000>;
> + };
> +
> + partition@400000 {
> + label = "failsafe";
> + reg = <0x400000 0x3e0000>;
> + };
> +
> + partition@7e0000 {
> + label = "reserved";
> + reg = <0x7e0000 0x20000>;
> + read-only;
> + };
> + };
> +};
> +
> +&flexcan1 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_flexcan1>;
> +};
> +
> +&flexcan2 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_flexcan2>;
> +};
> +
> +&i2c1 {
> + clock-frequency = <400000>;
> + pinctrl-names = "default", "gpio";
> + pinctrl-0 = <&pinctrl_i2c1>;
> + pinctrl-1 = <&pinctrl_i2c1_gpio>;
> + scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> + sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> + status = "okay";
> +
> + pca9450: pmic@25 {
> + compatible = "nxp,pca9450c";
> + reg = <0x25>;
> + pinctrl-0 = <&pinctrl_pmic>;
> + interrupt-parent = <&gpio4>; /* PMIC_nINT */
> + interrupts = <5 IRQ_TYPE_LEVEL_LOW>;
> +
> + regulators {
> + buck1: BUCK1 {
> + regulator-name = "BUCK1";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <2187500>;
> + regulator-boot-on;
> + regulator-always-on;
> + regulator-ramp-delay = <3125>;
> + };
> +
> + buck2: BUCK2 {
> + regulator-name = "BUCK2";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <2187500>;
> + regulator-boot-on;
> + regulator-always-on;
> + regulator-ramp-delay = <3125>;
> + };
> +
> + buck3: BUCK3 {
> + regulator-name = "BUCK3";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <3400000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + buck5: BUCK5 {
> + regulator-name = "BUCK5";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <3400000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + buck6: BUCK6 {
> + regulator-name = "BUCK6";
> + regulator-min-microvolt = <600000>;
> + regulator-max-microvolt = <3400000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + ldo1: LDO1 {
> + regulator-name = "LDO1";
> + regulator-min-microvolt = <1600000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + ldo2: LDO2 {
> + regulator-name = "LDO2";
> + regulator-min-microvolt = <800000>;
> + regulator-max-microvolt = <1150000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + ldo3: LDO3 {
> + regulator-name = "LDO3";
> + regulator-min-microvolt = <800000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + ldo4: LDO4 {
> + regulator-name = "LDO4";
> + regulator-min-microvolt = <800000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + ldo5: LDO5 {
> + regulator-name = "LDO5";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <3300000>;
> + };
> + };
> + };
> +};
> +
> +&i2c2 {
> + pinctrl-names = "default", "gpio";
> + pinctrl-0 = <&pinctrl_i2c2>;
> + pinctrl-1 = <&pinctrl_i2c2_gpio>;
> + scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> + sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +};
> +
> +&i2c3 {
> + pinctrl-names = "default", "gpio";
> + pinctrl-0 = <&pinctrl_i2c3>;
> + pinctrl-1 = <&pinctrl_i2c3_gpio>;
> + scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> + sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +};
> +
> +/* i2c-5: RTC */
> +&i2c5 {
> + clock-frequency = <100000>;
> + pinctrl-names = "default", "gpio";
> + pinctrl-0 = <&pinctrl_i2c5>;
> + pinctrl-1 = <&pinctrl_i2c5_gpio>;
> + scl-gpios = <&gpio5 3 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> + sda-gpios = <&gpio5 4 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> + status = "okay";
> +
> + rtc_ext: rtc@68 {
> + compatible = "microcrystal,rv4162";
> + reg = <0x68>;
> + };
> +};
> +
> +/* i2c-6: i2c splitter */
> +&i2c6 {
> + clock-frequency = <100000>;
> + pinctrl-names = "default", "gpio";
> + pinctrl-0 = <&pinctrl_i2c6>;
> + pinctrl-1 = <&pinctrl_i2c6_gpio>;
> + scl-gpios = <&gpio3 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> + sda-gpios = <&gpio3 20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
> +
> + status = "okay";
> +
> + mux@70 {
> + compatible = "nxp,pca9548";
> + reg = <0x70>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + /* MIPI CSI 1 */
> + imux0: i2c@0 {
> + reg = <0>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> +
> + /* MIPI CSI 2 */
> + imux1: i2c@1 {
> + reg = <1>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> +
> + /* Q-Seven LVDS_DID */
> + imux2: i2c@2 {
> + reg = <2>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> +
> + /* Q-Seven LVDS_BLC */
> + imux3: i2c@3 {
> + reg = <3>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + };
> +
> + /* Ports 4 .. 7 not used */
> + };
> +};
> +
> +&pcie {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_pcie>;
> + reset-gpio = <&gpio4 12 GPIO_ACTIVE_LOW>;
> + fsl,max-link-speed = <2>;
> +};
> +
> +&pcie_phy {
> + fsl,refclk-pad-mode = <IMX8_PCIE_REFCLK_PAD_INPUT>;
> + clocks = <&pcie0_refclk>;
> + clock-names= "ref";
> +};
> +
> +&uart1 { /* UART0-Connector on Qseven */
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_uart1>;
> + uart-has-rtscts;
> +};
> +
> +&uart2 {
> + /* console - on-SoM connector */
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_uart2>;
> + status = "okay";
> +};
> +
> +&uart4 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_uart4>;
> + status = "okay";
> +};
> +
> +&usb3_phy0 { /* On-SoM Hub */
> + fsl,phy-tx-vref-tune = <8>; //note: downstream
> + fsl,phy-tx-preemp-amp-tune = <3>; //note: downstream
> + vbus-supply = <®_usb1_host_vbus>;
> + status = "okay";
> +};
> +
> +&usb3_0 {
> + status = "okay";
> +};
> +
> +&usb_dwc3_0 { /* Q7 USB_P1 */
> + dr_mode = "otg";
> + usb-role-switch;
> + role-switch-default-mode = "host";
> +
> + connector {
> + compatible = "gpio-usb-b-connector", "usb-b-connector";
> + id-gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_usb1>, <&pinctrl_usb_overcurrent>;
> + };
> +};
> +
> +&usb3_phy1 {
> + vbus-supply = <®_usb2_host_vbus>;
> + status = "okay";
> +};
> +
> +&usb3_1 {
> + status = "okay";
> +};
> +
> +&usb_dwc3_1 { /* Q7 USB_P0 */
> + dr_mode = "host";
> + status = "okay";
> +};
> +
> +/* Q7 SD-Card interface */
> +&usdhc1 {
> + pinctrl-names = "default", "state_100mhz", "state_200mhz";
> + pinctrl-0 = <&pinctrl_usdhc1>, <&pinctrl_usdhc1_gpio>;
> + pinctrl-1 = <&pinctrl_usdhc1_100mhz>, <&pinctrl_usdhc1_gpio>;
> + pinctrl-2 = <&pinctrl_usdhc1_200mhz>, <&pinctrl_usdhc1_gpio>;
> + cd-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
> + wp-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
> + vmmc-supply = <®_usdhc1_vmmc>;
> + bus-width = <4>;
> +};
> +
> +/* onboard micro-SD card slot */
> +&usdhc2 {
> + pinctrl-names = "default", "state_100mhz", "state_200mhz";
> + pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
> + pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
> + pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
> + cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
> + vmmc-supply = <®_usdhc2_vmmc>;
> + bus-width = <4>;
> + status = "okay";
> +};
> +
> +/* onboard emmc */
> +&usdhc3 {
> + pinctrl-names = "default", "state_100mhz", "state_200mhz";
> + pinctrl-0 = <&pinctrl_usdhc3>;
> + pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
> + pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
> + vmmc-supply = <®_usdhc3_vmmc>;
> + bus-width = <8>;
> + non-removable;
> + no-sd;
> + no-sdio;
> + status = "okay";
> +};
> +
> +&wdog1 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_wdog>;
> + fsl,ext-reset-output;
> + status = "okay";
> +};
> +
> +&gpio1 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_gbe0_phy_reg>;
> +};
> +
> +&gpio4 {
> + stby_en-hog {
> + gpio-hog;
> + gpios = <11 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "CB_STBY_EN";
> + };
> +};
> +
> +&iomuxc {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_hog>, <&pinctrl_android_buttons>, <&pinctrl_pm>, <&pinctrl_q7_suspend>, <&pinctrl_q7_wdt>;
> +
> + /* Peripheral */
> + pinctrl_hog: hog-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_RXD7__GPIO4_IO09 0x01C0 /* PM_WAKE# (X19:32) */
> + MX8MP_IOMUXC_SAI1_TXD7__GPIO4_IO19 0x01C0 /* SMB_ALERT# (X19:20) */
> + MX8MP_IOMUXC_SAI3_TXFS__GPIO4_IO31 0x01C0 /* I2S_RST# */
> + >;
> + };
> +
> + pinctrl_display_vdd_en: lvds-vdd-enable-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_RXC__GPIO4_IO01 0x0100 /* LFP_VDD_EN */
> + >;
> + };
> +
> + pinctrl_hdmi: hdmi-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_HDMI_DDC_SCL__HDMIMIX_HDMI_SCL 0x400001c3
> + MX8MP_IOMUXC_HDMI_DDC_SDA__HDMIMIX_HDMI_SDA 0x400001c3
> + MX8MP_IOMUXC_HDMI_HPD__HDMIMIX_HDMI_HPD 0x40000019
> + MX8MP_IOMUXC_HDMI_CEC__HDMIMIX_HDMI_CEC 0x40000019
> + >;
> + };
> +
> + /* On module Android buttons (X7) */
> + pinctrl_android_buttons: androidbutton-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_RXD5__GPIO4_IO07 0x01C0 /* X7-2: Btn Vol Up */
> + MX8MP_IOMUXC_SD1_DATA4__GPIO2_IO06 0x01C0 /* X7-3: Btn Home */
> + MX8MP_IOMUXC_SD1_DATA5__GPIO2_IO07 0x01C0 /* X7-4: Btn Search */
> + MX8MP_IOMUXC_SD1_DATA6__GPIO2_IO08 0x01C0 /* X7-5: Btn Back */
> + MX8MP_IOMUXC_SAI1_RXD6__GPIO4_IO08 0x01C0 /* X7-6: Btn Menu */
> + MX8MP_IOMUXC_SD1_DATA7__GPIO2_IO09 0x01C0 /* X7-7: Btn Vol Down */
> + >;
> + };
> +
> + /* Q-Seven PM signals */
> + pinctrl_pm: pm-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_RXD0__GPIO4_IO02 0x01C0 /* Q7-21: Sleep Btn */
> + MX8MP_IOMUXC_SAI1_TXFS__GPIO4_IO10 0x01C0 /* Q7-22: Lid Btn */
> + MX8MP_IOMUXC_SAI1_RXD4__GPIO4_IO06 0x01C0 /* Q7-27: Bat Low */
> + MX8MP_IOMUXC_SAI1_RXD1__GPIO4_IO03 0x01C0 /* Q7-69: Thrm */
> + MX8MP_IOMUXC_SAI1_MCLK__GPIO4_IO20 0x01C0 /* Q7-71: Thrm Trip (X19:19) */
> + >;
> + };
> +
> + /* Q-Seven WDT */
> + pinctrl_q7_wdt: q7-wdt-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_RXD2__GPIO4_IO04 0x01C0 /* Q7-70: WDT Trig */
> + MX8MP_IOMUXC_SAI1_TXD1__GPIO4_IO13 0x0100 /* Q7-72: WDT Out */
> + >;
> + };
> +
> + /* Q-Seven Suspend signals */
> + pinctrl_q7_suspend: q7-suspend-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_TXC__GPIO4_IO11 0x0100 /* Q7-18: SUS_S3# (enable signal from pmic) */
> + MX8MP_IOMUXC_SAI3_TXD__GPIO5_IO01 0x0100 /* Q7-19: SUS_STAT | GP_OUT0*/
> + >;
> + };
> +
> + /* USB OverCurrent */
> + pinctrl_usb_overcurrent: usb-overcurrent-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO13__USB1_OTG_OC 0x01C0
> + MX8MP_IOMUXC_SAI3_RXC__GPIO4_IO29 0x01C0 /* USB1 OC as gpio */
> + >;
> + };
> +
> + pinctrl_pwm1: pwm1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SPDIF_EXT_CLK__PWM1_OUT 0x116
> + >;
> + };
> +
> + pinctrl_pwm2: pwm2-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI5_RXD0__PWM2_OUT 0x116
> + >;
> + };
> +
> + pinctrl_pwm4: pwm4-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI3_MCLK__PWM4_OUT 0x116
> + >;
> + };
> +
> + pinctrl_ecspi1: ecspi1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_ECSPI1_SCLK__ECSPI1_SCLK 0x82
> + MX8MP_IOMUXC_ECSPI1_MOSI__ECSPI1_MOSI 0x82
> + MX8MP_IOMUXC_ECSPI1_MISO__ECSPI1_MISO 0x82
> + >;
> + };
> +
> + pinctrl_ecspi1_cs: ecspi1cs-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x01C0
> + >;
> + };
> +
> + pinctrl_ecspi2: ecspi2-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_ECSPI2_SCLK__ECSPI2_SCLK 0x82
> + MX8MP_IOMUXC_ECSPI2_MOSI__ECSPI2_MOSI 0x82
> + MX8MP_IOMUXC_ECSPI2_MISO__ECSPI2_MISO 0x82
> + >;
> + };
> +
> + pinctrl_ecspi2_cs0: ecspi2cs0-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_ECSPI2_SS0__GPIO5_IO13 0x01C0
> + >;
> + };
> +
> + pinctrl_ecspi2_cs1: ecspi2cs1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI5_MCLK__GPIO3_IO25 0x01C0
> + >;
> + };
> +
> + pinctrl_eqos: eqos-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_ENET_MDC__ENET_QOS_MDC 0x3
> + MX8MP_IOMUXC_ENET_MDIO__ENET_QOS_MDIO 0x3
> + MX8MP_IOMUXC_ENET_RD0__ENET_QOS_RGMII_RD0 0x91
> + MX8MP_IOMUXC_ENET_RD1__ENET_QOS_RGMII_RD1 0x91
> + MX8MP_IOMUXC_ENET_RD2__ENET_QOS_RGMII_RD2 0x91
> + MX8MP_IOMUXC_ENET_RD3__ENET_QOS_RGMII_RD3 0x91
> + MX8MP_IOMUXC_ENET_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK 0x91
> + MX8MP_IOMUXC_ENET_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x91
> + MX8MP_IOMUXC_ENET_TD0__ENET_QOS_RGMII_TD0 0x1f
> + MX8MP_IOMUXC_ENET_TD1__ENET_QOS_RGMII_TD1 0x1f
> + MX8MP_IOMUXC_ENET_TD2__ENET_QOS_RGMII_TD2 0x1f
> + MX8MP_IOMUXC_ENET_TD3__ENET_QOS_RGMII_TD3 0x1f
> + MX8MP_IOMUXC_ENET_TX_CTL__ENET_QOS_RGMII_TX_CTL 0x1f
> + MX8MP_IOMUXC_ENET_TXC__CCM_ENET_QOS_CLOCK_GENERATE_TX_CLK 0x1f
> +
> + /* PTP capture INT */
> + MX8MP_IOMUXC_SAI2_TXD0__ENET_QOS_1588_EVENT2_IN 0x1c0
> + >;
> + };
> +
> + pinctrl_flexcan1: flexcan1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI5_RXD2__CAN1_RX 0x150
> + MX8MP_IOMUXC_SAI5_RXD1__CAN1_TX 0x150
> + >;
> + };
> +
> + pinctrl_flexcan2: flexcan2-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_UART3_TXD__CAN2_RX 0x150
> + MX8MP_IOMUXC_UART3_RXD__CAN2_TX 0x150
> + >;
> + };
> +
> + pinctrl_flexspi0: flexspi0-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_NAND_ALE__FLEXSPI_A_SCLK 0x1c0
> + MX8MP_IOMUXC_NAND_CE0_B__FLEXSPI_A_SS0_B 0x82
> + MX8MP_IOMUXC_NAND_DATA00__FLEXSPI_A_DATA00 0x82
> + MX8MP_IOMUXC_NAND_DATA01__FLEXSPI_A_DATA01 0x82
> + MX8MP_IOMUXC_NAND_DATA02__FLEXSPI_A_DATA02 0x82
> + MX8MP_IOMUXC_NAND_DATA03__FLEXSPI_A_DATA03 0x82
> + >;
> + };
> +
> + pinctrl_i2c1: i2c1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_I2C1_SCL__I2C1_SCL 0x400001c3
> + MX8MP_IOMUXC_I2C1_SDA__I2C1_SDA 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c1_gpio: i2c1-gpio-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_I2C1_SCL__GPIO5_IO14 0x400001c3
> + MX8MP_IOMUXC_I2C1_SDA__GPIO5_IO15 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c2: i2c2-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_I2C2_SCL__I2C2_SCL 0x400001c3
> + MX8MP_IOMUXC_I2C2_SDA__I2C2_SDA 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c3: i2c3-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_I2C3_SCL__I2C3_SCL 0x400001c3
> + MX8MP_IOMUXC_I2C3_SDA__I2C3_SDA 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c5: i2c5-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SPDIF_TX__I2C5_SCL 0x400001c3
> + MX8MP_IOMUXC_SPDIF_RX__I2C5_SDA 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c6: i2c6-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI5_RXFS__I2C6_SCL 0x400001c3
> + MX8MP_IOMUXC_SAI5_RXC__I2C6_SDA 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c2_gpio: i2c2grp-gpio-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_I2C2_SCL__GPIO5_IO16 0x400001c3
> + MX8MP_IOMUXC_I2C2_SDA__GPIO5_IO17 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c3_gpio: i2c3grp-gpio-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_I2C3_SCL__GPIO5_IO18 0x400001c3
> + MX8MP_IOMUXC_I2C3_SDA__GPIO5_IO19 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c5_gpio: i2c5grp-gpio-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SPDIF_TX__GPIO5_IO03 0x400001c3
> + MX8MP_IOMUXC_SPDIF_RX__GPIO5_IO04 0x400001c3
> + >;
> + };
> +
> + pinctrl_i2c6_gpio: i2c6grp-gpio-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI5_RXFS__GPIO3_IO19 0x400001c3
> + MX8MP_IOMUXC_SAI5_RXC__GPIO3_IO20 0x400001c3
> + >;
> + };
> +
> + pinctrl_pcie: pcie-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_I2C4_SCL__PCIE_CLKREQ_B 0x160 /* #OE of on-SoM PCIe clk generator */
> + MX8MP_IOMUXC_I2C4_SDA__GPIO5_IO21 0x41 /* WAKE */
> + MX8MP_IOMUXC_SAI1_TXD0__GPIO4_IO12 0x0100 /* reset */
> + >;
> + };
> +
> + pinctrl_pmic: pmicirq-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_RXD3__GPIO4_IO05 0x41
> + >;
> + };
> +
> + pinctrl_sai5: sai5-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI2_MCLK__AUDIOMIX_SAI5_MCLK 0xd6
> + MX8MP_IOMUXC_SAI2_RXC__AUDIOMIX_SAI5_TX_BCLK 0xd6
> + MX8MP_IOMUXC_SAI2_RXFS__AUDIOMIX_SAI5_TX_SYNC 0xd6
> + MX8MP_IOMUXC_SAI3_RXD__AUDIOMIX_SAI5_RX_DATA00 0xd6
> + MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI5_TX_DATA00 0xd6
> + >;
> + };
> +
> + pinctrl_uart1: uart1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_UART1_RXD__UART1_DCE_RX 0x49
> + MX8MP_IOMUXC_UART1_TXD__UART1_DCE_TX 0x49
> + MX8MP_IOMUXC_SAI2_RXD0__UART1_DCE_RTS 0x49
> + MX8MP_IOMUXC_SAI2_TXFS__UART1_DCE_CTS 0x49
> + >;
> + };
> +
> + pinctrl_uart2: uart2-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_UART2_RXD__UART2_DCE_RX 0x49
> + MX8MP_IOMUXC_UART2_TXD__UART2_DCE_TX 0x49
> + >;
> + };
> +
> + pinctrl_uart4: uart4-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_UART4_RXD__UART4_DCE_RX 0x49
> + MX8MP_IOMUXC_UART4_TXD__UART4_DCE_TX 0x49
> + >;
> + };
> +
> + pinctrl_usb1: usb1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO10__GPIO1_IO10 0x140 /* USB1 ID */
> + >;
> + };
> +
> + /* Q7 sd-card interface */
> + pinctrl_usdhc1: usdhc1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x190
> + MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d0
> + MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d0
> + MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d0
> + MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d0
> + MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d0
> + MX8MP_IOMUXC_GPIO1_IO03__USDHC1_VSELECT 0xc1
> + >;
> + };
> +
> + pinctrl_usdhc1_100mhz: usdhc1-100mhz-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x194
> + MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d4
> + MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d4
> + MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d4
> + MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d4
> + MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d4
> + MX8MP_IOMUXC_GPIO1_IO03__USDHC1_VSELECT 0xc1
> + >;
> + };
> +
> + pinctrl_usdhc1_200mhz: usdhc1-200mhz-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x196
> + MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d6
> + MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d6
> + MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d6
> + MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d6
> + MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d6
> + MX8MP_IOMUXC_GPIO1_IO03__USDHC1_VSELECT 0xc1
> + >;
> + };
> +
> + pinctrl_usdhc1_gpio: usdhc1-gpio-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO06__GPIO1_IO06 0x1c4 /* Q7-43: SD CD*/
> + MX8MP_IOMUXC_GPIO1_IO07__GPIO1_IO07 0x1c4 /* Q7-46: SD WP*/
> + >;
> + };
> +
> + pinctrl_reg_usdhc1_vmmc: usdhc1-vmmc-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD1_RESET_B__GPIO2_IO10 0x41 /* reset */
> + >;
> + };
> +
> + /* onboard usd-slot */
> + pinctrl_usdhc2: usdhc2-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x190
> + MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD 0x1d0
> + MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0 0x1d0
> + MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1 0x1d0
> + MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2 0x1d0
> + MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x1d0
> + MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT 0xc1
> + >;
> + };
> +
> + pinctrl_usdhc2_100mhz: usdhc2-100mhz-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x194
> + MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD 0x1d4
> + MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0 0x1d4
> + MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1 0x1d4
> + MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2 0x1d4
> + MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x1d4
> + MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT 0xc1
> + >;
> + };
> +
> + pinctrl_usdhc2_200mhz: usdhc2-200mhz-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD2_CLK__USDHC2_CLK 0x196
> + MX8MP_IOMUXC_SD2_CMD__USDHC2_CMD 0x1d6
> + MX8MP_IOMUXC_SD2_DATA0__USDHC2_DATA0 0x1d6
> + MX8MP_IOMUXC_SD2_DATA1__USDHC2_DATA1 0x1d6
> + MX8MP_IOMUXC_SD2_DATA2__USDHC2_DATA2 0x1d6
> + MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x1d6
> + MX8MP_IOMUXC_GPIO1_IO04__USDHC2_VSELECT 0xc1
> + >;
> + };
> +
> + pinctrl_usdhc2_gpio: usdhc2-gpio-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD2_CD_B__GPIO2_IO12 0x1c4
> + >;
> + };
> +
> + pinctrl_reg_usdhc2_vmmc: usdhc2-vmmc-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SD2_RESET_B__GPIO2_IO19 0x41
> + >;
> + };
> +
> + /* eMMC */
> + pinctrl_usdhc3: usdhc3-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x190
> + MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d0
> + MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d0
> + MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d0
> + MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d0
> + MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d0
> + MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d0
> + MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d0
> + MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d0
> + MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d0
> + MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x190
> + >;
> + };
> +
> + pinctrl_usdhc3_100mhz: usdhc3-100mhz-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x194
> + MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d4
> + MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d4
> + MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d4
> + MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d4
> + MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d4
> + MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d4
> + MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d4
> + MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d4
> + MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d4
> + MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x194
> + >;
> + };
> +
> + pinctrl_usdhc3_200mhz: usdhc3-200mhz-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_NAND_WE_B__USDHC3_CLK 0x196
> + MX8MP_IOMUXC_NAND_WP_B__USDHC3_CMD 0x1d6
> + MX8MP_IOMUXC_NAND_DATA04__USDHC3_DATA0 0x1d6
> + MX8MP_IOMUXC_NAND_DATA05__USDHC3_DATA1 0x1d6
> + MX8MP_IOMUXC_NAND_DATA06__USDHC3_DATA2 0x1d6
> + MX8MP_IOMUXC_NAND_DATA07__USDHC3_DATA3 0x1d6
> + MX8MP_IOMUXC_NAND_RE_B__USDHC3_DATA4 0x1d6
> + MX8MP_IOMUXC_NAND_CE2_B__USDHC3_DATA5 0x1d6
> + MX8MP_IOMUXC_NAND_CE3_B__USDHC3_DATA6 0x1d6
> + MX8MP_IOMUXC_NAND_CLE__USDHC3_DATA7 0x1d6
> + MX8MP_IOMUXC_NAND_CE1_B__USDHC3_STROBE 0x196
> + >;
> + };
> +
> + pinctrl_reg_usdhc3_vmmc: usdhc3-gpio-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_NAND_READY_B__GPIO3_IO16 0x41
> + >;
> + };
> +
> + pinctrl_wdog: wdog-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO02__WDOG1_WDOG_B 0xc6
> + >;
> + };
> +
> + pinctrl_gpt1_capture1: gpt1-capture1-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI3_TXC__GPT1_CAPTURE1 0x01C0
> + >;
> + };
> +
> + pinctrl_interrupt_fan_in: fan-in-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI3_TXC__GPIO5_IO00 0x01C0
> + >;
> + };
> +
> + pinctrl_usb1_vbus: usb1-vbus-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_TXD5__GPIO4_IO17 0x0100 /* USB1_PWR */
> + >;
> + };
> +
> + pinctrl_usb2_vbus: usb2-vbus-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_TXD4__GPIO4_IO16 0x0100 /* USB0S_PWR */
> + >;
> + };
> +
> + pinctrl_gbe0_phy_reg: gbe0-phy-reg-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO05__GPIO1_IO05 0x01C0 /* GBE0_PWR_EN# */
> + >;
> + };
> +
> + pinctrl_gbe0_rst: gbe0-rst-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI2_TXC__GPIO4_IO25 0x01C0 /* GBE0_RST# */
> + >;
> + };
> +
> + pinctrl_lvds0_backlight: lvds0-backlight-grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_SAI1_RXFS__GPIO4_IO00 0x0100 /* BL_EN */
> + >;
> + };
> +};
> diff --git a/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts
> new file mode 100644
> index 000000000000..1b2e8272aad6
> --- /dev/null
> +++ b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts
> @@ -0,0 +1,180 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright 2023 Pengutronix, Johannes Zink <j.zink@pengutronix.de>
> + */
> +/dts-v1/;
> +
> +#include "imx8mp-cgtqx8p.dtsi"
> +
> +/ {
> + model = "Koenig+Bauer Alphajet";
> + compatible = "kb,alphajet", "cgt,qxp8p", "fsl,imx8mp";
> +
> + aliases {
> + state = &state_emmc;
> + };
> +
> + chosen {
> + stdout-path = &uart1; // labeled UART0 on baseboard, on connector J12
> + environment-emmc {
> + compatible = "barebox,environment";
> + device-path = &env_emmc;
> + };
> + };
> +
> + display {
> + compatible = "innolux,g101ice-l01";
> + backlight = <&lvds0_backlight>;
> + power-supply = <®_lfp_vdd>;
> +
> + port {
> + panel_in_lvds0: endpoint {
> + remote-endpoint = <&ldb_lvds_ch0>;
> + };
> + };
> + };
> +
> + state_emmc: state {
> + compatible = "barebox,state";
> + magic = <0xabff4b1f>;
> + backend-type = "raw";
> + backend = <&backend_state_emmc>;
> + backend-storage-type="direct";
> + backend-stridesize = <0x40>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + bootstate {
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + system0 {
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + remaining_attempts@0 {
> + reg = <0x0 0x4>;
> + type = "uint32";
> + default = <2>;
> + };
> +
> + priority@4 {
> + reg = <0x4 0x4>;
> + type= "uint32";
> + default = <21>;
> + };
> + };
> +
> + system1 {
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + remaining_attempts@8 {
> + reg = <0x8 0x4>;
> + type = "uint32";
> + default = <2>;
> + };
> +
> + priority@c {
> + reg = <0xC 0x4>;
> + type= "uint32";
> + default = <20>;
> + };
> + };
> +
> + last_chosen@10 {
> + reg = <0x10 0x4>;
> + type = "uint32";
> + };
> +
> + };
> +
> + };
> +};
> +
> +&eqos { /* baseboard connects to on-SoM PHY */
> + status = "okay";
> +};
> +
> +&gpu2d {
> + status = "okay";
> +};
> +
> +&gpu3d {
> + status = "okay";
> +};
> +
> +&lcdif2 {
> + assigned-clock-rates = <0>, <995400000>; /* pin IMX8MP_VIDEO_PLL1 to provide bitclock needed by lvds panel */
> + status = "okay";
> +};
> +
> +&lvds0_backlight {
> + status = "okay";
> +};
> +
> +&lvds_bridge {
> + status = "okay";
> +
> + ports {
> + port@1 {
> + ldb_lvds_ch0: endpoint {
> + remote-endpoint = <&panel_in_lvds0>;
> + };
> + };
> + };
> +};
> +
> +&pcie {
> + status = "okay";
> +};
> +
> +&pcie_phy {
> + status = "okay";
> +};
> +
> +
> +&pwm2 { /* for PWM Backlight */
> + status = "okay";
> +};
> +
> +&uart1 { /* labeled UART0 on base board */
> + /delete-property/ uart-has-rtscts; //not connected on baseboard
> + status = "okay";
> +};
> +
> +&usb_dwc3_0 { /* Baseboard J13 Top Connector */
> + //fixme: overcurrent Pin is handled via TUSB8041 (which one?)
> + status = "okay";
> +};
> +
> +&usdhc1 { /* Baseboard J8 - uSD card slot */
> + status = "okay";
> + /delete-property/ cd-gpios; /* no CD is tied to GND on baseboard */
> + /delete-property/ wp-gpios; /* no WP is tied to GND on baseboard */
> + broken-cd; /* do not wait for CD interrupt */
> +};
> +
> +&usdhc2 { /* on-SoM micro-SD card slot is not used*/
> + status = "disabled";
> +};
> +
> +&usdhc3 { /* on-SoM emmc */
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + partition@0 {
> + label = "barebox";
> + reg = <0x0 0xe0000>;
> + };
> +
> + env_emmc: partition@e0000 {
> + label = "barebox-environment";
> + reg = <0xe0000 0x20000>;
> + };
> +
> + backend_state_emmc: partition@100000 {
> + label = "state";
> + reg = <0x100000 0x20000>;
> + };
> +};
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index 4c93c1244a6a..058f0625addf 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -653,6 +653,16 @@ config MACH_NXP_IMX8MQ_EVK
> select ARM_SMCCC
> select MCI_IMX_ESDHC_PBL
>
> +config MACH_KB_ALPHAJET
> + bool "Koenig+Bauer AlphaJet Board"
> + select ARCH_IMX8MP
> + select FIRMWARE_IMX_LPDDR4_PMU_TRAIN
> + select FIRMWARE_IMX8MP_ATF
> + select ARM_SMCCC
> + select MCI_IMX_ESDHC_PBL
> + select IMX8M_DRAM
> + select I2C_IMX_EARLY
> +
> config MACH_PHYTEC_SOM_IMX8MQ
> bool "Phytec i.MX8M SOM"
> select ARCH_IMX8MQ
> diff --git a/images/Makefile.imx b/images/Makefile.imx
> index 9e70ba50a162..bfb2fcdd8ede 100644
> --- a/images/Makefile.imx
> +++ b/images/Makefile.imx
> @@ -473,6 +473,11 @@ CFG_start_variscite_imx8mp_dart.pblb.imximg = $(board)/variscite-dt8mcustomboard
> FILE_barebox-variscite-imx8mp-dart-cb.img = start_variscite_imx8mp_dart.pblb.pimximg
> image-$(CONFIG_MACH_VARISCITE_DT8MCUSTOMBOARD_IMX8MP) += barebox-variscite-imx8mp-dart-cb.img
>
> +pblb-$(CONFIG_MACH_KB_ALPHAJET) += start_congatec_qx8p
> +CFG_start_kb_alphajet.pblb.imximg = $(board)/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
> +FILE_barebox-kb-alphajet.img = start_kb_alphajet.pblb.pimximg
> +image-$(CONFIG_MACH_KB_ALPHAJET) += barebox-kb-alphajet.img
> +
> # ----------------------- i.MX8mq based boards --------------------------
> pblb-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += start_nxp_imx8mq_evk
> CFG_start_nxp_imx8mq_evk.pblb.imximg = $(board)/nxp-imx8mq-evk/flash-header-imx8mq-evk.imxcfg
>
> ---
> base-commit: 64c528dd0bff0953192d90fbbc34b3d45d8116d0
> change-id: 20230601-koenigbauer-alphajet-upstreaming-2085dc8b9f77
>
> Best regards,
> --
> Johannes Zink <j.zink@pengutronix.de>
>
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 7:40 [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board Johannes Zink
2023-06-01 7:53 ` Marco Felsch
@ 2023-06-01 8:28 ` Sascha Hauer
2023-06-01 8:40 ` Marco Felsch
2023-06-01 8:41 ` Johannes Zink
2023-06-01 8:49 ` Ahmad Fatoum
2 siblings, 2 replies; 10+ messages in thread
From: Sascha Hauer @ 2023-06-01 8:28 UTC (permalink / raw)
To: Johannes Zink; +Cc: barebox, patchwork-jzi, Juergen Borleis
On Thu, Jun 01, 2023 at 09:40:29AM +0200, Johannes Zink wrote:
> Add basic support for Koenig+Bauer Alphajet, based on a Congatec QMX8MP
> SoM with a i.MX8MP SoC in the Industrial Temperature Grade 4GB Variant,
> no inline ECC used.
>
> Co-Developed-by: Juergen Borleis <j.borleis@pengutronix.de>
> Signed-off-by: Juergen Borleis <j.borleis@pengutronix.de>
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> ---
> Koenig+Bauer Alphajet is based on the Congatec QMX8MP, which is an
> i.MX8MP based SoC. Building barebox for this target requires the usual
> bl31 and lpddr4 training data in /firmware as described in [1].
>
> The Congatec SoM is strapped and fused to boot from QSPI NOR flash,
> which can easily be updated using the registered barebox update handler.
>
> [1] https://www.barebox.org/doc/latest/boards/imx/nxp-imx8mp-evk.html
>
> Best regards
> Johannes
> ---
> Bootlog:
>
> barebox 2023.05.0-00196-g24e000914af6-dirty #151 Thu Jun 1 09:36:02 CEST
> 2023
>
> Board: Koenig+Bauer Alphajet
> deep-probe: supported due to kb,alphajet
> detected i.MX8MP revision 1.1
> i.MX8MP unique ID: 3a13efb20002aaff
> netconsole: registered as netconsole-1
> psci psci.of: detected version 1.1
> imx-esdhc 30b40000.mmc@30b40000.of: registered as mmc0
> mmc0: detected SD card version 2.0
> mmc0: registered mmc0
> imx-esdhc 30b60000.mmc@30b60000.of: registered as mmc2
> mmc2: detected MMC card version 5.1
> mmc2: registered mmc2.boot0
> mmc2: registered mmc2.boot1
> mmc2: registered mmc2
> mdio_bus: miibus0: probed
> xHCI xHCI0: USB XHCI 1.10
> state: New state registered 'state'
> state: Using bucket 0@0x00000000
> malloc space: 0xbfcfbe80 -> 0xffcfbe7f (size 1 GiB)
> found force-builtin environment, using defaultenv
>
> Hit m for menu or any to stop autoboot: 3
> barebox@Koenig+Bauer Alphajet:/
>
> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
> ---
> arch/arm/boards/Makefile | 1 +
> arch/arm/boards/kb-imx8mp-alphajet/Makefile | 4 +
> arch/arm/boards/kb-imx8mp-alphajet/board.c | 60 +
> .../flash-header-imx8mp-cgtqx8p.imxcfg | 10 +
> arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c | 127 ++
> arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c | 1832 ++++++++++++++++++++
> arch/arm/dts/Makefile | 1 +
> arch/arm/dts/imx8mp-cgtqx8p.dtsi | 1060 +++++++++++
> arch/arm/dts/imx8mp-koenigbauer-alphajet.dts | 180 ++
> arch/arm/mach-imx/Kconfig | 10 +
> images/Makefile.imx | 5 +
> 11 files changed, 3290 insertions(+)
>
> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
> index 2877debad535..67b2fc07a395 100644
> --- a/arch/arm/boards/Makefile
> +++ b/arch/arm/boards/Makefile
> @@ -81,6 +81,7 @@ obj-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += nxp-imx8mq-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MM_EVK) += nxp-imx8mm-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MN_EVK) += nxp-imx8mn-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MP_EVK) += nxp-imx8mp-evk/
> +obj-$(CONFIG_MACH_KB_ALPHAJET) += kb-imx8mp-alphajet/
> obj-$(CONFIG_MACH_TQ_MBA8MPXL) += tqma8mpxl/
> obj-$(CONFIG_MACH_OMAP343xSDP) += omap343xdsp/
> obj-$(CONFIG_MACH_OMAP3EVM) += omap3evm/
> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/Makefile b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
> new file mode 100644
> index 000000000000..b3ae72be3e3b
> --- /dev/null
> +++ b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
> @@ -0,0 +1,4 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +
> +obj-y += board.o
> +lwl-y += lowlevel.o lpddr4-timing.o
> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/board.c b/arch/arm/boards/kb-imx8mp-alphajet/board.c
> new file mode 100644
> index 000000000000..78cc60e2c3b1
> --- /dev/null
> +++ b/arch/arm/boards/kb-imx8mp-alphajet/board.c
> @@ -0,0 +1,60 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// SPDX-FileCopyrightText: 2023 Juergen Borleis, Pengutronix
> +// SPDX-FileCopyrightText: 2023 Johannes Zink, Pengutronix
> +
> +#include <asm/memory.h>
> +#include <bootsource.h>
> +#include <common.h>
> +#include <deep-probe.h>
> +#include <init.h>
> +#include <linux/phy.h>
> +#include <linux/sizes.h>
> +#include <mach/imx/bbu.h>
> +#include <mach/imx/generic.h>
> +#include <mach/imx/iomux-mx8mp.h>
> +#include <gpio.h>
> +#include <envfs.h>
> +
> +#define EQOS_PWR_PIN IMX_GPIO_NR(1, 5) /* ENET_PWREN# */
> +static void setup_ethernet_phy(void)
> +{
> + u32 val;
> +
> + of_device_ensure_probed_by_alias("gpio0");
> +
> + if (gpio_direction_output(EQOS_PWR_PIN, 0))
> + {
> + pr_err("eqos phy power: failed to request pin\n");
> + return;
> + }
Should this be a fixed regulator in dt?
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 8:28 ` Sascha Hauer
@ 2023-06-01 8:40 ` Marco Felsch
2023-06-01 8:41 ` Johannes Zink
1 sibling, 0 replies; 10+ messages in thread
From: Marco Felsch @ 2023-06-01 8:40 UTC (permalink / raw)
To: Sascha Hauer; +Cc: Johannes Zink, barebox, patchwork-jzi, Juergen Borleis
Hi Sascha,
On 23-06-01, Sascha Hauer wrote:
> On Thu, Jun 01, 2023 at 09:40:29AM +0200, Johannes Zink wrote:
...
> > +#define EQOS_PWR_PIN IMX_GPIO_NR(1, 5) /* ENET_PWREN# */
> > +static void setup_ethernet_phy(void)
> > +{
> > + u32 val;
> > +
> > + of_device_ensure_probed_by_alias("gpio0");
> > +
> > + if (gpio_direction_output(EQOS_PWR_PIN, 0))
> > + {
> > + pr_err("eqos phy power: failed to request pin\n");
> > + return;
> > + }
>
> Should this be a fixed regulator in dt?
Sorry for stepping in here. I think the problem was that neither the
kernel nor the barebox EQOS driver support the regulator feature. But
you're right this should be the correct solution.
Regards,
Marco
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 8:28 ` Sascha Hauer
2023-06-01 8:40 ` Marco Felsch
@ 2023-06-01 8:41 ` Johannes Zink
2023-06-01 8:50 ` Ahmad Fatoum
1 sibling, 1 reply; 10+ messages in thread
From: Johannes Zink @ 2023-06-01 8:41 UTC (permalink / raw)
To: Sascha Hauer; +Cc: barebox, patchwork-jzi, Juergen Borleis
Hi Sascha,
thanks for your feedback.
On 6/1/23 10:28, Sascha Hauer wrote:
> On Thu, Jun 01, 2023 at 09:40:29AM +0200, Johannes Zink wrote:
>> Add basic support for Koenig+Bauer Alphajet, based on a Congatec QMX8MP
>> SoM with a i.MX8MP SoC in the Industrial Temperature Grade 4GB Variant,
>> no inline ECC used.
>>
>> Co-Developed-by: Juergen Borleis <j.borleis@pengutronix.de>
>> Signed-off-by: Juergen Borleis <j.borleis@pengutronix.de>
>> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
>> ---
>> Koenig+Bauer Alphajet is based on the Congatec QMX8MP, which is an
>> i.MX8MP based SoC. Building barebox for this target requires the usual
>> bl31 and lpddr4 training data in /firmware as described in [1].
>>
>> The Congatec SoM is strapped and fused to boot from QSPI NOR flash,
>> which can easily be updated using the registered barebox update handler.
>>
>> [1] https://www.barebox.org/doc/latest/boards/imx/nxp-imx8mp-evk.html
>>
>> Best regards
>> Johannes
>> ---
>> Bootlog:
>>
>> barebox 2023.05.0-00196-g24e000914af6-dirty #151 Thu Jun 1 09:36:02 CEST
>> 2023
>>
>> Board: Koenig+Bauer Alphajet
>> deep-probe: supported due to kb,alphajet
>> detected i.MX8MP revision 1.1
>> i.MX8MP unique ID: 3a13efb20002aaff
>> netconsole: registered as netconsole-1
>> psci psci.of: detected version 1.1
>> imx-esdhc 30b40000.mmc@30b40000.of: registered as mmc0
>> mmc0: detected SD card version 2.0
>> mmc0: registered mmc0
>> imx-esdhc 30b60000.mmc@30b60000.of: registered as mmc2
>> mmc2: detected MMC card version 5.1
>> mmc2: registered mmc2.boot0
>> mmc2: registered mmc2.boot1
>> mmc2: registered mmc2
>> mdio_bus: miibus0: probed
>> xHCI xHCI0: USB XHCI 1.10
>> state: New state registered 'state'
>> state: Using bucket 0@0x00000000
>> malloc space: 0xbfcfbe80 -> 0xffcfbe7f (size 1 GiB)
>> found force-builtin environment, using defaultenv
>>
>> Hit m for menu or any to stop autoboot: 3
>> barebox@Koenig+Bauer Alphajet:/
>>
>> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
>> ---
>> arch/arm/boards/Makefile | 1 +
>> arch/arm/boards/kb-imx8mp-alphajet/Makefile | 4 +
>> arch/arm/boards/kb-imx8mp-alphajet/board.c | 60 +
>> .../flash-header-imx8mp-cgtqx8p.imxcfg | 10 +
>> arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c | 127 ++
>> arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c | 1832 ++++++++++++++++++++
>> arch/arm/dts/Makefile | 1 +
>> arch/arm/dts/imx8mp-cgtqx8p.dtsi | 1060 +++++++++++
>> arch/arm/dts/imx8mp-koenigbauer-alphajet.dts | 180 ++
>> arch/arm/mach-imx/Kconfig | 10 +
>> images/Makefile.imx | 5 +
>> 11 files changed, 3290 insertions(+)
>>
>> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
>> index 2877debad535..67b2fc07a395 100644
>> --- a/arch/arm/boards/Makefile
>> +++ b/arch/arm/boards/Makefile
>> @@ -81,6 +81,7 @@ obj-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += nxp-imx8mq-evk/
>> obj-$(CONFIG_MACH_NXP_IMX8MM_EVK) += nxp-imx8mm-evk/
>> obj-$(CONFIG_MACH_NXP_IMX8MN_EVK) += nxp-imx8mn-evk/
>> obj-$(CONFIG_MACH_NXP_IMX8MP_EVK) += nxp-imx8mp-evk/
>> +obj-$(CONFIG_MACH_KB_ALPHAJET) += kb-imx8mp-alphajet/
>> obj-$(CONFIG_MACH_TQ_MBA8MPXL) += tqma8mpxl/
>> obj-$(CONFIG_MACH_OMAP343xSDP) += omap343xdsp/
>> obj-$(CONFIG_MACH_OMAP3EVM) += omap3evm/
>> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/Makefile b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
>> new file mode 100644
>> index 000000000000..b3ae72be3e3b
>> --- /dev/null
>> +++ b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
>> @@ -0,0 +1,4 @@
>> +# SPDX-License-Identifier: GPL-2.0+
>> +
>> +obj-y += board.o
>> +lwl-y += lowlevel.o lpddr4-timing.o
>> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/board.c b/arch/arm/boards/kb-imx8mp-alphajet/board.c
>> new file mode 100644
>> index 000000000000..78cc60e2c3b1
>> --- /dev/null
>> +++ b/arch/arm/boards/kb-imx8mp-alphajet/board.c
>> @@ -0,0 +1,60 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +// SPDX-FileCopyrightText: 2023 Juergen Borleis, Pengutronix
>> +// SPDX-FileCopyrightText: 2023 Johannes Zink, Pengutronix
>> +
>> +#include <asm/memory.h>
>> +#include <bootsource.h>
>> +#include <common.h>
>> +#include <deep-probe.h>
>> +#include <init.h>
>> +#include <linux/phy.h>
>> +#include <linux/sizes.h>
>> +#include <mach/imx/bbu.h>
>> +#include <mach/imx/generic.h>
>> +#include <mach/imx/iomux-mx8mp.h>
>> +#include <gpio.h>
>> +#include <envfs.h>
>> +
>> +#define EQOS_PWR_PIN IMX_GPIO_NR(1, 5) /* ENET_PWREN# */
>> +static void setup_ethernet_phy(void)
>> +{
>> + u32 val;
>> +
>> + of_device_ensure_probed_by_alias("gpio0");
>> +
>> + if (gpio_direction_output(EQOS_PWR_PIN, 0))
>> + {
>> + pr_err("eqos phy power: failed to request pin\n");
>> + return;
>> + }
>
> Should this be a fixed regulator in dt?
>
Phy regulator handling in linux is broken for the mx8 eqos, as the
phy-regulators are not handed down properly, which is why I cannot add it in
the linux upstream dts (dts upstreaming is still to be done...).
I decided to use a hog there. As Marco gave me a hint that hogs are currently
somewhat broken in barebox, I opted for setting the pin manually in the board code.
Johannes
> Sascha
>
>
--
Pengutronix e.K. | Johannes Zink |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686| Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 7:40 [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board Johannes Zink
2023-06-01 7:53 ` Marco Felsch
2023-06-01 8:28 ` Sascha Hauer
@ 2023-06-01 8:49 ` Ahmad Fatoum
2023-06-01 9:08 ` Johannes Zink
2 siblings, 1 reply; 10+ messages in thread
From: Ahmad Fatoum @ 2023-06-01 8:49 UTC (permalink / raw)
To: Johannes Zink, barebox; +Cc: patchwork-jzi, Juergen Borleis
Hello Johannes,
On 01.06.23 09:40, Johannes Zink wrote:
> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
> index 2877debad535..67b2fc07a395 100644
> --- a/arch/arm/boards/Makefile
> +++ b/arch/arm/boards/Makefile
> @@ -81,6 +81,7 @@ obj-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += nxp-imx8mq-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MM_EVK) += nxp-imx8mm-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MN_EVK) += nxp-imx8mn-evk/
> obj-$(CONFIG_MACH_NXP_IMX8MP_EVK) += nxp-imx8mp-evk/
> +obj-$(CONFIG_MACH_KB_ALPHAJET) += kb-imx8mp-alphajet/
Could you rename this after the SoM instead? This would make it easier
to share code. Alphajet specific stuff you can do by matching against
the alphajet compatible.
> +static int kb_alphajet_probe(struct device *dev)
> +{
> + setup_ethernet_phy();
> +
> + imx8m_bbu_internal_flexspi_nor_register_handler("QSPI", "/dev/m25p0.boot", BBU_HANDLER_FLAG_DEFAULT);
> +
> + return 0;
> +}
> +
> +static const struct of_device_id kb_alphajet_of_match[] = {
> + { .compatible = "kb,alphajet" },
Is anything of the above really alphajet specific? If both PHY and QSPI flash
are on SOM, you should match against SoM compatible here.
> + { /* Sentinel */ }
> +};
> +BAREBOX_DEEP_PROBE_ENABLE(kb_alphajet_of_match);
> +
> +static struct driver kb_alphajet_board_driver = {
> + .name = "board-kb-alphajet",
> + .probe = kb_alphajet_probe,
> + .of_compatible = kb_alphajet_of_match,
> +};
> +static void power_init_board(void)
> +{
> + struct pbl_i2c *i2c;
> +
> + imx8mp_setup_pad(MX8MP_PAD_I2C1_SCL__I2C1_SCL | I2C_PAD_CTRL);
> + imx8mp_setup_pad(MX8MP_PAD_I2C1_SDA__I2C1_SDA | I2C_PAD_CTRL);
> +
> + imx8mp_early_clock_init();
Move this above power_init_board(). See
https://lore.barebox.org/barebox/20230523095330.3475712-1-a.fatoum@pengutronix.de/
> + imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> +
> + i2c = imx8m_i2c_early_init(IOMEM(MX8MP_I2C1_BASE_ADDR));
> +
> + pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
> +}
> +
> +extern struct dram_timing_info dram_timing_4g;
> +
> +static void start_atf(void)
> +{
> + /*
> + * If we are in EL3 we are running for the first time and need to
> + * initialize the DRAM and run TF-A (BL31). The TF-A will then jump
> + * to DRAM in EL2.
> + */
> + if (current_el() != 3)
> + return;
> +
> + power_init_board();
> +
> + imx8mp_ddr_init(&dram_timing_4g, DRAM_TYPE_LPDDR4);
> +
> + imx8mp_load_and_start_image_via_tfa();
> +}
> +
> diff --git a/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts
> new file mode 100644
> index 000000000000..1b2e8272aad6
> --- /dev/null
> +++ b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts
You will have an easier time if you split this up into
imx8mp-koenigbauer-alphajet.dtsi
which is your kernel DT
and
imx8mp-koenigbauer-alphajet.dts
which just contains your barebox overrides.
> @@ -0,0 +1,180 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright 2023 Pengutronix, Johannes Zink <j.zink@pengutronix.de>
> + */
> +/dts-v1/;
> +
> +#include "imx8mp-cgtqx8p.dtsi"
> +
> +/ {
> + model = "Koenig+Bauer Alphajet";
> + compatible = "kb,alphajet", "cgt,qxp8p", "fsl,imx8mp";
Is 8p correct or should this be 8mp?
> +
> + aliases {
> + state = &state_emmc;
> + };
> +
> + chosen {
> + stdout-path = &uart1; // labeled UART0 on baseboard, on connector J12
> + environment-emmc {
> + compatible = "barebox,environment";
> + device-path = &env_emmc;
> + };
> + };
> +
> + display {
> + compatible = "innolux,g101ice-l01";
> + backlight = <&lvds0_backlight>;
> + power-supply = <®_lfp_vdd>;
> +
> + port {
> + panel_in_lvds0: endpoint {
> + remote-endpoint = <&ldb_lvds_ch0>;
> + };
> + };
> + };
> +
> + state_emmc: state {
> + compatible = "barebox,state";
> + magic = <0xabff4b1f>;
> + backend-type = "raw";
> + backend = <&backend_state_emmc>;
> + backend-storage-type="direct";
> + backend-stridesize = <0x40>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + bootstate {
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + system0 {
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + remaining_attempts@0 {
> + reg = <0x0 0x4>;
> + type = "uint32";
> + default = <2>;
> + };
> +
> + priority@4 {
> + reg = <0x4 0x4>;
> + type= "uint32";
> + default = <21>;
> + };
> + };
> +
> + system1 {
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + remaining_attempts@8 {
> + reg = <0x8 0x4>;
> + type = "uint32";
> + default = <2>;
> + };
> +
> + priority@c {
> + reg = <0xC 0x4>;
> + type= "uint32";
> + default = <20>;
> + };
> + };
> +
> + last_chosen@10 {
> + reg = <0x10 0x4>;
> + type = "uint32";
> + };
> +
> + };
> +
> + };
> +};
> +
> +&eqos { /* baseboard connects to on-SoM PHY */
> + status = "okay";
> +};
> +
> +&gpu2d {
> + status = "okay";
> +};
> +
> +&gpu3d {
> + status = "okay";
> +};
> +
> +&lcdif2 {
> + assigned-clock-rates = <0>, <995400000>; /* pin IMX8MP_VIDEO_PLL1 to provide bitclock needed by lvds panel */
> + status = "okay";
> +};
> +
> +&lvds0_backlight {
> + status = "okay";
> +};
> +
> +&lvds_bridge {
> + status = "okay";
> +
> + ports {
> + port@1 {
> + ldb_lvds_ch0: endpoint {
> + remote-endpoint = <&panel_in_lvds0>;
> + };
> + };
> + };
> +};
> +
> +&pcie {
> + status = "okay";
> +};
> +
> +&pcie_phy {
> + status = "okay";
> +};
> +
> +
> +&pwm2 { /* for PWM Backlight */
> + status = "okay";
> +};
> +
> +&uart1 { /* labeled UART0 on base board */
> + /delete-property/ uart-has-rtscts; //not connected on baseboard
> + status = "okay";
> +};
> +
> +&usb_dwc3_0 { /* Baseboard J13 Top Connector */
> + //fixme: overcurrent Pin is handled via TUSB8041 (which one?)
> + status = "okay";
> +};
> +
> +&usdhc1 { /* Baseboard J8 - uSD card slot */
> + status = "okay";
> + /delete-property/ cd-gpios; /* no CD is tied to GND on baseboard */
> + /delete-property/ wp-gpios; /* no WP is tied to GND on baseboard */
> + broken-cd; /* do not wait for CD interrupt */
> +};
> +
> +&usdhc2 { /* on-SoM micro-SD card slot is not used*/
> + status = "disabled";
> +};
> +
> +&usdhc3 { /* on-SoM emmc */
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + partition@0 {
> + label = "barebox";
> + reg = <0x0 0xe0000>;
> + };
> +
> + env_emmc: partition@e0000 {
> + label = "barebox-environment";
> + reg = <0xe0000 0x20000>;
> + };
> +
> + backend_state_emmc: partition@100000 {
> + label = "state";
> + reg = <0x100000 0x20000>;
> + };
> +};
> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
> index 4c93c1244a6a..058f0625addf 100644
> --- a/arch/arm/mach-imx/Kconfig
> +++ b/arch/arm/mach-imx/Kconfig
> @@ -653,6 +653,16 @@ config MACH_NXP_IMX8MQ_EVK
> select ARM_SMCCC
> select MCI_IMX_ESDHC_PBL
>
> +config MACH_KB_ALPHAJET
> + bool "Koenig+Bauer AlphaJet Board"
> + select ARCH_IMX8MP
> + select FIRMWARE_IMX_LPDDR4_PMU_TRAIN
> + select FIRMWARE_IMX8MP_ATF
> + select ARM_SMCCC
> + select MCI_IMX_ESDHC_PBL
> + select IMX8M_DRAM
> + select I2C_IMX_EARLY
We want to avoid future boards with Congatec modules needing to duplicate
code. Can you split this up:
config MACH_CONGATEC_QX8MP
bool "Koenig+Bauer AlphaJet Board"
select ARCH_IMX8MP
select FIRMWARE_IMX_LPDDR4_PMU_TRAIN
select FIRMWARE_IMX8MP_ATF
select ARM_SMCCC
select MCI_IMX_ESDHC_PBL
select IMX8M_DRAM
select I2C_IMX_EARLY
config MACH_KB_ALPHAJET
bool "Koenig+Bauer AlphaJet Board"
select MACH_CONGATEC_QX8MP
> +
> config MACH_PHYTEC_SOM_IMX8MQ
> bool "Phytec i.MX8M SOM"
> select ARCH_IMX8MQ
> diff --git a/images/Makefile.imx b/images/Makefile.imx
> index 9e70ba50a162..bfb2fcdd8ede 100644
> --- a/images/Makefile.imx
> +++ b/images/Makefile.imx
> @@ -473,6 +473,11 @@ CFG_start_variscite_imx8mp_dart.pblb.imximg = $(board)/variscite-dt8mcustomboard
> FILE_barebox-variscite-imx8mp-dart-cb.img = start_variscite_imx8mp_dart.pblb.pimximg
> image-$(CONFIG_MACH_VARISCITE_DT8MCUSTOMBOARD_IMX8MP) += barebox-variscite-imx8mp-dart-cb.img
>
> +pblb-$(CONFIG_MACH_KB_ALPHAJET) += start_congatec_qx8p
This is defined no where. Should this be qx8mp too?
> +CFG_start_kb_alphajet.pblb.imximg = $(board)/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
> +FILE_barebox-kb-alphajet.img = start_kb_alphajet.pblb.pimximg
> +image-$(CONFIG_MACH_KB_ALPHAJET) += barebox-kb-alphajet.img
> +
> # ----------------------- i.MX8mq based boards --------------------------
> pblb-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += start_nxp_imx8mq_evk
> CFG_start_nxp_imx8mq_evk.pblb.imximg = $(board)/nxp-imx8mq-evk/flash-header-imx8mq-evk.imxcfg
>
> ---
> base-commit: 64c528dd0bff0953192d90fbbc34b3d45d8116d0
> change-id: 20230601-koenigbauer-alphajet-upstreaming-2085dc8b9f77
>
> Best regards,
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 8:41 ` Johannes Zink
@ 2023-06-01 8:50 ` Ahmad Fatoum
0 siblings, 0 replies; 10+ messages in thread
From: Ahmad Fatoum @ 2023-06-01 8:50 UTC (permalink / raw)
To: Johannes Zink, Sascha Hauer; +Cc: barebox, patchwork-jzi, Juergen Borleis
On 01.06.23 10:41, Johannes Zink wrote:
> Hi Sascha,
>
> thanks for your feedback.
>
> On 6/1/23 10:28, Sascha Hauer wrote:
>> On Thu, Jun 01, 2023 at 09:40:29AM +0200, Johannes Zink wrote:
>>> Add basic support for Koenig+Bauer Alphajet, based on a Congatec QMX8MP
>>> SoM with a i.MX8MP SoC in the Industrial Temperature Grade 4GB Variant,
>>> no inline ECC used.
>>>
>>> Co-Developed-by: Juergen Borleis <j.borleis@pengutronix.de>
>>> Signed-off-by: Juergen Borleis <j.borleis@pengutronix.de>
>>> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
>>> ---
>>> Koenig+Bauer Alphajet is based on the Congatec QMX8MP, which is an
>>> i.MX8MP based SoC. Building barebox for this target requires the usual
>>> bl31 and lpddr4 training data in /firmware as described in [1].
>>>
>>> The Congatec SoM is strapped and fused to boot from QSPI NOR flash,
>>> which can easily be updated using the registered barebox update handler.
>>>
>>> [1] https://www.barebox.org/doc/latest/boards/imx/nxp-imx8mp-evk.html
>>>
>>> Best regards
>>> Johannes
>>> ---
>>> Bootlog:
>>>
>>> barebox 2023.05.0-00196-g24e000914af6-dirty #151 Thu Jun 1 09:36:02 CEST
>>> 2023
>>>
>>> Board: Koenig+Bauer Alphajet
>>> deep-probe: supported due to kb,alphajet
>>> detected i.MX8MP revision 1.1
>>> i.MX8MP unique ID: 3a13efb20002aaff
>>> netconsole: registered as netconsole-1
>>> psci psci.of: detected version 1.1
>>> imx-esdhc 30b40000.mmc@30b40000.of: registered as mmc0
>>> mmc0: detected SD card version 2.0
>>> mmc0: registered mmc0
>>> imx-esdhc 30b60000.mmc@30b60000.of: registered as mmc2
>>> mmc2: detected MMC card version 5.1
>>> mmc2: registered mmc2.boot0
>>> mmc2: registered mmc2.boot1
>>> mmc2: registered mmc2
>>> mdio_bus: miibus0: probed
>>> xHCI xHCI0: USB XHCI 1.10
>>> state: New state registered 'state'
>>> state: Using bucket 0@0x00000000
>>> malloc space: 0xbfcfbe80 -> 0xffcfbe7f (size 1 GiB)
>>> found force-builtin environment, using defaultenv
>>>
>>> Hit m for menu or any to stop autoboot: 3
>>> barebox@Koenig+Bauer Alphajet:/
>>>
>>> Signed-off-by: Johannes Zink <j.zink@pengutronix.de>
>>> ---
>>> arch/arm/boards/Makefile | 1 +
>>> arch/arm/boards/kb-imx8mp-alphajet/Makefile | 4 +
>>> arch/arm/boards/kb-imx8mp-alphajet/board.c | 60 +
>>> .../flash-header-imx8mp-cgtqx8p.imxcfg | 10 +
>>> arch/arm/boards/kb-imx8mp-alphajet/lowlevel.c | 127 ++
>>> arch/arm/boards/kb-imx8mp-alphajet/lpddr4-timing.c | 1832 ++++++++++++++++++++
>>> arch/arm/dts/Makefile | 1 +
>>> arch/arm/dts/imx8mp-cgtqx8p.dtsi | 1060 +++++++++++
>>> arch/arm/dts/imx8mp-koenigbauer-alphajet.dts | 180 ++
>>> arch/arm/mach-imx/Kconfig | 10 +
>>> images/Makefile.imx | 5 +
>>> 11 files changed, 3290 insertions(+)
>>>
>>> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
>>> index 2877debad535..67b2fc07a395 100644
>>> --- a/arch/arm/boards/Makefile
>>> +++ b/arch/arm/boards/Makefile
>>> @@ -81,6 +81,7 @@ obj-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += nxp-imx8mq-evk/
>>> obj-$(CONFIG_MACH_NXP_IMX8MM_EVK) += nxp-imx8mm-evk/
>>> obj-$(CONFIG_MACH_NXP_IMX8MN_EVK) += nxp-imx8mn-evk/
>>> obj-$(CONFIG_MACH_NXP_IMX8MP_EVK) += nxp-imx8mp-evk/
>>> +obj-$(CONFIG_MACH_KB_ALPHAJET) += kb-imx8mp-alphajet/
>>> obj-$(CONFIG_MACH_TQ_MBA8MPXL) += tqma8mpxl/
>>> obj-$(CONFIG_MACH_OMAP343xSDP) += omap343xdsp/
>>> obj-$(CONFIG_MACH_OMAP3EVM) += omap3evm/
>>> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/Makefile b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
>>> new file mode 100644
>>> index 000000000000..b3ae72be3e3b
>>> --- /dev/null
>>> +++ b/arch/arm/boards/kb-imx8mp-alphajet/Makefile
>>> @@ -0,0 +1,4 @@
>>> +# SPDX-License-Identifier: GPL-2.0+
>>> +
>>> +obj-y += board.o
>>> +lwl-y += lowlevel.o lpddr4-timing.o
>>> diff --git a/arch/arm/boards/kb-imx8mp-alphajet/board.c b/arch/arm/boards/kb-imx8mp-alphajet/board.c
>>> new file mode 100644
>>> index 000000000000..78cc60e2c3b1
>>> --- /dev/null
>>> +++ b/arch/arm/boards/kb-imx8mp-alphajet/board.c
>>> @@ -0,0 +1,60 @@
>>> +// SPDX-License-Identifier: GPL-2.0
>>> +// SPDX-FileCopyrightText: 2023 Juergen Borleis, Pengutronix
>>> +// SPDX-FileCopyrightText: 2023 Johannes Zink, Pengutronix
>>> +
>>> +#include <asm/memory.h>
>>> +#include <bootsource.h>
>>> +#include <common.h>
>>> +#include <deep-probe.h>
>>> +#include <init.h>
>>> +#include <linux/phy.h>
>>> +#include <linux/sizes.h>
>>> +#include <mach/imx/bbu.h>
>>> +#include <mach/imx/generic.h>
>>> +#include <mach/imx/iomux-mx8mp.h>
>>> +#include <gpio.h>
>>> +#include <envfs.h>
>>> +
>>> +#define EQOS_PWR_PIN IMX_GPIO_NR(1, 5) /* ENET_PWREN# */
>>> +static void setup_ethernet_phy(void)
>>> +{
>>> + u32 val;
>>> +
>>> + of_device_ensure_probed_by_alias("gpio0");
>>> +
>>> + if (gpio_direction_output(EQOS_PWR_PIN, 0))
>>> + {
>>> + pr_err("eqos phy power: failed to request pin\n");
>>> + return;
>>> + }
>>
>> Should this be a fixed regulator in dt?
>>
>
> Phy regulator handling in linux is broken for the mx8 eqos, as the phy-regulators are not handed down properly, which is why I cannot add it in the linux upstream dts (dts upstreaming is still to be done...).
>
> I decided to use a hog there. As Marco gave me a hint that hogs are currently somewhat broken in barebox, I opted for setting the pin manually in the board code.
Hogs are broken? Do you care to write a bug report? :)
Thanks,
Ahmad
>
> Johannes
>
>> Sascha
>>
>>
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 8:49 ` Ahmad Fatoum
@ 2023-06-01 9:08 ` Johannes Zink
2023-06-01 9:14 ` Ahmad Fatoum
0 siblings, 1 reply; 10+ messages in thread
From: Johannes Zink @ 2023-06-01 9:08 UTC (permalink / raw)
To: Ahmad Fatoum, barebox; +Cc: patchwork-jzi, Juergen Borleis
Hi Ahmad,
thank you for your review.
On 6/1/23 10:49, Ahmad Fatoum wrote:
> Hello Johannes,
>
> On 01.06.23 09:40, Johannes Zink wrote:
>> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
>> index 2877debad535..67b2fc07a395 100644
>> --- a/arch/arm/boards/Makefile
>> +++ b/arch/arm/boards/Makefile
>> @@ -81,6 +81,7 @@ obj-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += nxp-imx8mq-evk/
>> obj-$(CONFIG_MACH_NXP_IMX8MM_EVK) += nxp-imx8mm-evk/
>> obj-$(CONFIG_MACH_NXP_IMX8MN_EVK) += nxp-imx8mn-evk/
>> obj-$(CONFIG_MACH_NXP_IMX8MP_EVK) += nxp-imx8mp-evk/
>> +obj-$(CONFIG_MACH_KB_ALPHAJET) += kb-imx8mp-alphajet/
>
> Could you rename this after the SoM instead? This would make it easier
> to share code. Alphajet specific stuff you can do by matching against
> the alphajet compatible.
Yes, I will do this for v2.
>
>> +static int kb_alphajet_probe(struct device *dev)
>> +{
>> + setup_ethernet_phy();
>> +
>> + imx8m_bbu_internal_flexspi_nor_register_handler("QSPI", "/dev/m25p0.boot", BBU_HANDLER_FLAG_DEFAULT);
>> +
>> + return 0;
>> +}
>> +
>> +static const struct of_device_id kb_alphajet_of_match[] = {
>> + { .compatible = "kb,alphajet" },
>
> Is anything of the above really alphajet specific? If both PHY and QSPI flash
> are on SOM, you should match against SoM compatible here.
No, the above can be moved to a generic SoM part. I assume though, that stuff
will not work properly (TM) as long as the individual boards don't enable deep
probe support (at least it did not work for my machine), though I think this
should be kept in the baseboard-specific part, right?
>
>> + { /* Sentinel */ }
>> +};
>> +BAREBOX_DEEP_PROBE_ENABLE(kb_alphajet_of_match);
>> +
>> +static struct driver kb_alphajet_board_driver = {
>> + .name = "board-kb-alphajet",
>> + .probe = kb_alphajet_probe,
>> + .of_compatible = kb_alphajet_of_match,
>> +};
>
>> +static void power_init_board(void)
>> +{
>> + struct pbl_i2c *i2c;
>> +
>> + imx8mp_setup_pad(MX8MP_PAD_I2C1_SCL__I2C1_SCL | I2C_PAD_CTRL);
>> + imx8mp_setup_pad(MX8MP_PAD_I2C1_SDA__I2C1_SDA | I2C_PAD_CTRL);
>> +
>> + imx8mp_early_clock_init();
>
> Move this above power_init_board(). See
>
> https://lore.barebox.org/barebox/20230523095330.3475712-1-a.fatoum@pengutronix.de/
>
ACK, gonna do that in v2
>> + imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
>> +
>> + i2c = imx8m_i2c_early_init(IOMEM(MX8MP_I2C1_BASE_ADDR));
>> +
>> + pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
>> +}
>> +
>> +extern struct dram_timing_info dram_timing_4g;
>> +
>> +static void start_atf(void)
>> +{
>> + /*
>> + * If we are in EL3 we are running for the first time and need to
>> + * initialize the DRAM and run TF-A (BL31). The TF-A will then jump
>> + * to DRAM in EL2.
>> + */
>> + if (current_el() != 3)
>> + return;
>> +
>> + power_init_board();
>> +
>> + imx8mp_ddr_init(&dram_timing_4g, DRAM_TYPE_LPDDR4);
>> +
>> + imx8mp_load_and_start_image_via_tfa();
>> +}
>> +
>
>> diff --git a/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts
>> new file mode 100644
>> index 000000000000..1b2e8272aad6
>> --- /dev/null
>> +++ b/arch/arm/dts/imx8mp-koenigbauer-alphajet.dts
>
> You will have an easier time if you split this up into
>
> imx8mp-koenigbauer-alphajet.dtsi
>
> which is your kernel DT
>
> and
>
> imx8mp-koenigbauer-alphajet.dts
>
> which just contains your barebox overrides.
ACK, gonna refactor this for v2.
>
>> @@ -0,0 +1,180 @@
>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>> +/*
>> + * Copyright 2023 Pengutronix, Johannes Zink <j.zink@pengutronix.de>
>> + */
>> +/dts-v1/;
>> +
>> +#include "imx8mp-cgtqx8p.dtsi"
>> +
>> +/ {
>> + model = "Koenig+Bauer Alphajet";
>> + compatible = "kb,alphajet", "cgt,qxp8p", "fsl,imx8mp";
>
>
> Is 8p correct or should this be 8mp?
>
good catch, the SoM's name is conga-QMX8-Plus, gonna change the compatible to
cgt,qmx8p
>> +
>> + aliases {
>> + state = &state_emmc;
>> + };
>> +
>> + chosen {
>> + stdout-path = &uart1; // labeled UART0 on baseboard, on connector J12
>> + environment-emmc {
>> + compatible = "barebox,environment";
>> + device-path = &env_emmc;
>> + };
>> + };
>> +
>> + display {
>> + compatible = "innolux,g101ice-l01";
>> + backlight = <&lvds0_backlight>;
>> + power-supply = <®_lfp_vdd>;
>> +
>> + port {
>> + panel_in_lvds0: endpoint {
>> + remote-endpoint = <&ldb_lvds_ch0>;
>> + };
>> + };
>> + };
>> +
>> + state_emmc: state {
>> + compatible = "barebox,state";
>> + magic = <0xabff4b1f>;
>> + backend-type = "raw";
>> + backend = <&backend_state_emmc>;
>> + backend-storage-type="direct";
>> + backend-stridesize = <0x40>;
>> + #address-cells = <1>;
>> + #size-cells = <1>;
>> +
>> + bootstate {
>> + #address-cells = <1>;
>> + #size-cells = <1>;
>> +
>> + system0 {
>> + #address-cells = <1>;
>> + #size-cells = <1>;
>> +
>> + remaining_attempts@0 {
>> + reg = <0x0 0x4>;
>> + type = "uint32";
>> + default = <2>;
>> + };
>> +
>> + priority@4 {
>> + reg = <0x4 0x4>;
>> + type= "uint32";
>> + default = <21>;
>> + };
>> + };
>> +
>> + system1 {
>> + #address-cells = <1>;
>> + #size-cells = <1>;
>> +
>> + remaining_attempts@8 {
>> + reg = <0x8 0x4>;
>> + type = "uint32";
>> + default = <2>;
>> + };
>> +
>> + priority@c {
>> + reg = <0xC 0x4>;
>> + type= "uint32";
>> + default = <20>;
>> + };
>> + };
>> +
>> + last_chosen@10 {
>> + reg = <0x10 0x4>;
>> + type = "uint32";
>> + };
>> +
>> + };
>> +
>> + };
>> +};
>> +
>> +&eqos { /* baseboard connects to on-SoM PHY */
>> + status = "okay";
>> +};
>> +
>> +&gpu2d {
>> + status = "okay";
>> +};
>> +
>> +&gpu3d {
>> + status = "okay";
>> +};
>> +
>> +&lcdif2 {
>> + assigned-clock-rates = <0>, <995400000>; /* pin IMX8MP_VIDEO_PLL1 to provide bitclock needed by lvds panel */
>> + status = "okay";
>> +};
>> +
>> +&lvds0_backlight {
>> + status = "okay";
>> +};
>> +
>> +&lvds_bridge {
>> + status = "okay";
>> +
>> + ports {
>> + port@1 {
>> + ldb_lvds_ch0: endpoint {
>> + remote-endpoint = <&panel_in_lvds0>;
>> + };
>> + };
>> + };
>> +};
>> +
>> +&pcie {
>> + status = "okay";
>> +};
>> +
>> +&pcie_phy {
>> + status = "okay";
>> +};
>> +
>> +
>> +&pwm2 { /* for PWM Backlight */
>> + status = "okay";
>> +};
>> +
>> +&uart1 { /* labeled UART0 on base board */
>> + /delete-property/ uart-has-rtscts; //not connected on baseboard
>> + status = "okay";
>> +};
>> +
>> +&usb_dwc3_0 { /* Baseboard J13 Top Connector */
>> + //fixme: overcurrent Pin is handled via TUSB8041 (which one?)
>> + status = "okay";
>> +};
>> +
>> +&usdhc1 { /* Baseboard J8 - uSD card slot */
>> + status = "okay";
>> + /delete-property/ cd-gpios; /* no CD is tied to GND on baseboard */
>> + /delete-property/ wp-gpios; /* no WP is tied to GND on baseboard */
>> + broken-cd; /* do not wait for CD interrupt */
>> +};
>> +
>> +&usdhc2 { /* on-SoM micro-SD card slot is not used*/
>> + status = "disabled";
>> +};
>> +
>> +&usdhc3 { /* on-SoM emmc */
>> + #address-cells = <1>;
>> + #size-cells = <1>;
>> +
>> + partition@0 {
>> + label = "barebox";
>> + reg = <0x0 0xe0000>;
>> + };
>> +
>> + env_emmc: partition@e0000 {
>> + label = "barebox-environment";
>> + reg = <0xe0000 0x20000>;
>> + };
>> +
>> + backend_state_emmc: partition@100000 {
>> + label = "state";
>> + reg = <0x100000 0x20000>;
>> + };
>> +};
>> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
>> index 4c93c1244a6a..058f0625addf 100644
>> --- a/arch/arm/mach-imx/Kconfig
>> +++ b/arch/arm/mach-imx/Kconfig
>> @@ -653,6 +653,16 @@ config MACH_NXP_IMX8MQ_EVK
>> select ARM_SMCCC
>> select MCI_IMX_ESDHC_PBL
>>
>> +config MACH_KB_ALPHAJET
>> + bool "Koenig+Bauer AlphaJet Board"
>> + select ARCH_IMX8MP
>> + select FIRMWARE_IMX_LPDDR4_PMU_TRAIN
>> + select FIRMWARE_IMX8MP_ATF
>> + select ARM_SMCCC
>> + select MCI_IMX_ESDHC_PBL
>> + select IMX8M_DRAM
>> + select I2C_IMX_EARLY
>
> We want to avoid future boards with Congatec modules needing to duplicate
> code. Can you split this up:
>
> config MACH_CONGATEC_QX8MP
> bool "Koenig+Bauer AlphaJet Board"
I guess this should probably be
bool "Congatec conga-QMX8-Plus"
then?
> select ARCH_IMX8MP
> select FIRMWARE_IMX_LPDDR4_PMU_TRAIN
> select FIRMWARE_IMX8MP_ATF
> select ARM_SMCCC
> select MCI_IMX_ESDHC_PBL
> select IMX8M_DRAM
> select I2C_IMX_EARLY
>
> config MACH_KB_ALPHAJET
> bool "Koenig+Bauer AlphaJet Board"
> select MACH_CONGATEC_QX8MP
>
ack.
>> +
>> config MACH_PHYTEC_SOM_IMX8MQ
>> bool "Phytec i.MX8M SOM"
>> select ARCH_IMX8MQ
>> diff --git a/images/Makefile.imx b/images/Makefile.imx
>> index 9e70ba50a162..bfb2fcdd8ede 100644
>> --- a/images/Makefile.imx
>> +++ b/images/Makefile.imx
>> @@ -473,6 +473,11 @@ CFG_start_variscite_imx8mp_dart.pblb.imximg = $(board)/variscite-dt8mcustomboard
>> FILE_barebox-variscite-imx8mp-dart-cb.img = start_variscite_imx8mp_dart.pblb.pimximg
>> image-$(CONFIG_MACH_VARISCITE_DT8MCUSTOMBOARD_IMX8MP) += barebox-variscite-imx8mp-dart-cb.img
>>
>> +pblb-$(CONFIG_MACH_KB_ALPHAJET) += start_congatec_qx8p
>
> This is defined no where. Should this be qx8mp too?
>
>> +CFG_start_kb_alphajet.pblb.imximg = $(board)/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
>> +FILE_barebox-kb-alphajet.img = start_kb_alphajet.pblb.pimximg
>> +image-$(CONFIG_MACH_KB_ALPHAJET) += barebox-kb-alphajet.img
>> +
>> # ----------------------- i.MX8mq based boards --------------------------
>> pblb-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += start_nxp_imx8mq_evk
>> CFG_start_nxp_imx8mq_evk.pblb.imximg = $(board)/nxp-imx8mq-evk/flash-header-imx8mq-evk.imxcfg
>>
>> ---
>> base-commit: 64c528dd0bff0953192d90fbbc34b3d45d8116d0
>> change-id: 20230601-koenigbauer-alphajet-upstreaming-2085dc8b9f77
>>
>> Best regards,
>
Best regards
Johannes
--
Pengutronix e.K. | Johannes Zink |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686| Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 9:08 ` Johannes Zink
@ 2023-06-01 9:14 ` Ahmad Fatoum
2023-06-01 9:20 ` Johannes Zink
0 siblings, 1 reply; 10+ messages in thread
From: Ahmad Fatoum @ 2023-06-01 9:14 UTC (permalink / raw)
To: Johannes Zink, barebox; +Cc: patchwork-jzi, Juergen Borleis
On 01.06.23 11:08, Johannes Zink wrote:
> On 6/1/23 10:49, Ahmad Fatoum wrote:
>> On 01.06.23 09:40, Johannes Zink wrote:
>>> +static const struct of_device_id kb_alphajet_of_match[] = {
>>> + { .compatible = "kb,alphajet" },
>>
>> Is anything of the above really alphajet specific? If both PHY and QSPI flash
>> are on SOM, you should match against SoM compatible here.
>
> No, the above can be moved to a generic SoM part. I assume though, that stuff will not work properly (TM) as long as the individual boards don't enable deep probe support (at least it did not work for my machine), though I think this should be kept in the baseboard-specific part, right?
I'd just enable deep probe for the SoM compatible. If someone else's
baseboard support clashes with deep probe, they should fix that.
>> We want to avoid future boards with Congatec modules needing to duplicate
>> code. Can you split this up:
>>
>> config MACH_CONGATEC_QX8MP
>> bool "Koenig+Bauer AlphaJet Board"
>
> I guess this should probably be
> bool "Congatec conga-QMX8-Plus"
> then?
Just drop the prompt altogether and add _SOM at the end of the
config symbol. If we ever add the Congatec baseboard, it would
just select the SoM, but there's no reason to be able to select
the SoM from menuconfig without a board.
>
>> select ARCH_IMX8MP
>> select FIRMWARE_IMX_LPDDR4_PMU_TRAIN
>> select FIRMWARE_IMX8MP_ATF
>> select ARM_SMCCC
>> select MCI_IMX_ESDHC_PBL
>> select IMX8M_DRAM
>> select I2C_IMX_EARLY
>>
>> config MACH_KB_ALPHAJET
>> bool "Koenig+Bauer AlphaJet Board"
>> select MACH_CONGATEC_QX8MP
>>
>
> ack.
>
>>> +
>>> config MACH_PHYTEC_SOM_IMX8MQ
>>> bool "Phytec i.MX8M SOM"
>>> select ARCH_IMX8MQ
>>> diff --git a/images/Makefile.imx b/images/Makefile.imx
>>> index 9e70ba50a162..bfb2fcdd8ede 100644
>>> --- a/images/Makefile.imx
>>> +++ b/images/Makefile.imx
>>> @@ -473,6 +473,11 @@ CFG_start_variscite_imx8mp_dart.pblb.imximg = $(board)/variscite-dt8mcustomboard
>>> FILE_barebox-variscite-imx8mp-dart-cb.img = start_variscite_imx8mp_dart.pblb.pimximg
>>> image-$(CONFIG_MACH_VARISCITE_DT8MCUSTOMBOARD_IMX8MP) += barebox-variscite-imx8mp-dart-cb.img
>>> +pblb-$(CONFIG_MACH_KB_ALPHAJET) += start_congatec_qx8p
>>
>> This is defined no where. Should this be qx8mp too?
Also, you should add the board to arch/arm/configs/{multi_v8_defconfig,imx_v8_defconfig}
>>
>>> +CFG_start_kb_alphajet.pblb.imximg = $(board)/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
>>> +FILE_barebox-kb-alphajet.img = start_kb_alphajet.pblb.pimximg
>>> +image-$(CONFIG_MACH_KB_ALPHAJET) += barebox-kb-alphajet.img
>>> +
>>> # ----------------------- i.MX8mq based boards --------------------------
>>> pblb-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += start_nxp_imx8mq_evk
>>> CFG_start_nxp_imx8mq_evk.pblb.imximg = $(board)/nxp-imx8mq-evk/flash-header-imx8mq-evk.imxcfg
>>>
>>> ---
>>> base-commit: 64c528dd0bff0953192d90fbbc34b3d45d8116d0
>>> change-id: 20230601-koenigbauer-alphajet-upstreaming-2085dc8b9f77
>>>
>>> Best regards,
>>
>
> Best regards
> Johannes
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board
2023-06-01 9:14 ` Ahmad Fatoum
@ 2023-06-01 9:20 ` Johannes Zink
0 siblings, 0 replies; 10+ messages in thread
From: Johannes Zink @ 2023-06-01 9:20 UTC (permalink / raw)
To: Ahmad Fatoum, barebox; +Cc: patchwork-jzi, Juergen Borleis
On 6/1/23 11:14, Ahmad Fatoum wrote:
> On 01.06.23 11:08, Johannes Zink wrote:
>> On 6/1/23 10:49, Ahmad Fatoum wrote:
>>> On 01.06.23 09:40, Johannes Zink wrote:
>>>> +static const struct of_device_id kb_alphajet_of_match[] = {
>>>> + { .compatible = "kb,alphajet" },
>>>
>>> Is anything of the above really alphajet specific? If both PHY and QSPI flash
>>> are on SOM, you should match against SoM compatible here.
>>
>> No, the above can be moved to a generic SoM part. I assume though, that stuff will not work properly (TM) as long as the individual boards don't enable deep probe support (at least it did not work for my machine), though I think this should be kept in the baseboard-specific part, right?
>
> I'd just enable deep probe for the SoM compatible. If someone else's
> baseboard support clashes with deep probe, they should fix that.
>
sounds good to me.
>>> We want to avoid future boards with Congatec modules needing to duplicate
>>> code. Can you split this up:
>>>
>>> config MACH_CONGATEC_QX8MP
>>> bool "Koenig+Bauer AlphaJet Board"
>>
>> I guess this should probably be
>> bool "Congatec conga-QMX8-Plus"
>> then?
>
> Just drop the prompt altogether and add _SOM at the end of the
> config symbol. If we ever add the Congatec baseboard, it would
> just select the SoM, but there's no reason to be able to select
> the SoM from menuconfig without a board.
ack.
>
>>
>>> select ARCH_IMX8MP
>>> select FIRMWARE_IMX_LPDDR4_PMU_TRAIN
>>> select FIRMWARE_IMX8MP_ATF
>>> select ARM_SMCCC
>>> select MCI_IMX_ESDHC_PBL
>>> select IMX8M_DRAM
>>> select I2C_IMX_EARLY
>>>
>>> config MACH_KB_ALPHAJET
>>> bool "Koenig+Bauer AlphaJet Board"
>>> select MACH_CONGATEC_QX8MP
>>>
>>
>> ack.
>>
>>>> +
>>>> config MACH_PHYTEC_SOM_IMX8MQ
>>>> bool "Phytec i.MX8M SOM"
>>>> select ARCH_IMX8MQ
>>>> diff --git a/images/Makefile.imx b/images/Makefile.imx
>>>> index 9e70ba50a162..bfb2fcdd8ede 100644
>>>> --- a/images/Makefile.imx
>>>> +++ b/images/Makefile.imx
>>>> @@ -473,6 +473,11 @@ CFG_start_variscite_imx8mp_dart.pblb.imximg = $(board)/variscite-dt8mcustomboard
>>>> FILE_barebox-variscite-imx8mp-dart-cb.img = start_variscite_imx8mp_dart.pblb.pimximg
>>>> image-$(CONFIG_MACH_VARISCITE_DT8MCUSTOMBOARD_IMX8MP) += barebox-variscite-imx8mp-dart-cb.img
>>>> +pblb-$(CONFIG_MACH_KB_ALPHAJET) += start_congatec_qx8p
>>>
>>> This is defined no where. Should this be qx8mp too?
I have to look into this, this _might_ be an old remainder I overlooked when I
cleaned up my patch(es).
>
> Also, you should add the board to arch/arm/configs/{multi_v8_defconfig,imx_v8_defconfig}
>
ack
>>>
>>>> +CFG_start_kb_alphajet.pblb.imximg = $(board)/kb-imx8mp-alphajet/flash-header-imx8mp-cgtqx8p.imxcfg
>>>> +FILE_barebox-kb-alphajet.img = start_kb_alphajet.pblb.pimximg
>>>> +image-$(CONFIG_MACH_KB_ALPHAJET) += barebox-kb-alphajet.img
>>>> +
>>>> # ----------------------- i.MX8mq based boards --------------------------
>>>> pblb-$(CONFIG_MACH_NXP_IMX8MQ_EVK) += start_nxp_imx8mq_evk
>>>> CFG_start_nxp_imx8mq_evk.pblb.imximg = $(board)/nxp-imx8mq-evk/flash-header-imx8mq-evk.imxcfg
>>>>
>>>> ---
>>>> base-commit: 64c528dd0bff0953192d90fbbc34b3d45d8116d0
>>>> change-id: 20230601-koenigbauer-alphajet-upstreaming-2085dc8b9f77
>>>>
>>>> Best regards,
>>>
>>
>> Best regards
>> Johannes
>>
>
--
Pengutronix e.K. | Johannes Zink |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686| Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-06-01 9:22 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-01 7:40 [PATCH] ARM: i.MX8MP: add Koenig+Bauer Alphajet board Johannes Zink
2023-06-01 7:53 ` Marco Felsch
2023-06-01 8:28 ` Sascha Hauer
2023-06-01 8:40 ` Marco Felsch
2023-06-01 8:41 ` Johannes Zink
2023-06-01 8:50 ` Ahmad Fatoum
2023-06-01 8:49 ` Ahmad Fatoum
2023-06-01 9:08 ` Johannes Zink
2023-06-01 9:14 ` Ahmad Fatoum
2023-06-01 9:20 ` Johannes Zink
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox