1aa161c19SClément Léger /* SPDX-License-Identifier: BSD-2-Clause */ 2aa161c19SClément Léger /* 3aa161c19SClément Léger * Header file for the Atmel DDR/SDR SDRAM Controller 4aa161c19SClément Léger * 5aa161c19SClément Léger * Copyright (C) 2010 Atmel Corporation 6aa161c19SClément Léger * Nicolas Ferre <nicolas.ferre@atmel.com> 7aa161c19SClément Léger */ 8aa161c19SClément Léger 9*fbe66cf8SEtienne Carriere #ifndef __DRIVERS_SAM_AT91_DDRSDR_H 10*fbe66cf8SEtienne Carriere #define __DRIVERS_SAM_AT91_DDRSDR_H 11aa161c19SClément Léger 12aa161c19SClément Léger /* Mode Register */ 13aa161c19SClément Léger #define AT91_DDRSDRC_MR 0x00 14aa161c19SClément Léger /* Command Mode */ 15aa161c19SClément Léger #define AT91_DDRSDRC_MODE SHIFT_U32(0x7, 0) 16aa161c19SClément Léger #define AT91_DDRSDRC_MODE_NORMAL 0 17aa161c19SClément Léger #define AT91_DDRSDRC_MODE_NOP 1 18aa161c19SClément Léger #define AT91_DDRSDRC_MODE_PRECHARGE 2 19aa161c19SClément Léger #define AT91_DDRSDRC_MODE_LMR 3 20aa161c19SClément Léger #define AT91_DDRSDRC_MODE_REFRESH 4 21aa161c19SClément Léger #define AT91_DDRSDRC_MODE_EXT_LMR 5 22aa161c19SClément Léger #define AT91_DDRSDRC_MODE_DEEP 6 23aa161c19SClément Léger 24aa161c19SClément Léger /* Refresh Timer Register */ 25aa161c19SClément Léger #define AT91_DDRSDRC_RTR 0x04 26aa161c19SClément Léger /* Refresh Timer Counter */ 27aa161c19SClément Léger #define AT91_DDRSDRC_COUNT SHIFT_U32(0xfff, 0) 28aa161c19SClément Léger 29aa161c19SClément Léger /* Configuration Register */ 30aa161c19SClément Léger #define AT91_DDRSDRC_CR 0x08 31aa161c19SClément Léger /* Number of Column Bits */ 32aa161c19SClément Léger #define AT91_DDRSDRC_NC SHIFT_U32(3, 0) 33aa161c19SClément Léger #define AT91_DDRSDRC_NC_SDR8 SHIFT_U32(0, 0) 34aa161c19SClément Léger #define AT91_DDRSDRC_NC_SDR9 BIT(0) 35aa161c19SClément Léger #define AT91_DDRSDRC_NC_SDR10 SHIFT_U32(2, 0) 36aa161c19SClément Léger #define AT91_DDRSDRC_NC_SDR11 SHIFT_U32(3, 0) 37aa161c19SClément Léger #define AT91_DDRSDRC_NC_DDR9 SHIFT_U32(0, 0) 38aa161c19SClément Léger #define AT91_DDRSDRC_NC_DDR10 BIT(0) 39aa161c19SClément Léger #define AT91_DDRSDRC_NC_DDR11 SHIFT_U32(2, 0) 40aa161c19SClément Léger #define AT91_DDRSDRC_NC_DDR12 SHIFT_U32(3, 0) 41aa161c19SClément Léger /* Number of Row Bits */ 42aa161c19SClément Léger #define AT91_DDRSDRC_NR SHIFT_U32(3, 2) 43aa161c19SClément Léger #define AT91_DDRSDRC_NR_11 SHIFT_U32(0, 2) 44aa161c19SClément Léger #define AT91_DDRSDRC_NR_12 BIT(2) 45aa161c19SClément Léger #define AT91_DDRSDRC_NR_13 SHIFT_U32(2, 2) 46aa161c19SClément Léger #define AT91_DDRSDRC_NR_14 SHIFT_U32(3, 2) 47aa161c19SClément Léger /* CAS Latency */ 48aa161c19SClément Léger #define AT91_DDRSDRC_CAS SHIFT_U32(7, 4) 49aa161c19SClément Léger #define AT91_DDRSDRC_CAS_2 SHIFT_U32(2, 4) 50aa161c19SClément Léger #define AT91_DDRSDRC_CAS_3 SHIFT_U32(3, 4) 51aa161c19SClément Léger #define AT91_DDRSDRC_CAS_25 SHIFT_U32(6, 4) 52aa161c19SClément Léger /* Reset DLL */ 53aa161c19SClément Léger #define AT91_DDRSDRC_RST_DLL BIT(7) 54aa161c19SClément Léger /* Output impedance control */ 55aa161c19SClément Léger #define AT91_DDRSDRC_DICDS BIT(8) 56aa161c19SClément Léger /* Disable DLL [SAM9 Only] */ 57aa161c19SClément Léger #define AT91_DDRSDRC_DIS_DLL BIT(9) 58aa161c19SClément Léger /* Off-Chip Driver [SAM9 Only] */ 59aa161c19SClément Léger #define AT91_DDRSDRC_OCD BIT(12) 60aa161c19SClément Léger /* Mask Data is Shared [SAM9 Only] */ 61aa161c19SClément Léger #define AT91_DDRSDRC_DQMS BIT(16) 62aa161c19SClément Léger /* Active Bank X to Burst Stop Read Access Bank Y [SAM9 Only] */ 63aa161c19SClément Léger #define AT91_DDRSDRC_ACTBST BIT(18) 64aa161c19SClément Léger 65aa161c19SClément Léger /* Timing 0 Register */ 66aa161c19SClément Léger #define AT91_DDRSDRC_T0PR 0x0C 67aa161c19SClément Léger /* Active to Precharge delay */ 68aa161c19SClément Léger #define AT91_DDRSDRC_TRAS SHIFT_U32(0xf, 0) 69aa161c19SClément Léger /* Row to Column delay */ 70aa161c19SClément Léger #define AT91_DDRSDRC_TRCD SHIFT_U32(0xf, 4) 71aa161c19SClément Léger /* Write recovery delay */ 72aa161c19SClément Léger #define AT91_DDRSDRC_TWR SHIFT_U32(0xf, 8) 73aa161c19SClément Léger /* Row cycle delay */ 74aa161c19SClément Léger #define AT91_DDRSDRC_TRC SHIFT_U32(0xf, 12) 75aa161c19SClément Léger /* Row precharge delay */ 76aa161c19SClément Léger #define AT91_DDRSDRC_TRP SHIFT_U32(0xf, 16) 77aa161c19SClément Léger /* Active BankA to BankB */ 78aa161c19SClément Léger #define AT91_DDRSDRC_TRRD SHIFT_U32(0xf, 20) 79aa161c19SClément Léger /* Internal Write to Read delay */ 80aa161c19SClément Léger #define AT91_DDRSDRC_TWTR SHIFT_U32(0x7, 24) 81aa161c19SClément Léger /* Reduce Write to Read Delay [SAM9 Only] */ 82aa161c19SClément Léger #define AT91_DDRSDRC_RED_WRRD SHIFT_U32(0x1, 27) 83aa161c19SClément Léger /* Load mode to active/refresh delay */ 84aa161c19SClément Léger #define AT91_DDRSDRC_TMRD SHIFT_U32(0xf, 28) 85aa161c19SClément Léger 86aa161c19SClément Léger /* Timing 1 Register */ 87aa161c19SClément Léger #define AT91_DDRSDRC_T1PR 0x10 88aa161c19SClément Léger /* Row Cycle Delay */ 89aa161c19SClément Léger #define AT91_DDRSDRC_TRFC SHIFT_U32(0x1f, 0) 90aa161c19SClément Léger /* Exit self-refresh to non-read */ 91aa161c19SClément Léger #define AT91_DDRSDRC_TXSNR SHIFT_U32(0xff, 8) 92aa161c19SClément Léger /* Exit self-refresh to read */ 93aa161c19SClément Léger #define AT91_DDRSDRC_TXSRD SHIFT_U32(0xff, 16) 94aa161c19SClément Léger /* Exit power-down delay */ 95aa161c19SClément Léger #define AT91_DDRSDRC_TXP SHIFT_U32(0xf, 24) 96aa161c19SClément Léger 97aa161c19SClément Léger /* Timing 2 Register [SAM9 Only] */ 98aa161c19SClément Léger #define AT91_DDRSDRC_T2PR 0x14 99aa161c19SClément Léger /* Exit active power down delay to read command in mode "Fast Exit" */ 100aa161c19SClément Léger #define AT91_DDRSDRC_TXARD SHIFT_U32(0xf, 0) 101aa161c19SClément Léger /* Exit active power down delay to read command in mode "Slow Exit" */ 102aa161c19SClément Léger #define AT91_DDRSDRC_TXARDS SHIFT_U32(0xf, 4) 103aa161c19SClément Léger /* Row Precharge All delay */ 104aa161c19SClément Léger #define AT91_DDRSDRC_TRPA SHIFT_U32(0xf, 8) 105aa161c19SClément Léger /* Read to Precharge delay */ 106aa161c19SClément Léger #define AT91_DDRSDRC_TRTP SHIFT_U32(0x7, 12) 107aa161c19SClément Léger 108aa161c19SClément Léger /* Low Power Register */ 109aa161c19SClément Léger #define AT91_DDRSDRC_LPR 0x1C 110aa161c19SClément Léger /* Low-power Configurations */ 111aa161c19SClément Léger #define AT91_DDRSDRC_LPCB SHIFT_U32(3, 0) 112aa161c19SClément Léger #define AT91_DDRSDRC_LPCB_DISABLE 0 113aa161c19SClément Léger #define AT91_DDRSDRC_LPCB_SELF_REFRESH 1 114aa161c19SClément Léger #define AT91_DDRSDRC_LPCB_POWER_DOWN 2 115aa161c19SClément Léger #define AT91_DDRSDRC_LPCB_DEEP_POWER_DOWN 3 116aa161c19SClément Léger /* Clock Frozen */ 117aa161c19SClément Léger #define AT91_DDRSDRC_CLKFR BIT(2) 118aa161c19SClément Léger /* LPDDR Power Off */ 119aa161c19SClément Léger #define AT91_DDRSDRC_LPDDR2_PWOFF BIT(3) 120aa161c19SClément Léger /* Partial Array Self Refresh */ 121aa161c19SClément Léger #define AT91_DDRSDRC_PASR SHIFT_U32(7, 4) 122aa161c19SClément Léger /* Temperature Compensated Self Refresh */ 123aa161c19SClément Léger #define AT91_DDRSDRC_TCSR SHIFT_U32(3, 8) 124aa161c19SClément Léger /* Drive Strength */ 125aa161c19SClément Léger #define AT91_DDRSDRC_DS SHIFT_U32(3, 10) 126aa161c19SClément Léger /* Time to define when Low Power Mode is enabled */ 127aa161c19SClément Léger #define AT91_DDRSDRC_TIMEOUT SHIFT_U32(3, 12) 128aa161c19SClément Léger #define AT91_DDRSDRC_TIMEOUT_0_CLK_CYCLES SHIFT_U32(0, 12) 129aa161c19SClément Léger #define AT91_DDRSDRC_TIMEOUT_64_CLK_CYCLES BIT(12) 130aa161c19SClément Léger #define AT91_DDRSDRC_TIMEOUT_128_CLK_CYCLES SHIFT_U32(2, 12) 131aa161c19SClément Léger /* Active power down exit time */ 132aa161c19SClément Léger #define AT91_DDRSDRC_APDE BIT(16) 133aa161c19SClément Léger /* Update load mode register and extended mode register */ 134aa161c19SClément Léger #define AT91_DDRSDRC_UPD_MR SHIFT_U32(3, 20) 135aa161c19SClément Léger 136aa161c19SClément Léger /* Memory Device Register */ 137aa161c19SClément Léger #define AT91_DDRSDRC_MDR 0x20 138aa161c19SClément Léger /* Memory Device Type */ 139aa161c19SClément Léger #define AT91_DDRSDRC_MD SHIFT_U32(7, 0) 140aa161c19SClément Léger #define AT91_DDRSDRC_MD_SDR 0 141aa161c19SClément Léger #define AT91_DDRSDRC_MD_LOW_POWER_SDR 1 142aa161c19SClément Léger #define AT91_DDRSDRC_MD_LOW_POWER_DDR 3 143aa161c19SClément Léger #define AT91_DDRSDRC_MD_LPDDR3 5 144aa161c19SClément Léger /* [SAM9 Only] */ 145aa161c19SClément Léger #define AT91_DDRSDRC_MD_DDR2 6 146aa161c19SClément Léger #define AT91_DDRSDRC_MD_LPDDR2 7 147aa161c19SClément Léger /* Data Bus Width */ 148aa161c19SClément Léger #define AT91_DDRSDRC_DBW BIT(4) 149aa161c19SClément Léger #define AT91_DDRSDRC_DBW_32BITS SHIFT_U32(0, 4) 150aa161c19SClément Léger #define AT91_DDRSDRC_DBW_16BITS BIT(4) 151aa161c19SClément Léger 152aa161c19SClément Léger /* DLL Information Register */ 153aa161c19SClément Léger #define AT91_DDRSDRC_DLL 0x24 154aa161c19SClément Léger /* Master Delay increment */ 155aa161c19SClément Léger #define AT91_DDRSDRC_MDINC BIT(0) 156aa161c19SClément Léger /* Master Delay decrement */ 157aa161c19SClément Léger #define AT91_DDRSDRC_MDDEC BIT(1) 158aa161c19SClément Léger /* Master Delay Overflow */ 159aa161c19SClément Léger #define AT91_DDRSDRC_MDOVF BIT(2) 160aa161c19SClément Léger /* Master Delay value */ 161aa161c19SClément Léger #define AT91_DDRSDRC_MDVAL SHIFT_U32(0xff, 8) 162aa161c19SClément Léger 163aa161c19SClément Léger /* High Speed Register [SAM9 Only] */ 164aa161c19SClément Léger #define AT91_DDRSDRC_HS 0x2C 165aa161c19SClément Léger /* Anticip read access is disabled */ 166aa161c19SClément Léger #define AT91_DDRSDRC_DIS_ATCP_RD BIT(2) 167aa161c19SClément Léger 168aa161c19SClément Léger /* Delay I/O Register n */ 169aa161c19SClément Léger #define AT91_DDRSDRC_DELAY(n) (0x30 + (0x4 * (n))) 170aa161c19SClément Léger 171aa161c19SClément Léger /* Write Protect Mode Register [SAM9 Only] */ 172aa161c19SClément Léger #define AT91_DDRSDRC_WPMR 0xE4 173aa161c19SClément Léger /* Write protect enable */ 174aa161c19SClément Léger #define AT91_DDRSDRC_WP BIT(0) 175aa161c19SClément Léger /* Write protect key */ 176aa161c19SClément Léger #define AT91_DDRSDRC_WPKEY SHIFT_U32(0xffffff, 8) 177aa161c19SClément Léger /* Write protect key = "DDR" */ 178aa161c19SClément Léger #define AT91_DDRSDRC_KEY SHIFT_U32(0x444452, 8) 179aa161c19SClément Léger 180aa161c19SClément Léger /* Write Protect Status Register [SAM9 Only] */ 181aa161c19SClément Léger #define AT91_DDRSDRC_WPSR 0xE8 182aa161c19SClément Léger /* Write protect violation status */ 183aa161c19SClément Léger #define AT91_DDRSDRC_WPVS BIT(0) 184aa161c19SClément Léger /* Write protect violation source */ 185aa161c19SClément Léger #define AT91_DDRSDRC_WPVSRC SHIFT_U32(0xffff, 8) 186aa161c19SClément Léger 187aa161c19SClément Léger #endif 188