Currently we need to build one U-boot image for each of the udoo variants: quad and dual-lite. By switching to SPL we can support all two variants with a single binary. Based on the SPL for wandboard. Tested with OpenELEC (Open Embedded Linux Entertainment Center) on both boards. Signed-off-by: Peter Vicman <peter.vicman@gmail.com> Cc: Fabio Estevam <fabio.estevam@freescale.com> Cc: Stefano Babic <sbabic@denx.de> Acked-by: Stefano Babic <sbabic@denx.de> Signed-off-by: Peter Vicman <peter.vicman@gmail.com> Acked-by: Fabio Estevam <fabio.estevam@freescale.com>master
parent
b893c9898c
commit
78506c2f86
@ -1,55 +0,0 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x00020036 |
||||
DATA 4, MX6_MMDC_P0_MDOTC, 0x09444040 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDCFG0, 0x54597955 |
||||
DATA 4, MX6_MMDC_P0_MDCFG1, 0xFF328F64 |
||||
DATA 4, MX6_MMDC_P0_MDCFG2, 0x01FF00DB |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDMISC, 0x00001740 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008000 |
||||
DATA 4, MX6_MMDC_P0_MDRWD, 0x000026D2 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDOR, 0x00591023 |
||||
DATA 4, MX6_MMDC_P0_MDASP, 0x00000027 |
||||
DATA 4, MX6_MMDC_P0_MDCTL, 0x831A0000 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04088032 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00048031 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x09408030 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040 |
||||
DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xA1380003 |
||||
DATA 4, MX6_MMDC_P1_MPZQHWCTRL, 0xA1380003 |
||||
DATA 4, MX6_MMDC_P0_MDREF, 0x00005800 |
||||
DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00011117 |
||||
DATA 4, MX6_MMDC_P1_MPODTCTRL, 0x00011117 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x43510360 |
||||
DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x0342033F |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL0, 0x033F033F |
||||
DATA 4, MX6_MMDC_P1_MPDGCTRL1, 0x03290266 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x4B3E4141 |
||||
DATA 4, MX6_MMDC_P1_MPRDDLCTL, 0x47413B4A |
||||
DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x42404843 |
||||
DATA 4, MX6_MMDC_P1_MPWRDLCTL, 0x4C3F4C45 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x00350035 |
||||
DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x001F001F |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL0, 0x00010001 |
||||
DATA 4, MX6_MMDC_P1_MPWLDECTRL1, 0x00010001 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800 |
||||
DATA 4, MX6_MMDC_P1_MPMUR0, 0x00000800 |
||||
|
||||
DATA 4, MX6_MMDC_P0_MDPDC, 0x00025576 |
||||
DATA 4, MX6_MMDC_P0_MAPSR, 0x00011006 |
||||
DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000 |
||||
|
@ -1,32 +0,0 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Device Configuration Data (DCD) |
||||
* |
||||
* Each entry must have the format: |
||||
* Addr-type Address Value |
||||
* |
||||
* where: |
||||
* Addr-type register length (1,2 or 4 bytes) |
||||
* Address absolute address of the register |
||||
* value value to be stored in the register |
||||
*/ |
||||
|
||||
/* 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, 0xF00000FF |
||||
|
||||
/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ |
||||
DATA 4, MX6_IOMUXC_GPR6, 0x007F007F |
||||
DATA 4, MX6_IOMUXC_GPR7, 0x007F007F |
||||
|
@ -1,87 +0,0 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Device Configuration Data (DCD) |
||||
* |
||||
* Each entry must have the format: |
||||
* Addr-type Address Value |
||||
* |
||||
* where: |
||||
* Addr-type register length (1,2 or 4 bytes) |
||||
* Address absolute address of the register |
||||
* value value to be stored in the register |
||||
*/ |
||||
|
||||
/* |
||||
* 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 |
||||
|
@ -1,29 +0,0 @@ |
||||
/* |
||||
* Copyright (C) 2013 Boundary Devices |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Refer doc/README.imximage 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 |
||||
|
||||
#define __ASSEMBLY__ |
||||
#include <config.h> |
||||
#include "asm/arch/mx6-ddr.h" |
||||
#include "asm/arch/iomux.h" |
||||
#include "asm/arch/crm_regs.h" |
||||
|
||||
#include "ddr-setup.cfg" |
||||
#include "1066mhz_4x256mx16.cfg" |
||||
#include "clocks.cfg" |
@ -0,0 +1,271 @@ |
||||
/*
|
||||
* Copyright (C) 2015 Udoo |
||||
* Author: Tungyi Lin <tungyilin1127@gmail.com> |
||||
* Richard Hu <hakahu@gmail.com> |
||||
* Based on board/wandboard/spl.c |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/imx-regs.h> |
||||
#include <asm/arch/iomux.h> |
||||
#include <asm/arch/mx6-pins.h> |
||||
#include <asm/errno.h> |
||||
#include <asm/gpio.h> |
||||
#include <asm/imx-common/iomux-v3.h> |
||||
#include <asm/imx-common/video.h> |
||||
#include <mmc.h> |
||||
#include <fsl_esdhc.h> |
||||
#include <asm/arch/crm_regs.h> |
||||
#include <asm/io.h> |
||||
#include <asm/arch/sys_proto.h> |
||||
#include <spl.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
#if defined(CONFIG_SPL_BUILD) |
||||
#include <asm/arch/mx6-ddr.h> |
||||
|
||||
/*
|
||||
* Driving strength: |
||||
* 0x30 == 40 Ohm |
||||
* 0x28 == 48 Ohm |
||||
*/ |
||||
#define IMX6DQ_DRIVE_STRENGTH 0x30 |
||||
#define IMX6SDL_DRIVE_STRENGTH 0x28 |
||||
|
||||
/* configure MX6Q/DUAL mmdc DDR io registers */ |
||||
static struct mx6dq_iomux_ddr_regs mx6dq_ddr_ioregs = { |
||||
.dram_sdclk_0 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdclk_1 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_cas = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_ras = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_reset = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdcke0 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdcke1 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdba2 = 0x00000000, |
||||
.dram_sdodt0 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdodt1 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdqs0 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdqs1 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdqs2 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdqs3 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdqs4 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdqs5 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdqs6 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_sdqs7 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_dqm0 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_dqm1 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_dqm2 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_dqm3 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_dqm4 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_dqm5 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_dqm6 = IMX6DQ_DRIVE_STRENGTH, |
||||
.dram_dqm7 = IMX6DQ_DRIVE_STRENGTH, |
||||
}; |
||||
|
||||
/* configure MX6Q/DUAL mmdc GRP io registers */ |
||||
static struct mx6dq_iomux_grp_regs mx6dq_grp_ioregs = { |
||||
.grp_ddr_type = 0x000c0000, |
||||
.grp_ddrmode_ctl = 0x00020000, |
||||
.grp_ddrpke = 0x00000000, |
||||
.grp_addds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_ctlds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_ddrmode = 0x00020000, |
||||
.grp_b0ds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_b1ds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_b2ds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_b3ds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_b4ds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_b5ds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_b6ds = IMX6DQ_DRIVE_STRENGTH, |
||||
.grp_b7ds = IMX6DQ_DRIVE_STRENGTH, |
||||
}; |
||||
|
||||
/* configure MX6SOLO/DUALLITE mmdc DDR io registers */ |
||||
struct mx6sdl_iomux_ddr_regs mx6sdl_ddr_ioregs = { |
||||
.dram_sdclk_0 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdclk_1 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_cas = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_ras = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_reset = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdcke0 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdcke1 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdba2 = 0x00000000, |
||||
.dram_sdodt0 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdodt1 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdqs0 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdqs1 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdqs2 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdqs3 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdqs4 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdqs5 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdqs6 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_sdqs7 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_dqm0 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_dqm1 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_dqm2 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_dqm3 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_dqm4 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_dqm5 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_dqm6 = IMX6SDL_DRIVE_STRENGTH, |
||||
.dram_dqm7 = IMX6SDL_DRIVE_STRENGTH, |
||||
}; |
||||
|
||||
/* configure MX6SOLO/DUALLITE mmdc GRP io registers */ |
||||
struct mx6sdl_iomux_grp_regs mx6sdl_grp_ioregs = { |
||||
.grp_ddr_type = 0x000c0000, |
||||
.grp_ddrmode_ctl = 0x00020000, |
||||
.grp_ddrpke = 0x00000000, |
||||
.grp_addds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_ctlds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_ddrmode = 0x00020000, |
||||
.grp_b0ds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_b1ds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_b2ds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_b3ds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_b4ds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_b5ds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_b6ds = IMX6SDL_DRIVE_STRENGTH, |
||||
.grp_b7ds = IMX6SDL_DRIVE_STRENGTH, |
||||
}; |
||||
|
||||
/* MT41K128M16JT-125 */ |
||||
static struct mx6_ddr3_cfg mt41k128m16jt_125 = { |
||||
/* quad = 1066, duallite = 800 */ |
||||
.mem_speed = 1066, |
||||
.density = 2, |
||||
.width = 16, |
||||
.banks = 8, |
||||
.rowaddr = 14, |
||||
.coladdr = 10, |
||||
.pagesz = 2, |
||||
.trcd = 1375, |
||||
.trcmin = 4875, |
||||
.trasmin = 3500, |
||||
.SRT = 0, |
||||
}; |
||||
|
||||
static struct mx6_mmdc_calibration mx6q_1g_mmdc_calib = { |
||||
.p0_mpwldectrl0 = 0x00350035, |
||||
.p0_mpwldectrl1 = 0x001F001F, |
||||
.p1_mpwldectrl0 = 0x00010001, |
||||
.p1_mpwldectrl1 = 0x00010001, |
||||
.p0_mpdgctrl0 = 0x43510360, |
||||
.p0_mpdgctrl1 = 0x0342033F, |
||||
.p1_mpdgctrl0 = 0x033F033F, |
||||
.p1_mpdgctrl1 = 0x03290266, |
||||
.p0_mprddlctl = 0x4B3E4141, |
||||
.p1_mprddlctl = 0x47413B4A, |
||||
.p0_mpwrdlctl = 0x42404843, |
||||
.p1_mpwrdlctl = 0x4C3F4C45, |
||||
}; |
||||
|
||||
static struct mx6_mmdc_calibration mx6dl_1g_mmdc_calib = { |
||||
.p0_mpwldectrl0 = 0x002F0038, |
||||
.p0_mpwldectrl1 = 0x001F001F, |
||||
.p1_mpwldectrl0 = 0x001F001F, |
||||
.p1_mpwldectrl1 = 0x001F001F, |
||||
.p0_mpdgctrl0 = 0x425C0251, |
||||
.p0_mpdgctrl1 = 0x021B021E, |
||||
.p1_mpdgctrl0 = 0x021B021E, |
||||
.p1_mpdgctrl1 = 0x01730200, |
||||
.p0_mprddlctl = 0x45474C45, |
||||
.p1_mprddlctl = 0x44464744, |
||||
.p0_mpwrdlctl = 0x3F3F3336, |
||||
.p1_mpwrdlctl = 0x32383630, |
||||
}; |
||||
|
||||
/* DDR 64bit 1GB */ |
||||
static struct mx6_ddr_sysinfo mem_qdl = { |
||||
.dsize = 2, |
||||
.cs1_mirror = 0, |
||||
/* config for full 4GB range so that get_mem_size() works */ |
||||
.cs_density = 32, |
||||
.ncs = 1, |
||||
.bi_on = 1, |
||||
/* quad = 2, duallite = 1 */ |
||||
.rtt_nom = 2, |
||||
/* quad = 2, duallite = 1 */ |
||||
.rtt_wr = 2, |
||||
.ralat = 5, |
||||
.walat = 0, |
||||
.mif3_mode = 3, |
||||
.rst_to_cke = 0x23, |
||||
.sde_to_rst = 0x10, |
||||
}; |
||||
|
||||
static void ccgr_init(void) |
||||
{ |
||||
struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; |
||||
|
||||
/* set the default clock gate to save power */ |
||||
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 void gpr_init(void) |
||||
{ |
||||
struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; |
||||
|
||||
/* enable AXI cache for VDOA/VPU/IPU */ |
||||
writel(0xF00000FF, &iomux->gpr[4]); |
||||
/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */ |
||||
writel(0x007F007F, &iomux->gpr[6]); |
||||
writel(0x007F007F, &iomux->gpr[7]); |
||||
} |
||||
|
||||
static void spl_dram_init(void) |
||||
{ |
||||
if (is_cpu_type(MXC_CPU_MX6DL)) { |
||||
mt41k128m16jt_125.mem_speed = 800; |
||||
mem_qdl.rtt_nom = 1; |
||||
mem_qdl.rtt_wr = 1; |
||||
|
||||
mx6sdl_dram_iocfg(64, &mx6sdl_ddr_ioregs, &mx6sdl_grp_ioregs); |
||||
mx6_dram_cfg(&mem_qdl, &mx6dl_1g_mmdc_calib, &mt41k128m16jt_125); |
||||
} else if (is_cpu_type(MXC_CPU_MX6Q)) { |
||||
mt41k128m16jt_125.mem_speed = 1066; |
||||
mem_qdl.rtt_nom = 2; |
||||
mem_qdl.rtt_wr = 2; |
||||
|
||||
mx6dq_dram_iocfg(64, &mx6dq_ddr_ioregs, &mx6dq_grp_ioregs); |
||||
mx6_dram_cfg(&mem_qdl, &mx6q_1g_mmdc_calib, &mt41k128m16jt_125); |
||||
} |
||||
|
||||
udelay(100); |
||||
} |
||||
|
||||
void board_init_f(ulong dummy) |
||||
{ |
||||
ccgr_init(); |
||||
|
||||
/* setup AIPS and disable watchdog */ |
||||
arch_cpu_init(); |
||||
|
||||
gpr_init(); |
||||
|
||||
/* iomux */ |
||||
board_early_init_f(); |
||||
|
||||
/* setup GP timer */ |
||||
timer_init(); |
||||
|
||||
/* UART clocks enabled and gd valid - init serial console */ |
||||
preloader_console_init(); |
||||
|
||||
/* DDR initialization */ |
||||
spl_dram_init(); |
||||
|
||||
/* Clear the BSS. */ |
||||
memset(__bss_start, 0, __bss_end - __bss_start); |
||||
|
||||
/* load/boot image from boot device */ |
||||
board_init_r(NULL, 0); |
||||
} |
||||
#endif |
@ -0,0 +1,6 @@ |
||||
CONFIG_SPL=y |
||||
CONFIG_ARM=y |
||||
CONFIG_DM=y |
||||
CONFIG_DM_THERMAL=y |
||||
CONFIG_TARGET_UDOO=y |
||||
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/imx-common/spl_sd.cfg,MX6QDL" |
@ -1,5 +0,0 @@ |
||||
CONFIG_ARM=y |
||||
CONFIG_TARGET_UDOO=y |
||||
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/udoo/udoo.cfg,MX6Q,DDR_MB=1024" |
||||
# CONFIG_CMD_IMLS is not set |
||||
# CONFIG_CMD_FLASH is not set |
Loading…
Reference in new issue