Created
June 14, 2024 14:03
-
-
Save nickfox-taterli/0ce249000c4e2dd2787a05eba667308c to your computer and use it in GitHub Desktop.
0001-Add-TaterLi-Custom-Patch-RIoTBoard.diff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/arch/arm/dts/imx6dl-riotboard.dts b/arch/arm/dts/imx6dl-riotboard.dts | |
index e7d9bfbfd0e..e09dc6e410f 100644 | |
--- a/arch/arm/dts/imx6dl-riotboard.dts | |
+++ b/arch/arm/dts/imx6dl-riotboard.dts | |
@@ -176,7 +176,7 @@ | |
VDDIO-supply = <®_3p3v>; | |
}; | |
- pmic: pf0100@8 { | |
+ pmic: pfuze100@8 { | |
compatible = "fsl,pfuze100"; | |
reg = <0x08>; | |
interrupt-parent = <&gpio5>; | |
diff --git a/arch/arm/lib/reset.c b/arch/arm/lib/reset.c | |
index 3e051e36f12..faa41e7b213 100644 | |
--- a/arch/arm/lib/reset.c | |
+++ b/arch/arm/lib/reset.c | |
@@ -31,6 +31,10 @@ __weak void reset_misc(void) | |
{ | |
} | |
+__weak void reset_cpu(void) | |
+{ | |
+} | |
+ | |
int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) | |
{ | |
puts ("resetting ...\n"); | |
diff --git a/arch/arm/mach-imx/mx6/Kconfig b/arch/arm/mach-imx/mx6/Kconfig | |
index a7a04350600..163fd68a13e 100644 | |
--- a/arch/arm/mach-imx/mx6/Kconfig | |
+++ b/arch/arm/mach-imx/mx6/Kconfig | |
@@ -465,6 +465,10 @@ config TARGET_MX6SOLOSABRESD | |
select TARGET_MX6SABRESD_COMMON | |
depends on MX6S | |
+config TARGET_RIOTBOARD | |
+ bool "riotboard" | |
+ depends on MX6S | |
+ | |
config TARGET_MX6SLEVK | |
bool "mx6slevk" | |
depends on MX6SL | |
@@ -863,6 +867,7 @@ source "board/engicam/imx6ul/Kconfig" | |
source "board/freescale/mx6memcal/Kconfig" | |
source "board/freescale/mx6sabreauto/Kconfig" | |
source "board/freescale/mx6sabresd/Kconfig" | |
+source "board/freescale/riotboard/Kconfig" | |
source "board/freescale/mx6slevk/Kconfig" | |
source "board/freescale/mx6sll_val/Kconfig" | |
source "board/freescale/mx6sllevk/Kconfig" | |
diff --git a/board/freescale/riotboard/Kconfig b/board/freescale/riotboard/Kconfig | |
new file mode 100644 | |
index 00000000000..58a41058937 | |
--- /dev/null | |
+++ b/board/freescale/riotboard/Kconfig | |
@@ -0,0 +1,15 @@ | |
+if TARGET_RIOTBOARD | |
+ | |
+config SYS_BOARD | |
+ default "riotboard" | |
+ | |
+config SYS_VENDOR | |
+ default "freescale" | |
+ | |
+config SYS_CONFIG_NAME | |
+ default "riotboard" | |
+ | |
+config TEXT_BASE | |
+ default 0x17800000 | |
+ | |
+endif | |
diff --git a/board/freescale/riotboard/MAINTAINERS b/board/freescale/riotboard/MAINTAINERS | |
new file mode 100644 | |
index 00000000000..12f0be195da | |
--- /dev/null | |
+++ b/board/freescale/riotboard/MAINTAINERS | |
@@ -0,0 +1,7 @@ | |
+RIOTBOARD BOARD | |
+M: TaterLi <[email protected]> | |
+S: Maintained | |
+F: board/freescale/riotboard/ | |
+F: include/configs/riotboard.h | |
+F: configs/riotboard_defconfig | |
+F: configs/riotboard_optee_defconfig | |
diff --git a/board/freescale/riotboard/Makefile b/board/freescale/riotboard/Makefile | |
new file mode 100644 | |
index 00000000000..f10931be5f2 | |
--- /dev/null | |
+++ b/board/freescale/riotboard/Makefile | |
@@ -0,0 +1,7 @@ | |
+# SPDX-License-Identifier: GPL-2.0+ | |
+# | |
+# Copyright (C) 2007, Guennadi Liakhovetski <[email protected]> | |
+# | |
+# (C) Copyright 2011 Freescale Semiconductor, Inc. | |
+ | |
+obj-y := riotboard.o | |
diff --git a/board/freescale/riotboard/nitrogen6s1g.cfg b/board/freescale/riotboard/nitrogen6s1g.cfg | |
new file mode 100644 | |
index 00000000000..02efb6a0491 | |
--- /dev/null | |
+++ b/board/freescale/riotboard/nitrogen6s1g.cfg | |
@@ -0,0 +1,170 @@ | |
+/* SPDX-License-Identifier: GPL-2.0+ */ | |
+/* | |
+ * Copyright (C) 2013 Boundary Devices | |
+ * | |
+ * Refer doc/imx/mkimage/imximage.txt for more details about how-to configure | |
+ * and create imximage boot image | |
+ * | |
+ * The syntax is taken as close as possible with the kwbimage | |
+ */ | |
+ | |
+/* image version */ | |
+IMAGE_VERSION 2 | |
+ | |
+/* | |
+ * Boot Device : one of | |
+ * spi, sd (the board has no nand neither onenand) | |
+ */ | |
+BOOT_FROM sd | |
+ | |
+#include <config.h> | |
+#ifdef CONFIG_IMX_HAB | |
+CSF CONFIG_CSF_SIZE | |
+#endif | |
+#include "asm/arch/mx6-ddr.h" | |
+#include "asm/arch/iomux.h" | |
+#include "asm/arch/crm_regs.h" | |
+ | |
+/* | |
+ * DDR3 settings | |
+ * MX6Q ddr is limited to 1066 Mhz currently 1056 MHz(528 MHz clock), | |
+ * memory bus width: 64 bits x16/x32/x64 | |
+ * MX6DL ddr is limited to 800 MHz(400 MHz clock) | |
+ * memory bus width: 64 bits x16/x32/x64 | |
+ * MX6SOLO ddr is limited to 800 MHz(400 MHz clock) | |
+ * memory bus width: 32 bits x16/x32 | |
+ */ | |
+DATA 4, MX6_IOM_DRAM_SDQS0, 0x00000030 | |
+DATA 4, MX6_IOM_DRAM_SDQS1, 0x00000030 | |
+DATA 4, MX6_IOM_DRAM_SDQS2, 0x00000030 | |
+DATA 4, MX6_IOM_DRAM_SDQS3, 0x00000030 | |
+DATA 4, MX6_IOM_DRAM_SDQS4, 0x00000030 | |
+DATA 4, MX6_IOM_DRAM_SDQS5, 0x00000030 | |
+DATA 4, MX6_IOM_DRAM_SDQS6, 0x00000030 | |
+DATA 4, MX6_IOM_DRAM_SDQS7, 0x00000030 | |
+ | |
+DATA 4, MX6_IOM_GRP_B0DS, 0x00000030 | |
+DATA 4, MX6_IOM_GRP_B1DS, 0x00000030 | |
+DATA 4, MX6_IOM_GRP_B2DS, 0x00000030 | |
+DATA 4, MX6_IOM_GRP_B3DS, 0x00000030 | |
+DATA 4, MX6_IOM_GRP_B4DS, 0x00000030 | |
+DATA 4, MX6_IOM_GRP_B5DS, 0x00000030 | |
+DATA 4, MX6_IOM_GRP_B6DS, 0x00000030 | |
+DATA 4, MX6_IOM_GRP_B7DS, 0x00000030 | |
+DATA 4, MX6_IOM_GRP_ADDDS, 0x00000030 | |
+/* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ | |
+DATA 4, MX6_IOM_GRP_CTLDS, 0x00000030 | |
+ | |
+DATA 4, MX6_IOM_DRAM_DQM0, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_DQM1, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_DQM2, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_DQM3, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_DQM4, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_DQM5, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_DQM6, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_DQM7, 0x00020030 | |
+ | |
+DATA 4, MX6_IOM_DRAM_CAS, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_RAS, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_SDCLK_0, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_SDCLK_1, 0x00020030 | |
+ | |
+DATA 4, MX6_IOM_DRAM_RESET, 0x00020030 | |
+DATA 4, MX6_IOM_DRAM_SDCKE0, 0x00003000 | |
+DATA 4, MX6_IOM_DRAM_SDCKE1, 0x00003000 | |
+ | |
+DATA 4, MX6_IOM_DRAM_SDODT0, 0x00003030 | |
+DATA 4, MX6_IOM_DRAM_SDODT1, 0x00003030 | |
+ | |
+/* (differential input) */ | |
+DATA 4, MX6_IOM_DDRMODE_CTL, 0x00020000 | |
+/* (differential input) */ | |
+DATA 4, MX6_IOM_GRP_DDRMODE, 0x00020000 | |
+/* disable ddr pullups */ | |
+DATA 4, MX6_IOM_GRP_DDRPKE, 0x00000000 | |
+DATA 4, MX6_IOM_DRAM_SDBA2, 0x00000000 | |
+/* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ | |
+DATA 4, MX6_IOM_GRP_DDR_TYPE, 0x000C0000 | |
+ | |
+/* Read data DQ Byte0-3 delay */ | |
+DATA 4, MX6_MMDC_P0_MPRDDQBY0DL, 0x33333333 | |
+DATA 4, MX6_MMDC_P0_MPRDDQBY1DL, 0x33333333 | |
+DATA 4, MX6_MMDC_P0_MPRDDQBY2DL, 0x33333333 | |
+DATA 4, MX6_MMDC_P0_MPRDDQBY3DL, 0x33333333 | |
+DATA 4, MX6_MMDC_P1_MPRDDQBY0DL, 0x33333333 | |
+DATA 4, MX6_MMDC_P1_MPRDDQBY1DL, 0x33333333 | |
+DATA 4, MX6_MMDC_P1_MPRDDQBY2DL, 0x33333333 | |
+DATA 4, MX6_MMDC_P1_MPRDDQBY3DL, 0x33333333 | |
+ | |
+/* | |
+ * MDMISC mirroring interleaved (row/bank/col) | |
+ */ | |
+DATA 4, MX6_MMDC_P0_MDMISC, 0x00081740 | |
+ | |
+/* | |
+ * MDSCR con_req | |
+ */ | |
+DATA 4, MX6_MMDC_P0_MDSCR, 0x00008000 | |
+ | |
+DATA 4, MX6_MMDC_P0_MDPDC, 0x0002002D | |
+DATA 4, MX6_MMDC_P0_MDCFG0, 0x696C5323 | |
+DATA 4, MX6_MMDC_P0_MDCFG1, 0xB66E8D63 | |
+DATA 4, MX6_MMDC_P0_MDCFG2, 0x01FF00DB | |
+DATA 4, MX6_MMDC_P0_MDRWD, 0x000026D2 | |
+DATA 4, MX6_MMDC_P0_MDOR, 0x006C1023 | |
+DATA 4, MX6_MMDC_P0_MDOTC, 0x00333030 | |
+DATA 4, MX6_MMDC_P0_MDPDC, 0x0002556D | |
+DATA 4, MX6_MMDC_P0_MDASP, 0x00000027 | |
+DATA 4, MX6_MMDC_P0_MDCTL, 0x84190000 | |
+DATA 4, MX6_MMDC_P0_MDSCR, 0x04008032 | |
+DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033 | |
+DATA 4, MX6_MMDC_P0_MDSCR, 0x00048031 | |
+DATA 4, MX6_MMDC_P0_MDSCR, 0x13208030 | |
+DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040 | |
+DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xA1390003 | |
+DATA 4, MX6_MMDC_P1_MPZQHWCTRL, 0xA1390003 | |
+DATA 4, MX6_MMDC_P0_MDREF, 0x00007800 | |
+DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00022227 | |
+DATA 4, MX6_MMDC_P1_MPODTCTRL, 0x00022227 | |
+DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x42350231 | |
+DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x021A0218 | |
+DATA 4, MX6_MMDC_P1_MPDGCTRL0, 0x42350231 | |
+DATA 4, MX6_MMDC_P1_MPDGCTRL1, 0x021A0218 | |
+DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x4B4B4E49 | |
+DATA 4, MX6_MMDC_P1_MPRDDLCTL, 0x4B4B4E49 | |
+DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x3F3F3035 | |
+DATA 4, MX6_MMDC_P1_MPWRDLCTL, 0x3F3F3035 | |
+DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x0040003C | |
+DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x0032003E | |
+DATA 4, MX6_MMDC_P1_MPWLDECTRL0, 0x0040003C | |
+DATA 4, MX6_MMDC_P1_MPWLDECTRL1, 0x0032003E | |
+DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800 | |
+DATA 4, MX6_MMDC_P1_MPMUR0, 0x00000800 | |
+DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000 | |
+DATA 4, MX6_MMDC_P0_MAPSR, 0x00011006 | |
+ | |
+/* set the default clock gate to save power */ | |
+DATA 4, CCM_CCGR0, 0x00C03F3F | |
+DATA 4, CCM_CCGR1, 0x0030FC03 | |
+DATA 4, CCM_CCGR2, 0x0FFFC000 | |
+DATA 4, CCM_CCGR3, 0x3FF00000 | |
+DATA 4, CCM_CCGR4, 0x00FFF300 | |
+DATA 4, CCM_CCGR5, 0x0F0000C3 | |
+DATA 4, CCM_CCGR6, 0x000003FF | |
+ | |
+/* enable AXI cache for VDOA/VPU/IPU */ | |
+DATA 4, MX6_IOMUXC_GPR4, 0xF00000CF | |
+/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ | |
+DATA 4, MX6_IOMUXC_GPR6, 0x007F007F | |
+DATA 4, MX6_IOMUXC_GPR7, 0x007F007F | |
+ | |
+/* | |
+ * Setup CCM_CCOSR register as follows: | |
+ * | |
+ * cko1_en = 1 --> CKO1 enabled | |
+ * cko1_div = 111 --> divide by 8 | |
+ * cko1_sel = 1011 --> ahb_clk_root | |
+ * | |
+ * This sets CKO1 at ahb_clk_root/8 = 132/8 = 16.5 MHz | |
+ */ | |
+DATA 4, CCM_CCOSR, 0x000000fb | |
diff --git a/board/freescale/riotboard/riotboard.c b/board/freescale/riotboard/riotboard.c | |
new file mode 100644 | |
index 00000000000..0b034a127ed | |
--- /dev/null | |
+++ b/board/freescale/riotboard/riotboard.c | |
@@ -0,0 +1,758 @@ | |
+// SPDX-License-Identifier: GPL-2.0+ | |
+/* | |
+ * Copyright (C) 2012-2016 Freescale Semiconductor, Inc. | |
+ * Copyright 2017-2018 NXP | |
+ * | |
+ * Author: Fabio Estevam <[email protected]> | |
+ */ | |
+ | |
+#include <image.h> | |
+#include <init.h> | |
+#include <net.h> | |
+#include <asm/arch/clock.h> | |
+#include <asm/arch/imx-regs.h> | |
+#include <asm/arch/iomux.h> | |
+#include <asm/arch/mx6-pins.h> | |
+#include <asm/global_data.h> | |
+#include <asm/mach-imx/spi.h> | |
+#include <env.h> | |
+#include <linux/errno.h> | |
+#include <linux/delay.h> | |
+#include <asm/gpio.h> | |
+#include <asm/mach-imx/mxc_i2c.h> | |
+#include <asm/mach-imx/iomux-v3.h> | |
+#include <asm/mach-imx/boot_mode.h> | |
+#include <asm/mach-imx/video.h> | |
+#include <mmc.h> | |
+#include <fsl_esdhc_imx.h> | |
+#include <miiphy.h> | |
+#include <asm/arch/mxc_hdmi.h> | |
+#include <asm/arch/crm_regs.h> | |
+#include <asm/io.h> | |
+#include <asm/arch/sys_proto.h> | |
+#include <i2c.h> | |
+#include <input.h> | |
+#include <power/pmic.h> | |
+#include <power/pfuze100_pmic.h> | |
+#include "../common/pfuze.h" | |
+#include <usb.h> | |
+#include <usb/ehci-ci.h> | |
+#include <asm/arch/mx6-ddr.h> | |
+#include <power/regulator.h> | |
+#if defined(CONFIG_MX6DL) && defined(CONFIG_MXC_EPDC) | |
+#include <mxc_epdc_fb.h> | |
+#endif | |
+#ifdef CONFIG_FSL_FASTBOOT | |
+#include <fb_fsl.h> | |
+#ifdef CONFIG_ANDROID_RECOVERY | |
+#include <recovery.h> | |
+#endif | |
+#endif /*CONFIG_FSL_FASTBOOT*/ | |
+ | |
+DECLARE_GLOBAL_DATA_PTR; | |
+ | |
+#define UART_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ | |
+ PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \ | |
+ PAD_CTL_SRE_FAST | PAD_CTL_HYS) | |
+ | |
+#define USDHC_PAD_CTRL (PAD_CTL_PUS_47K_UP | \ | |
+ PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm | \ | |
+ PAD_CTL_SRE_FAST | PAD_CTL_HYS) | |
+ | |
+#define SPI_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_SPEED_MED | \ | |
+ PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) | |
+ | |
+#define MISC_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ | |
+ PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ | |
+ PAD_CTL_SRE_SLOW) | |
+ | |
+#define I2C_PMIC 1 | |
+ | |
+int dram_init(void) | |
+{ | |
+ gd->ram_size = imx_ddr_size(); | |
+ return 0; | |
+} | |
+ | |
+static iomux_v3_cfg_t const uart2_pads[] = { | |
+ IOMUX_PADS(PAD_EIM_D26__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_EIM_D27__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), | |
+}; | |
+ | |
+static iomux_v3_cfg_t const misc_pads[] = { | |
+ IOMUX_PADS(PAD_GPIO_1__USB_OTG_ID | MUX_PAD_CTRL(MISC_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_KEY_COL4__USB_OTG_OC | MUX_PAD_CTRL(MISC_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_EIM_D30__USB_H1_OC | MUX_PAD_CTRL(MISC_PAD_CTRL)), | |
+ /* OTG Power enable */ | |
+ IOMUX_PADS(PAD_EIM_D22__GPIO3_IO22 | MUX_PAD_CTRL((PAD_CTL_SPEED_MED|PAD_CTL_DSE_40ohm))), | |
+}; | |
+ | |
+static iomux_v3_cfg_t const usdhc2_pads[] = { | |
+ IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
+}; | |
+ | |
+static iomux_v3_cfg_t const usb_pads[] = { | |
+ IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | MUX_PAD_CTRL(NO_PAD_CTRL)), | |
+}; | |
+ | |
+#ifdef CONFIG_MXC_SPI | |
+static iomux_v3_cfg_t const ecspi1_pads[] = { | |
+ IOMUX_PADS(PAD_EIM_D16__ECSPI1_SCLK | MUX_PAD_CTRL(SPI_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_EIM_D17__ECSPI1_MISO | MUX_PAD_CTRL(SPI_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_EIM_D18__ECSPI1_MOSI | MUX_PAD_CTRL(SPI_PAD_CTRL)), | |
+ IOMUX_PADS(PAD_EIM_D19__GPIO3_IO19 | MUX_PAD_CTRL(NO_PAD_CTRL)), | |
+}; | |
+ | |
+int board_spi_cs_gpio(unsigned bus, unsigned cs) | |
+{ | |
+ return (bus == 0 && cs == 0) ? (IMX_GPIO_NR(3, 19)) : -1; | |
+} | |
+ | |
+static void setup_spi(void) | |
+{ | |
+ SETUP_IOMUX_PADS(ecspi1_pads); | |
+} | |
+#endif | |
+ | |
+static void setup_iomux_uart(void) | |
+{ | |
+ SETUP_IOMUX_PADS(uart2_pads); | |
+} | |
+ | |
+/* | |
+ * Do not overwrite the console | |
+ * Use always serial for U-Boot console | |
+ */ | |
+int overwrite_console(void) | |
+{ | |
+ return 1; | |
+} | |
+ | |
+#ifdef CONFIG_USB_EHCI_MX6 | |
+int board_ehci_hcd_init(int port) | |
+{ | |
+ SETUP_IOMUX_PADS(usb_pads); | |
+ | |
+ /* Reset USB hub */ | |
+ gpio_direction_output(IMX_GPIO_NR(7, 12), 0); | |
+ mdelay(2); | |
+ gpio_set_value(IMX_GPIO_NR(7, 12), 1); | |
+ | |
+ return 0; | |
+} | |
+ | |
+int board_ehci_power(int port, int on) | |
+{ | |
+ if (port) | |
+ return 0; | |
+ gpio_set_value(IMX_GPIO_NR(3, 22), on); | |
+ return 0; | |
+} | |
+#endif | |
+ | |
+int board_early_init_f(void) | |
+{ | |
+ setup_iomux_uart(); | |
+ return 0; | |
+} | |
+ | |
+int board_init(void) | |
+{ | |
+ /* address of boot parameters */ | |
+ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; | |
+ | |
+#if defined(CONFIG_DM_REGULATOR) | |
+ regulators_enable_boot_on(false); | |
+#endif | |
+ | |
+#ifdef CONFIG_MXC_SPI | |
+ setup_spi(); | |
+#endif | |
+ SETUP_IOMUX_PADS(misc_pads); | |
+ SETUP_IOMUX_PADS(usdhc2_pads); | |
+ | |
+ env_set("fastboot_dev", "mmc3"); | |
+ | |
+ return 0; | |
+} | |
+ | |
+#ifdef CONFIG_POWER_LEGACY | |
+int power_init_board(void) | |
+{ | |
+ struct pmic *pfuze; | |
+ unsigned int reg; | |
+ int ret; | |
+ | |
+ pfuze = pfuze_common_init(I2C_PMIC); | |
+ if (!pfuze) | |
+ return -ENODEV; | |
+ | |
+ ret = pfuze_mode_init(pfuze, APS_PFM); | |
+ | |
+ if (ret < 0) | |
+ return ret; | |
+ /* VGEN3 and VGEN5 corrected on i.mx6qp board */ | |
+ | |
+ /* Increase VGEN3 from 2.5 to 2.8V */ | |
+ pmic_reg_read(pfuze, PFUZE100_VGEN3VOL, ®); | |
+ reg &= ~LDO_VOL_MASK; | |
+ reg |= LDOB_2_80V; | |
+ pmic_reg_write(pfuze, PFUZE100_VGEN3VOL, reg); | |
+ | |
+ /* Increase VGEN5 from 2.8 to 3V */ | |
+ pmic_reg_read(pfuze, PFUZE100_VGEN5VOL, ®); | |
+ reg &= ~LDO_VOL_MASK; | |
+ reg |= LDOB_3_00V; | |
+ pmic_reg_write(pfuze, PFUZE100_VGEN5VOL, reg); | |
+ | |
+ /* set SW1AB staby volatage 0.975V*/ | |
+ pmic_reg_read(pfuze, PFUZE100_SW1ABSTBY, ®); | |
+ reg &= ~0x3f; | |
+ reg |= 0x1b; | |
+ pmic_reg_write(pfuze, PFUZE100_SW1ABSTBY, reg); | |
+ | |
+ /* set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */ | |
+ pmic_reg_read(pfuze, PFUZE100_SW1ABCONF, ®); | |
+ reg &= ~0xc0; | |
+ reg |= 0x40; | |
+ pmic_reg_write(pfuze, PFUZE100_SW1ABCONF, reg); | |
+ | |
+ /* set SW1C staby volatage 0.975V*/ | |
+ pmic_reg_read(pfuze, PFUZE100_SW1CSTBY, ®); | |
+ reg &= ~0x3f; | |
+ reg |= 0x1b; | |
+ pmic_reg_write(pfuze, PFUZE100_SW1CSTBY, reg); | |
+ | |
+ /* set SW1C/VDDSOC step ramp up time to from 16us to 4us/25mV */ | |
+ pmic_reg_read(pfuze, PFUZE100_SW1CCONF, ®); | |
+ reg &= ~0xc0; | |
+ reg |= 0x40; | |
+ pmic_reg_write(pfuze, PFUZE100_SW1CCONF, reg); | |
+ | |
+ return 0; | |
+} | |
+ | |
+#elif defined(CONFIG_DM_PMIC_PFUZE100) | |
+int power_init_board(void) | |
+{ | |
+ struct udevice *dev; | |
+ unsigned int reg; | |
+ int ret; | |
+ | |
+ dev = pfuze_common_init(); | |
+ if (!dev) | |
+ return -ENODEV; | |
+ | |
+ ret = pfuze_mode_init(dev, APS_PFM); | |
+ if (ret < 0) | |
+ return ret; | |
+ | |
+ /* VGEN3 and VGEN5 corrected on i.mx6qp board */ | |
+ /* Increase VGEN3 from 2.5 to 2.8V */ | |
+ reg = pmic_reg_read(dev, PFUZE100_VGEN3VOL); | |
+ reg &= ~LDO_VOL_MASK; | |
+ reg |= LDOB_2_80V; | |
+ pmic_reg_write(dev, PFUZE100_VGEN3VOL, reg); | |
+ | |
+ /* Increase VGEN5 from 2.8 to 3V */ | |
+ reg = pmic_reg_read(dev, PFUZE100_VGEN5VOL); | |
+ reg &= ~LDO_VOL_MASK; | |
+ reg |= LDOB_3_00V; | |
+ pmic_reg_write(dev, PFUZE100_VGEN5VOL, reg); | |
+ | |
+ /* set SW1AB staby volatage 0.975V*/ | |
+ reg = pmic_reg_read(dev, PFUZE100_SW1ABSTBY); | |
+ reg &= ~0x3f; | |
+ reg |= 0x1b; | |
+ pmic_reg_write(dev, PFUZE100_SW1ABSTBY, reg); | |
+ | |
+ /* set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */ | |
+ reg = pmic_reg_read(dev, PFUZE100_SW1ABCONF); | |
+ reg &= ~0xc0; | |
+ reg |= 0x40; | |
+ pmic_reg_write(dev, PFUZE100_SW1ABCONF, reg); | |
+ | |
+ /* set SW1C staby volatage 0.975V*/ | |
+ reg = pmic_reg_read(dev, PFUZE100_SW1CSTBY); | |
+ reg &= ~0x3f; | |
+ reg |= 0x1b; | |
+ pmic_reg_write(dev, PFUZE100_SW1CSTBY, reg); | |
+ | |
+ /* set SW1C/VDDSOC step ramp up time to from 16us to 4us/25mV */ | |
+ reg = pmic_reg_read(dev, PFUZE100_SW1CCONF); | |
+ reg &= ~0xc0; | |
+ reg |= 0x40; | |
+ pmic_reg_write(dev, PFUZE100_SW1CCONF, reg); | |
+ | |
+ return 0; | |
+} | |
+#endif | |
+ | |
+#ifdef CONFIG_LDO_BYPASS_CHECK | |
+#ifdef CONFIG_POWER_LEGACY | |
+void ldo_mode_set(int ldo_bypass) | |
+{ | |
+ unsigned int value; | |
+ int is_400M; | |
+ unsigned char vddarm; | |
+ struct pmic *p = pmic_get("PFUZE100"); | |
+ | |
+ if (!p) | |
+ { | |
+ printf("No PMIC found!\n"); | |
+ return; | |
+ } | |
+ | |
+ /* increase VDDARM/VDDSOC to support 1.2G chip */ | |
+ if (!ldo_bypass) | |
+ { | |
+ ldo_bypass = 0; /* ldo_enable on 1.2G chip */ | |
+ printf("1.2G chip, increase VDDARM_IN/VDDSOC_IN\n"); | |
+ if (is_mx6dqp()) | |
+ { | |
+ /* increase VDDARM to 1.425V */ | |
+ pmic_reg_read(p, PFUZE100_SW2VOL, &value); | |
+ value &= ~0x3f; | |
+ value |= 0x29; | |
+ pmic_reg_write(p, PFUZE100_SW2VOL, value); | |
+ } | |
+ else | |
+ { | |
+ /* increase VDDARM to 1.425V */ | |
+ pmic_reg_read(p, PFUZE100_SW1ABVOL, &value); | |
+ value &= ~0x3f; | |
+ value |= 0x2d; | |
+ pmic_reg_write(p, PFUZE100_SW1ABVOL, value); | |
+ } | |
+ /* increase VDDSOC to 1.425V */ | |
+ pmic_reg_read(p, PFUZE100_SW1CVOL, &value); | |
+ value &= ~0x3f; | |
+ value |= 0x2d; | |
+ pmic_reg_write(p, PFUZE100_SW1CVOL, value); | |
+ } | |
+ /* switch to ldo_bypass mode , boot on 800Mhz */ | |
+ else | |
+ { | |
+ prep_anatop_bypass(); | |
+ if (is_mx6dqp()) | |
+ { | |
+ /* decrease VDDARM for 400Mhz DQP:1.1V*/ | |
+ pmic_reg_read(p, PFUZE100_SW2VOL, &value); | |
+ value &= ~0x3f; | |
+ value |= 0x1c; | |
+ pmic_reg_write(p, PFUZE100_SW2VOL, value); | |
+ } | |
+ else | |
+ { | |
+ /* decrease VDDARM for 400Mhz DQ:1.1V, DL:1.275V */ | |
+ pmic_reg_read(p, PFUZE100_SW1ABVOL, &value); | |
+ value &= ~0x3f; | |
+ if (is_mx6dl()) | |
+ value |= 0x27; | |
+ else | |
+ value |= 0x20; | |
+ | |
+ pmic_reg_write(p, PFUZE100_SW1ABVOL, value); | |
+ } | |
+ /* increase VDDSOC to 1.3V */ | |
+ pmic_reg_read(p, PFUZE100_SW1CVOL, &value); | |
+ value &= ~0x3f; | |
+ value |= 0x28; | |
+ pmic_reg_write(p, PFUZE100_SW1CVOL, value); | |
+ | |
+ /* | |
+ * MX6Q/DQP: | |
+ * VDDARM:1.15V@800M; VDDSOC:1.175V@800M | |
+ * VDDARM:0.975V@400M; VDDSOC:1.175V@400M | |
+ * MX6DL: | |
+ * VDDARM:1.175V@800M; VDDSOC:1.175V@800M | |
+ * VDDARM:1.15V@400M; VDDSOC:1.175V@400M | |
+ */ | |
+ is_400M = set_anatop_bypass(2); | |
+ if (is_mx6dqp()) | |
+ { | |
+ pmic_reg_read(p, PFUZE100_SW2VOL, &value); | |
+ value &= ~0x3f; | |
+ if (is_400M) | |
+ value |= 0x17; | |
+ else | |
+ value |= 0x1e; | |
+ pmic_reg_write(p, PFUZE100_SW2VOL, value); | |
+ } | |
+ | |
+ if (is_400M) | |
+ { | |
+ if (is_mx6dl()) | |
+ vddarm = 0x22; | |
+ else | |
+ vddarm = 0x1b; | |
+ } | |
+ else | |
+ { | |
+ if (is_mx6dl()) | |
+ vddarm = 0x23; | |
+ else | |
+ vddarm = 0x22; | |
+ } | |
+ pmic_reg_read(p, PFUZE100_SW1ABVOL, &value); | |
+ value &= ~0x3f; | |
+ value |= vddarm; | |
+ pmic_reg_write(p, PFUZE100_SW1ABVOL, value); | |
+ | |
+ /* decrease VDDSOC to 1.175V */ | |
+ pmic_reg_read(p, PFUZE100_SW1CVOL, &value); | |
+ value &= ~0x3f; | |
+ value |= 0x23; | |
+ pmic_reg_write(p, PFUZE100_SW1CVOL, value); | |
+ | |
+ finish_anatop_bypass(); | |
+ printf("switch to ldo_bypass mode!\n"); | |
+ } | |
+} | |
+#elif defined(CONFIG_DM_PMIC_PFUZE100) | |
+void ldo_mode_set(int ldo_bypass) | |
+{ | |
+ int is_400M; | |
+ unsigned char vddarm; | |
+ struct udevice *dev; | |
+ int ret; | |
+ | |
+ ret = pmic_get("pfuze100@8", &dev); | |
+ if (ret == -ENODEV) | |
+ { | |
+ printf("No PMIC found!\n"); | |
+ return; | |
+ } | |
+ | |
+ /* increase VDDARM/VDDSOC to support 1.2G chip */ | |
+ if (!ldo_bypass) | |
+ { | |
+ ldo_bypass = 0; /* ldo_enable on 1.2G chip */ | |
+ printf("1.2G chip, increase VDDARM_IN/VDDSOC_IN\n"); | |
+ if (is_mx6dqp()) | |
+ { | |
+ /* increase VDDARM to 1.425V */ | |
+ pmic_clrsetbits(dev, PFUZE100_SW2VOL, 0x3f, 0x29); | |
+ } | |
+ else | |
+ { | |
+ /* increase VDDARM to 1.425V */ | |
+ pmic_clrsetbits(dev, PFUZE100_SW1ABVOL, 0x3f, 0x2d); | |
+ } | |
+ /* increase VDDSOC to 1.425V */ | |
+ pmic_clrsetbits(dev, PFUZE100_SW1CVOL, 0x3f, 0x2d); | |
+ } | |
+ /* switch to ldo_bypass mode , boot on 800Mhz */ | |
+ else | |
+ { | |
+ prep_anatop_bypass(); | |
+ if (is_mx6dqp()) | |
+ { | |
+ /* decrease VDDARM for 400Mhz DQP:1.1V*/ | |
+ pmic_clrsetbits(dev, PFUZE100_SW2VOL, 0x3f, 0x1c); | |
+ } | |
+ else | |
+ { | |
+ /* decrease VDDARM for 400Mhz DQ:1.1V, DL:1.275V */ | |
+ if (is_mx6dl()) | |
+ pmic_clrsetbits(dev, PFUZE100_SW1ABVOL, 0x3f, 0x27); | |
+ else | |
+ pmic_clrsetbits(dev, PFUZE100_SW1ABVOL, 0x3f, 0x20); | |
+ } | |
+ /* increase VDDSOC to 1.3V */ | |
+ pmic_clrsetbits(dev, PFUZE100_SW1CVOL, 0x3f, 0x28); | |
+ | |
+ /* | |
+ * MX6Q/DQP: | |
+ * VDDARM:1.15V@800M; VDDSOC:1.175V@800M | |
+ * VDDARM:0.975V@400M; VDDSOC:1.175V@400M | |
+ * MX6DL: | |
+ * VDDARM:1.175V@800M; VDDSOC:1.175V@800M | |
+ * VDDARM:1.15V@400M; VDDSOC:1.175V@400M | |
+ */ | |
+ is_400M = set_anatop_bypass(2); | |
+ if (is_mx6dqp()) | |
+ { | |
+ if (is_400M) | |
+ pmic_clrsetbits(dev, PFUZE100_SW2VOL, 0x3f, 0x17); | |
+ else | |
+ pmic_clrsetbits(dev, PFUZE100_SW2VOL, 0x3f, 0x1e); | |
+ } | |
+ | |
+ if (is_400M) | |
+ { | |
+ if (is_mx6dl()) | |
+ vddarm = 0x22; | |
+ else | |
+ vddarm = 0x1b; | |
+ } | |
+ else | |
+ { | |
+ if (is_mx6dl()) | |
+ vddarm = 0x23; | |
+ else | |
+ vddarm = 0x22; | |
+ } | |
+ pmic_clrsetbits(dev, PFUZE100_SW1ABVOL, 0x3f, vddarm); | |
+ | |
+ /* decrease VDDSOC to 1.175V */ | |
+ pmic_clrsetbits(dev, PFUZE100_SW1CVOL, 0x3f, 0x23); | |
+ | |
+ finish_anatop_bypass(); | |
+ printf("switch to ldo_bypass mode!\n"); | |
+ } | |
+} | |
+#endif | |
+#endif | |
+ | |
+#ifdef CONFIG_CMD_BMODE | |
+static const struct boot_mode board_boot_modes[] = { | |
+ /* 4 bit bus width */ | |
+ {"mmc0", MAKE_CFGVAL(0x40, 0x30, 0x00, 0x00)}, | |
+ {"mmc1", MAKE_CFGVAL(0x40, 0x38, 0x00, 0x00)}, | |
+ {NULL, 0}, | |
+}; | |
+#endif | |
+ | |
+int board_late_init(void) | |
+{ | |
+#ifdef CONFIG_CMD_BMODE | |
+ add_board_boot_modes(board_boot_modes); | |
+#endif | |
+ | |
+ env_set("tee", "no"); | |
+#ifdef CONFIG_IMX_OPTEE | |
+ env_set("tee", "yes"); | |
+#endif | |
+ | |
+#ifdef CONFIG_ENV_IS_IN_MMC | |
+ board_late_mmc_env_init(); | |
+#endif | |
+ | |
+ return 0; | |
+} | |
+ | |
+#ifdef CONFIG_FSL_FASTBOOT | |
+ | |
+#endif /*CONFIG_FSL_FASTBOOT*/ | |
+ | |
+#ifdef CONFIG_SPL_BUILD | |
+#include <asm/arch/mx6-ddr.h> | |
+#include <spl.h> | |
+#include <linux/libfdt.h> | |
+ | |
+static void ccgr_init(void) | |
+{ | |
+ struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; | |
+ | |
+ writel(0x00C03F3F, &ccm->CCGR0); | |
+ writel(0x0030FC03, &ccm->CCGR1); | |
+ writel(0x0FFFC000, &ccm->CCGR2); | |
+ writel(0x3FF00000, &ccm->CCGR3); | |
+ writel(0x00FFF300, &ccm->CCGR4); | |
+ writel(0x0F0000C3, &ccm->CCGR5); | |
+ writel(0x000003FF, &ccm->CCGR6); | |
+} | |
+ | |
+static int dcd_table[] = { | |
+ MX6_IOM_DRAM_SDQS0, | |
+ 0x00000030 MX6_IOM_DRAM_SDQS1, | |
+ 0x00000030 MX6_IOM_DRAM_SDQS2, | |
+ 0x00000030 MX6_IOM_DRAM_SDQS3, | |
+ 0x00000030 MX6_IOM_DRAM_SDQS4, | |
+ 0x00000030 MX6_IOM_DRAM_SDQS5, | |
+ 0x00000030 MX6_IOM_DRAM_SDQS6, | |
+ 0x00000030 MX6_IOM_DRAM_SDQS7, | |
+ 0x00000030 | |
+ | |
+ MX6_IOM_GRP_B0DS, | |
+ 0x00000030 MX6_IOM_GRP_B1DS, | |
+ 0x00000030 MX6_IOM_GRP_B2DS, | |
+ 0x00000030 MX6_IOM_GRP_B3DS, | |
+ 0x00000030 MX6_IOM_GRP_B4DS, | |
+ 0x00000030 MX6_IOM_GRP_B5DS, | |
+ 0x00000030 MX6_IOM_GRP_B6DS, | |
+ 0x00000030 MX6_IOM_GRP_B7DS, | |
+ 0x00000030 MX6_IOM_GRP_ADDDS, | |
+ 0x00000030 | |
+ /* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ | |
+ MX6_IOM_GRP_CTLDS, | |
+ 0x00000030 | |
+ | |
+ MX6_IOM_DRAM_DQM0, | |
+ 0x00020030 MX6_IOM_DRAM_DQM1, | |
+ 0x00020030 MX6_IOM_DRAM_DQM2, | |
+ 0x00020030 MX6_IOM_DRAM_DQM3, | |
+ 0x00020030 MX6_IOM_DRAM_DQM4, | |
+ 0x00020030 MX6_IOM_DRAM_DQM5, | |
+ 0x00020030 MX6_IOM_DRAM_DQM6, | |
+ 0x00020030 MX6_IOM_DRAM_DQM7, | |
+ 0x00020030 | |
+ | |
+ MX6_IOM_DRAM_CAS, | |
+ 0x00020030 MX6_IOM_DRAM_RAS, | |
+ 0x00020030 MX6_IOM_DRAM_SDCLK_0, | |
+ 0x00020030 MX6_IOM_DRAM_SDCLK_1, | |
+ 0x00020030 | |
+ | |
+ MX6_IOM_DRAM_RESET, | |
+ 0x00020030 MX6_IOM_DRAM_SDCKE0, | |
+ 0x00003000 MX6_IOM_DRAM_SDCKE1, | |
+ 0x00003000 | |
+ | |
+ MX6_IOM_DRAM_SDODT0, | |
+ 0x00003030 MX6_IOM_DRAM_SDODT1, | |
+ 0x00003030 | |
+ | |
+ /* (differential input) */ | |
+ MX6_IOM_DDRMODE_CTL, | |
+ 0x00020000 | |
+ /* (differential input) */ | |
+ MX6_IOM_GRP_DDRMODE, | |
+ 0x00020000 | |
+ /* disable ddr pullups */ | |
+ MX6_IOM_GRP_DDRPKE, | |
+ 0x00000000 MX6_IOM_DRAM_SDBA2, | |
+ 0x00000000 | |
+ /* 40 Ohm drive strength for cs0/1,sdba2,cke0/1,sdwe */ | |
+ MX6_IOM_GRP_DDR_TYPE, | |
+ 0x000C0000 | |
+ /* Read data DQ Byte0-3 delay */ | |
+ MX6_MMDC_P0_MPRDDQBY0DL, | |
+ 0x33333333 MX6_MMDC_P0_MPRDDQBY1DL, | |
+ 0x33333333 MX6_MMDC_P0_MPRDDQBY2DL, | |
+ 0x33333333 MX6_MMDC_P0_MPRDDQBY3DL, | |
+ 0x33333333 MX6_MMDC_P1_MPRDDQBY0DL, | |
+ 0x33333333 MX6_MMDC_P1_MPRDDQBY1DL, | |
+ 0x33333333 MX6_MMDC_P1_MPRDDQBY2DL, | |
+ 0x33333333 MX6_MMDC_P1_MPRDDQBY3DL, | |
+ 0x33333333 | |
+ /* | |
+ * MDMISC mirroring interleaved (row/bank/col) | |
+ */ | |
+ MX6_MMDC_P0_MDMISC, | |
+ 0x00081740 | |
+ /* | |
+ * MDSCR con_req | |
+ */ | |
+ MX6_MMDC_P0_MDSCR, | |
+ 0x00008000 | |
+ | |
+ MX6_MMDC_P0_MDPDC, | |
+ 0x0002002D MX6_MMDC_P0_MDCFG0, | |
+ 0x696C5323 MX6_MMDC_P0_MDCFG1, | |
+ 0xB66E8D63 MX6_MMDC_P0_MDCFG2, | |
+ 0x01FF00DB MX6_MMDC_P0_MDRWD, | |
+ 0x000026D2 MX6_MMDC_P0_MDOR, | |
+ 0x006C1023 MX6_MMDC_P0_MDOTC, | |
+ 0x00333030 MX6_MMDC_P0_MDPDC, | |
+ 0x0002556D MX6_MMDC_P0_MDASP, | |
+ 0x00000027 MX6_MMDC_P0_MDCTL, | |
+ 0x84190000 MX6_MMDC_P0_MDSCR, | |
+ 0x04008032 MX6_MMDC_P0_MDSCR, | |
+ 0x00008033 MX6_MMDC_P0_MDSCR, | |
+ 0x00048031 MX6_MMDC_P0_MDSCR, | |
+ 0x13208030 MX6_MMDC_P0_MDSCR, | |
+ 0x04008040 MX6_MMDC_P0_MPZQHWCTRL, | |
+ 0xA1390003 MX6_MMDC_P1_MPZQHWCTRL, | |
+ 0xA1390003 MX6_MMDC_P0_MDREF, | |
+ 0x00007800 MX6_MMDC_P0_MPODTCTRL, | |
+ 0x00022227 MX6_MMDC_P1_MPODTCTRL, | |
+ 0x00022227 MX6_MMDC_P0_MPDGCTRL0, | |
+ 0x42350231 MX6_MMDC_P0_MPDGCTRL1, | |
+ 0x021A0218 MX6_MMDC_P1_MPDGCTRL0, | |
+ 0x42350231 MX6_MMDC_P1_MPDGCTRL1, | |
+ 0x021A0218 MX6_MMDC_P0_MPRDDLCTL, | |
+ 0x4B4B4E49 MX6_MMDC_P1_MPRDDLCTL, | |
+ 0x4B4B4E49 MX6_MMDC_P0_MPWRDLCTL, | |
+ 0x3F3F3035 MX6_MMDC_P1_MPWRDLCTL, | |
+ 0x3F3F3035 MX6_MMDC_P0_MPWLDECTRL0, | |
+ 0x0040003C MX6_MMDC_P0_MPWLDECTRL1, | |
+ 0x0032003E MX6_MMDC_P1_MPWLDECTRL0, | |
+ 0x0040003C MX6_MMDC_P1_MPWLDECTRL1, | |
+ 0x0032003E MX6_MMDC_P0_MPMUR0, | |
+ 0x00000800 MX6_MMDC_P1_MPMUR0, | |
+ 0x00000800 MX6_MMDC_P0_MDSCR, | |
+ 0x00000000 MX6_MMDC_P0_MAPSR, | |
+ 0x00011006 | |
+ /* set the default clock gate to save power */ | |
+ CCM_CCGR0, | |
+ 0x00C03F3F CCM_CCGR1, | |
+ 0x0030FC03 CCM_CCGR2, | |
+ 0x0FFFC000 CCM_CCGR3, | |
+ 0x3FF00000 CCM_CCGR4, | |
+ 0x00FFF300 CCM_CCGR5, | |
+ 0x0F0000C3 CCM_CCGR6, | |
+ 0x000003FF | |
+ /* enable AXI cache for VDOA/VPU/IPU */ | |
+ MX6_IOMUXC_GPR4, | |
+ 0xF00000CF | |
+ /* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ | |
+ MX6_IOMUXC_GPR6, | |
+ 0x007F007F MX6_IOMUXC_GPR7, | |
+ 0x007F007F | |
+ /* | |
+ * Setup CCM_CCOSR register as follows: | |
+ * | |
+ * cko1_en = 1 --> CKO1 enabled | |
+ * cko1_div = 111 --> divide by 8 | |
+ * cko1_sel = 1011 --> ahb_clk_root | |
+ * | |
+ * This sets CKO1 at ahb_clk_root/8 = 132/8 = 16.5 MHz | |
+ */ | |
+ CCM_CCOSR, | |
+ 0x000000fb, | |
+}; | |
+ | |
+static void ddr_init(int *table, int size) | |
+{ | |
+ int i; | |
+ | |
+ for (i = 0; i < size / 2; i++) | |
+ writel(table[2 * i + 1], table[2 * i]); | |
+} | |
+ | |
+static void spl_dram_init(void) | |
+{ | |
+ ddr_init(dcd_table, ARRAY_SIZE(dcd_table)); | |
+} | |
+ | |
+void board_init_f(ulong dummy) | |
+{ | |
+ /* DDR initialization */ | |
+ spl_dram_init(); | |
+ | |
+ /* setup AIPS and disable watchdog */ | |
+ arch_cpu_init(); | |
+ | |
+ ccgr_init(); | |
+ gpr_init(); | |
+ | |
+ /* iomux and setup of i2c */ | |
+ board_early_init_f(); | |
+ | |
+ /* setup GP timer */ | |
+ timer_init(); | |
+ | |
+ /* UART clocks enabled and gd valid - init serial console */ | |
+ preloader_console_init(); | |
+ | |
+ /* Clear the BSS. */ | |
+ memset(__bss_start, 0, __bss_end - __bss_start); | |
+ | |
+ /* load/boot image from boot device */ | |
+ board_init_r(NULL, 0); | |
+} | |
+#endif | |
+ | |
+#ifdef CONFIG_SPL_LOAD_FIT | |
+int board_fit_config_name_match(const char *name) | |
+{ | |
+ return 0; | |
+} | |
+#endif | |
diff --git a/configs/riotboard_defconfig b/configs/riotboard_defconfig | |
index faa5bd7ce1f..cb567d7ed19 100644 | |
--- a/configs/riotboard_defconfig | |
+++ b/configs/riotboard_defconfig | |
@@ -1,92 +1,132 @@ | |
CONFIG_ARM=y | |
CONFIG_ARCH_MX6=y | |
-CONFIG_TEXT_BASE=0x17800000 | |
-CONFIG_SYS_MALLOC_LEN=0xa00000 | |
-CONFIG_SPL_GPIO=y | |
-CONFIG_SPL_LIBCOMMON_SUPPORT=y | |
-CONFIG_SPL_LIBGENERIC_SUPPORT=y | |
+CONFIG_SYS_MALLOC_LEN=0x1000000 | |
+CONFIG_MX6S=y | |
+CONFIG_TARGET_RIOTBOARD=y | |
CONFIG_NR_DRAM_BANKS=1 | |
CONFIG_ENV_SIZE=0x2000 | |
-CONFIG_ENV_OFFSET=0x60000 | |
-CONFIG_IMX_CONFIG="board/boundary/nitrogen6x/nitrogen6s1g.cfg" | |
-CONFIG_MX6S=y | |
-CONFIG_TARGET_EMBESTMX6BOARDS=y | |
+CONFIG_ENV_OFFSET=0xE0000 | |
+CONFIG_SYS_MMC_ENV_DEV=3 | |
CONFIG_SYS_I2C_MXC_I2C1=y | |
CONFIG_SYS_I2C_MXC_I2C2=y | |
CONFIG_SYS_I2C_MXC_I2C3=y | |
-CONFIG_DM_GPIO=y | |
-CONFIG_DEFAULT_DEVICE_TREE="imx6dl-riotboard" | |
-CONFIG_SPL_TEXT_BASE=0x00908000 | |
-CONFIG_SPL_MMC=y | |
-CONFIG_SPL_SERIAL=y | |
-CONFIG_SPL=y | |
-CONFIG_SPL_LIBDISK_SUPPORT=y | |
CONFIG_SYS_MONITOR_LEN=409600 | |
-CONFIG_DISTRO_DEFAULTS=y | |
-CONFIG_BOOTCOMMAND="run finduuid; run distro_bootcmd" | |
+CONFIG_VIDEO=y | |
+CONFIG_VIDEO_LOGO=y | |
+# CONFIG_VIDEO_BPP8 is not set | |
+# CONFIG_VIDEO_BPP32 is not set | |
+CONFIG_SYS_WHITE_ON_BLACK=y | |
+# CONFIG_VIDEO_IPUV3 is not set | |
+CONFIG_IMX_VIDEO_SKIP=y | |
+CONFIG_IMX_HDMI=y | |
+CONFIG_SPLASH_SCREEN=y | |
+CONFIG_SPLASH_SCREEN_ALIGN=y | |
+CONFIG_BMP_16BPP=y | |
+CONFIG_IMX_CONFIG="board/freescale/riotboard/nitrogen6s1g.cfg" | |
+CONFIG_ENV_IS_IN_MMC=y | |
+CONFIG_BOOTDELAY=3 | |
+CONFIG_USE_BOOTCOMMAND=y | |
+CONFIG_BOOTCOMMAND="mmc dev ${mmcdev};if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; fi; fi; fi;" | |
# CONFIG_CONSOLE_MUX is not set | |
CONFIG_SYS_CONSOLE_IS_IN_ENV=y | |
CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE=y | |
-CONFIG_BOARD_EARLY_INIT_F=y | |
-CONFIG_SPL_RAW_IMAGE_SUPPORT=y | |
-CONFIG_SYS_SPL_MALLOC=y | |
-CONFIG_SPL_FS_EXT4=y | |
-CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="u-boot-dtb.img" | |
-CONFIG_SPL_FS_LOAD_ARGS_NAME="imx6dl-riotboard.dtb" | |
-CONFIG_SPL_OS_BOOT=y | |
-CONFIG_SYS_SPL_ARGS_ADDR=0x13000000 | |
+CONFIG_SUPPORT_RAW_INITRD=y | |
+CONFIG_BOUNCE_BUFFER=y | |
+CONFIG_HUSH_PARSER=y | |
CONFIG_SYS_MAXARGS=32 | |
CONFIG_SYS_PBSIZE=532 | |
-CONFIG_CMD_GPIO=y | |
-CONFIG_CMD_I2C=y | |
+CONFIG_CMD_BOOTZ=y | |
+# CONFIG_CMD_IMLS is not set | |
+# CONFIG_CMD_FLASH is not set | |
+CONFIG_CMD_MEMTEST=y | |
CONFIG_CMD_MMC=y | |
-# CONFIG_CMD_PINMUX is not set | |
+CONFIG_CMD_PART=y | |
+CONFIG_CMD_PCI=y | |
+CONFIG_CMD_READ=y | |
+CONFIG_CMD_SF=y | |
+CONFIG_CMD_I2C=y | |
CONFIG_CMD_USB=y | |
+CONFIG_CMD_USB_MASS_STORAGE=y | |
+CONFIG_CMD_GPIO=y | |
+CONFIG_CMD_DHCP=y | |
+CONFIG_CMD_MII=y | |
+CONFIG_CMD_PING=y | |
+CONFIG_CMD_BMP=y | |
CONFIG_CMD_CACHE=y | |
-# CONFIG_CMD_VIDCONSOLE is not set | |
+CONFIG_CMD_EXT2=y | |
+CONFIG_CMD_EXT4=y | |
CONFIG_CMD_EXT4_WRITE=y | |
-CONFIG_OF_CONTROL=y | |
+CONFIG_CMD_FAT=y | |
+CONFIG_CMD_FS_GENERIC=y | |
CONFIG_ENV_OVERWRITE=y | |
-CONFIG_ENV_IS_IN_MMC=y | |
CONFIG_SYS_RELOC_GD_ENV_ADDR=y | |
-CONFIG_SYS_MMC_ENV_DEV=2 | |
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y | |
CONFIG_ARP_TIMEOUT=200 | |
-CONFIG_BOUNCE_BUFFER=y | |
-CONFIG_SYS_I2C_LEGACY=y | |
-CONFIG_SPL_SYS_I2C_LEGACY=y | |
CONFIG_SYS_I2C_MXC=y | |
CONFIG_SUPPORT_EMMC_BOOT=y | |
-CONFIG_FSL_USDHC=y | |
+CONFIG_DM_SERIAL=y | |
+CONFIG_MXC_UART=y | |
CONFIG_DM_SPI_FLASH=y | |
+CONFIG_SPI_FLASH=y | |
+CONFIG_SF_DEFAULT_BUS=0 | |
+CONFIG_SF_DEFAULT_MODE=0 | |
CONFIG_SF_DEFAULT_SPEED=20000000 | |
-CONFIG_SPI_FLASH_SST=y | |
-CONFIG_PHYLIB=y | |
+CONFIG_SF_DEFAULT_CS=0 | |
+CONFIG_SPI_FLASH_STMICRO=y | |
CONFIG_PHY_ATHEROS=y | |
CONFIG_FEC_MXC=y | |
-CONFIG_MII=y | |
-CONFIG_PINCTRL=y | |
-CONFIG_PINCTRL_IMX6=y | |
-CONFIG_MXC_UART=y | |
+CONFIG_RGMII=y | |
+CONFIG_PCI=y | |
+CONFIG_PCI_SCAN_SHOW=y | |
+CONFIG_PCIE_IMX=y | |
+CONFIG_REGMAP=y | |
+CONFIG_SYSCON=y | |
CONFIG_SPI=y | |
CONFIG_DM_SPI=y | |
CONFIG_MXC_SPI=y | |
-CONFIG_DM_THERMAL=y | |
CONFIG_IMX_THERMAL=y | |
CONFIG_USB=y | |
+CONFIG_DM_USB=y | |
+CONFIG_USB_STORAGE=y | |
+CONFIG_USB_GADGET=y | |
+CONFIG_USB_GADGET_DOWNLOAD=y | |
+CONFIG_USB_GADGET_MANUFACTURER="FSL" | |
+CONFIG_USB_GADGET_VENDOR_NUM=0x1fc9 | |
+CONFIG_USB_GADGET_PRODUCT_NUM=0x0152 | |
+CONFIG_FASTBOOT_USB_DEV=0 | |
+CONFIG_CI_UDC=y | |
CONFIG_USB_HOST_ETHER=y | |
CONFIG_USB_ETHER_ASIX=y | |
-CONFIG_VIDEO=y | |
-CONFIG_VIDEO_LOGO=y | |
-# CONFIG_BACKLIGHT is not set | |
-# CONFIG_VIDEO_BPP8 is not set | |
-# CONFIG_VIDEO_BPP32 is not set | |
-# CONFIG_VIDEO_ANSI is not set | |
-CONFIG_SYS_WHITE_ON_BLACK=y | |
-# CONFIG_PANEL is not set | |
-CONFIG_VIDEO_IPUV3=y | |
-CONFIG_IMX_VIDEO_SKIP=y | |
-CONFIG_IMX_HDMI=y | |
-CONFIG_SPLASH_SCREEN=y | |
-CONFIG_SPLASH_SCREEN_ALIGN=y | |
-CONFIG_BMP_16BPP=y | |
-CONFIG_SPL_OF_LIBFDT=y | |
+CONFIG_USE_ETHPRIME=y | |
+CONFIG_ETHPRIME="eth0" | |
+# CONFIG_VIDEO_SW_CURSOR is not set | |
+# CONFIG_OF_LIBFDT=y | |
+ | |
+CONFIG_DEFAULT_DEVICE_TREE="imx6dl-riotboard" | |
+CONFIG_OF_CONTROL=y | |
+CONFIG_DM_GPIO=y | |
+CONFIG_DM_I2C=y | |
+CONFIG_DM_MMC=y | |
+CONFIG_FSL_USDHC=y | |
+CONFIG_PINCTRL=y | |
+CONFIG_PINCTRL_IMX6=y | |
+CONFIG_DM_PMIC=y | |
+CONFIG_DM_PMIC_PFUZE100=y | |
+CONFIG_DM_REGULATOR=y | |
+CONFIG_DM_REGULATOR_PFUZE100=y | |
+CONFIG_DM_REGULATOR_FIXED=y | |
+CONFIG_DM_REGULATOR_GPIO=y | |
+CONFIG_DM_ETH=y | |
+CONFIG_PHYLIB=y | |
+CONFIG_MII=y | |
+ | |
+CONFIG_CMD_FASTBOOT=y | |
+CONFIG_USB_FUNCTION_FASTBOOT=y | |
+CONFIG_FASTBOOT_UUU_SUPPORT=y | |
+CONFIG_FASTBOOT=y | |
+CONFIG_FASTBOOT_BUF_ADDR=0x12C00000 | |
+CONFIG_FASTBOOT_BUF_SIZE=0x10000000 | |
+CONFIG_FASTBOOT_FLASH=y | |
+CONFIG_EFI_PARTITION=y | |
+CONFIG_CMD_CRC32=y | |
+CONFIG_CRC32_VERIFY=y | |
diff --git a/include/configs/riotboard.h b/include/configs/riotboard.h | |
new file mode 100644 | |
index 00000000000..b69d95e57ee | |
--- /dev/null | |
+++ b/include/configs/riotboard.h | |
@@ -0,0 +1,106 @@ | |
+/* SPDX-License-Identifier: GPL-2.0+ */ | |
+/* | |
+ * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. | |
+ * | |
+ * Configuration settings for the Boundary Devices Nitrogen6X | |
+ * and Freescale i.MX6Q Sabre Lite boards. | |
+ */ | |
+ | |
+#ifndef __CONFIG_H | |
+#define __CONFIG_H | |
+ | |
+#include "mx6_common.h" | |
+ | |
+#define CFG_MXC_UART_BASE UART2_BASE | |
+ | |
+/* MMC Configs */ | |
+#define CFG_SYS_FSL_ESDHC_ADDR 0 | |
+#define CFG_SYS_FSL_USDHC_NUM 2 | |
+ | |
+#define IMX_FEC_BASE ENET_BASE_ADDR | |
+#define CFG_FEC_MXC_PHYADDR 6 | |
+ | |
+/* USB Configs */ | |
+#define CFG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW) | |
+#define CFG_MXC_USB_FLAGS 0 | |
+ | |
+#ifdef CONFIG_CMD_MMC | |
+#define DISTRO_BOOT_DEV_MMC(func) func(MMC, mmc, 0) func(MMC, mmc, 1) | |
+#else | |
+#define DISTRO_BOOT_DEV_MMC(func) | |
+#endif | |
+ | |
+#ifdef CONFIG_CMD_SATA | |
+#define DISTRO_BOOT_DEV_SATA(func) func(SATA, sata, 0) | |
+#else | |
+#define DISTRO_BOOT_DEV_SATA(func) | |
+#endif | |
+ | |
+#ifdef CONFIG_USB_STORAGE | |
+#define DISTRO_BOOT_DEV_USB(func) func(USB, usb, 0) | |
+#else | |
+#define DISTRO_BOOT_DEV_USB(func) | |
+#endif | |
+ | |
+#ifdef CONFIG_CMD_PXE | |
+#define DISTRO_BOOT_DEV_PXE(func) func(PXE, pxe, na) | |
+#else | |
+#define DISTRO_BOOT_DEV_PXE(func) | |
+#endif | |
+ | |
+#ifdef CONFIG_CMD_DHCP | |
+#define DISTRO_BOOT_DEV_DHCP(func) func(DHCP, dhcp, na) | |
+#else | |
+#define DISTRO_BOOT_DEV_DHCP(func) | |
+#endif | |
+ | |
+#define BOOT_TARGET_DEVICES(func) \ | |
+ DISTRO_BOOT_DEV_MMC(func) \ | |
+ DISTRO_BOOT_DEV_SATA(func) \ | |
+ DISTRO_BOOT_DEV_USB(func) \ | |
+ DISTRO_BOOT_DEV_PXE(func) \ | |
+ DISTRO_BOOT_DEV_DHCP(func) | |
+ | |
+#include <config_distro_bootcmd.h> | |
+#include <linux/stringify.h> | |
+ | |
+#define CFG_EXTRA_ENV_SETTINGS \ | |
+ "console=ttymxc1\0" \ | |
+ "fdt_high=0xffffffff\0" \ | |
+ "initrd_high=0xffffffff\0" \ | |
+ "fdt_addr=0x18000000\0" \ | |
+ "fdt_file=" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \ | |
+ "scriptaddr=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \ | |
+ "ramdiskaddr=0x13000000\0" \ | |
+ "usb_pgood_delay=2000\0" \ | |
+ "emmc_dev=3\0"\ | |
+ "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \ | |
+ "mmcpart=1\0" \ | |
+ "image=zImage\0" \ | |
+ "mmcroot=/dev/mmcblk3p2 rootwait rw\0" \ | |
+ "mmcargs=setenv bootargs console=${console},${baudrate} " \ | |
+ "root=${mmcroot}\0" \ | |
+ "loadbootscript=" \ | |
+ "load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script} || " \ | |
+ "load mmc ${mmcdev}:${mmcpart} ${loadaddr} boot/${script};\0" \ | |
+ "bootscript=echo Running bootscript from mmc ...; " \ | |
+ "source\0" \ | |
+ "loadimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ | |
+ "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ | |
+ "mmcboot=echo Booting from mmc ...; " \ | |
+ "run mmcargs; " \ | |
+ "run loadfdt; " \ | |
+ "bootz ${loadaddr} - ${fdt_addr}; " \ | |
+ | |
+/* Miscellaneous configurable options */ | |
+ | |
+/* Physical Memory Map */ | |
+#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR | |
+ | |
+#define CFG_SYS_SDRAM_BASE PHYS_SDRAM | |
+#define CFG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR | |
+#define CFG_SYS_INIT_RAM_SIZE IRAM_SIZE | |
+ | |
+/* Environment organization */ | |
+ | |
+#endif /* __CONFIG_H */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment