135 lines
4.2 KiB
C
135 lines
4.2 KiB
C
/*
|
|
* Copyright 2018 NXP
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#ifndef __DDR4_CONFIG_H__
|
|
#define __DDR4_CONFIG_H__
|
|
|
|
#include "../ddr.h"
|
|
|
|
#define DDR_ONE_RANK
|
|
#define RUN_ON_SILICON
|
|
#define DDR4_SW_FFC
|
|
#define ENABLE_RETENTION
|
|
|
|
#define DRAM_VREF 0x1f
|
|
|
|
#define SAVE_DDRPHY_TRAIN_ADDR 0x184000
|
|
|
|
/* choose p2 state data rate, define just one of below macro */
|
|
#define PLLBYPASS_400MBPS
|
|
|
|
/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
|
|
/* for DDR4 */
|
|
/* Note:DQ SI RON=40ohm, RTT=48ohm */
|
|
/* CA SI RON=40ohm, RTT=65ohm */
|
|
/* //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
|
|
/* for DDR RTT NOM/PARK */
|
|
#define DDR4_ODT_DIS 0
|
|
#define DDR4_ODT_60 1
|
|
#define DDR4_ODT_120 2
|
|
#define DDR4_ODT_40 3
|
|
#define DDR4_ODT_240 4
|
|
#define DDR4_ODT_48 5
|
|
#define DDR4_ODT_80 6
|
|
#define DDR4_ODT_34 7
|
|
|
|
/* for DDR RON */
|
|
#define DDR4_RON_34 0
|
|
#define DDR4_RON_48 1
|
|
#define DDR4_RON_40 2
|
|
#define DDR4_RON_RES 3
|
|
|
|
/* for DDR RTT write */
|
|
#define DDR4_RTT_WR_DIS 0
|
|
#define DDR4_RTT_WR_120 1
|
|
#define DDR4_RTT_WR_240 2
|
|
#define DDR4_RTT_WR_HZ 3
|
|
#define DDR4_RTT_WR_80 4
|
|
|
|
/* for DDR4 PHY data RON */
|
|
#define DDR4_PHY_DATA_RON_34 0xeba
|
|
#define DDR4_PHY_DATA_RON_40 0xe38
|
|
#define DDR4_PHY_DATA_RON_48 ((0x1a << 6) | 0x1a)
|
|
#define DDR4_PHY_DATA_RON_60 ((0x18 << 6) | 0x18)
|
|
#define DDR4_PHY_DATA_RON_80 ((0x0a << 6) | 0x0a)
|
|
#define DDR4_PHY_DATA_RON_120 ((0x08 << 6) | 0x08)
|
|
#define DDR4_PHY_DATA_RON_240 ((0x02<<6)|0x02)
|
|
|
|
/* for DDR4 PHY data RTT */
|
|
#define DDR4_PHY_DATA_RTT_34 0x3a
|
|
#define DDR4_PHY_DATA_RTT_40 0x38
|
|
#define DDR4_PHY_DATA_RTT_48 0x1a
|
|
#define DDR4_PHY_DATA_RTT_60 0x18
|
|
#define DDR4_PHY_DATA_RTT_80 0x0a
|
|
#define DDR4_PHY_DATA_RTT_120 0x08
|
|
#define DDR4_PHY_DATA_RTT_240 0x02
|
|
|
|
/* for DDR4 PHY address RON */
|
|
#define DDR4_PHY_ADDR_RON_30 ((0x07 << 5) | 0x07)
|
|
#define DDR4_PHY_ADDR_RON_40 0x63
|
|
#define DDR4_PHY_ADDR_RON_60 ((0x01 << 5) | 0x01)
|
|
#define DDR4_PHY_ADDR_RON_120 ((0x00 << 5) | 0x00)
|
|
|
|
#define DDR4_PHY_ADDR_RON DDR4_PHY_ADDR_RON_40
|
|
|
|
/* read DDR4 */
|
|
#ifdef DDR_ONE_RANK
|
|
#define DDR4_RON DDR4_RON_34
|
|
#define DDR4_PHY_DATA_RTT DDR4_PHY_DATA_RTT_48
|
|
#define DDR4_PHYREF_VALUE 91
|
|
#else
|
|
#define DDR4_RON DDR4_RON_40
|
|
#define DDR4_PHY_DATA_RTT DDR4_PHY_DATA_RTT_48
|
|
#define DDR4_PHYREF_VALUE 93
|
|
#endif
|
|
|
|
/* write DDR4 */
|
|
#ifdef DDR_ONE_RANK
|
|
/* one lank */
|
|
#define DDR4_PHY_DATA_RON DDR4_PHY_DATA_RON_34
|
|
#define DDR4_RTT_NOM DDR4_ODT_60
|
|
#define DDR4_RTT_WR DDR4_RTT_WR_DIS
|
|
#define DDR4_RTT_PARK DDR4_ODT_DIS
|
|
#define DDR4_MR6_VALUE 0x0d
|
|
#else
|
|
/* two lank */
|
|
#define DDR4_PHY_DATA_RON DDR4_PHY_DATA_RON_40
|
|
#define DDR4_RTT_NOM DDR4_ODT_60
|
|
#define DDR4_RTT_WR DDR4_RTT_WR_DIS
|
|
#define DDR4_RTT_PARK DDR4_ODT_DIS
|
|
#define DDR4_MR6_VALUE 0x10
|
|
#endif
|
|
|
|
/* voltage:delay */
|
|
#define DDR4_2D_WEIGHT (31 << 8 | 127)
|
|
|
|
#define ANAMIX_PLL_BASE_ADDR 0x30360000
|
|
#define HW_DRAM_PLL_CFG0_ADDR (ANAMIX_PLL_BASE_ADDR + 0x60)
|
|
#define HW_DRAM_PLL_CFG1_ADDR (ANAMIX_PLL_BASE_ADDR + 0x64)
|
|
#define HW_DRAM_PLL_CFG2_ADDR (ANAMIX_PLL_BASE_ADDR + 0x68)
|
|
#define GPC_PU_PWRHSK 0x303A01FC
|
|
#define GPC_TOP_CONFIG_OFFSET 0x0000
|
|
#define AIPS1_ARB_BASE_ADDR 0x30000000
|
|
#define AIPS_TZ1_BASE_ADDR AIPS1_ARB_BASE_ADDR
|
|
#define AIPS1_OFF_BASE_ADDR (AIPS_TZ1_BASE_ADDR + 0x200000)
|
|
#define CCM_IPS_BASE_ADDR (AIPS1_OFF_BASE_ADDR + 0x180000)
|
|
#define CCM_SRC_CTRL_OFFSET (CCM_IPS_BASE_ADDR + 0x800)
|
|
#define CCM_SRC_CTRL(n) (CCM_SRC_CTRL_OFFSET + 0x10 * n)
|
|
|
|
|
|
#define dwc_ddrphy_apb_wr(addr, data) reg32_write(IP2APB_DDRPHY_IPS_BASE_ADDR(0) + 4 * (addr), data)
|
|
#define dwc_ddrphy_apb_rd(addr) (reg32_read(IP2APB_DDRPHY_IPS_BASE_ADDR(0) + 4 * (addr)))
|
|
#define reg32clrbit(addr, bitpos) reg32_write((addr), (reg32_read((addr)) & (0xFFFFFFFF ^ (1 << (bitpos)))))
|
|
#define DDR_CSD1_BASE_ADDR 0x40000000
|
|
#define DDR_CSD2_BASE_ADDR 0x80000000
|
|
|
|
void restore_1d2d_trained_csr_ddr4_p012(unsigned int addr);
|
|
void save_1d2d_trained_csr_ddr4_p012(unsigned int addr);
|
|
void ddr4_mr_write(unsigned int mr, unsigned int data, unsigned int read, unsigned int rank);
|
|
void ddr4_phyinit_train_sw_ffc(unsigned int Train2D);
|
|
|
|
#endif
|