From: Peng Fan <b51431@freescale.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] imx: mx6ul: support mx6ul 9x9 evk board
Date: Sun, 6 Sep 2015 13:53:13 +0800 [thread overview]
Message-ID: <20150906055307.GA26664@shlinux2> (raw)
In-Reply-To: <1441514961-17063-1-git-send-email-Peng.Fan@freescale.com>
New version V2: https://patchwork.ozlabs.org/patch/514899/
Regards,
Peng.
On Sun, Sep 06, 2015 at 12:49:21PM +0800, Peng Fan wrote:
>This patch is to support mx6ul_9x9_evk board based on mx6ul_14x14_evk,
>the difference between mx6ul 9x9 evk and mx6ul 14x14 evk are:
>1. mx6ul 9x9 evk use pfuze3000, while mx6ul 14x14 evk use DCDC.
>2. mx6ul 9x9 evk supports 256MB LPDDR2, while mx6ul 14x14 evk
> supports 512MB DDR3
>3. mx6ul_9x9_evk use 9x9 package, while mx6ul_14x14_evk use 14x14 package.
>
>This patch add the following:
>1. Discard PHYS_SDRAM_SIZE from header file, use imx_ddr_size()
>2. Introduce a macro is_mx6ul_9x9_evk using
> CONFIG_IS_ENABLED(TARGET_MX6UL_9X9_EVK) to avoid "#ifdef xxx" in non-SPL
> part. To SPL part, CONFIG_IS_ENABLED(TARGET_MX6UL_9X9_EVK) can not work,
> so still use "#ifdef CONFIG_TARGET_MX6UL_9X9_EVK" to differentiate with
> mx6ul_14x14_evk. And we have no way to dymaically checking this chip
> is 9x9 or 14x14.
>3. mx6ul_9x9_evk use pfuze3000, so enabled POWER related configurations.
> POWER related configurations also effect for mx6ul_14x14_evk. But
> power_init_board implementation using 'if (is_mx6ul_9x9_evk())' to
> do initialization for mx6ul_9x9_evk, and do nothing for mx6ul_14x14_evk.
>4. mx6ul_9x9_evk use lpddr2 with size 256MB, so add related SPL DRAM
> configurations.
>5. Enable CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG and setting dtb file
> according to board_rev and board_name.
>6. Add TARGET_MX6UL_9X9_EVK Kconfig entry
>
>Boot Log:
>U-Boot SPL 2015.10-rc2-00356-g536ce34 (Sep 06 2015 - 12:22:53)
>reading u-boot.img
>reading u-boot.img
>
>U-Boot 2015.10-rc2-00356-g536ce34 (Sep 06 2015 - 12:22:53 +0800)
>
>CPU: Freescale i.MX6UL rev1.0 792 MHz (running at 396 MHz)
>CPU: Commercial temperature grade (0C to 95C) at 41C
>Reset cause: POR
>Board: MX6UL 9x9 EVK
>I2C: ready
>DRAM: 256 MiB
>PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
>MMC: FSL_SDHC: 0, FSL_SDHC: 1
>In: serial
>Out: serial
>Err: serial
>Net: FEC1
>Hit any key to stop autoboot: 0
>
>Signed-off-by: Peng Fan <Peng.Fan@freescale.com>
>Cc: Stefano Babic <sbabic@denx.de>
>---
> arch/arm/cpu/armv7/mx6/Kconfig | 8 +
> board/freescale/mx6ul_14x14_evk/Kconfig | 2 +-
> board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c | 183 ++++++++++++++++++----
> configs/mx6ul_9x9_evk_defconfig | 8 +
> include/configs/imx6_spl.h | 1 +
> include/configs/mx6ul_14x14_evk.h | 26 ++-
> 6 files changed, 191 insertions(+), 37 deletions(-)
> create mode 100644 configs/mx6ul_9x9_evk_defconfig
>
>diff --git a/arch/arm/cpu/armv7/mx6/Kconfig b/arch/arm/cpu/armv7/mx6/Kconfig
>index 8b0120f..b3f7eaf 100644
>--- a/arch/arm/cpu/armv7/mx6/Kconfig
>+++ b/arch/arm/cpu/armv7/mx6/Kconfig
>@@ -104,6 +104,14 @@ config TARGET_MX6SXSABRESD
> select DM
> select DM_THERMAL
>
>+config TARGET_MX6UL_9X9_EVK
>+ bool "mx6ul_9x9_evk"
>+ select MX6UL
>+ select CPU_V7
>+ select DM
>+ select DM_THERMAL
>+ select SUPPORT_SPL
>+
> config TARGET_MX6UL_14X14_EVK
> bool "mx6ul_14x14_evk"
> select MX6UL
>diff --git a/board/freescale/mx6ul_14x14_evk/Kconfig b/board/freescale/mx6ul_14x14_evk/Kconfig
>index 393aca6..eda02c9 100644
>--- a/board/freescale/mx6ul_14x14_evk/Kconfig
>+++ b/board/freescale/mx6ul_14x14_evk/Kconfig
>@@ -1,4 +1,4 @@
>-if TARGET_MX6UL_14X14_EVK
>+if TARGET_MX6UL_14X14_EVK || TARGET_MX6UL_9X9_EVK
>
> config SYS_BOARD
> default "mx6ul_14x14_evk"
>diff --git a/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c b/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c
>index c09d84e..612fb78 100644
>--- a/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c
>+++ b/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c
>@@ -23,6 +23,9 @@
> #include <linux/sizes.h>
> #include <mmc.h>
> #include <netdev.h>
>+#include <power/pmic.h>
>+#include <power/pfuze3000_pmic.h>
>+#include "../common/pfuze.h"
> #include <usb.h>
> #include <usb/ehci-fsl.h>
>
>@@ -210,11 +213,56 @@ struct i2c_pads_info i2c_pad_info1 = {
> .gp = IMX_GPIO_NR(1, 29),
> },
> };
>+
>+#ifdef CONFIG_POWER
>+#define I2C_PMIC 0
>+int power_init_board(void)
>+{
>+ if (is_mx6ul_9x9_evk()) {
>+ struct pmic *pfuze;
>+ int ret;
>+ unsigned int reg, rev_id;
>+
>+ ret = power_pfuze3000_init(I2C_PMIC);
>+ if (ret)
>+ return ret;
>+
>+ pfuze = pmic_get("PFUZE3000");
>+ ret = pmic_probe(pfuze);
>+ if (ret)
>+ return ret;
>+
>+ pmic_reg_read(pfuze, PFUZE3000_DEVICEID, ®);
>+ pmic_reg_read(pfuze, PFUZE3000_REVID, &rev_id);
>+ printf("PMIC: PFUZE3000 DEV_ID=0x%x REV_ID=0x%x\n",
>+ reg, rev_id);
>+
>+ /* disable Low Power Mode during standby mode */
>+ pmic_reg_read(pfuze, PFUZE3000_LDOGCTL, ®);
>+ reg |= 0x1;
>+ pmic_reg_write(pfuze, PFUZE3000_LDOGCTL, reg);
>+
>+ /* SW1B step ramp up time from 2us to 4us/25mV */
>+ reg = 0x40;
>+ pmic_reg_write(pfuze, PFUZE3000_SW1BCONF, reg);
>+
>+ /* SW1B mode to APS/PFM */
>+ reg = 0xc;
>+ pmic_reg_write(pfuze, PFUZE3000_SW1BMODE, reg);
>+
>+ /* SW1B standby voltage set to 0.975V */
>+ reg = 0xb;
>+ pmic_reg_write(pfuze, PFUZE3000_SW1BSTBY, reg);
>+ }
>+
>+ return 0;
>+}
>+#endif
> #endif
>
> int dram_init(void)
> {
>- gd->ram_size = PHYS_SDRAM_SIZE;
>+ gd->ram_size = imx_ddr_size();
>
> return 0;
> }
>@@ -614,6 +662,15 @@ int board_late_init(void)
> add_board_boot_modes(board_boot_modes);
> #endif
>
>+#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
>+ setenv("board_name", "EVK");
>+
>+ if (is_mx6ul_9x9_evk())
>+ setenv("board_rev", "9X9");
>+ else
>+ setenv("board_rev", "14X14");
>+#endif
>+
> return 0;
> }
>
>@@ -624,7 +681,10 @@ u32 get_board_rev(void)
>
> int checkboard(void)
> {
>- puts("Board: MX6UL 14x14 EVK\n");
>+ if (is_mx6ul_9x9_evk())
>+ puts("Board: MX6UL 9x9 EVK\n");
>+ else
>+ puts("Board: MX6UL 14x14 EVK\n");
>
> return 0;
> }
>@@ -634,7 +694,76 @@ int checkboard(void)
> #include <spl.h>
> #include <asm/arch/mx6-ddr.h>
>
>-const struct mx6ul_iomux_ddr_regs mx6_ddr_ioregs = {
>+
>+static struct mx6ul_iomux_grp_regs mx6_grp_ioregs = {
>+ .grp_addds = 0x00000030,
>+ .grp_ddrmode_ctl = 0x00020000,
>+ .grp_b0ds = 0x00000030,
>+ .grp_ctlds = 0x00000030,
>+ .grp_b1ds = 0x00000030,
>+ .grp_ddrpke = 0x00000000,
>+ .grp_ddrmode = 0x00020000,
>+#ifdef CONFIG_TARGET_MX6UL_9X9_EVK
>+ .grp_ddr_type = 0x00080000,
>+#else
>+ .grp_ddr_type = 0x000c0000,
>+#endif
>+};
>+
>+#ifdef CONFIG_TARGET_MX6UL_9X9_EVK
>+static struct mx6ul_iomux_ddr_regs mx6_ddr_ioregs = {
>+ .dram_dqm0 = 0x00000030,
>+ .dram_dqm1 = 0x00000030,
>+ .dram_ras = 0x00000030,
>+ .dram_cas = 0x00000030,
>+ .dram_odt0 = 0x00000000,
>+ .dram_odt1 = 0x00000000,
>+ .dram_sdba2 = 0x00000000,
>+ .dram_sdclk_0 = 0x00000030,
>+ .dram_sdqs0 = 0x00003030,
>+ .dram_sdqs1 = 0x00003030,
>+ .dram_reset = 0x00000030,
>+};
>+
>+static struct mx6_mmdc_calibration mx6_mmcd_calib = {
>+ .p0_mpwldectrl0 = 0x00000000,
>+ .p0_mpdgctrl0 = 0x20000000,
>+ .p0_mprddlctl = 0x4040484f,
>+ .p0_mpwrdlctl = 0x40405247,
>+ .mpzqlp2ctl = 0x1b4700c7,
>+};
>+
>+static struct mx6_lpddr2_cfg mem_ddr = {
>+ .mem_speed = 800,
>+ .density = 2,
>+ .width = 16,
>+ .banks = 4,
>+ .rowaddr = 14,
>+ .coladdr = 10,
>+ .trcd_lp = 1500,
>+ .trppb_lp = 1500,
>+ .trpab_lp = 2000,
>+ .trasmin = 4250,
>+};
>+
>+struct mx6_ddr_sysinfo ddr_sysinfo = {
>+ .dsize = 0,
>+ .cs_density = 18,
>+ .ncs = 1,
>+ .cs1_mirror = 0,
>+ .walat = 0,
>+ .ralat = 5,
>+ .mif3_mode = 3,
>+ .bi_on = 1,
>+ .rtt_wr = 0, /* LPDDR2 does not need rtt_wr rtt_nom */
>+ .rtt_nom = 0,
>+ .sde_to_rst = 0, /* LPDDR2 does not need this field */
>+ .rst_to_cke = 0x10, /* JEDEC value for LPDDR2: 200us */
>+ .ddr_type = DDR_TYPE_LPDDR2,
>+};
>+
>+#else
>+static struct mx6ul_iomux_ddr_regs mx6_ddr_ioregs = {
> .dram_dqm0 = 0x00000030,
> .dram_dqm1 = 0x00000030,
> .dram_ras = 0x00000030,
>@@ -648,24 +777,29 @@ const struct mx6ul_iomux_ddr_regs mx6_ddr_ioregs = {
> .dram_reset = 0x00000030,
> };
>
>-const struct mx6ul_iomux_grp_regs mx6_grp_ioregs = {
>- .grp_addds = 0x00000030,
>- .grp_ddrmode_ctl = 0x00020000,
>- .grp_b0ds = 0x00000030,
>- .grp_ctlds = 0x00000030,
>- .grp_b1ds = 0x00000030,
>- .grp_ddrpke = 0x00000000,
>- .grp_ddrmode = 0x00020000,
>- .grp_ddr_type = 0x000c0000,
>-};
>-
>-const struct mx6_mmdc_calibration mx6_mmcd_calib = {
>+static struct mx6_mmdc_calibration mx6_mmcd_calib = {
> .p0_mpwldectrl0 = 0x00070007,
> .p0_mpdgctrl0 = 0x41490145,
> .p0_mprddlctl = 0x40404546,
> .p0_mpwrdlctl = 0x4040524D,
> };
>
>+struct mx6_ddr_sysinfo ddr_sysinfo = {
>+ .dsize = 0,
>+ .cs_density = 20,
>+ .ncs = 1,
>+ .cs1_mirror = 0,
>+ .rtt_wr = 2,
>+ .rtt_nom = 1, /* RTT_Nom = RZQ/2 */
>+ .walat = 1, /* Write additional latency */
>+ .ralat = 5, /* Read additional latency */
>+ .mif3_mode = 3, /* Command prediction working mode */
>+ .bi_on = 1, /* Bank interleaving enabled */
>+ .sde_to_rst = 0x10, /* 14 cycles, 200us (JEDEC default) */
>+ .rst_to_cke = 0x23, /* 33 cycles, 500us (JEDEC default) */
>+ .ddr_type = DDR_TYPE_DDR3,
>+};
>+
> static struct mx6_ddr3_cfg mem_ddr = {
> .mem_speed = 800,
> .density = 4,
>@@ -678,6 +812,7 @@ static struct mx6_ddr3_cfg mem_ddr = {
> .trcmin = 4875,
> .trasmin = 3500,
> };
>+#endif
>
> static void ccgr_init(void)
> {
>@@ -695,24 +830,8 @@ static void ccgr_init(void)
>
> static void spl_dram_init(void)
> {
>- struct mx6_ddr_sysinfo sysinfo = {
>- .dsize = 0,
>- .cs_density = 20,
>- .ncs = 1,
>- .cs1_mirror = 0,
>- .rtt_wr = 2,
>- .rtt_nom = 1, /* RTT_Nom = RZQ/2 */
>- .walat = 1, /* Write additional latency */
>- .ralat = 5, /* Read additional latency */
>- .mif3_mode = 3, /* Command prediction working mode */
>- .bi_on = 1, /* Bank interleaving enabled */
>- .sde_to_rst = 0x10, /* 14 cycles, 200us (JEDEC default) */
>- .rst_to_cke = 0x23, /* 33 cycles, 500us (JEDEC default) */
>- .ddr_type = DDR_TYPE_DDR3,
>- };
>-
> mx6ul_dram_iocfg(mem_ddr.width, &mx6_ddr_ioregs, &mx6_grp_ioregs);
>- mx6_dram_cfg(&sysinfo, &mx6_mmcd_calib, &mem_ddr);
>+ mx6_dram_cfg(&ddr_sysinfo, &mx6_mmcd_calib, &mem_ddr);
> }
>
> void board_init_f(ulong dummy)
>diff --git a/configs/mx6ul_9x9_evk_defconfig b/configs/mx6ul_9x9_evk_defconfig
>new file mode 100644
>index 0000000..e54609d
>--- /dev/null
>+++ b/configs/mx6ul_9x9_evk_defconfig
>@@ -0,0 +1,8 @@
>+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/imx-common/spl_sd.cfg"
>+CONFIG_ARM=y
>+CONFIG_ARCH_MX6=y
>+CONFIG_TARGET_MX6UL_9X9_EVK=y
>+CONFIG_SPL=y
>+CONFIG_CMD_NET=y
>+CONFIG_CMD_PING=y
>+CONFIG_CMD_DHCP=y
>diff --git a/include/configs/imx6_spl.h b/include/configs/imx6_spl.h
>index 1744f2c..82ec798 100644
>--- a/include/configs/imx6_spl.h
>+++ b/include/configs/imx6_spl.h
>@@ -10,6 +10,7 @@
> #ifdef CONFIG_SPL
>
> #define CONFIG_SPL_FRAMEWORK
>+#include <linux/kconfig.h>
>
> /*
> * see Figure 8-3 in IMX6DQ/IMX6SDL Reference manuals:
>diff --git a/include/configs/mx6ul_14x14_evk.h b/include/configs/mx6ul_14x14_evk.h
>index 4a2280b..4d4db69 100644
>--- a/include/configs/mx6ul_14x14_evk.h
>+++ b/include/configs/mx6ul_14x14_evk.h
>@@ -14,12 +14,16 @@
> #include "mx6_common.h"
> #include <asm/imx-common/gpio.h>
>
>+#define is_mx6ul_9x9_evk() CONFIG_IS_ENABLED(TARGET_MX6UL_9X9_EVK)
>+
> /* SPL options */
> #define CONFIG_SPL_LIBCOMMON_SUPPORT
> #define CONFIG_SPL_MMC_SUPPORT
> #define CONFIG_SPL_FAT_SUPPORT
> #include "imx6_spl.h"
>
>+#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
>+
> #define CONFIG_ROM_UNIFIED_SECTIONS
> #define CONFIG_SYS_GENERIC_BOARD
> #define CONFIG_DISPLAY_CPUINFO
>@@ -66,9 +70,13 @@
> #define CONFIG_SYS_I2C
> #define CONFIG_SYS_I2C_MXC
> #define CONFIG_SYS_I2C_SPEED 100000
>-#endif
>
>-#define PHYS_SDRAM_SIZE SZ_512M
>+/* PMIC only for 9X9 EVK */
>+#define CONFIG_POWER
>+#define CONFIG_POWER_I2C
>+#define CONFIG_POWER_PFUZE3000
>+#define CONFIG_POWER_PFUZE3000_I2C_ADDR 0x08
>+#endif
>
> #undef CONFIG_CMD_IMLS
>
>@@ -80,7 +88,7 @@
> "console=ttymxc0\0" \
> "fdt_high=0xffffffff\0" \
> "initrd_high=0xffffffff\0" \
>- "fdt_file=imx6ul-14x14-evk.dtb\0" \
>+ "fdt_file=undefined\0" \
> "fdt_addr=0x83000000\0" \
> "boot_fdt=try\0" \
> "ip_dyn=yes\0" \
>@@ -134,9 +142,19 @@
> "fi; " \
> "else " \
> "bootz; " \
>- "fi;\0"
>+ "fi;\0" \
>+ "findfdt="\
>+ "if test $fdt_file = undefined; then " \
>+ "if test $board_name = EVK && test $board_rev = 9X9; then " \
>+ "setenv fdt_file imx6ul-9x9-evk.dtb; fi; " \
>+ "if test $board_name = EVK && test $board_rev = 14X14; then " \
>+ "setenv fdt_file imx6ul-14x14-evk.dtb; fi; " \
>+ "if test $fdt_file = undefined; then " \
>+ "echo WARNING: Could not determine dtb to use; fi; " \
>+ "fi;\0" \
>
> #define CONFIG_BOOTCOMMAND \
>+ "run findfdt;" \
> "mmc dev ${mmcdev};" \
> "mmc dev ${mmcdev}; if mmc rescan; then " \
> "if run loadbootscript; then " \
>--
>1.8.4
>
>
--
prev parent reply other threads:[~2015-09-06 5:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-06 4:49 [U-Boot] [PATCH] imx: mx6ul: support mx6ul 9x9 evk board Peng Fan
2015-09-06 5:53 ` Peng Fan [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150906055307.GA26664@shlinux2 \
--to=b51431@freescale.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.