Skip to content
Snippets Groups Projects
ys_512m.cfg 5.31 KiB
Newer Older
/*
 * Copyright (C) 2017 Boundary Devices, Inc.
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */
/* MT41K128M16JT-125 IT:K */

#define __ASSEMBLY__
#include <config.h>
#include "asm/arch/mx6-ddr.h"
#include "asm/arch/crm_regs.h"


/* image version */

IMAGE_VERSION 2

/*
 * Boot Device : one of
 * spi/sd/nand/onenand, qspi/nor
 */

BOOT_FROM	spi

#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
 */

/* enable cko1 as 32k for slow clock */
DATA 4, CCM_CCOSR, 0x0000008e

/* Enable all clocks */
DATA 4, CCM_CCGR0, 0xffffffff
DATA 4, CCM_CCGR1, 0xffffffff
DATA 4, CCM_CCGR2, 0xffffffff
DATA 4, CCM_CCGR3, 0xffffffff
DATA 4, CCM_CCGR4, 0xffffffff
DATA 4, CCM_CCGR5, 0xffffffff
DATA 4, CCM_CCGR6, 0xffffffff
DATA 4, CCM_CCGR7, 0xffffffff

/* IOMUX - DDR IO Type */
DATA 4, MX6_IOM_GRP_DDR_TYPE, 0x000c0000
DATA 4, MX6_IOM_GRP_DDRPKE, 0x00000000

/* Clock */
DATA 4, MX6_IOM_DRAM_SDCLK_0, 0x00000030

/* Address */
DATA 4, MX6_IOM_DRAM_CAS, 0x00000020
DATA 4, MX6_IOM_DRAM_RAS, 0x00000020
DATA 4, MX6_IOM_GRP_ADDDS, 0x00000020

/* Control */
DATA 4, MX6_IOM_DRAM_RESET, 0x00000020

DATA 4, MX6_IOM_DRAM_SDBA2, 0x00000000
DATA 4, MX6_IOM_DRAM_SDODT0, 0x00000020
DATA 4, MX6_IOM_DRAM_SDODT1, 0x00000020
DATA 4, MX6_IOM_GRP_CTLDS, 0x00000020

/* Data Strobe */
DATA 4, MX6_IOM_DDRMODE_CTL, 0x00020000
DATA 4, MX6_IOM_DRAM_SDQS0, 0x00000028
DATA 4, MX6_IOM_DRAM_SDQS1, 0x00000028
DATA 4, MX6_IOM_DRAM_SDQS2, 0x00000028
DATA 4, MX6_IOM_DRAM_SDQS3, 0x00000028

/* Data */
DATA 4, MX6_IOM_GRP_DDRMODE, 0x00020000
DATA 4, MX6_IOM_GRP_B0DS, 0x00000028
DATA 4, MX6_IOM_GRP_B1DS, 0x00000028
DATA 4, MX6_IOM_GRP_B2DS, 0x00000028
DATA 4, MX6_IOM_GRP_B3DS, 0x00000028
DATA 4, MX6_IOM_DRAM_DQM0, 0x00000028
DATA 4, MX6_IOM_DRAM_DQM1, 0x00000028
DATA 4, MX6_IOM_DRAM_DQM2, 0x00000028
DATA 4, MX6_IOM_DRAM_DQM3, 0x00000028

/* Calibrations - ZQ */
DATA 4, MX6_MMDC_P0_MPZQHWCTRL, 0xa1390003

/*
 * Calibration settings - 4 board sample
 * 00:19:b8:03:11:24
 * 00:19:b8:03:17:2a
 * 00:19:b8:03:17:2c
 * 00:19:b8:03:17:2e
 */
DATA 4, MX6_MMDC_P0_MPDGCTRL0, 0x41400133
DATA 4, MX6_MMDC_P0_MPDGCTRL1, 0x01310126
DATA 4, MX6_MMDC_P0_MPRDDLCTL, 0x42434547
DATA 4, MX6_MMDC_P0_MPWRDLCTL, 0x38383b36
DATA 4, MX6_MMDC_P0_MPWLDECTRL0, 0x001c0019
DATA 4, MX6_MMDC_P0_MPWLDECTRL1, 0x0016000f

/* Read data bit 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

/* Complete calibration by forced measurement */
DATA 4, MX6_MMDC_P0_MPMUR0, 0x00000800

