blob: b3bd7c17b0baad036cc7ae60b0cdbcf0ca2ce9a1 [file] [log] [blame]
/*
* Copyright (C) 2015 Freescale Semiconductor, Inc.
*
* SPDX-License-Identifier: GPL-2.0+
*
* Refer docs/README.imxmage for more details about how-to configure
* and create imximage boot image
*
* The syntax is taken as close as possible with the kwbimage
*/
#define __ASSEMBLY__
#include <config.h>
/* image version */
IMAGE_VERSION 2
/*
* Boot Device : one of
* spi/sd/nand/onenand, qspi/nor
*/
#ifdef CONFIG_SYS_BOOT_QSPI
BOOT_FROM qspi
#elif defined(CONFIG_SYS_BOOT_EIMNOR)
BOOT_FROM nor
#else
BOOT_FROM sd
#endif
#ifdef CONFIG_USE_PLUGIN
/*PLUGIN plugin-binary-file IRAM_FREE_START_ADDR*/
PLUGIN board/nest/onyx/plugin.bin 0x00907000
#else
#ifdef CONFIG_SECURE_BOOT
CSF CONFIG_CSF_SIZE
#endif
/*
* 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 Boot-Time ARM and DDR Clocks */
DATA 4 0x020c4010 0x00000007
DATA 4 0x020C4014 0x00018908
CHECK_BITS_CLR 4 0x020c4048 0xffffffff
/* Enable all clocks */
DATA 4 0x020c4068 0xffffffff
DATA 4 0x020c406c 0xffffffff
DATA 4 0x020c4070 0xffffffff
DATA 4 0x020c4074 0xffffffff
DATA 4 0x020c4078 0xffffffff
DATA 4 0x020c407c 0xffffffff
DATA 4 0x020c4080 0xffffffff
DATA 4 0x020c4084 0xffffffff
/*============================================================================= */
/* IOMUX */
/*============================================================================= */
/*DDR IO TYPE: */
DATA 4 0x020E04B4 0x00080000 /* IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE*/
DATA 4 0x020E04AC 0x00000000 /* IOMUXC_SW_PAD_CTL_GRP_DDRPKE*/
/*CLOCK: */
DATA 4 0x020E027C 0x00000020 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK0_P*/
/*Control and Address: */
DATA 4 0x020E0250 0x00000020 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS*/
DATA 4 0x020E024C 0x00000020 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS*/
DATA 4 0x020E0490 0x00000020 /* IOMUXC_SW_PAD_CTL_GRP_ADDDS*/
DATA 4 0x020E0288 0x00000020 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET*/
DATA 4 0x020E0270 0x00000000 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured using Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS*/
DATA 4 0x020E0260 0x00000000 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT0*/
DATA 4 0x020E0264 0x00000000 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT1*/
DATA 4 0x020E04A0 0x00000020 /* IOMUXC_SW_PAD_CTL_GRP_CTLDS*/
/*Data Strobes: */
DATA 4 0x020E0494 0x00020000 /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL*/
DATA 4 0x020E0280 0x00003020 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0_P*/
DATA 4 0x020E0284 0x00003020 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1_P*/
/*Data: */
DATA 4 0x020E04B0 0x00020000 /* IOMUXC_SW_PAD_CTL_GRP_DDRMODE*/
DATA 4 0x020E0498 0x00000020 /* IOMUXC_SW_PAD_CTL_GRP_B0DS*/
DATA 4 0x020E04A4 0x00000020 /* IOMUXC_SW_PAD_CTL_GRP_B1DS*/
DATA 4 0x020E0244 0x00000020 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0*/
DATA 4 0x020E0248 0x00000020 /* IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1*/
/*============================================================================= */
/* DDR Controller Registers */
/*============================================================================= */
/* Manufacturer: ISSI*/
/* Device Part Number: IS43LD16640A-25BLI */
/* Clock Freq.: 400MHz*/
/* Density per CS in Gb: 1*/
/* Chip Selects used: 1*/
/* Total DRAM density (Gb) 2*/
/* Number of Banks: 8*/
/* Row address: 14*/
/* Column address: 10*/
/* Data bus width 16*/
/*============================================================================= */
DATA 4 0x021B001C 0x00008000 /* [MMDC_MDSCR] Set the Configuration request bit during MMDC set up*/
DATA 4 0x021B085C 0x1B4700C7 /* [MMDC_MPZQLP2CTL] LPDDR2 ZQ params, values based on JEDEC standard */
/*====================================================== */
/*Calibrations: */
/*====================================================== */
DATA 4 0x021B0800 0xA1390003 /* DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic HW ZQ calibration.*/
DATA 4 0x021B0890 0x00470000 /* [MMDC_MPPDCMPR2] MMDC PHY CA delay-line Configuration*/
DATA 4 0x021B08B8 0x00000800 /* [MMDC_MPMUR0] MMDC PHY Measure Unit Register*/
DATA 4 0x021b0848 0x4040484F /* [MMDC_MPRDDLCTL] MMDC PHY Read delay-lines Configuration Register*/
DATA 4 0x021b0850 0x40405247 /* [MMDC_MPWRDLCTL] MMDC PHY Write delay-lines Configuration Register*/
DATA 4 0x021B081C 0x33333333 /* [MMDC_MPRDDQBY0DL] MMDC PHY Read DQ Byte0 Delay Register*/
DATA 4 0x021B0820 0x33333333 /* [MMDC_MPRDDQBY1DL] MMDC PHY Read DQ Byte1 Delay Register*/
DATA 4 0x021B082C 0xf3333333 /* [MMDC_MPWRDQBY0DL] MMDC PHY Write DQ Byte0 Delay Register*/
DATA 4 0x021B0830 0xf3333333 /* [MMDC_MPWRDQBY1DL] MMDC PHY Write DQ Byte1 Delay Register*/
DATA 4 0x021B08C0 0x00922012 /* [MMDC_MPDCCR] MMDC Duty Cycle Control Register*/
/* Complete calibration by forced measurement: */
DATA 4 0x021B08b8 0x00000800 /* [MMDC_MPMUR0] MMDC PHY Measure Unit Register*/
/*====================================================== */
/*MMDC init: */
/*====================================================== */
DATA 4 0x021B0004 0x00020012 /* MMDC0_MDPDC */
DATA 4 0x021B0008 0x00000000 /* MMDC0_MDOTC*/
DATA 4 0x021B000C 0x33374133 /* MMDC0_MDCFG0*/
DATA 4 0x021B0010 0x00100A82 /* MMDC0_MDCFG1*/
DATA 4 0x021B0014 0x00000093 /* MMDC0_MDCFG2*/
DATA 4 0x021B0018 0x00201748 /* MMDC0_MDMISC*/
DATA 4 0x021B002C 0x0F9F26D2 /* MMDC0_MDRWD; recommend to maintain the default values*/
DATA 4 0x021B0030 0x009F0E10 /* MMDC0_MDOR*/
DATA 4 0x021B0038 0x00190778 /* MMDC0_MDCFG3LP*/
DATA 4 0x021B0040 0x00000047 /* CS0_END */
DATA 4 0x021B0000 0x83100000 /* MMDC0_MDCTL*/
/*====================================================== */
/*Optional Precharge all command per JEDEC:*/
/*The memory controller may optionally issue a Precharge-All command (for LPDDR2-SX) or Preactive (for LPDDR2-N) prior to the MRW Reset command.*/
/*====================================================== */
DATA 4 0x021b001c 0x00008010 /* precharge all command */
/* Mode register writes for CS0 */
DATA 4 0x021b001c 0x003F8030 /* MRW: BA=0 CS=0 MR_ADDR=63 MR_OP=0 (Reset)*/
DATA 4 0x021b001c 0xFF0A8030 /* MRW: BA=0 CS=0 MR_ADDR=10 MR_OP=0xff (IO calibration, calibration code)*/
DATA 4 0x021B001C 0x82018030 /* MMDC0_MDSCR, MR3 write, CS0*/
DATA 4 0x021B001C 0x04028030 /* MMDC0_MDSCR, MR1 write, CS0*/
DATA 4 0x021B001C 0x04038030 /* MMDC0_MDSCR, MR0 write, CS0*/
DATA 4 0x021b083C 0xA0000000 /* Reset read fifo pointer in the MMDC and disable DQS gate for LPDDR2*/
DATA 4 0x021b083C 0xA0000000 /* twice to fully reset the read FIFO pointer*/
/* Mode register writes for CS, commented out automatically if only one chip select used */
/*DATA 4 0x021b001c 0x003F8038 # MRW: BA=0 CS=0 MR_ADDR=63 MR_OP=0 (Reset)*/
/*DATA 4 0x021b001c 0xFF0A8038 # MRW: BA=0 CS=0 MR_ADDR=10 MR_OP=0xff (IO calibration, calibration code)*/
/*DATA 4 0x021B001C 0x82018038 # MMDC0_MDSCR, MR3 write, CS0*/
/*DATA 4 0x021B001C 0x04028038 # MMDC0_MDSCR, MR1 write, CS0*/
/*DATA 4 0x021B001C 0x01038038 # MMDC0_MDSCR, MR0 write, CS0*/
/*final DDR setup, before operation start: */
DATA 4 0x021B0020 0x00001800 /* MMDC0_MDREF*/
DATA 4 0x021B0818 0x00000000 /* MMDC_MPODTCTRL, ensure PHY ODT control register is cleared*/
DATA 4 0x021B0800 0xA1310003 /* DDR_PHY_P0_MPZQHWCTRL, enable automatic ZQ calibration*/
DATA 4 0x021B0004 0x00025552 /* MMDC0_MDPDC now SDCTL power down enabled*/
DATA 4 0x021B0404 0x00011006 /* MMDC0_MAPSR ADOPT power down enabled*/
DATA 4 0x021B001C 0x00000000 /* MMDC0_MDSCR, clear this register (especially the configuration bit as initialization is complete)*/
#endif