blob: ad8ead70be5be716d3f318113793fb62da58ddee [file] [log] [blame]
/*
* Copyright 2018 NXP
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef __DDR4_CONFIG_H__
#define __DDR4_CONFIG_H__
#include "../ddr.h"
#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 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