/*
 * Initialize MT41K128M16HA-125
 * 14 row + 3 bank + 10 col + 0 rank + 2 width = 29 = 512 MB
 * tRCD 13125 ps
 * tRP 13125 ps
 * tCL 13125 ps
 * 396M DDR clock = .396G = 2525.2ps/clocks
 * 13125ps / 2525.2ps/clocks = 5.198 clocks
 */

/* MMDC init - DDR3, 64-bit mode, only MMDC0 is initiated */
DATA 4, MX6_MMDC_P0_MDPDC, 0x0002002d

/*
 * tRFC:0x3f: 64(0x40) clocks		(160000/2525.2)
 * tXS:0x43: 68(0x44) clocks		(170000/2525.2)
 * tXP:b'010': 3 clocks			(7500/2525.2)
 * tXPDLL:b'1001': 10(0xa) clocks	(24000/2525.2)
 * tFAW:b'01010': 11(0x0b) clocks	(27000/2525.2)
 * tCL:b'0011': 6 clocks		(13125/2525.2)
 */
DATA 4, MX6_MMDC_P0_MDCFG0, 0x3f4352a3
/*
 * tRCD:b'101': 6 clocks		(13125/2525.2)
 * tRP:b'101': 6 clocks			(13125/2525.2)
 * tRC:b'10100': 21(0x15) clocks	(50625/2525.2)
 * tRAS:b'01110': 15(0x0f) clocks	(37500/2525.2)
 * tRPA:b'1': 7 clocks			(tRP[+1]) 6
 * b'000'
 * tWR:b'101': 6 clocks			(15000/2525.2)
 * tMRD:b'1011': 12(0xc) clocks		(min 4 clocks)4
 * b'00'
 * tCWL:b'011': 5 clocks		(tCL-1)
 */
DATA 4, MX6_MMDC_P0_MDCFG1, 0xb68e8b63
/*
 * b'0000000'
 * tDLLK:0x1ff(9 bits), 512(0x200) clocks (Jedec for DDR3)
 * b'0000000'
 * tRTP:b'011': 4 clocks		(7500/2525.2), min 4
 * tWTR:same bank b'011': 4 clocks	(7500/2525.2), min 4
 * tRRD:b'011': 4 clocks		(5000/2525.2), min 4
 */
DATA 4, MX6_MMDC_P0_MDCFG2, 0x01ff00db
DATA 4, MX6_MMDC_P0_MDMISC, 0x00011740
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008000
/*
 * RTW_SAME: 2 cycles,
 * WTR_DIFF: 3 cycles,
 * WTW_DIFF: 3 cycles,
 * RTW_DIFF: 2 cycles,
 * RTR_DIFF: 2 cycles
 */
DATA 4, MX6_MMDC_P0_MDRWD, 0x000026d2
/*
 * tXPR:0x43: 68(0x44) cycles,	(170000/2525.2), min 5
 * SDE_to_RST:0x10: 14 cycles, (Jedec)
 * RST_to_CKE:0x23: 33 cycles	(Jedec)
 */
DATA 4, MX6_MMDC_P0_MDOR, 0x00431023
DATA 4, MX6_MMDC_P0_MDOTC, 0x00333030

DATA 4, MX6_MMDC_P0_MDPDC, 0x0002556d

/* end of CS0 US 0xa0000000-1  */
DATA 4, MX6_MMDC_P0_MDASP, 0x0000004f
/* row:14 bits */
DATA 4, MX6_MMDC_P0_MDCTL, 0x83190000

DATA 4, MX6_MMDC_P0_MDSCR, 0x04008032	/* MR2 */
DATA 4, MX6_MMDC_P0_MDSCR, 0x00008033	/* MR3 */
DATA 4, MX6_MMDC_P0_MDSCR, 0x00048031	/* MR1 */
/*
 * b'1' - dll on
 * b'010' - tWR 6 clocks
 * b'1' - dll reset
 * b'0'
 * b'01000' - CAS 6
 * b'00' Fixed BC4
 */
DATA 4, MX6_MMDC_P0_MDSCR, 0x15208030	/* MR0 */

/* DDR device ZQ calibration */
DATA 4, MX6_MMDC_P0_MDSCR, 0x04008040

/* Final DDR setup, before operation start */
/*
 * Need 8192 cycles in 64ms, or 128K/sec, 4/ sec/32k
 * b'01' - 32 Khz
 * b'011' - 4 refreshes
 */
DATA 4, MX6_MMDC_P0_MDREF, 0x00005800
DATA 4, MX6_MMDC_P0_MPODTCTRL, 0x00022227
DATA 4, MX6_MMDC_P0_MDSCR, 0x00000000