| /* |
| * Copyright (C) 2014 Nest labs, Inc. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License as |
| * published by the Free Software Foundation; either version 2 of |
| * the License or (at your option) any later version. |
| * |
| * 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/freescale/mx6sxsabresd/plugin.bin 0x00907000 |
| #else |
| |
| #ifdef CONFIG_SECURE_BOOT |
| CSF 0x2000 |
| #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 all clocks (they are disabled by ROM code) |
| 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 |
| |
| #ifndef CONFIG_NEST_DIAGNOSTICS |
| // Run DDR at 198Mhz except diags |
| DATA 4 0x020C4014 0x00018908 //DDR clk to 198MHz |
| #endif |
| |
| // IOMUX |
| //DDR IO TYPE: |
| DATA 4 0x020E0618 0x00080000 // IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE |
| DATA 4 0x020E05FC 0x00000000 // IOMUXC_SW_PAD_CTL_GRP_DDRPKE |
| |
| //CLOCK: |
| DATA 4 0x020E032C 0x00000028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK0_P |
| |
| //ADDRESS: |
| DATA 4 0x020E0300 0x00000028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS |
| DATA 4 0x020E02FC 0x00000028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS |
| DATA 4 0x020E05F4 0x00000028 // IOMUXC_SW_PAD_CTL_GRP_ADDDS |
| |
| //Control: |
| DATA 4 0x020E0340 0x00000028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET |
| DATA 4 0x020E0320 0x00000000 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 - DSE can be configured using Group Control Register: IOMUXC_SW_PAD_CTL_GRP_CTLDS |
| DATA 4 0x020E0310 0x00000000 // IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT0 |
| DATA 4 0x020E0314 0x00000000 // IOMUXC_SW_PAD_CTL_PAD_DRAM_ODT1 |
| DATA 4 0x020E0614 0x00000028 // IOMUXC_SW_PAD_CTL_GRP_CTLDS |
| |
| //Data Strobes: |
| DATA 4 0x020E05F8 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL |
| DATA 4 0x020E0330 0x00003028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0_P |
| DATA 4 0x020E0334 0x00003028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1_P |
| DATA 4 0x020E0338 0x00003028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2_P |
| DATA 4 0x020E033C 0x00003028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3_P |
| |
| //Data: |
| DATA 4 0x020E0608 0x00020000 // IOMUXC_SW_PAD_CTL_GRP_DDRMODE |
| DATA 4 0x020E060C 0x00000028 // IOMUXC_SW_PAD_CTL_GRP_B0DS |
| DATA 4 0x020E0610 0x00000028 // IOMUXC_SW_PAD_CTL_GRP_B1DS |
| DATA 4 0x020E061C 0x00000028 // IOMUXC_SW_PAD_CTL_GRP_B2DS |
| DATA 4 0x020E0620 0x00000028 // IOMUXC_SW_PAD_CTL_GRP_B3DS |
| |
| DATA 4 0x020E02EC 0x00000028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 |
| DATA 4 0x020E02F0 0x00000028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 |
| DATA 4 0x020E02F4 0x00000028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2 |
| DATA 4 0x020E02F8 0x00000028 // IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3 |
| |
| |
| // DDR Controller Registers |
| // Manufacturer: NANYA |
| // Device Part Number: NT6TL128M32AQ |
| // Clock Freq.: 400MHz |
| // Density per CS in Gb: 4 |
| // Chip Selects used: 1 |
| // Total DRAM density (Gb) 4 |
| // Number of Banks: 8 |
| // Row address: 14 |
| // Column address: 10 |
| // Data bus width 32 |
| |
| |
| DATA 4 0x021B001C 0x00008000 // MMDC0_MDSCR, set the Configuration request bit during MMDC set up |
| |
| DATA 4 0x021B085C 0x1B4700C7 // MMDC0_MPZQLP2CTL, LPDDR2 ZQ params |
| |
| DATA 4 0x021B08C0 0x2492244A // MMDC0_MPDCCR, Duty Cycle Control - Added per JEDEC testing. |
| |
| DATA 4 0x021B0800 0xA1390003 // DDR_PHY_P0_MPZQHWCTRL, enable both one-time & periodic HW ZQ calibration. |
| |
| DATA 4 0x021B0890 0x00470000 // MMDC0_MPPDCMPR2, CA bus absolute delay - Update to mid-point of valid window |
| |
| DATA 4 0x021B08B8 0x00000800 // DDR_PHY_P0_MPMUR0, frc_msr |
| |
| //###################################################### |
| //calibration values based on calibration compare of 0x00ffff00: |
| //Note, these calibration values are based on Freescale's board |
| //May need to run calibration on target board to fine tune these |
| //###################################################### |
| |
| //DATA TRACE READ DELAYS: |
| DATA 4 0x021B081C 0x33333333 // DDR_PHY_P0_MPREDQBY0DL3 |
| DATA 4 0x021B0820 0x33333333 // DDR_PHY_P0_MPRDQBY1DL3 |
| DATA 4 0x021B0824 0x33333333 // DDR_PHY_P0_MPRDQBY2DL3 |
| DATA 4 0x021B0828 0x33333333 // DDR_PHY_P0_MPRDQBY3DL3 |
| |
| //DATA TRACE WRITE DELAYS: |
| DATA 4 0x021B082C 0xF3333333 // DDR_PHY_P0_MPWRQBY0DL3 |
| DATA 4 0x021B0830 0xF3333333 // DDR_PHY_P0_MPWRQBY1DL3 |
| DATA 4 0x021B0834 0xF3333333 // DDR_PHY_P0_MPWRQBY2DL3 |
| DATA 4 0x021B0838 0xF3333333 // DDR_PHY_P0_MPWRQBY3DL3 |
| |
| // READ DQS DELAY: |
| DATA 4 0x021B0848 0x3E3E4244 // MPRDDLCTL PHY0 |
| |
| // WRITE DQS DELAY: |
| DATA 4 0x021B0850 0x36323632 // MPWRDLCTL PHY0 |
| |
| // DQS GATE DELAY: |
| DATA 4 0x021B083C 0x20000000 // MPDGCTRL0 PHY0, gate delay not used in LPDDR2, disable |
| DATA 4 0x021B0840 0x00000000 // MPDGCTRL1 PHY0 |
| |
| // Complete calibration by forced measurement: |
| DATA 4 0x021B08B8 0x00000800 // DDR_PHY_P0_MPMUR0, frc_msr |
| |
| DATA 4 0x021B000C 0x33374135 // MMDC0_MDCFG0 - Update tCL to 8 cycles per Samsung Datasheet |
| DATA 4 0x021B0004 0x00020036 // MMDC0_MDPDC |
| DATA 4 0x021B0010 0xB6B00A83 // MMDC0_MDCFG1 - Change DDR3 fields to default values. Update tCWL to 4 cycles per Samsung Datasheet |
| DATA 4 0x021B0014 0x00000093 // MMDC0_MDCFG2 |
| DATA 4 0x021B0018 0x00001748 // MMDC0_MDMISC |
| DATA 4 0x021B002C 0x0F9F26D2 // MMDC0_MDRWD; recommend to maintain the default values |
| DATA 4 0x021B0030 0x009F0E10 // MMDC0_MDOR - Change DDR3 fields to default values |
| DATA 4 0x021B0038 0x001A0889 // MMDC0_MDCFG3LP - Add 1 cycle to tRCD_LP per spreadsheet |
| DATA 4 0x021B0008 0x12272000 // MMDC0_MDOTC - Change DDR3 fields to default values |
| DATA 4 0x021B0040 0x0000004F // CS0_END |
| DATA 4 0x021B0000 0x83110000 // MMDC0_MDCTL |
| |
| |
| // Mode register writes |
| DATA 4 0x021B001C 0x003F8030 // MMDC0_MDSCR, MR63 write, CS0 |
| DATA 4 0x021B001C 0xFF0A8030 // MMDC0_MDSCR, MR10 write, CS0 |
| DATA 4 0x021B001C 0x82018030 // MMDC0_MDSCR, MR1 write, CS0 |
| DATA 4 0x021B001C 0x06028030 // MMDC0_MDSCR, MR2 write, CS0 - Update RL and WL to 8/4 to match Samsung Datasheet |
| DATA 4 0x021B001C 0x01038030 // MMDC0_MDSCR, MR3 write, CS0 - Using slightly higher DQS, DQ drive strength |
| |
| // Skip CS1 configuration since elpida and samsung parts do not have CS1 |
| // DATA 4 0x021B001C 0x003F8038 // MMDC0_MDSCR, MR63 write, CS1 |
| // DATA 4 0x021B001C 0xFF0A8038 // MMDC0_MDSCR, MR10 write, CS1 |
| // DATA 4 0x021B001C 0x82018038 // MMDC0_MDSCR, MR1 write, CS1 |
| // DATA 4 0x021B001C 0x06028038 // MMDC0_MDSCR, MR2 write, CS1 |
| // DATA 4 0x021B001C 0x01038038 // MMDC0_MDSCR, MR3 write, CS1 |
| |
| //FINAL SETTINGS: |
| DATA 4 0x021B0020 0x00001800 // MMDC0_MDREF |
| DATA 4 0x021B0818 0x00000000 // DDR_PHY_P0_MPODTCTRL |
| |
| DATA 4 0x021B0800 0xA1390003 // DDR_PHY_P0_MPZQHWCTRL, enable automatic HW ZQ calibration. |
| DATA 4 0x021B0004 0x00025536 // MMDC0_MDPDC now SDCTL power down enabled - Change to match 0x021b0004 above |
| 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 |