mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-22 19:23:07 +00:00
83d290c56f
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
209 lines
7.7 KiB
C
209 lines
7.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright (C) 2013 Atmel Corporation
|
|
* Bo Shen <voice.shen@atmel.com>
|
|
*
|
|
* Copyright (C) 2015 Atmel Corporation
|
|
* Wenyou Yang <wenyou.yang@atmel.com>
|
|
*/
|
|
|
|
#ifndef __ATMEL_MPDDRC_H__
|
|
#define __ATMEL_MPDDRC_H__
|
|
|
|
struct atmel_mpddrc_config {
|
|
u32 mr;
|
|
u32 rtr;
|
|
u32 cr;
|
|
u32 tpr0;
|
|
u32 tpr1;
|
|
u32 tpr2;
|
|
u32 md;
|
|
};
|
|
|
|
/*
|
|
* Only define the needed register in mpddr
|
|
* If other register needed, will add them later
|
|
*/
|
|
struct atmel_mpddr {
|
|
u32 mr; /* 0x00: Mode Register */
|
|
u32 rtr; /* 0x04: Refresh Timer Register */
|
|
u32 cr; /* 0x08: Configuration Register */
|
|
u32 tpr0; /* 0x0c: Timing Parameter 0 Register */
|
|
u32 tpr1; /* 0x10: Timing Parameter 1 Register */
|
|
u32 tpr2; /* 0x14: Timing Parameter 2 Register */
|
|
u32 reserved; /* 0x18: Reserved */
|
|
u32 lpr; /* 0x1c: Low-power Register */
|
|
u32 md; /* 0x20: Memory Device Register */
|
|
u32 reserved1; /* 0x24: Reserved */
|
|
u32 lpddr23_lpr; /* 0x28: LPDDR2-LPDDR3 Low-power Register*/
|
|
u32 cal_mr4; /* 0x2c: Calibration and MR4 Register */
|
|
u32 tim_cal; /* 0x30: Timing Calibration Register */
|
|
u32 io_calibr; /* 0x34: IO Calibration */
|
|
u32 ocms; /* 0x38: OCMS Register */
|
|
u32 ocms_key1; /* 0x3c: OCMS KEY1 Register */
|
|
u32 ocms_key2; /* 0x40: OCMS KEY2 Register */
|
|
u32 conf_arbiter; /* 0x44: Configuration Arbiter Register */
|
|
u32 timeout; /* 0x48: Timeout Port 0/1/2/3 Register */
|
|
u32 req_port0123; /* 0x4c: Request Port 0/1/2/3 Register */
|
|
u32 req_port4567; /* 0x50: Request Port 4/5/6/7 Register */
|
|
u32 bdw_port0123; /* 0x54: Bandwidth Port 0/1/2/3 Register */
|
|
u32 bdw_port4567; /* 0x58: Bandwidth Port 4/5/6/7 Register */
|
|
u32 rd_data_path; /* 0x5c: Read Datapath Register */
|
|
u32 reserved2[33];
|
|
u32 wpmr; /* 0xe4: Write Protection Mode Register */
|
|
u32 wpsr; /* 0xe8: Write Protection Status Register */
|
|
u32 reserved3[4];
|
|
u32 version; /* 0xfc: IP version */
|
|
};
|
|
|
|
|
|
int ddr2_init(const unsigned int base,
|
|
const unsigned int ram_address,
|
|
const struct atmel_mpddrc_config *mpddr_value);
|
|
|
|
int ddr3_init(const unsigned int base,
|
|
const unsigned int ram_address,
|
|
const struct atmel_mpddrc_config *mpddr_value);
|
|
|
|
/* Bit field in mode register */
|
|
#define ATMEL_MPDDRC_MR_MODE_NORMAL_CMD 0x0
|
|
#define ATMEL_MPDDRC_MR_MODE_NOP_CMD 0x1
|
|
#define ATMEL_MPDDRC_MR_MODE_PRCGALL_CMD 0x2
|
|
#define ATMEL_MPDDRC_MR_MODE_LMR_CMD 0x3
|
|
#define ATMEL_MPDDRC_MR_MODE_RFSH_CMD 0x4
|
|
#define ATMEL_MPDDRC_MR_MODE_EXT_LMR_CMD 0x5
|
|
#define ATMEL_MPDDRC_MR_MODE_DEEP_CMD 0x6
|
|
#define ATMEL_MPDDRC_MR_MODE_LPDDR2_CMD 0x7
|
|
|
|
/* Bit field in configuration register */
|
|
#define ATMEL_MPDDRC_CR_NC_MASK 0x3
|
|
#define ATMEL_MPDDRC_CR_NC_COL_9 0x0
|
|
#define ATMEL_MPDDRC_CR_NC_COL_10 0x1
|
|
#define ATMEL_MPDDRC_CR_NC_COL_11 0x2
|
|
#define ATMEL_MPDDRC_CR_NC_COL_12 0x3
|
|
#define ATMEL_MPDDRC_CR_NR_MASK (0x3 << 2)
|
|
#define ATMEL_MPDDRC_CR_NR_ROW_11 (0x0 << 2)
|
|
#define ATMEL_MPDDRC_CR_NR_ROW_12 (0x1 << 2)
|
|
#define ATMEL_MPDDRC_CR_NR_ROW_13 (0x2 << 2)
|
|
#define ATMEL_MPDDRC_CR_NR_ROW_14 (0x3 << 2)
|
|
#define ATMEL_MPDDRC_CR_CAS_MASK (0x7 << 4)
|
|
#define ATMEL_MPDDRC_CR_CAS_DDR_CAS2 (0x2 << 4)
|
|
#define ATMEL_MPDDRC_CR_CAS_DDR_CAS3 (0x3 << 4)
|
|
#define ATMEL_MPDDRC_CR_CAS_DDR_CAS4 (0x4 << 4)
|
|
#define ATMEL_MPDDRC_CR_CAS_DDR_CAS5 (0x5 << 4)
|
|
#define ATMEL_MPDDRC_CR_CAS_DDR_CAS6 (0x6 << 4)
|
|
#define ATMEL_MPDDRC_CR_DLL_RESET_ENABLED (0x1 << 7)
|
|
#define ATMEL_MPDDRC_CR_DIC_DS (0x1 << 8)
|
|
#define ATMEL_MPDDRC_CR_DIS_DLL (0x1 << 9)
|
|
#define ATMEL_MPDDRC_CR_ZQ_INIT (0x0 << 10)
|
|
#define ATMEL_MPDDRC_CR_ZQ_LONG (0x1 << 10)
|
|
#define ATMEL_MPDDRC_CR_ZQ_SHORT (0x2 << 10)
|
|
#define ATMEL_MPDDRC_CR_ZQ_RESET (0x3 << 10)
|
|
#define ATMEL_MPDDRC_CR_OCD_DEFAULT (0x7 << 12)
|
|
#define ATMEL_MPDDRC_CR_DQMS_SHARED (0x1 << 16)
|
|
#define ATMEL_MPDDRC_CR_ENRDM_ON (0x1 << 17)
|
|
#define ATMEL_MPDDRC_CR_NB_8BANKS (0x1 << 20)
|
|
#define ATMEL_MPDDRC_CR_NDQS_DISABLED (0x1 << 21)
|
|
#define ATMEL_MPDDRC_CR_DECOD_INTERLEAVED (0x1 << 22)
|
|
#define ATMEL_MPDDRC_CR_UNAL_SUPPORTED (0x1 << 23)
|
|
|
|
/* Bit field in timing parameter 0 register */
|
|
#define ATMEL_MPDDRC_TPR0_TRAS_OFFSET 0
|
|
#define ATMEL_MPDDRC_TPR0_TRAS_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR0_TRCD_OFFSET 4
|
|
#define ATMEL_MPDDRC_TPR0_TRCD_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR0_TWR_OFFSET 8
|
|
#define ATMEL_MPDDRC_TPR0_TWR_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR0_TRC_OFFSET 12
|
|
#define ATMEL_MPDDRC_TPR0_TRC_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR0_TRP_OFFSET 16
|
|
#define ATMEL_MPDDRC_TPR0_TRP_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR0_TRRD_OFFSET 20
|
|
#define ATMEL_MPDDRC_TPR0_TRRD_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR0_TWTR_OFFSET 24
|
|
#define ATMEL_MPDDRC_TPR0_TWTR_MASK 0x7
|
|
#define ATMEL_MPDDRC_TPR0_RDC_WRRD_OFFSET 27
|
|
#define ATMEL_MPDDRC_TPR0_RDC_WRRD_MASK 0x1
|
|
#define ATMEL_MPDDRC_TPR0_TMRD_OFFSET 28
|
|
#define ATMEL_MPDDRC_TPR0_TMRD_MASK 0xf
|
|
|
|
/* Bit field in timing parameter 1 register */
|
|
#define ATMEL_MPDDRC_TPR1_TRFC_OFFSET 0
|
|
#define ATMEL_MPDDRC_TPR1_TRFC_MASK 0x7f
|
|
#define ATMEL_MPDDRC_TPR1_TXSNR_OFFSET 8
|
|
#define ATMEL_MPDDRC_TPR1_TXSNR_MASK 0xff
|
|
#define ATMEL_MPDDRC_TPR1_TXSRD_OFFSET 16
|
|
#define ATMEL_MPDDRC_TPR1_TXSRD_MASK 0xff
|
|
#define ATMEL_MPDDRC_TPR1_TXP_OFFSET 24
|
|
#define ATMEL_MPDDRC_TPR1_TXP_MASK 0xf
|
|
|
|
/* Bit field in timing parameter 2 register */
|
|
#define ATMEL_MPDDRC_TPR2_TXARD_OFFSET 0
|
|
#define ATMEL_MPDDRC_TPR2_TXARD_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR2_TXARDS_OFFSET 4
|
|
#define ATMEL_MPDDRC_TPR2_TXARDS_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR2_TRPA_OFFSET 8
|
|
#define ATMEL_MPDDRC_TPR2_TRPA_MASK 0xf
|
|
#define ATMEL_MPDDRC_TPR2_TRTP_OFFSET 12
|
|
#define ATMEL_MPDDRC_TPR2_TRTP_MASK 0x7
|
|
#define ATMEL_MPDDRC_TPR2_TFAW_OFFSET 16
|
|
#define ATMEL_MPDDRC_TPR2_TFAW_MASK 0xf
|
|
|
|
/* Bit field in Memory Device Register */
|
|
#define ATMEL_MPDDRC_MD_SDR_SDRAM 0x0
|
|
#define ATMEL_MPDDRC_MD_LP_SDR_SDRAM 0x1
|
|
#define ATMEL_MPDDRC_MD_DDR_SDRAM 0x2
|
|
#define ATMEL_MPDDRC_MD_LPDDR_SDRAM 0x3
|
|
#define ATMEL_MPDDRC_MD_DDR3_SDRAM 0x4
|
|
#define ATMEL_MPDDRC_MD_LPDDR3_SDRAM 0x5
|
|
#define ATMEL_MPDDRC_MD_DDR2_SDRAM 0x6
|
|
#define ATMEL_MPDDRC_MD_DBW_MASK (0x1 << 4)
|
|
#define ATMEL_MPDDRC_MD_DBW_32_BITS (0x0 << 4)
|
|
#define ATMEL_MPDDRC_MD_DBW_16_BITS (0x1 << 4)
|
|
|
|
/* Bit field in I/O Calibration Register */
|
|
#define ATMEL_MPDDRC_IO_CALIBR_RDIV 0x7
|
|
|
|
#define ATMEL_MPDDRC_IO_CALIBR_LPDDR2_RZQ_34_3 0x1
|
|
#define ATMEL_MPDDRC_IO_CALIBR_LPDDR2_RZQ_40 0x2
|
|
#define ATMEL_MPDDRC_IO_CALIBR_LPDDR2_RZQ_48 0x3
|
|
#define ATMEL_MPDDRC_IO_CALIBR_LPDDR2_RZQ_60 0x4
|
|
#define ATMEL_MPDDRC_IO_CALIBR_LPDDR2_RZQ_80 0x6
|
|
#define ATMEL_MPDDRC_IO_CALIBR_LPDDR2_RZQ_120 0x7
|
|
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR2_RZQ_35 0x2
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR2_RZQ_43 0x3
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR2_RZQ_52 0x4
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR2_RZQ_70 0x6
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR2_RZQ_105 0x7
|
|
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_37 0x2
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_44 0x3
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_55 0x4
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_73 0x6
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_110 0x7
|
|
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_37 0x2
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_44 0x3
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_55 0x4
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_73 0x6
|
|
#define ATMEL_MPDDRC_IO_CALIBR_DDR3_RZQ_110 0x7
|
|
|
|
#define ATMEL_MPDDRC_IO_CALIBR_TZQIO (0x7f << 8)
|
|
#define ATMEL_MPDDRC_IO_CALIBR_TZQIO_(x) (((x) & 0x7f) << 8)
|
|
|
|
#define ATMEL_MPDDRC_IO_CALIBR_CALCODEP (0xf << 16)
|
|
#define ATMEL_MPDDRC_IO_CALIBR_CALCODEP_(x) (((x) & 0xf) << 16)
|
|
#define ATMEL_MPDDRC_IO_CALIBR_CALCODEN (0xf << 20)
|
|
#define ATMEL_MPDDRC_IO_CALIBR_CALCODEN_(x) (((x) & 0xf) << 20)
|
|
|
|
#define ATMEL_MPDDRC_IO_CALIBR_EN_CALIB (0x1 << 4)
|
|
|
|
/* Bit field in Read Data Path Register */
|
|
#define ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_SAMPLING 0x3
|
|
#define ATMEL_MPDDRC_RD_DATA_PATH_NO_SHIFT 0x0
|
|
#define ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_ONE_CYCLE 0x1
|
|
#define ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_TWO_CYCLE 0x2
|
|
#define ATMEL_MPDDRC_RD_DATA_PATH_SHIFT_THREE_CYCLE 0x3
|
|
|
|
#endif
|