Commit 08756147 authored by Marek Vasut's avatar Marek Vasut
Browse files

rcar_gen3: drivers: ddr_b: Further checkpatch cleanups



Address more checkpatch CHECKs and ERRORs, no functional change.
Signed-off-by: default avatarMarek Vasut <marek.vasut+renesas@gmail.com>
Change-Id: Ife682288cef3afa860571b2aca647c9ffe936125
parent fcd81d6f
...@@ -25,9 +25,7 @@ ...@@ -25,9 +25,7 @@
#define DDR_BACKUPMODE #define DDR_BACKUPMODE
#define FATAL_MSG(x) NOTICE(x) #define FATAL_MSG(x) NOTICE(x)
/******************************************************************************* /* variables */
* variables
******************************************************************************/
#ifdef RCAR_DDR_FIXED_LSI_TYPE #ifdef RCAR_DDR_FIXED_LSI_TYPE
#ifndef RCAR_AUTO #ifndef RCAR_AUTO
#define RCAR_AUTO 99 #define RCAR_AUTO 99
...@@ -90,7 +88,7 @@ static uint32_t ddr_phycaslice; ...@@ -90,7 +88,7 @@ static uint32_t ddr_phycaslice;
static const struct _boardcnf *board_cnf; static const struct _boardcnf *board_cnf;
static uint32_t ddr_phyvalid; static uint32_t ddr_phyvalid;
static uint32_t ddr_density[DRAM_CH_CNT][CS_CNT]; static uint32_t ddr_density[DRAM_CH_CNT][CS_CNT];
static uint32_t ch_have_this_cs[CS_CNT] __attribute__ ((aligned(64))); static uint32_t ch_have_this_cs[CS_CNT] __aligned(64);
static uint32_t rdqdm_dly[DRAM_CH_CNT][CS_CNT][SLICE_CNT * 2][9]; static uint32_t rdqdm_dly[DRAM_CH_CNT][CS_CNT][SLICE_CNT * 2][9];
static uint32_t max_density; static uint32_t max_density;
static uint32_t ddr0800_mul; static uint32_t ddr0800_mul;
...@@ -129,7 +127,9 @@ uint32_t ddr_backup; ...@@ -129,7 +127,9 @@ uint32_t ddr_backup;
#define OPERATING_FREQ (400U) /* Mhz */ #define OPERATING_FREQ (400U) /* Mhz */
#define BASE_SUB_SLOT_NUM (0x6U) #define BASE_SUB_SLOT_NUM (0x6U)
#define SUB_SLOT_CYCLE (0x7EU) /* 126 */ #define SUB_SLOT_CYCLE (0x7EU) /* 126 */
#define QOSWT_WTSET0_CYCLE ((SUB_SLOT_CYCLE * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ) /* unit:ns */ #define QOSWT_WTSET0_CYCLE \
((SUB_SLOT_CYCLE * BASE_SUB_SLOT_NUM * 1000U) / \
OPERATING_FREQ) /* unit:ns */
uint32_t get_refperiod(void) uint32_t get_refperiod(void)
{ {
...@@ -155,8 +155,7 @@ static const uint32_t _reg_PHY_RX_CAL_X[_reg_PHY_RX_CAL_X_NUM] = { ...@@ -155,8 +155,7 @@ static const uint32_t _reg_PHY_RX_CAL_X[_reg_PHY_RX_CAL_X_NUM] = {
}; };
#define _reg_PHY_CLK_WRX_SLAVE_DELAY_NUM 10 #define _reg_PHY_CLK_WRX_SLAVE_DELAY_NUM 10
static const uint32_t static const uint32_t _reg_PHY_CLK_WRX_SLAVE_DELAY[_reg_PHY_CLK_WRX_SLAVE_DELAY_NUM] = {
_reg_PHY_CLK_WRX_SLAVE_DELAY[_reg_PHY_CLK_WRX_SLAVE_DELAY_NUM] = {
_reg_PHY_CLK_WRDQ0_SLAVE_DELAY, _reg_PHY_CLK_WRDQ0_SLAVE_DELAY,
_reg_PHY_CLK_WRDQ1_SLAVE_DELAY, _reg_PHY_CLK_WRDQ1_SLAVE_DELAY,
_reg_PHY_CLK_WRDQ2_SLAVE_DELAY, _reg_PHY_CLK_WRDQ2_SLAVE_DELAY,
...@@ -170,8 +169,7 @@ static const uint32_t ...@@ -170,8 +169,7 @@ static const uint32_t
}; };
#define _reg_PHY_RDDQS_X_FALL_SLAVE_DELAY_NUM 9 #define _reg_PHY_RDDQS_X_FALL_SLAVE_DELAY_NUM 9
static const uint32_t static const uint32_t _reg_PHY_RDDQS_X_FALL_SLAVE_DELAY[_reg_PHY_RDDQS_X_FALL_SLAVE_DELAY_NUM] = {
_reg_PHY_RDDQS_X_FALL_SLAVE_DELAY[_reg_PHY_RDDQS_X_FALL_SLAVE_DELAY_NUM] = {
_reg_PHY_RDDQS_DQ0_FALL_SLAVE_DELAY, _reg_PHY_RDDQS_DQ0_FALL_SLAVE_DELAY,
_reg_PHY_RDDQS_DQ1_FALL_SLAVE_DELAY, _reg_PHY_RDDQS_DQ1_FALL_SLAVE_DELAY,
_reg_PHY_RDDQS_DQ2_FALL_SLAVE_DELAY, _reg_PHY_RDDQS_DQ2_FALL_SLAVE_DELAY,
...@@ -184,8 +182,7 @@ static const uint32_t ...@@ -184,8 +182,7 @@ static const uint32_t
}; };
#define _reg_PHY_RDDQS_X_RISE_SLAVE_DELAY_NUM 9 #define _reg_PHY_RDDQS_X_RISE_SLAVE_DELAY_NUM 9
static const uint32_t static const uint32_t _reg_PHY_RDDQS_X_RISE_SLAVE_DELAY[_reg_PHY_RDDQS_X_RISE_SLAVE_DELAY_NUM] = {
_reg_PHY_RDDQS_X_RISE_SLAVE_DELAY[_reg_PHY_RDDQS_X_RISE_SLAVE_DELAY_NUM] = {
_reg_PHY_RDDQS_DQ0_RISE_SLAVE_DELAY, _reg_PHY_RDDQS_DQ0_RISE_SLAVE_DELAY,
_reg_PHY_RDDQS_DQ1_RISE_SLAVE_DELAY, _reg_PHY_RDDQS_DQ1_RISE_SLAVE_DELAY,
_reg_PHY_RDDQS_DQ2_RISE_SLAVE_DELAY, _reg_PHY_RDDQS_DQ2_RISE_SLAVE_DELAY,
...@@ -210,8 +207,7 @@ static const uint32_t _reg_PHY_PAD_TERM_X[_reg_PHY_PAD_TERM_X_NUM] = { ...@@ -210,8 +207,7 @@ static const uint32_t _reg_PHY_PAD_TERM_X[_reg_PHY_PAD_TERM_X_NUM] = {
}; };
#define _reg_PHY_CLK_CACS_SLAVE_DELAY_X_NUM 10 #define _reg_PHY_CLK_CACS_SLAVE_DELAY_X_NUM 10
static const uint32_t static const uint32_t _reg_PHY_CLK_CACS_SLAVE_DELAY_X[_reg_PHY_CLK_CACS_SLAVE_DELAY_X_NUM] = {
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[_reg_PHY_CLK_CACS_SLAVE_DELAY_X_NUM] = {
_reg_PHY_ADR0_CLK_WR_SLAVE_DELAY, _reg_PHY_ADR0_CLK_WR_SLAVE_DELAY,
_reg_PHY_ADR1_CLK_WR_SLAVE_DELAY, _reg_PHY_ADR1_CLK_WR_SLAVE_DELAY,
_reg_PHY_ADR2_CLK_WR_SLAVE_DELAY, _reg_PHY_ADR2_CLK_WR_SLAVE_DELAY,
...@@ -225,9 +221,7 @@ static const uint32_t ...@@ -225,9 +221,7 @@ static const uint32_t
_reg_PHY_GRP_SLAVE_DELAY_3 _reg_PHY_GRP_SLAVE_DELAY_3
}; };
/******************************************************************************* /* Prototypes */
* Prototypes
******************************************************************************/
static inline uint32_t vch_nxt(uint32_t pos); static inline uint32_t vch_nxt(uint32_t pos);
static void cpg_write_32(uint32_t a, uint32_t v); static void cpg_write_32(uint32_t a, uint32_t v);
static void pll3_control(uint32_t high); static void pll3_control(uint32_t high);
...@@ -292,9 +286,9 @@ static void adjust_rddqs_latency(void); ...@@ -292,9 +286,9 @@ static void adjust_rddqs_latency(void);
static void adjust_wpath_latency(void); static void adjust_wpath_latency(void);
struct ddrt_data { struct ddrt_data {
int32_t init_temp; /* Initial Temperature (do) */ int32_t init_temp; /* Initial Temperature (do) */
uint32_t init_cal[4]; /* Initial io-code (4 is for H3) */ uint32_t init_cal[4]; /* Initial io-code (4 is for H3) */
uint32_t tcomp_cal[4]; /* Temperature compensated io-code (4 is for H3) */ uint32_t tcomp_cal[4]; /* Temp. compensated io-code (4 is for H3) */
}; };
static struct ddrt_data tcal; static struct ddrt_data tcal;
...@@ -303,9 +297,7 @@ static void pvtcode_update(void); ...@@ -303,9 +297,7 @@ static void pvtcode_update(void);
static void pvtcode_update2(void); static void pvtcode_update2(void);
static void ddr_padcal_tcompensate_getinit(uint32_t override); static void ddr_padcal_tcompensate_getinit(uint32_t override);
/******************************************************************************* /* load board configuration */
* load board configuration
******************************************************************************/
#include "boot_init_dram_config.c" #include "boot_init_dram_config.c"
#ifndef DDR_FAST_INIT #ifndef DDR_FAST_INIT
...@@ -326,9 +318,7 @@ static void wdqdm_clr1(uint32_t ch, uint32_t ddr_csn); ...@@ -326,9 +318,7 @@ static void wdqdm_clr1(uint32_t ch, uint32_t ddr_csn);
static uint32_t wdqdm_ana1(uint32_t ch, uint32_t ddr_csn); static uint32_t wdqdm_ana1(uint32_t ch, uint32_t ddr_csn);
#endif/* DDR_FAST_INIT */ #endif/* DDR_FAST_INIT */
/******************************************************************************* /* macro for channel selection loop */
* macro for channel selection loop
******************************************************************************/
static inline uint32_t vch_nxt(uint32_t pos) static inline uint32_t vch_nxt(uint32_t pos)
{ {
uint32_t posn; uint32_t posn;
...@@ -346,14 +336,10 @@ for (ch = vch_nxt(0); ch < DRAM_CH_CNT; ch = vch_nxt(ch + 1)) ...@@ -346,14 +336,10 @@ for (ch = vch_nxt(0); ch < DRAM_CH_CNT; ch = vch_nxt(ch + 1))
#define foreach_ech(ch) \ #define foreach_ech(ch) \
for (ch = 0; ch < DRAM_CH_CNT; ch++) for (ch = 0; ch < DRAM_CH_CNT; ch++)
/******************************************************************************* /* Printing functions */
* Printing functions
******************************************************************************/
#define MSG_LF(...) #define MSG_LF(...)
/******************************************************************************* /* clock settings, reset control */
* clock settings, reset control
******************************************************************************/
static void cpg_write_32(uint32_t a, uint32_t v) static void cpg_write_32(uint32_t a, uint32_t v)
{ {
mmio_write_32(CPG_CPGWPR, ~v); mmio_write_32(CPG_CPGWPR, ~v);
...@@ -443,7 +429,8 @@ static void pll3_control(uint32_t high) ...@@ -443,7 +429,8 @@ static void pll3_control(uint32_t high)
dsb_sev(); dsb_sev();
/* PLL3 DIV resetting(Target value) */ /* PLL3 DIV resetting(Target value) */
data_l = (data_div << 16) | data_div | (0xFF80FF80 & mmio_read_32(CPG_FRQCRD)); data_l = (data_div << 16) | data_div |
(mmio_read_32(CPG_FRQCRD) & 0xFF80FF80);
cpg_write_32(CPG_FRQCRD, data_l); cpg_write_32(CPG_FRQCRD, data_l);
dsb_sev(); dsb_sev();
...@@ -469,7 +456,8 @@ static void pll3_control(uint32_t high) ...@@ -469,7 +456,8 @@ static void pll3_control(uint32_t high)
dsb_sev(); dsb_sev();
/* PLL3 DIV set(Target value) */ /* PLL3 DIV set(Target value) */
data_l = (data_div << 16) | data_div | (0xFF80FF80 & mmio_read_32(CPG_FRQCRD)); data_l = (data_div << 16) | data_div |
(mmio_read_32(CPG_FRQCRD) & 0xFF80FF80);
cpg_write_32(CPG_FRQCRD, data_l); cpg_write_32(CPG_FRQCRD, data_l);
/* DIV SET KICK */ /* DIV SET KICK */
...@@ -489,17 +477,13 @@ static void pll3_control(uint32_t high) ...@@ -489,17 +477,13 @@ static void pll3_control(uint32_t high)
} }
} }
/******************************************************************************* /* barrier */
* barrier
******************************************************************************/
static inline void dsb_sev(void) static inline void dsb_sev(void)
{ {
__asm__ __volatile__("dsb sy"); __asm__ __volatile__("dsb sy");
} }
/******************************************************************************* /* DDR memory register access */
* DDR memory register access
******************************************************************************/
static void wait_dbcmd(void) static void wait_dbcmd(void)
{ {
uint32_t data_l; uint32_t data_l;
...@@ -523,17 +507,15 @@ static void send_dbcmd(uint32_t cmd) ...@@ -523,17 +507,15 @@ static void send_dbcmd(uint32_t cmd)
dsb_sev(); dsb_sev();
} }
/******************************************************************************* /* DDRPHY register access (raw) */
* DDRPHY register access (raw)
******************************************************************************/
static uint32_t reg_ddrphy_read(uint32_t phyno, uint32_t regadd) static uint32_t reg_ddrphy_read(uint32_t phyno, uint32_t regadd)
{ {
uint32_t val; uint32_t val;
uint32_t loop; uint32_t loop;
val = 0; val = 0;
if ((prr_product != PRR_PRODUCT_M3N) if ((prr_product != PRR_PRODUCT_M3N) &&
&& (prr_product != PRR_PRODUCT_V3H)) { (prr_product != PRR_PRODUCT_V3H)) {
mmio_write_32(DBSC_DBPDRGA(phyno), regadd); mmio_write_32(DBSC_DBPDRGA(phyno), regadd);
dsb_sev(); dsb_sev();
...@@ -579,8 +561,8 @@ static void reg_ddrphy_write(uint32_t phyno, uint32_t regadd, uint32_t regdata) ...@@ -579,8 +561,8 @@ static void reg_ddrphy_write(uint32_t phyno, uint32_t regadd, uint32_t regdata)
uint32_t val; uint32_t val;
uint32_t loop; uint32_t loop;
if ((prr_product != PRR_PRODUCT_M3N) if ((prr_product != PRR_PRODUCT_M3N) &&
&& (prr_product != PRR_PRODUCT_V3H)) { (prr_product != PRR_PRODUCT_V3H)) {
mmio_write_32(DBSC_DBPDRGA(phyno), regadd); mmio_write_32(DBSC_DBPDRGA(phyno), regadd);
dsb_sev(); dsb_sev();
for (loop = 0; loop < loop_max; loop++) { for (loop = 0; loop < loop_max; loop++) {
...@@ -628,8 +610,8 @@ static void reg_ddrphy_write_a(uint32_t regadd, uint32_t regdata) ...@@ -628,8 +610,8 @@ static void reg_ddrphy_write_a(uint32_t regadd, uint32_t regdata)
uint32_t val; uint32_t val;
uint32_t loop; uint32_t loop;
if ((prr_product != PRR_PRODUCT_M3N) if ((prr_product != PRR_PRODUCT_M3N) &&
&& (prr_product != PRR_PRODUCT_V3H)) { (prr_product != PRR_PRODUCT_V3H)) {
foreach_vch(ch) { foreach_vch(ch) {
mmio_write_32(DBSC_DBPDRGA(ch), regadd); mmio_write_32(DBSC_DBPDRGA(ch), regadd);
dsb_sev(); dsb_sev();
...@@ -662,9 +644,7 @@ static inline void ddrphy_regif_idle(void) ...@@ -662,9 +644,7 @@ static inline void ddrphy_regif_idle(void)
(void)val; (void)val;
} }
/******************************************************************************* /* DDRPHY register access (field modify) */
* DDRPHY register access (field modify)
******************************************************************************/
static inline uint32_t ddr_regdef(uint32_t _regdef) static inline uint32_t ddr_regdef(uint32_t _regdef)
{ {
return p_ddr_regdef_tbl[_regdef]; return p_ddr_regdef_tbl[_regdef];
...@@ -780,9 +760,7 @@ static uint32_t ddr_getval_ach_as(uint32_t regdef, uint32_t *p) ...@@ -780,9 +760,7 @@ static uint32_t ddr_getval_ach_as(uint32_t regdef, uint32_t *p)
return p[0]; return p[0];
} }
/******************************************************************************* /* handling functions for setteing ddrphy value table */
* handling functions for setteing ddrphy value table
******************************************************************************/
static void _tblcopy(uint32_t *to, const uint32_t *from, uint32_t size) static void _tblcopy(uint32_t *to, const uint32_t *from, uint32_t size)
{ {
uint32_t i; uint32_t i;
...@@ -853,9 +831,7 @@ static uint32_t ddrtbl_getval(uint32_t *tbl, uint32_t _regdef) ...@@ -853,9 +831,7 @@ static uint32_t ddrtbl_getval(uint32_t *tbl, uint32_t _regdef)
return tmp; return tmp;
} }
/******************************************************************************* /* DDRPHY register access handling */
* DDRPHY register access handling
******************************************************************************/
static uint32_t ddrphy_regif_chk(void) static uint32_t ddrphy_regif_chk(void)
{ {
uint32_t tmp_ach[DRAM_CH_CNT]; uint32_t tmp_ach[DRAM_CH_CNT];
...@@ -863,11 +839,11 @@ static uint32_t ddrphy_regif_chk(void) ...@@ -863,11 +839,11 @@ static uint32_t ddrphy_regif_chk(void)
uint32_t err; uint32_t err;
uint32_t PI_VERSION_CODE; uint32_t PI_VERSION_CODE;
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) ||
|| (prr_product == PRR_PRODUCT_M3)) { (prr_product == PRR_PRODUCT_M3)) {
PI_VERSION_CODE = 0x2041; /* H3 Ver.1.x/M3-W */ PI_VERSION_CODE = 0x2041; /* H3 Ver.1.x/M3-W */
} else { } else {
PI_VERSION_CODE = 0x2040; /* H3 Ver.2.0 or later/M3-N/V3H */ PI_VERSION_CODE = 0x2040; /* H3 Ver.2.0 or later/M3-N/V3H */
} }
ddr_getval_ach(_reg_PI_VERSION, (uint32_t *)tmp_ach); ddr_getval_ach(_reg_PI_VERSION, (uint32_t *)tmp_ach);
...@@ -879,9 +855,7 @@ static uint32_t ddrphy_regif_chk(void) ...@@ -879,9 +855,7 @@ static uint32_t ddrphy_regif_chk(void)
return err; return err;
} }
/******************************************************************************* /* functions and parameters for timing setting */
* functions and parameters for timing setting
******************************************************************************/
struct _jedec_spec1 { struct _jedec_spec1 {
uint16_t fx3; uint16_t fx3;
uint8_t rlwodbi; uint8_t rlwodbi;
...@@ -1042,9 +1016,9 @@ static int16_t _f_scale_adj(int16_t ps) ...@@ -1042,9 +1016,9 @@ static int16_t _f_scale_adj(int16_t ps)
{ {
int32_t tmp; int32_t tmp;
/* /*
tmp = (int32_t)512 * ps * ddr_mbps /2 / ddr_mbpsdiv / 1000 / 1000; * tmp = (int32_t)512 * ps * ddr_mbps /2 / ddr_mbpsdiv / 1000 / 1000;
= ps * ddr_mbps /2 / ddr_mbpsdiv *512 / 8 / 8 / 125 / 125 * = ps * ddr_mbps /2 / ddr_mbpsdiv *512 / 8 / 8 / 125 / 125
= ps * ddr_mbps / ddr_mbpsdiv *4 / 125 / 125 * = ps * ddr_mbps / ddr_mbpsdiv *4 / 125 / 125
*/ */
tmp = tmp =
(int32_t)4 * (int32_t)ps * (int32_t)ddr_mbps / (int32_t)4 * (int32_t)ps * (int32_t)ddr_mbps /
...@@ -1132,9 +1106,9 @@ const uint32_t reg_pi_mr14_data_fx_csx[2][CSAB_CNT] = { ...@@ -1132,9 +1106,9 @@ const uint32_t reg_pi_mr14_data_fx_csx[2][CSAB_CNT] = {
_reg_PI_MR14_DATA_F1_3} _reg_PI_MR14_DATA_F1_3}
}; };
/******************************************************************************* /*
* regif pll w/a ( REGIF H3 Ver.2.0 or later/M3-N/V3H WA ) * regif pll w/a ( REGIF H3 Ver.2.0 or later/M3-N/V3H WA )
*******************************************************************************/ */
static void regif_pll_wa(void) static void regif_pll_wa(void)
{ {
uint32_t ch; uint32_t ch;
...@@ -1177,11 +1151,14 @@ static void regif_pll_wa(void) ...@@ -1177,11 +1151,14 @@ static void regif_pll_wa(void)
reg_ddrphy_write_a(ddr_regdef_adr reg_ddrphy_write_a(ddr_regdef_adr
(_reg_PHY_LP4_BOOT_TOP_PLL_CTRL), (_reg_PHY_LP4_BOOT_TOP_PLL_CTRL),
ddrtbl_getval(_cnf_DDR_PHY_ADR_G_REGSET, ddrtbl_getval(_cnf_DDR_PHY_ADR_G_REGSET,
_reg_PHY_LP4_BOOT_TOP_PLL_CTRL)); _reg_PHY_LP4_BOOT_TOP_PLL_CTRL
));
} }
reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_LPDDR3_CS), reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_LPDDR3_CS),
_cnf_DDR_PHY_ADR_G_REGSET[ddr_regdef_adr(_reg_PHY_LPDDR3_CS) - DDR_PHY_ADR_G_REGSET_OFS]); _cnf_DDR_PHY_ADR_G_REGSET
[ddr_regdef_adr(_reg_PHY_LPDDR3_CS) -
DDR_PHY_ADR_G_REGSET_OFS]);
/* protect register interface */ /* protect register interface */
ddrphy_regif_idle(); ddrphy_regif_idle();
...@@ -1196,9 +1173,7 @@ static void regif_pll_wa(void) ...@@ -1196,9 +1173,7 @@ static void regif_pll_wa(void)
ddrphy_regif_idle(); ddrphy_regif_idle();
} }
/*********************************************************************** /* init start */
init start
***********************************************************************/
/* dbdficnt0: /* dbdficnt0:
* dfi_dram_clk_disable=1 * dfi_dram_clk_disable=1
* dfi_frequency = 0 * dfi_frequency = 0
...@@ -1220,14 +1195,13 @@ static void regif_pll_wa(void) ...@@ -1220,14 +1195,13 @@ static void regif_pll_wa(void)
dsb_sev(); dsb_sev();
foreach_ech(ch) foreach_ech(ch)
if (((board_cnf->phyvalid) & (1U << ch))) if ((board_cnf->phyvalid) & BIT(ch))
while ((mmio_read_32(DBSC_PLL_LOCK(ch)) & 0x1f) != 0x1f); while ((mmio_read_32(DBSC_PLL_LOCK(ch)) & 0x1f) != 0x1f)
;
dsb_sev(); dsb_sev();
} }
/******************************************************************************* /* load table data into DDR registers */
* load table data into DDR registers
******************************************************************************/
static void ddrtbl_load(void) static void ddrtbl_load(void)
{ {
uint32_t i; uint32_t i;
...@@ -1238,9 +1212,7 @@ static void ddrtbl_load(void) ...@@ -1238,9 +1212,7 @@ static void ddrtbl_load(void)
uint32_t tmp[3]; uint32_t tmp[3];
uint16_t dataS; uint16_t dataS;
/*********************************************************************** /* TIMING REGISTERS */
TIMING REGISTERS
***********************************************************************/
/* search jedec_spec1 index */ /* search jedec_spec1 index */
for (i = JS1_USABLEC_SPEC_LO; i < JS1_FREQ_TBL_NUM - 1; i++) { for (i = JS1_USABLEC_SPEC_LO; i < JS1_FREQ_TBL_NUM - 1; i++) {
if (js1[i].fx3 * 2U * ddr_mbpsdiv >= ddr_mbps * 3U) if (js1[i].fx3 * 2U * ddr_mbpsdiv >= ddr_mbps * 3U)
...@@ -1261,9 +1233,7 @@ static void ddrtbl_load(void) ...@@ -1261,9 +1233,7 @@ static void ddrtbl_load(void)
/* calculate jedec_spec2 */ /* calculate jedec_spec2 */
_f_scale_js2(ddr_mbps, ddr_mbpsdiv, js2); _f_scale_js2(ddr_mbps, ddr_mbpsdiv, js2);
/*********************************************************************** /* PREPARE TBL */
PREPARE TBL
***********************************************************************/
if (prr_product == PRR_PRODUCT_H3) { if (prr_product == PRR_PRODUCT_H3) {
if (prr_cut <= PRR_PRODUCT_11) { if (prr_cut <= PRR_PRODUCT_11) {
/* H3 Ver.1.x */ /* H3 Ver.1.x */
...@@ -1404,9 +1374,7 @@ static void ddrtbl_load(void) ...@@ -1404,9 +1374,7 @@ static void ddrtbl_load(void)
DDR_PHY_ADR_I_NUM = 2; DDR_PHY_ADR_I_NUM = 2;
} }
/*********************************************************************** /* PLL CODE CHANGE */
PLL CODE CHANGE
***********************************************************************/
if ((prr_product == PRR_PRODUCT_H3) && (prr_cut == PRR_PRODUCT_11)) { if ((prr_product == PRR_PRODUCT_H3) && (prr_cut == PRR_PRODUCT_11)) {
ddrtbl_setval(_cnf_DDR_PHY_ADR_G_REGSET, _reg_PHY_PLL_CTRL, ddrtbl_setval(_cnf_DDR_PHY_ADR_G_REGSET, _reg_PHY_PLL_CTRL,
0x1142); 0x1142);
...@@ -1414,17 +1382,13 @@ static void ddrtbl_load(void) ...@@ -1414,17 +1382,13 @@ static void ddrtbl_load(void)
_reg_PHY_LP4_BOOT_PLL_CTRL, 0x1142); _reg_PHY_LP4_BOOT_PLL_CTRL, 0x1142);
} }
/*********************************************************************** /* on fly gate adjust */
on fly gate adjust
***********************************************************************/
if ((prr_product == PRR_PRODUCT_M3) && (prr_cut == PRR_PRODUCT_10)) { if ((prr_product == PRR_PRODUCT_M3) && (prr_cut == PRR_PRODUCT_10)) {
ddrtbl_setval(_cnf_DDR_PHY_SLICE_REGSET, ddrtbl_setval(_cnf_DDR_PHY_SLICE_REGSET,
_reg_ON_FLY_GATE_ADJUST_EN, 0x00); _reg_ON_FLY_GATE_ADJUST_EN, 0x00);
} }
/*********************************************************************** /* Adjust PI parameters */
Adjust PI parameters
***********************************************************************/
#ifdef _def_LPDDR4_ODT #ifdef _def_LPDDR4_ODT
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
for (csab = 0; csab < CSAB_CNT; csab++) { for (csab = 0; csab < CSAB_CNT; csab++) {
...@@ -1444,22 +1408,22 @@ static void ddrtbl_load(void) ...@@ -1444,22 +1408,22 @@ static void ddrtbl_load(void)
} }
} }
#endif /* _def_LPDDR4_VREFCA */ #endif /* _def_LPDDR4_VREFCA */
if ((prr_product == PRR_PRODUCT_M3N) if ((prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
js2[js2_tiedly] = _f_scale(ddr_mbps, ddr_mbpsdiv, 7000, 0) + 7U; js2[js2_tiedly] = _f_scale(ddr_mbps, ddr_mbpsdiv, 7000, 0) + 7U;
if (js2[js2_tiedly] > (RL)) if (js2[js2_tiedly] > (RL))
js2[js2_tiedly] = RL; js2[js2_tiedly] = RL;
} else if ((prr_product == PRR_PRODUCT_H3) } else if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut > PRR_PRODUCT_11)) { (prr_cut > PRR_PRODUCT_11)) {
js2[js2_tiedly] = _f_scale(ddr_mbps, ddr_mbpsdiv, 9000, 0) + 4U; js2[js2_tiedly] = _f_scale(ddr_mbps, ddr_mbpsdiv, 9000, 0) + 4U;
} else if ((prr_product == PRR_PRODUCT_H3) } else if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) { (prr_cut <= PRR_PRODUCT_11)) {
js2[js2_tiedly] = _f_scale(ddr_mbps, ddr_mbpsdiv, 10000, 0); js2[js2_tiedly] = _f_scale(ddr_mbps, ddr_mbpsdiv, 10000, 0);
} }
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut > PRR_PRODUCT_11)) if (((prr_product == PRR_PRODUCT_H3) && (prr_cut > PRR_PRODUCT_11)) ||
|| (prr_product == PRR_PRODUCT_M3N) (prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
if ((js2[js2_tiedly]) >= 0x1e) if ((js2[js2_tiedly]) >= 0x1e)
dataS = 0x1e; dataS = 0x1e;
else else
...@@ -1474,8 +1438,8 @@ static void ddrtbl_load(void) ...@@ -1474,8 +1438,8 @@ static void ddrtbl_load(void)
ddrtbl_setval(_cnf_DDR_PHY_SLICE_REGSET, _reg_PHY_RDDATA_EN_DLY, dataS); ddrtbl_setval(_cnf_DDR_PHY_SLICE_REGSET, _reg_PHY_RDDATA_EN_DLY, dataS);
ddrtbl_setval(_cnf_DDR_PHY_SLICE_REGSET, _reg_PHY_RDDATA_EN_TSEL_DLY, ddrtbl_setval(_cnf_DDR_PHY_SLICE_REGSET, _reg_PHY_RDDATA_EN_TSEL_DLY,
(dataS - 2)); (dataS - 2));
if ((prr_product == PRR_PRODUCT_M3N) if ((prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
ddrtbl_setval(_cnf_DDR_PHY_SLICE_REGSET, ddrtbl_setval(_cnf_DDR_PHY_SLICE_REGSET,
_reg_PHY_RDDATA_EN_OE_DLY, dataS); _reg_PHY_RDDATA_EN_OE_DLY, dataS);
} }
...@@ -1521,25 +1485,19 @@ static void ddrtbl_load(void) ...@@ -1521,25 +1485,19 @@ static void ddrtbl_load(void)
} }
} }
/*********************************************************************** /* DDRPHY INT START */
DDRPHY INT START
***********************************************************************/
if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) { if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) {
/* non */ /* non */
} else { } else {
regif_pll_wa(); regif_pll_wa();
} }
/*********************************************************************** /* FREQ_SEL_MULTICAST & PER_CS_TRAINING_MULTICAST SET (for safety) */
FREQ_SEL_MULTICAST & PER_CS_TRAINING_MULTICAST SET (for safety)
***********************************************************************/
reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_FREQ_SEL_MULTICAST_EN), reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_FREQ_SEL_MULTICAST_EN),
(0x01U << ddr_regdef_lsb(_reg_PHY_FREQ_SEL_MULTICAST_EN))); (0x01U << ddr_regdef_lsb(_reg_PHY_FREQ_SEL_MULTICAST_EN)));
ddr_setval_ach_as(_reg_PHY_PER_CS_TRAINING_MULTICAST_EN, 0x01); ddr_setval_ach_as(_reg_PHY_PER_CS_TRAINING_MULTICAST_EN, 0x01);
/*********************************************************************** /* SET DATA SLICE TABLE */
SET DATA SLICE TABLE
***********************************************************************/
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
adr = adr =
DDR_PHY_SLICE_REGSET_OFS + DDR_PHY_SLICE_REGSET_OFS +
...@@ -1550,16 +1508,14 @@ static void ddrtbl_load(void) ...@@ -1550,16 +1508,14 @@ static void ddrtbl_load(void)
} }
} }
/*********************************************************************** /* SET ADR SLICE TABLE */
SET ADR SLICE TABLE
***********************************************************************/
adr = DDR_PHY_ADR_V_REGSET_OFS; adr = DDR_PHY_ADR_V_REGSET_OFS;
for (i = 0; i < DDR_PHY_ADR_V_REGSET_NUM; i++) { for (i = 0; i < DDR_PHY_ADR_V_REGSET_NUM; i++) {
reg_ddrphy_write_a(adr + i, _cnf_DDR_PHY_ADR_V_REGSET[i]); reg_ddrphy_write_a(adr + i, _cnf_DDR_PHY_ADR_V_REGSET[i]);
} }
if (((prr_product == PRR_PRODUCT_M3) if (((prr_product == PRR_PRODUCT_M3) ||
|| (prr_product == PRR_PRODUCT_M3N)) && (prr_product == PRR_PRODUCT_M3N)) &&
((0x00ffffff & (uint32_t)((board_cnf->ch[0].ca_swap) >> 40)) ((0x00ffffff & (uint32_t)((board_cnf->ch[0].ca_swap) >> 40))
!= 0x00)) { != 0x00)) {
adr = DDR_PHY_ADR_I_REGSET_OFS + DDR_PHY_ADR_I_REGSET_SIZE; adr = DDR_PHY_ADR_I_REGSET_OFS + DDR_PHY_ADR_I_REGSET_SIZE;
...@@ -1597,26 +1553,20 @@ static void ddrtbl_load(void) ...@@ -1597,26 +1553,20 @@ static void ddrtbl_load(void)
} }
} }
/*********************************************************************** /* SET ADRCTRL SLICE TABLE */
SET ADRCTRL SLICE TABLE
***********************************************************************/
adr = DDR_PHY_ADR_G_REGSET_OFS; adr = DDR_PHY_ADR_G_REGSET_OFS;
for (i = 0; i < DDR_PHY_ADR_G_REGSET_NUM; i++) { for (i = 0; i < DDR_PHY_ADR_G_REGSET_NUM; i++) {
reg_ddrphy_write_a(adr + i, _cnf_DDR_PHY_ADR_G_REGSET[i]); reg_ddrphy_write_a(adr + i, _cnf_DDR_PHY_ADR_G_REGSET[i]);
} }
/*********************************************************************** /* SET PI REGISTERS */
SET PI REGISTERS
***********************************************************************/
adr = DDR_PI_REGSET_OFS; adr = DDR_PI_REGSET_OFS;
for (i = 0; i < DDR_PI_REGSET_NUM; i++) { for (i = 0; i < DDR_PI_REGSET_NUM; i++) {
reg_ddrphy_write_a(adr + i, _cnf_DDR_PI_REGSET[i]); reg_ddrphy_write_a(adr + i, _cnf_DDR_PI_REGSET[i]);
} }
} }
/******************************************************************************* /* CONFIGURE DDR REGISTERS */
* CONFIGURE DDR REGISTERS
******************************************************************************/
static void ddr_config_sub(void) static void ddr_config_sub(void)
{ {
uint32_t i; uint32_t i;
...@@ -1627,9 +1577,7 @@ static void ddr_config_sub(void) ...@@ -1627,9 +1577,7 @@ static void ddr_config_sub(void)
const uint32_t _par_CALVL_DEVICE_MAP = 1; const uint32_t _par_CALVL_DEVICE_MAP = 1;
foreach_vch(ch) { foreach_vch(ch) {
/*********************************************************************** /* BOARD SETTINGS (DQ,DM,VREF_DRIVING) */
BOARD SETTINGS (DQ,DM,VREF_DRIVING)
***********************************************************************/
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
high_byte[slice] = high_byte[slice] =
(board_cnf->ch[ch].dqs_swap >> (4 * slice)) % 2; (board_cnf->ch[ch].dqs_swap >> (4 * slice)) % 2;
...@@ -1650,9 +1598,7 @@ static void ddr_config_sub(void) ...@@ -1650,9 +1598,7 @@ static void ddr_config_sub(void)
} }
} }
/*********************************************************************** /* BOARD SETTINGS (CA,ADDR_SEL) */
BOARD SETTINGS (CA,ADDR_SEL)
***********************************************************************/
data_l = (0x00ffffff & (uint32_t)(board_cnf->ch[ch].ca_swap)) | data_l = (0x00ffffff & (uint32_t)(board_cnf->ch[ch].ca_swap)) |
0x00888888; 0x00888888;
...@@ -1674,8 +1620,8 @@ static void ddr_config_sub(void) ...@@ -1674,8 +1620,8 @@ static void ddr_config_sub(void)
} }
/* --- ADR_ADDR_SEL --- */ /* --- ADR_ADDR_SEL --- */
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut > PRR_PRODUCT_11)) { (prr_cut > PRR_PRODUCT_11)) {
data_l = 0x00FFFFFF & board_cnf->ch[ch].ca_swap; data_l = 0x00FFFFFF & board_cnf->ch[ch].ca_swap;
} else { } else {
data_l = 0; data_l = 0;
...@@ -1719,9 +1665,7 @@ static void ddr_config_sub(void) ...@@ -1719,9 +1665,7 @@ static void ddr_config_sub(void)
ddr_setval_s(ch, 2, _reg_PHY_ADR_ADDR_SEL, data_l); ddr_setval_s(ch, 2, _reg_PHY_ADR_ADDR_SEL, data_l);
} }
/*********************************************************************** /* BOARD SETTINGS (BYTE_ORDER_SEL) */
BOARD SETTINGS (BYTE_ORDER_SEL)
***********************************************************************/
if (prr_product == PRR_PRODUCT_M3) { if (prr_product == PRR_PRODUCT_M3) {
/* --- DATA_BYTE_SWAP --- */ /* --- DATA_BYTE_SWAP --- */
data_l = 0; data_l = 0;
...@@ -1792,9 +1736,7 @@ static void ddr_config_sub_h3v1x(void) ...@@ -1792,9 +1736,7 @@ static void ddr_config_sub_h3v1x(void)
const uint16_t o_mr32_mr40 = 0x5a3c; const uint16_t o_mr32_mr40 = 0x5a3c;
foreach_vch(ch) { foreach_vch(ch) {
/*********************************************************************** /* BOARD SETTINGS (DQ,DM,VREF_DRIVING) */
BOARD SETTINGS (DQ,DM,VREF_DRIVING)
***********************************************************************/
csmap = 0; csmap = 0;
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
tmp = (board_cnf->ch[ch].dqs_swap >> (4 * slice)) & 0x0f; tmp = (board_cnf->ch[ch].dqs_swap >> (4 * slice)) & 0x0f;
...@@ -1817,9 +1759,7 @@ static void ddr_config_sub_h3v1x(void) ...@@ -1817,9 +1759,7 @@ static void ddr_config_sub_h3v1x(void)
0x01); 0x01);
} }
} }
/*********************************************************************** /* BOARD SETTINGS (CA,ADDR_SEL) */
BOARD SETTINGS (CA,ADDR_SEL)
***********************************************************************/
ca = 0x00FFFFFF & board_cnf->ch[ch].ca_swap; ca = 0x00FFFFFF & board_cnf->ch[ch].ca_swap;
ddr_setval(ch, _reg_PHY_ADR_ADDR_SEL, ca); ddr_setval(ch, _reg_PHY_ADR_ADDR_SEL, ca);
ddr_setval(ch, _reg_PHY_CALVL_CS_MAP, csmap); ddr_setval(ch, _reg_PHY_CALVL_CS_MAP, csmap);
...@@ -1878,18 +1818,14 @@ static void ddr_config(void) ...@@ -1878,18 +1818,14 @@ static void ddr_config(void)
} patt; } patt;
uint16_t patm; uint16_t patm;
/*********************************************************************** /* configure ddrphy registers */
configure ddrphy registers
***********************************************************************/
if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) { if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) {
ddr_config_sub_h3v1x(); ddr_config_sub_h3v1x();
} else { } else {
ddr_config_sub(); /* H3 Ver.2.0 or later/M3-N/V3H is same as M3-W */ ddr_config_sub(); /* H3 Ver.2.0 or later/M3-N/V3H is same as M3-W */
} }
/*********************************************************************** /* WDQ_USER_PATT */
WDQ_USER_PATT
***********************************************************************/
foreach_vch(ch) { foreach_vch(ch) {
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
patm = 0; patm = 0;
...@@ -1911,9 +1847,7 @@ static void ddr_config(void) ...@@ -1911,9 +1847,7 @@ static void ddr_config(void)
} }
} }
/*********************************************************************** /* CACS DLY */
CACS DLY
***********************************************************************/
data_l = board_cnf->cacs_dly + _f_scale_adj(board_cnf->cacs_dly_adj); data_l = board_cnf->cacs_dly + _f_scale_adj(board_cnf->cacs_dly_adj);
reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_FREQ_SEL_MULTICAST_EN), 0x00U); reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_FREQ_SEL_MULTICAST_EN), 0x00U);
foreach_vch(ch) { foreach_vch(ch) {
...@@ -1923,11 +1857,11 @@ static void ddr_config(void) ...@@ -1923,11 +1857,11 @@ static void ddr_config(void)
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i], _reg_PHY_CLK_CACS_SLAVE_DELAY_X[i],
data_l + adj); data_l + adj);
reg_ddrphy_write(ch, reg_ddrphy_write(ch,
ddr_regdef_adr( ddr_regdef_adr
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]), (_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]),
_cnf_DDR_PHY_ADR_V_REGSET[ _cnf_DDR_PHY_ADR_V_REGSET
ddr_regdef_adr( [ddr_regdef_adr
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]) - (_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]) -
DDR_PHY_ADR_V_REGSET_OFS]); DDR_PHY_ADR_V_REGSET_OFS]);
} }
...@@ -1938,29 +1872,30 @@ static void ddr_config(void) ...@@ -1938,29 +1872,30 @@ static void ddr_config(void)
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i], _reg_PHY_CLK_CACS_SLAVE_DELAY_X[i],
data_l + adj); data_l + adj);
reg_ddrphy_write(ch, reg_ddrphy_write(ch,
ddr_regdef_adr( ddr_regdef_adr
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]), (_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]),
_cnf_DDR_PHY_ADR_G_REGSET[ _cnf_DDR_PHY_ADR_G_REGSET
ddr_regdef_adr( [ddr_regdef_adr
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]) - (_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]) -
DDR_PHY_ADR_G_REGSET_OFS]); DDR_PHY_ADR_G_REGSET_OFS]);
} }
if (ddr_phycaslice == 1) { if (ddr_phycaslice == 1) {
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
adj = _f_scale_adj( adj = _f_scale_adj
board_cnf->ch[ch].cacs_adj[ (board_cnf->ch[ch].cacs_adj
i + _reg_PHY_CLK_CACS_SLAVE_DELAY_X_NUM]); [i +
_reg_PHY_CLK_CACS_SLAVE_DELAY_X_NUM]);
ddrtbl_setval(_cnf_DDR_PHY_ADR_V_REGSET, ddrtbl_setval(_cnf_DDR_PHY_ADR_V_REGSET,
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i], _reg_PHY_CLK_CACS_SLAVE_DELAY_X[i],
data_l + adj); data_l + adj);
reg_ddrphy_write(ch, reg_ddrphy_write(ch,
ddr_regdef_adr( ddr_regdef_adr
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]) + (_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]) +
0x0100, 0x0100,
_cnf_DDR_PHY_ADR_V_REGSET[ _cnf_DDR_PHY_ADR_V_REGSET
ddr_regdef_adr( [ddr_regdef_adr
_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]) - (_reg_PHY_CLK_CACS_SLAVE_DELAY_X[i]) -
DDR_PHY_ADR_V_REGSET_OFS]); DDR_PHY_ADR_V_REGSET_OFS]);
} }
} }
...@@ -1969,9 +1904,7 @@ static void ddr_config(void) ...@@ -1969,9 +1904,7 @@ static void ddr_config(void)
reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_FREQ_SEL_MULTICAST_EN), reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_FREQ_SEL_MULTICAST_EN),
(0x01U << ddr_regdef_lsb(_reg_PHY_FREQ_SEL_MULTICAST_EN))); (0x01U << ddr_regdef_lsb(_reg_PHY_FREQ_SEL_MULTICAST_EN)));
/*********************************************************************** /* WDQDM DLY */
WDQDM DLY
***********************************************************************/
data_l = board_cnf->dqdm_dly_w; data_l = board_cnf->dqdm_dly_w;
foreach_vch(ch) { foreach_vch(ch) {
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
...@@ -1989,9 +1922,7 @@ static void ddr_config(void) ...@@ -1989,9 +1922,7 @@ static void ddr_config(void)
} }
} }
/*********************************************************************** /* RDQDM DLY */
RDQDM DLY
***********************************************************************/
data_l = board_cnf->dqdm_dly_r; data_l = board_cnf->dqdm_dly_r;
foreach_vch(ch) { foreach_vch(ch) {
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
...@@ -2013,17 +1944,13 @@ static void ddr_config(void) ...@@ -2013,17 +1944,13 @@ static void ddr_config(void)
} }
} }
/******************************************************************************* /* DBSC register setting functions */
* DBSC register setting functions
******************************************************************************/
static void dbsc_regset_pre(void) static void dbsc_regset_pre(void)
{ {
uint32_t ch, csab; uint32_t ch, csab;
uint32_t data_l; uint32_t data_l;
/*********************************************************************** /* PRIMARY SETTINGS */
PRIMARY SETTINGS
***********************************************************************/
/* LPDDR4, BL=16, DFI interface */ /* LPDDR4, BL=16, DFI interface */
mmio_write_32(DBSC_DBKIND, 0x0000000a); mmio_write_32(DBSC_DBKIND, 0x0000000a);
mmio_write_32(DBSC_DBBL, 0x00000002); mmio_write_32(DBSC_DBBL, 0x00000002);
...@@ -2069,8 +1996,8 @@ static void dbsc_regset(void) ...@@ -2069,8 +1996,8 @@ static void dbsc_regset(void)
uint32_t tmp[4]; uint32_t tmp[4];
/* RFC */ /* RFC */
if ((prr_product == PRR_PRODUCT_H3) && (prr_cut == PRR_PRODUCT_20) if ((prr_product == PRR_PRODUCT_H3) && (prr_cut == PRR_PRODUCT_20) &&
&& (max_density == 0)) { (max_density == 0)) {
js2[js2_trfcab] = js2[js2_trfcab] =
_f_scale(ddr_mbps, ddr_mbpsdiv, _f_scale(ddr_mbps, ddr_mbpsdiv,
1UL * jedec_spec2_trfc_ab[1] * 1000, 0); 1UL * jedec_spec2_trfc_ab[1] * 1000, 0);
...@@ -2219,8 +2146,8 @@ static void dbsc_regset(void) ...@@ -2219,8 +2146,8 @@ static void dbsc_regset(void)
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
data_l = (_par_DBRNK_VAL >> (i * 4)) & 0x0f; data_l = (_par_DBRNK_VAL >> (i * 4)) & 0x0f;
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut > PRR_PRODUCT_11) && (i == 0)) { (prr_cut > PRR_PRODUCT_11) && (i == 0)) {
data_l += 1; data_l += 1;
} }
data_l2 = 0; data_l2 = 0;
...@@ -2231,9 +2158,7 @@ static void dbsc_regset(void) ...@@ -2231,9 +2158,7 @@ static void dbsc_regset(void)
} }
mmio_write_32(DBSC_DBADJ0, 0x00000000); mmio_write_32(DBSC_DBADJ0, 0x00000000);
/*********************************************************************** /* timing registers for Scheduler */
timing registers for Scheduler
***********************************************************************/
/* SCFCTST0 */ /* SCFCTST0 */
/* SCFCTST0 ACT-ACT */ /* SCFCTST0 ACT-ACT */
tmp[3] = 1UL * js2[js2_trcpb] * 800 * ddr_mbpsdiv / ddr_mbps; tmp[3] = 1UL * js2[js2_trcpb] * 800 * ddr_mbpsdiv / ddr_mbps;
...@@ -2285,9 +2210,7 @@ static void dbsc_regset(void) ...@@ -2285,9 +2210,7 @@ static void dbsc_regset(void)
* 400 * 2 * ddr_mbpsdiv + (ddr_mbps - 1)) / ddr_mbps); * 400 * 2 * ddr_mbpsdiv + (ddr_mbps - 1)) / ddr_mbps);
} }
/*********************************************************************** /* QOS and CAM */
QOS and CAM
***********************************************************************/
#ifdef ddr_qos_init_setting /* only for non qos_init */ #ifdef ddr_qos_init_setting /* only for non qos_init */
/*wbkwait(0004), wbkmdhi(4,2),wbkmdlo(1,8) */ /*wbkwait(0004), wbkmdhi(4,2),wbkmdlo(1,8) */
mmio_write_32(DBSC_DBCAM0CNF1, 0x00043218); mmio_write_32(DBSC_DBCAM0CNF1, 0x00043218);
...@@ -2418,9 +2341,11 @@ static void dbsc_regset_post(void) ...@@ -2418,9 +2341,11 @@ static void dbsc_regset_post(void)
mmio_write_32(DBSC_DBDBICNT, 0x00000003); mmio_write_32(DBSC_DBDBICNT, 0x00000003);
/* H3 Ver.2.0 or later/M3-N/V3H DBI wa */ /* H3 Ver.2.0 or later/M3-N/V3H DBI wa */
if ((((prr_product == PRR_PRODUCT_H3) && (prr_cut > PRR_PRODUCT_11)) if ((((prr_product == PRR_PRODUCT_H3) &&
|| (prr_product == PRR_PRODUCT_M3N) (prr_cut > PRR_PRODUCT_11)) ||
|| (prr_product == PRR_PRODUCT_V3H)) && (board_cnf->dbi_en)) (prr_product == PRR_PRODUCT_M3N) ||
(prr_product == PRR_PRODUCT_V3H)) &&
board_cnf->dbi_en)
reg_ddrphy_write_a(0x00001010, 0x01000000); reg_ddrphy_write_a(0x00001010, 0x01000000);
/*set REFCYCLE */ /*set REFCYCLE */
...@@ -2461,11 +2386,16 @@ static void dbsc_regset_post(void) ...@@ -2461,11 +2386,16 @@ static void dbsc_regset_post(void)
#if RCAR_REWT_TRAINING != 0 #if RCAR_REWT_TRAINING != 0
/* Periodic-WriteDQ Training seeting */ /* Periodic-WriteDQ Training seeting */
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) if (((prr_product == PRR_PRODUCT_H3) &&
|| ((prr_product == PRR_PRODUCT_M3) && (prr_cut == PRR_PRODUCT_10))) { (prr_cut <= PRR_PRODUCT_11)) ||
((prr_product == PRR_PRODUCT_M3) &&
(prr_cut == PRR_PRODUCT_10))) {
/* non : H3 Ver.1.x/M3-W Ver.1.0 not support */ /* non : H3 Ver.1.x/M3-W Ver.1.0 not support */
} else { } else {
/* H3 Ver.2.0 or later/M3-W Ver.1.1 or later/M3-N/V3H -> Periodic-WriteDQ Training seeting */ /*
* H3 Ver.2.0 or later/M3-W Ver.1.1 or
* later/M3-N/V3H -> Periodic-WriteDQ Training seeting
*/
/* Periodic WriteDQ Training seeting */ /* Periodic WriteDQ Training seeting */
mmio_write_32(DBSC_DBDFIPMSTRCNF, 0x00000000); mmio_write_32(DBSC_DBDFIPMSTRCNF, 0x00000000);
...@@ -2499,13 +2429,15 @@ static void dbsc_regset_post(void) ...@@ -2499,13 +2429,15 @@ static void dbsc_regset_post(void)
#endif /* RCAR_REWT_TRAINING */ #endif /* RCAR_REWT_TRAINING */
/* periodic dram zqcal and phy ctrl update enable */ /* periodic dram zqcal and phy ctrl update enable */
mmio_write_32(DBSC_DBCALCNF, 0x01000010); mmio_write_32(DBSC_DBCALCNF, 0x01000010);
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) if (((prr_product == PRR_PRODUCT_H3) &&
|| ((prr_product == PRR_PRODUCT_M3) && (prr_cut < PRR_PRODUCT_30))) { (prr_cut <= PRR_PRODUCT_11)) ||
((prr_product == PRR_PRODUCT_M3) &&
(prr_cut < PRR_PRODUCT_30))) {
/* non : H3 Ver.1.x/M3-W Ver.1.x not support */ /* non : H3 Ver.1.x/M3-W Ver.1.x not support */
} else { } else {
#if RCAR_DRAM_SPLIT == 2 #if RCAR_DRAM_SPLIT == 2
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (board_cnf->phyvalid == 0x05)) (board_cnf->phyvalid == 0x05))
mmio_write_32(DBSC_DBDFICUPDCNF, 0x2a240001); mmio_write_32(DBSC_DBDFICUPDCNF, 0x2a240001);
else else
mmio_write_32(DBSC_DBDFICUPDCNF, 0x28240001); mmio_write_32(DBSC_DBDFICUPDCNF, 0x28240001);
...@@ -2522,9 +2454,7 @@ static void dbsc_regset_post(void) ...@@ -2522,9 +2454,7 @@ static void dbsc_regset_post(void)
} }
/******************************************************************************* /* DFI_INIT_START */
* DFI_INIT_START
******************************************************************************/
static uint32_t dfi_init_start(void) static uint32_t dfi_init_start(void)
{ {
uint32_t ch; uint32_t ch;
...@@ -2534,17 +2464,13 @@ static uint32_t dfi_init_start(void) ...@@ -2534,17 +2464,13 @@ static uint32_t dfi_init_start(void)
const uint32_t RETRY_MAX = 0x10000; const uint32_t RETRY_MAX = 0x10000;
if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) { if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) {
/*********************************************************************** /* PLL3 Disable */
PLL3 Disable
***********************************************************************/
/* protect register interface */ /* protect register interface */
ddrphy_regif_idle(); ddrphy_regif_idle();
pll3_control(0); pll3_control(0);
/*********************************************************************** /* init start */
init start
***********************************************************************/
/* dbdficnt0: /* dbdficnt0:
* dfi_dram_clk_disable=1 * dfi_dram_clk_disable=1
* dfi_frequency = 0 * dfi_frequency = 0
...@@ -2576,9 +2502,7 @@ static uint32_t dfi_init_start(void) ...@@ -2576,9 +2502,7 @@ static uint32_t dfi_init_start(void)
mmio_write_32(DBSC_DBPDCNT3(ch), 0x0000CF01); mmio_write_32(DBSC_DBPDCNT3(ch), 0x0000CF01);
dsb_sev(); dsb_sev();
/*********************************************************************** /* wait init_complete */
wait init_complete
***********************************************************************/
phytrainingok = 0; phytrainingok = 0;
retry = 0; retry = 0;
while (retry++ < RETRY_MAX) { while (retry++ < RETRY_MAX) {
...@@ -2594,12 +2518,10 @@ static uint32_t dfi_init_start(void) ...@@ -2594,12 +2518,10 @@ static uint32_t dfi_init_start(void)
ddr_setval_ach_as(_reg_SC_PHY_RX_CAL_START, 0x01); ddr_setval_ach_as(_reg_SC_PHY_RX_CAL_START, 0x01);
} }
/*********************************************************************** /* all ch ok? */
all ch ok? if ((phytrainingok & ddr_phyvalid) != ddr_phyvalid)
***********************************************************************/ return 0xff;
if ((phytrainingok & ddr_phyvalid) != ddr_phyvalid) {
return (0xff);
}
/* dbdficnt0: /* dbdficnt0:
* dfi_dram_clk_disable=0 * dfi_dram_clk_disable=0
* dfi_frequency = 0 * dfi_frequency = 0
...@@ -2613,9 +2535,7 @@ static uint32_t dfi_init_start(void) ...@@ -2613,9 +2535,7 @@ static uint32_t dfi_init_start(void)
return 0; return 0;
} }
/******************************************************************************* /* drivablity setting : CMOS MODE ON/OFF */
* drivablity setting : CMOS MODE ON/OFF
******************************************************************************/
static void change_lpddr4_en(uint32_t mode) static void change_lpddr4_en(uint32_t mode)
{ {
uint32_t ch; uint32_t ch;
...@@ -2640,9 +2560,7 @@ static void change_lpddr4_en(uint32_t mode) ...@@ -2640,9 +2560,7 @@ static void change_lpddr4_en(uint32_t mode)
} }
} }
/******************************************************************************* /* drivablity setting */
* drivablity setting
******************************************************************************/
static uint32_t set_term_code(void) static uint32_t set_term_code(void)
{ {
int32_t i; int32_t i;
...@@ -2666,8 +2584,8 @@ static uint32_t set_term_code(void) ...@@ -2666,8 +2584,8 @@ static uint32_t set_term_code(void)
if (termcode_by_sample[index][0] == 0xffffffff) { if (termcode_by_sample[index][0] == 0xffffffff) {
break; break;
} }
if ((termcode_by_sample[index][0] == chip_id[0]) if ((termcode_by_sample[index][0] == chip_id[0]) &&
&& (termcode_by_sample[index][1] == chip_id[1])) { (termcode_by_sample[index][1] == chip_id[1])) {
term_code = termcode_by_sample[index][2]; term_code = termcode_by_sample[index][2];
override = 1; override = 1;
break; break;
...@@ -2683,8 +2601,8 @@ static uint32_t set_term_code(void) ...@@ -2683,8 +2601,8 @@ static uint32_t set_term_code(void)
data_l = (data_l & 0xfffe0000) | term_code; data_l = (data_l & 0xfffe0000) | term_code;
ddr_setval_ach(_reg_PHY_PAD_TERM_X[index], data_l); ddr_setval_ach(_reg_PHY_PAD_TERM_X[index], data_l);
} }
} else if ((prr_product == PRR_PRODUCT_M3) } else if ((prr_product == PRR_PRODUCT_M3) &&
&& (prr_cut == PRR_PRODUCT_10)) { (prr_cut == PRR_PRODUCT_10)) {
/* non */ /* non */
} else { } else {
ddr_setval_ach(_reg_PHY_PAD_TERM_X[0], ddr_setval_ach(_reg_PHY_PAD_TERM_X[0],
...@@ -2699,8 +2617,8 @@ static uint32_t set_term_code(void) ...@@ -2699,8 +2617,8 @@ static uint32_t set_term_code(void)
ddr_getval(ch, _reg_PHY_CAL_RESULT2_OBS_0); ddr_getval(ch, _reg_PHY_CAL_RESULT2_OBS_0);
} while (!(data_l & 0x00800000)); } while (!(data_l & 0x00800000));
} }
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) { (prr_cut <= PRR_PRODUCT_11)) {
foreach_vch(ch) { foreach_vch(ch) {
data_l = ddr_getval(ch, _reg_PHY_PAD_TERM_X[0]); data_l = ddr_getval(ch, _reg_PHY_PAD_TERM_X[0]);
pvtr = (data_l >> 12) & 0x1f; pvtr = (data_l >> 12) & 0x1f;
...@@ -2743,17 +2661,17 @@ static uint32_t set_term_code(void) ...@@ -2743,17 +2661,17 @@ static uint32_t set_term_code(void)
} }
} }
} }
if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) { if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) {
/* non */ /* non */
} else { } else {
ddr_padcal_tcompensate_getinit(override); ddr_padcal_tcompensate_getinit(override);
} }
return 0; return 0;
} }
/******************************************************************************* /* DDR mode register setting */
* DDR mode register setting
******************************************************************************/
static void ddr_register_set(void) static void ddr_register_set(void)
{ {
int32_t fspwp; int32_t fspwp;
...@@ -2797,9 +2715,7 @@ static void ddr_register_set(void) ...@@ -2797,9 +2715,7 @@ static void ddr_register_set(void)
} }
} }
/******************************************************************************* /* Training handshake functions */
* Training handshake functions
******************************************************************************/
static inline uint32_t wait_freqchgreq(uint32_t assert) static inline uint32_t wait_freqchgreq(uint32_t assert)
{ {
uint32_t data_l; uint32_t data_l;
...@@ -2871,7 +2787,7 @@ static uint32_t pll3_freq(uint32_t on) ...@@ -2871,7 +2787,7 @@ static uint32_t pll3_freq(uint32_t on)
timeout = wait_freqchgreq(1); timeout = wait_freqchgreq(1);
if (timeout) { if (timeout) {
return (1); return 1;
} }
pll3_control(on); pll3_control(on);
...@@ -2883,23 +2799,19 @@ static uint32_t pll3_freq(uint32_t on) ...@@ -2883,23 +2799,19 @@ static uint32_t pll3_freq(uint32_t on)
if (timeout) { if (timeout) {
FATAL_MSG("BL2: Time out[2]\n"); FATAL_MSG("BL2: Time out[2]\n");
return (1); return 1;
} }
return (0); return 0;
} }
/******************************************************************************* /* update dly */
* update dly
******************************************************************************/
static void update_dly(void) static void update_dly(void)
{ {
ddr_setval_ach(_reg_SC_PHY_MANUAL_UPDATE, 0x01); ddr_setval_ach(_reg_SC_PHY_MANUAL_UPDATE, 0x01);
ddr_setval_ach(_reg_PHY_ADRCTL_MANUAL_UPDATE, 0x01); ddr_setval_ach(_reg_PHY_ADRCTL_MANUAL_UPDATE, 0x01);
} }
/******************************************************************************* /* training by pi */
* training by pi
******************************************************************************/
static uint32_t pi_training_go(void) static uint32_t pi_training_go(void)
{ {
uint32_t flag; uint32_t flag;
...@@ -2913,11 +2825,7 @@ static uint32_t pi_training_go(void) ...@@ -2913,11 +2825,7 @@ static uint32_t pi_training_go(void)
uint32_t complete; uint32_t complete;
uint32_t frqchg_req; uint32_t frqchg_req;
/* ********************************************************************* */ /* pi_start */
/***********************************************************************
pi_start
***********************************************************************/
ddr_setval_ach(_reg_PI_START, 0x01); ddr_setval_ach(_reg_PI_START, 0x01);
foreach_vch(ch) foreach_vch(ch)
ddr_getval(ch, _reg_PI_INT_STATUS); ddr_getval(ch, _reg_PI_INT_STATUS);
...@@ -2926,9 +2834,7 @@ static uint32_t pi_training_go(void) ...@@ -2926,9 +2834,7 @@ static uint32_t pi_training_go(void)
mmio_write_32(DBSC_DBDFIPMSTRCNF, 0x00000001); mmio_write_32(DBSC_DBDFIPMSTRCNF, 0x00000001);
dsb_sev(); dsb_sev();
/*********************************************************************** /* wait pi_int_status[0] */
wait pi_int_status[0]
***********************************************************************/
mst_ch = 0; mst_ch = 0;
flag = 0; flag = 0;
complete = 0; complete = 0;
...@@ -2938,8 +2844,8 @@ static uint32_t pi_training_go(void) ...@@ -2938,8 +2844,8 @@ static uint32_t pi_training_go(void)
frqchg_req = mmio_read_32(DBSC_DBPDSTAT(mst_ch)) & 0x01; frqchg_req = mmio_read_32(DBSC_DBPDSTAT(mst_ch)) & 0x01;
/* H3 Ver.1.x cannot see frqchg_req */ /* H3 Ver.1.x cannot see frqchg_req */
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) { (prr_cut <= PRR_PRODUCT_11)) {
if ((retry % 4096) == 1) { if ((retry % 4096) == 1) {
frqchg_req = 1; frqchg_req = 1;
} else { } else {
...@@ -2982,14 +2888,12 @@ static uint32_t pi_training_go(void) ...@@ -2982,14 +2888,12 @@ static uint32_t pi_training_go(void)
ddr_setval(ch, _reg_PI_INT_ACK, data_l); ddr_setval(ch, _reg_PI_INT_ACK, data_l);
} }
if (ddrphy_regif_chk()) { if (ddrphy_regif_chk()) {
return (0xfd); return 0xfd;
} }
return complete; return complete;
} }
/******************************************************************************* /* Initialize DDR */
* Initialize ddr
******************************************************************************/
static uint32_t init_ddr(void) static uint32_t init_ddr(void)
{ {
int32_t i; int32_t i;
...@@ -3005,68 +2909,51 @@ static uint32_t init_ddr(void) ...@@ -3005,68 +2909,51 @@ static uint32_t init_ddr(void)
rcar_dram_get_boot_status(&ddr_backup); rcar_dram_get_boot_status(&ddr_backup);
#endif #endif
/*********************************************************************** /* unlock phy */
unlock phy
***********************************************************************/
/* Unlock DDRPHY register(AGAIN) */ /* Unlock DDRPHY register(AGAIN) */
foreach_vch(ch) foreach_vch(ch)
mmio_write_32(DBSC_DBPDLK(ch), 0x0000A55A); mmio_write_32(DBSC_DBPDLK(ch), 0x0000A55A);
dsb_sev(); dsb_sev();
if ((((prr_product == PRR_PRODUCT_H3) && (prr_cut > PRR_PRODUCT_11)) if ((((prr_product == PRR_PRODUCT_H3) &&
|| (prr_product == PRR_PRODUCT_M3N) (prr_cut > PRR_PRODUCT_11)) ||
|| (prr_product == PRR_PRODUCT_V3H)) && (board_cnf->dbi_en)) (prr_product == PRR_PRODUCT_M3N) ||
(prr_product == PRR_PRODUCT_V3H)) && board_cnf->dbi_en)
reg_ddrphy_write_a(0x00001010, 0x01000001); reg_ddrphy_write_a(0x00001010, 0x01000001);
else else
reg_ddrphy_write_a(0x00001010, 0x00000001); reg_ddrphy_write_a(0x00001010, 0x00000001);
/*********************************************************************** /* DBSC register pre-setting */
dbsc register pre-setting
***********************************************************************/
dbsc_regset_pre(); dbsc_regset_pre();
/*********************************************************************** /* load ddrphy registers */
load ddrphy registers
***********************************************************************/
ddrtbl_load(); ddrtbl_load();
/*********************************************************************** /* configure ddrphy registers */
configure ddrphy registers
***********************************************************************/
ddr_config(); ddr_config();
/*********************************************************************** /* dfi_reset assert */
dfi_reset assert
***********************************************************************/
foreach_vch(ch) foreach_vch(ch)
mmio_write_32(DBSC_DBPDCNT0(ch), 0x01); mmio_write_32(DBSC_DBPDCNT0(ch), 0x01);
dsb_sev(); dsb_sev();
/*********************************************************************** /* dbsc register set */
dbsc register set
***********************************************************************/
dbsc_regset(); dbsc_regset();
MSG_LF("init_ddr:1\n"); MSG_LF("init_ddr:1\n");
/*********************************************************************** /* dfi_reset negate */
dfi_reset negate
***********************************************************************/
foreach_vch(ch) foreach_vch(ch)
mmio_write_32(DBSC_DBPDCNT0(ch), 0x00); mmio_write_32(DBSC_DBPDCNT0(ch), 0x00);
dsb_sev(); dsb_sev();
/*********************************************************************** /* dfi_init_start (start ddrphy) */
dfi_init_start (start ddrphy)
***********************************************************************/
err = dfi_init_start(); err = dfi_init_start();
if (err) { if (err) {
return INITDRAM_ERR_I; return INITDRAM_ERR_I;
} }
MSG_LF("init_ddr:2\n"); MSG_LF("init_ddr:2\n");
/*********************************************************************** /* ddr backupmode end */
ddr backupmode end
***********************************************************************/
#ifdef DDR_BACKUPMODE #ifdef DDR_BACKUPMODE
if (ddr_backup) { if (ddr_backup) {
NOTICE("BL2: [WARM_BOOT]\n"); NOTICE("BL2: [WARM_BOOT]\n");
...@@ -3081,47 +2968,37 @@ static uint32_t init_ddr(void) ...@@ -3081,47 +2968,37 @@ static uint32_t init_ddr(void)
#endif #endif
MSG_LF("init_ddr:3\n"); MSG_LF("init_ddr:3\n");
/*********************************************************************** /* override term code after dfi_init_complete */
override term code after dfi_init_complete
***********************************************************************/
err = set_term_code(); err = set_term_code();
if (err) { if (err) {
return INITDRAM_ERR_I; return INITDRAM_ERR_I;
} }
MSG_LF("init_ddr:4\n"); MSG_LF("init_ddr:4\n");
/*********************************************************************** /* rx offset calibration */
rx offset calibration if ((prr_cut > PRR_PRODUCT_11) || (prr_product == PRR_PRODUCT_M3N) ||
***********************************************************************/ (prr_product == PRR_PRODUCT_V3H)) {
if ((prr_cut > PRR_PRODUCT_11) || (prr_product == PRR_PRODUCT_M3N)
|| (prr_product == PRR_PRODUCT_V3H)) {
err = rx_offset_cal_hw(); err = rx_offset_cal_hw();
} else { } else {
err = rx_offset_cal(); err = rx_offset_cal();
} }
if (err) if (err)
return (INITDRAM_ERR_O); return INITDRAM_ERR_O;
MSG_LF("init_ddr:5\n"); MSG_LF("init_ddr:5\n");
/* PDX */ /* PDX */
send_dbcmd(0x08840001); send_dbcmd(0x08840001);
/*********************************************************************** /* check register i/f is alive */
check register i/f is alive
***********************************************************************/
err = ddrphy_regif_chk(); err = ddrphy_regif_chk();
if (err) { if (err) {
return (INITDRAM_ERR_O); return INITDRAM_ERR_O;
} }
MSG_LF("init_ddr:6\n"); MSG_LF("init_ddr:6\n");
/*********************************************************************** /* phy initialize end */
phy initialize end
***********************************************************************/
/*********************************************************************** /* setup DDR mode registers */
setup DDR mode registers
***********************************************************************/
/* CMOS MODE */ /* CMOS MODE */
change_lpddr4_en(0); change_lpddr4_en(0);
...@@ -3134,9 +3011,7 @@ static uint32_t init_ddr(void) ...@@ -3134,9 +3011,7 @@ static uint32_t init_ddr(void)
/* ZQLAT */ /* ZQLAT */
send_dbcmd(0x0d840051); send_dbcmd(0x0d840051);
/*********************************************************************** /* Thermal sensor setting */
Thermal sensor setting
***********************************************************************/
/* THCTR Bit6: PONM=0 , Bit0: THSST=1 */ /* THCTR Bit6: PONM=0 , Bit0: THSST=1 */
data_l = (mmio_read_32(THS1_THCTR) & 0xFFFFFFBF) | 0x00000001; data_l = (mmio_read_32(THS1_THCTR) & 0xFFFFFFBF) | 0x00000001;
mmio_write_32(THS1_THCTR, data_l); mmio_write_32(THS1_THCTR, data_l);
...@@ -3146,9 +3021,7 @@ static uint32_t init_ddr(void) ...@@ -3146,9 +3021,7 @@ static uint32_t init_ddr(void)
MSG_LF("init_ddr:7\n"); MSG_LF("init_ddr:7\n");
/*********************************************************************** /* mask CS_MAP if RANKx is not found */
mask CS_MAP if RANKx is not found
***********************************************************************/
foreach_vch(ch) { foreach_vch(ch) {
data_l = ddr_getval(ch, _reg_PI_CS_MAP); data_l = ddr_getval(ch, _reg_PI_CS_MAP);
if (!(ch_have_this_cs[1] & (1U << ch))) if (!(ch_have_this_cs[1] & (1U << ch)))
...@@ -3156,9 +3029,7 @@ static uint32_t init_ddr(void) ...@@ -3156,9 +3029,7 @@ static uint32_t init_ddr(void)
ddr_setval(ch, _reg_PI_CS_MAP, data_l); ddr_setval(ch, _reg_PI_CS_MAP, data_l);
} }
/*********************************************************************** /* exec pi_training */
exec pi_training
***********************************************************************/
reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_FREQ_SEL_MULTICAST_EN), reg_ddrphy_write_a(ddr_regdef_adr(_reg_PHY_FREQ_SEL_MULTICAST_EN),
BIT(ddr_regdef_lsb(_reg_PHY_FREQ_SEL_MULTICAST_EN))); BIT(ddr_regdef_lsb(_reg_PHY_FREQ_SEL_MULTICAST_EN)));
ddr_setval_ach_as(_reg_PHY_PER_CS_TRAINING_MULTICAST_EN, 0x00); ddr_setval_ach_as(_reg_PHY_PER_CS_TRAINING_MULTICAST_EN, 0x00);
...@@ -3179,14 +3050,12 @@ static uint32_t init_ddr(void) ...@@ -3179,14 +3050,12 @@ static uint32_t init_ddr(void)
phytrainingok = pi_training_go(); phytrainingok = pi_training_go();
if (ddr_phyvalid != (phytrainingok & ddr_phyvalid)) { if (ddr_phyvalid != (phytrainingok & ddr_phyvalid)) {
return (INITDRAM_ERR_T | phytrainingok); return INITDRAM_ERR_T | phytrainingok;
} }
MSG_LF("init_ddr:8\n"); MSG_LF("init_ddr:8\n");
/*********************************************************************** /* CACS DLY ADJUST */
CACS DLY ADJUST
***********************************************************************/
data_l = board_cnf->cacs_dly + _f_scale_adj(board_cnf->cacs_dly_adj); data_l = board_cnf->cacs_dly + _f_scale_adj(board_cnf->cacs_dly_adj);
foreach_vch(ch) { foreach_vch(ch) {
for (i = 0; i < _reg_PHY_CLK_CACS_SLAVE_DELAY_X_NUM; i++) { for (i = 0; i < _reg_PHY_CLK_CACS_SLAVE_DELAY_X_NUM; i++) {
...@@ -3208,23 +3077,17 @@ static uint32_t init_ddr(void) ...@@ -3208,23 +3077,17 @@ static uint32_t init_ddr(void)
update_dly(); update_dly();
MSG_LF("init_ddr:9\n"); MSG_LF("init_ddr:9\n");
/*********************************************************************** /* H3 fix rd latency to avoid bug in elasitic buffer */
H3 fix rd latency to avoid bug in elasitic buffe
***********************************************************************/
if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) { if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) {
adjust_rddqs_latency(); adjust_rddqs_latency();
} }
/*********************************************************************** /* Adjust Write path latency */
Adjust Write path latency
***********************************************************************/
if (ddrtbl_getval if (ddrtbl_getval
(_cnf_DDR_PHY_SLICE_REGSET, _reg_PHY_WRITE_PATH_LAT_ADD)) (_cnf_DDR_PHY_SLICE_REGSET, _reg_PHY_WRITE_PATH_LAT_ADD))
adjust_wpath_latency(); adjust_wpath_latency();
/*********************************************************************** /* RDQLVL Training */
RDQLVL Training
***********************************************************************/
if (ddrtbl_getval(_cnf_DDR_PHY_SLICE_REGSET, _reg_PHY_IE_MODE) == 0x00) { if (ddrtbl_getval(_cnf_DDR_PHY_SLICE_REGSET, _reg_PHY_IE_MODE) == 0x00) {
ddr_setval_ach_as(_reg_PHY_IE_MODE, 0x01); ddr_setval_ach_as(_reg_PHY_IE_MODE, 0x01);
} }
...@@ -3236,27 +3099,23 @@ static uint32_t init_ddr(void) ...@@ -3236,27 +3099,23 @@ static uint32_t init_ddr(void)
} }
if (err) { if (err) {
return (INITDRAM_ERR_T); return INITDRAM_ERR_T;
} }
update_dly(); update_dly();
MSG_LF("init_ddr:10\n"); MSG_LF("init_ddr:10\n");
/*********************************************************************** /* WDQLVL Training */
WDQLVL Training
***********************************************************************/
err = wdqdm_man(); err = wdqdm_man();
if (err) { if (err) {
return (INITDRAM_ERR_T); return INITDRAM_ERR_T;
} }
update_dly(); update_dly();
MSG_LF("init_ddr:11\n"); MSG_LF("init_ddr:11\n");
/*********************************************************************** /* training complete, setup DBSC */
training complete, setup dbsc if (((prr_product == PRR_PRODUCT_H3) && (prr_cut > PRR_PRODUCT_11)) ||
***********************************************************************/ (prr_product == PRR_PRODUCT_M3N) ||
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut > PRR_PRODUCT_11)) (prr_product == PRR_PRODUCT_V3H)) {
|| (prr_product == PRR_PRODUCT_M3N)
|| (prr_product == PRR_PRODUCT_V3H)) {
ddr_setval_ach_as(_reg_PHY_DFI40_POLARITY, 0x00); ddr_setval_ach_as(_reg_PHY_DFI40_POLARITY, 0x00);
ddr_setval_ach(_reg_PI_DFI40_POLARITY, 0x00); ddr_setval_ach(_reg_PI_DFI40_POLARITY, 0x00);
} }
...@@ -3267,9 +3126,7 @@ static uint32_t init_ddr(void) ...@@ -3267,9 +3126,7 @@ static uint32_t init_ddr(void)
return phytrainingok; return phytrainingok;
} }
/******************************************************************************* /* SW LEVELING COMMON */
* SW LEVELING COMMON
******************************************************************************/
static uint32_t swlvl1(uint32_t ddr_csn, uint32_t reg_cs, uint32_t reg_kick) static uint32_t swlvl1(uint32_t ddr_csn, uint32_t reg_cs, uint32_t reg_kick)
{ {
uint32_t ch; uint32_t ch;
...@@ -3320,9 +3177,7 @@ static uint32_t swlvl1(uint32_t ddr_csn, uint32_t reg_cs, uint32_t reg_kick) ...@@ -3320,9 +3177,7 @@ static uint32_t swlvl1(uint32_t ddr_csn, uint32_t reg_cs, uint32_t reg_kick)
return err; return err;
} }
/******************************************************************************* /* WDQ TRAINING */
* WDQ TRAINING
******************************************************************************/
#ifndef DDR_FAST_INIT #ifndef DDR_FAST_INIT
static void wdqdm_clr1(uint32_t ch, uint32_t ddr_csn) static void wdqdm_clr1(uint32_t ch, uint32_t ddr_csn)
{ {
...@@ -3330,9 +3185,7 @@ static void wdqdm_clr1(uint32_t ch, uint32_t ddr_csn) ...@@ -3330,9 +3185,7 @@ static void wdqdm_clr1(uint32_t ch, uint32_t ddr_csn)
uint32_t cs, slice; uint32_t cs, slice;
uint32_t data_l; uint32_t data_l;
/*********************************************************************** /* clr of training results buffer */
clr of training results buffer
***********************************************************************/
cs = ddr_csn % 2; cs = ddr_csn % 2;
data_l = board_cnf->dqdm_dly_w; data_l = board_cnf->dqdm_dly_w;
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
...@@ -3368,9 +3221,7 @@ static uint32_t wdqdm_ana1(uint32_t ch, uint32_t ddr_csn) ...@@ -3368,9 +3221,7 @@ static uint32_t wdqdm_ana1(uint32_t ch, uint32_t ddr_csn)
int16_t adj; int16_t adj;
uint32_t dq; uint32_t dq;
/*********************************************************************** /* analysis of training results */
analysis of training results
***********************************************************************/
err = 0; err = 0;
for (slice = 0; slice < SLICE_CNT; slice += 1) { for (slice = 0; slice < SLICE_CNT; slice += 1) {
k = (board_cnf->ch[ch].dqs_swap >> (4 * slice)) & 0x0f; k = (board_cnf->ch[ch].dqs_swap >> (4 * slice)) & 0x0f;
...@@ -3437,9 +3288,7 @@ static void wdqdm_cp(uint32_t ddr_csn, uint32_t restore) ...@@ -3437,9 +3288,7 @@ static void wdqdm_cp(uint32_t ddr_csn, uint32_t restore)
uint32_t tgt_cs, src_cs; uint32_t tgt_cs, src_cs;
uint32_t tmp_r; uint32_t tmp_r;
/*********************************************************************** /* copy of training results */
copy of training results
***********************************************************************/
foreach_vch(ch) { foreach_vch(ch) {
for (tgt_cs = 0; tgt_cs < CS_CNT; tgt_cs++) { for (tgt_cs = 0; tgt_cs < CS_CNT; tgt_cs++) {
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
...@@ -3481,9 +3330,7 @@ static uint32_t wdqdm_man1(void) ...@@ -3481,9 +3330,7 @@ static uint32_t wdqdm_man1(void)
uint32_t err_flg; uint32_t err_flg;
#endif/* DDR_FAST_INIT */ #endif/* DDR_FAST_INIT */
/*********************************************************************** /* manual execution of training */
manual execution of training
***********************************************************************/
if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) { if ((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) {
foreach_vch(ch) { foreach_vch(ch) {
high_dq[ch] = 0; high_dq[ch] = 0;
...@@ -3499,10 +3346,10 @@ static uint32_t wdqdm_man1(void) ...@@ -3499,10 +3346,10 @@ static uint32_t wdqdm_man1(void)
/* CLEAR PREV RESULT */ /* CLEAR PREV RESULT */
for (cs = 0; cs < CS_CNT; cs++) { for (cs = 0; cs < CS_CNT; cs++) {
ddr_setval_ach_as(_reg_PHY_PER_CS_TRAINING_INDEX, cs); ddr_setval_ach_as(_reg_PHY_PER_CS_TRAINING_INDEX, cs);
if (((prr_product == PRR_PRODUCT_H3) if (((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut > PRR_PRODUCT_11)) (prr_cut > PRR_PRODUCT_11)) ||
|| (prr_product == PRR_PRODUCT_M3N) (prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
ddr_setval_ach_as(_reg_SC_PHY_WDQLVL_CLR_PREV_RESULTS, ddr_setval_ach_as(_reg_SC_PHY_WDQLVL_CLR_PREV_RESULTS,
0x01); 0x01);
} else { } else {
...@@ -3516,8 +3363,8 @@ static uint32_t wdqdm_man1(void) ...@@ -3516,8 +3363,8 @@ static uint32_t wdqdm_man1(void)
err_flg = 0; err_flg = 0;
#endif/* DDR_FAST_INIT */ #endif/* DDR_FAST_INIT */
for (ddr_csn = 0; ddr_csn < CSAB_CNT; ddr_csn++) { for (ddr_csn = 0; ddr_csn < CSAB_CNT; ddr_csn++) {
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) { (prr_cut <= PRR_PRODUCT_11)) {
foreach_vch(ch) { foreach_vch(ch) {
data_l = mmio_read_32(DBSC_DBDFICNT(ch)); data_l = mmio_read_32(DBSC_DBDFICNT(ch));
data_l &= ~(0x00ffU << 16); data_l &= ~(0x00ffU << 16);
...@@ -3531,10 +3378,10 @@ static uint32_t wdqdm_man1(void) ...@@ -3531,10 +3378,10 @@ static uint32_t wdqdm_man1(void)
ddr_setval(ch, _reg_PI_WDQLVL_RESP_MASK, k); ddr_setval(ch, _reg_PI_WDQLVL_RESP_MASK, k);
} }
} }
if (((prr_product == PRR_PRODUCT_H3) if (((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) (prr_cut <= PRR_PRODUCT_11)) ||
|| ((prr_product == PRR_PRODUCT_M3) ((prr_product == PRR_PRODUCT_M3) &&
&& (prr_cut == PRR_PRODUCT_10))) { (prr_cut == PRR_PRODUCT_10))) {
wdqdm_cp(ddr_csn, 0); wdqdm_cp(ddr_csn, 0);
} }
...@@ -3585,7 +3432,7 @@ err_exit: ...@@ -3585,7 +3432,7 @@ err_exit:
ddr_setval(ch, _reg_PI_WDQLVL_RESP_MASK, 0x00); ddr_setval(ch, _reg_PI_WDQLVL_RESP_MASK, 0x00);
} }
} }
return (err); return err;
} }
static uint32_t wdqdm_man(void) static uint32_t wdqdm_man(void)
...@@ -3595,9 +3442,9 @@ static uint32_t wdqdm_man(void) ...@@ -3595,9 +3442,9 @@ static uint32_t wdqdm_man(void)
uint32_t ch, ddr_csn, mr14_bkup[4][4]; uint32_t ch, ddr_csn, mr14_bkup[4][4];
ddr_setval_ach(_reg_PI_TDFI_WDQLVL_RW, (DBSC_DBTR(11) & 0xFF) + 12); ddr_setval_ach(_reg_PI_TDFI_WDQLVL_RW, (DBSC_DBTR(11) & 0xFF) + 12);
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut > PRR_PRODUCT_11)) if (((prr_product == PRR_PRODUCT_H3) && (prr_cut > PRR_PRODUCT_11)) ||
|| (prr_product == PRR_PRODUCT_M3N) (prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
ddr_setval_ach(_reg_PI_TDFI_WDQLVL_WR_F1, ddr_setval_ach(_reg_PI_TDFI_WDQLVL_WR_F1,
(DBSC_DBTR(12) & 0xFF) + 1); (DBSC_DBTR(12) & 0xFF) + 1);
} else { } else {
...@@ -3609,15 +3456,15 @@ static uint32_t wdqdm_man(void) ...@@ -3609,15 +3456,15 @@ static uint32_t wdqdm_man(void)
retry_cnt = 0; retry_cnt = 0;
err = 0; err = 0;
do { do {
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) { (prr_cut <= PRR_PRODUCT_11)) {
err = wdqdm_man1(); err = wdqdm_man1();
} else { } else {
ddr_setval_ach(_reg_PI_WDQLVL_VREF_EN, 0x01); ddr_setval_ach(_reg_PI_WDQLVL_VREF_EN, 0x01);
ddr_setval_ach(_reg_PI_WDQLVL_VREF_NORMAL_STEPSIZE, ddr_setval_ach(_reg_PI_WDQLVL_VREF_NORMAL_STEPSIZE,
0x01); 0x01);
if ((prr_product == PRR_PRODUCT_M3N) if ((prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
ddr_setval_ach(_reg_PI_WDQLVL_VREF_DELTA_F1, ddr_setval_ach(_reg_PI_WDQLVL_VREF_DELTA_F1,
0x0C); 0x0C);
} else { } else {
...@@ -3635,8 +3482,8 @@ static uint32_t wdqdm_man(void) ...@@ -3635,8 +3482,8 @@ static uint32_t wdqdm_man(void)
} }
} }
if ((prr_product == PRR_PRODUCT_M3N) if ((prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
ddr_setval_ach(_reg_PI_WDQLVL_VREF_DELTA_F1, ddr_setval_ach(_reg_PI_WDQLVL_VREF_DELTA_F1,
0x04); 0x04);
} else { } else {
...@@ -3660,8 +3507,8 @@ static uint32_t wdqdm_man(void) ...@@ -3660,8 +3507,8 @@ static uint32_t wdqdm_man(void)
ddr_setval_ach(_reg_PI_WDQLVL_VREF_NORMAL_STEPSIZE, ddr_setval_ach(_reg_PI_WDQLVL_VREF_NORMAL_STEPSIZE,
0x00); 0x00);
if ((prr_product == PRR_PRODUCT_M3N) if ((prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
ddr_setval_ach(_reg_PI_WDQLVL_VREF_DELTA_F1, ddr_setval_ach(_reg_PI_WDQLVL_VREF_DELTA_F1,
0x00); 0x00);
ddr_setval_ach ddr_setval_ach
...@@ -3688,17 +3535,15 @@ static uint32_t wdqdm_man(void) ...@@ -3688,17 +3535,15 @@ static uint32_t wdqdm_man(void)
} }
} while (err && (++retry_cnt < retry_max)); } while (err && (++retry_cnt < retry_max));
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) ||
|| ((prr_product == PRR_PRODUCT_M3) && (prr_cut <= PRR_PRODUCT_10))) { ((prr_product == PRR_PRODUCT_M3) && (prr_cut <= PRR_PRODUCT_10))) {
wdqdm_cp(0, 1); wdqdm_cp(0, 1);
} }
return (retry_cnt >= retry_max); return (retry_cnt >= retry_max);
} }
/******************************************************************************* /* RDQ TRAINING */
* RDQ TRAINING
******************************************************************************/
#ifndef DDR_FAST_INIT #ifndef DDR_FAST_INIT
static void rdqdm_clr1(uint32_t ch, uint32_t ddr_csn) static void rdqdm_clr1(uint32_t ch, uint32_t ddr_csn)
{ {
...@@ -3706,9 +3551,7 @@ static void rdqdm_clr1(uint32_t ch, uint32_t ddr_csn) ...@@ -3706,9 +3551,7 @@ static void rdqdm_clr1(uint32_t ch, uint32_t ddr_csn)
uint32_t cs, slice; uint32_t cs, slice;
uint32_t data_l; uint32_t data_l;
/*********************************************************************** /* clr of training results buffer */
clr of training results buffer
***********************************************************************/
cs = ddr_csn % 2; cs = ddr_csn % 2;
data_l = board_cnf->dqdm_dly_r; data_l = board_cnf->dqdm_dly_r;
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
...@@ -3753,9 +3596,7 @@ static uint32_t rdqdm_ana1(uint32_t ch, uint32_t ddr_csn) ...@@ -3753,9 +3596,7 @@ static uint32_t rdqdm_ana1(uint32_t ch, uint32_t ddr_csn)
int32_t win; int32_t win;
uint32_t rdq_status_obs_select; uint32_t rdq_status_obs_select;
/*********************************************************************** /* analysis of training results */
analysis of training results
***********************************************************************/
err = 0; err = 0;
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
k = (board_cnf->ch[ch].dqs_swap >> (4 * slice)) & 0x0f; k = (board_cnf->ch[ch].dqs_swap >> (4 * slice)) & 0x0f;
...@@ -3847,7 +3688,7 @@ static uint32_t rdqdm_ana1(uint32_t ch, uint32_t ddr_csn) ...@@ -3847,7 +3688,7 @@ static uint32_t rdqdm_ana1(uint32_t ch, uint32_t ddr_csn)
err = 2; err = 2;
} }
} }
return (err); return err;
} }
#endif/* DDR_FAST_INIT */ #endif/* DDR_FAST_INIT */
...@@ -3861,9 +3702,7 @@ static uint32_t rdqdm_man1(void) ...@@ -3861,9 +3702,7 @@ static uint32_t rdqdm_man1(void)
#endif/* DDR_FAST_INIT */ #endif/* DDR_FAST_INIT */
uint32_t err; uint32_t err;
/*********************************************************************** /* manual execution of training */
manual execution of training
***********************************************************************/
err = 0; err = 0;
for (ddr_csn = 0; ddr_csn < CSAB_CNT; ddr_csn++) { for (ddr_csn = 0; ddr_csn < CSAB_CNT; ddr_csn++) {
...@@ -3896,10 +3735,10 @@ static uint32_t rdqdm_man1(void) ...@@ -3896,10 +3735,10 @@ static uint32_t rdqdm_man1(void)
} }
} }
} }
if (((prr_product == PRR_PRODUCT_H3) if (((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) (prr_cut <= PRR_PRODUCT_11)) ||
|| ((prr_product == PRR_PRODUCT_M3) ((prr_product == PRR_PRODUCT_M3) &&
&& (prr_cut <= PRR_PRODUCT_10))) { (prr_cut <= PRR_PRODUCT_10))) {
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
for (i = 0; i <= 8; i++) { for (i = 0; i <= 8; i++) {
if (i == 8) if (i == 8)
...@@ -3926,7 +3765,7 @@ static uint32_t rdqdm_man1(void) ...@@ -3926,7 +3765,7 @@ static uint32_t rdqdm_man1(void)
} }
err_exit: err_exit:
return (err); return err;
} }
static uint32_t rdqdm_man(void) static uint32_t rdqdm_man(void)
...@@ -3968,9 +3807,7 @@ static uint32_t rdqdm_man(void) ...@@ -3968,9 +3807,7 @@ static uint32_t rdqdm_man(void)
return (retry_cnt >= retry_max); return (retry_cnt >= retry_max);
} }
/******************************************************************************* /* rx offset calibration */
* rx offset calibration
******************************************************************************/
static int32_t _find_change(uint64_t val, uint32_t dir) static int32_t _find_change(uint64_t val, uint32_t dir)
{ {
int32_t i; int32_t i;
...@@ -3983,17 +3820,17 @@ static int32_t _find_change(uint64_t val, uint32_t dir) ...@@ -3983,17 +3820,17 @@ static int32_t _find_change(uint64_t val, uint32_t dir)
for (i = 1; i <= VAL_END; i++) { for (i = 1; i <= VAL_END; i++) {
curval = (val >> i) & 0x01; curval = (val >> i) & 0x01;
if (curval != startval) if (curval != startval)
return (i); return i;
} }
return (VAL_END); return VAL_END;
} else { } else {
startval = (val >> dir) & 0x01; startval = (val >> dir) & 0x01;
for (i = dir - 1; i >= 0; i--) { for (i = dir - 1; i >= 0; i--) {
curval = (val >> i) & 0x01; curval = (val >> i) & 0x01;
if (curval != startval) if (curval != startval)
return (i); return i;
} }
return (0); return 0;
} }
} }
...@@ -4116,10 +3953,10 @@ static uint32_t rx_offset_cal_hw(void) ...@@ -4116,10 +3953,10 @@ static uint32_t rx_offset_cal_hw(void)
for (slice = 0; slice < SLICE_CNT; slice++) { for (slice = 0; slice < SLICE_CNT; slice++) {
tmp = tmp_ach_as[ch][slice]; tmp = tmp_ach_as[ch][slice];
tmp = (tmp & 0x3f) + ((tmp >> 6) & 0x3f); tmp = (tmp & 0x3f) + ((tmp >> 6) & 0x3f);
if (((prr_product == PRR_PRODUCT_H3) if (((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut > PRR_PRODUCT_11)) (prr_cut > PRR_PRODUCT_11)) ||
|| (prr_product == PRR_PRODUCT_M3N) (prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
if (tmp != 0x3E) if (tmp != 0x3E)
complete = 0; complete = 0;
} else { } else {
...@@ -4137,9 +3974,7 @@ static uint32_t rx_offset_cal_hw(void) ...@@ -4137,9 +3974,7 @@ static uint32_t rx_offset_cal_hw(void)
return (complete == 0); return (complete == 0);
} }
/******************************************************************************* /* adjust rddqs latency */
* adjust rddqs latency
******************************************************************************/
static void adjust_rddqs_latency(void) static void adjust_rddqs_latency(void)
{ {
uint32_t ch, slice; uint32_t ch, slice;
...@@ -4180,9 +4015,7 @@ static void adjust_rddqs_latency(void) ...@@ -4180,9 +4015,7 @@ static void adjust_rddqs_latency(void)
} }
} }
/******************************************************************************* /* adjust wpath latency */
* adjust wpath latency
******************************************************************************/
static void adjust_wpath_latency(void) static void adjust_wpath_latency(void)
{ {
uint32_t ch, cs, slice; uint32_t ch, cs, slice;
...@@ -4215,9 +4048,7 @@ static void adjust_wpath_latency(void) ...@@ -4215,9 +4048,7 @@ static void adjust_wpath_latency(void)
} }
} }
/******************************************************************************* /* DDR Initialize entry */
* DDR Initialize entry
******************************************************************************/
int32_t rcar_dram_init(void) int32_t rcar_dram_init(void)
{ {
uint32_t ch, cs; uint32_t ch, cs;
...@@ -4227,23 +4058,20 @@ int32_t rcar_dram_init(void) ...@@ -4227,23 +4058,20 @@ int32_t rcar_dram_init(void)
uint32_t failcount; uint32_t failcount;
uint32_t cnf_boardtype; uint32_t cnf_boardtype;
/*********************************************************************** /* Thermal sensor setting */
Thermal sensor setting
***********************************************************************/
data_l = mmio_read_32(CPG_MSTPSR5); data_l = mmio_read_32(CPG_MSTPSR5);
if (data_l & BIT(22)) { /* case THS/TSC Standby */ if (data_l & BIT(22)) { /* case THS/TSC Standby */
data_l &= ~(BIT(22)); data_l &= ~BIT(22);
cpg_write_32(CPG_SMSTPCR5, data_l); cpg_write_32(CPG_SMSTPCR5, data_l);
while ((BIT(22)) & mmio_read_32(CPG_MSTPSR5)); /* wait bit=0 */ while (mmio_read_32(CPG_MSTPSR5) & BIT(22))
; /* wait bit=0 */
} }
/* THCTR Bit6: PONM=0 , Bit0: THSST=0 */ /* THCTR Bit6: PONM=0 , Bit0: THSST=0 */
data_l = mmio_read_32(THS1_THCTR) & 0xFFFFFFBE; data_l = mmio_read_32(THS1_THCTR) & 0xFFFFFFBE;
mmio_write_32(THS1_THCTR, data_l); mmio_write_32(THS1_THCTR, data_l);
/*********************************************************************** /* Judge product and cut */
Judge product and cut
***********************************************************************/
#ifdef RCAR_DDR_FIXED_LSI_TYPE #ifdef RCAR_DDR_FIXED_LSI_TYPE
#if (RCAR_LSI == RCAR_AUTO) #if (RCAR_LSI == RCAR_AUTO)
prr_product = mmio_read_32(PRR) & PRR_PRODUCT_MASK; prr_product = mmio_read_32(PRR) & PRR_PRODUCT_MASK;
...@@ -4266,24 +4094,22 @@ int32_t rcar_dram_init(void) ...@@ -4266,24 +4094,22 @@ int32_t rcar_dram_init(void)
} }
} else if (prr_product == PRR_PRODUCT_M3) { } else if (prr_product == PRR_PRODUCT_M3) {
p_ddr_regdef_tbl = (const uint32_t *)&DDR_REGDEF_TBL[1][0]; p_ddr_regdef_tbl = (const uint32_t *)&DDR_REGDEF_TBL[1][0];
} else if ((prr_product == PRR_PRODUCT_M3N) } else if ((prr_product == PRR_PRODUCT_M3N) ||
|| (prr_product == PRR_PRODUCT_V3H)) { (prr_product == PRR_PRODUCT_V3H)) {
p_ddr_regdef_tbl = (const uint32_t *)&DDR_REGDEF_TBL[3][0]; p_ddr_regdef_tbl = (const uint32_t *)&DDR_REGDEF_TBL[3][0];
} else { } else {
FATAL_MSG("BL2: DDR:Unknown Product\n"); FATAL_MSG("BL2: DDR:Unknown Product\n");
return 0xff; return 0xff;
} }
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) ||
|| ((prr_product == PRR_PRODUCT_M3) && (prr_cut < PRR_PRODUCT_30))) { ((prr_product == PRR_PRODUCT_M3) && (prr_cut < PRR_PRODUCT_30))) {
/* non : H3 Ver.1.x/M3-W Ver.1.x not support */ /* non : H3 Ver.1.x/M3-W Ver.1.x not support */
} else { } else {
mmio_write_32(DBSC_DBSYSCNT0, 0x00001234); mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
} }
/*********************************************************************** /* Judge board type */
Judge board type
***********************************************************************/
cnf_boardtype = boardcnf_get_brd_type(); cnf_boardtype = boardcnf_get_brd_type();
if (cnf_boardtype >= BOARDNUM) { if (cnf_boardtype >= BOARDNUM) {
FATAL_MSG("BL2: DDR:Unknown Board\n"); FATAL_MSG("BL2: DDR:Unknown Board\n");
...@@ -4293,9 +4119,7 @@ int32_t rcar_dram_init(void) ...@@ -4293,9 +4119,7 @@ int32_t rcar_dram_init(void)
/* RCAR_DRAM_SPLIT_2CH (2U) */ /* RCAR_DRAM_SPLIT_2CH (2U) */
#if RCAR_DRAM_SPLIT == 2 #if RCAR_DRAM_SPLIT == 2
/*********************************************************************** /* H3(Test for future H3-N): Swap ch2 and ch1 for 2ch-split */
H3(Test for future H3-N): Swap ch2 and ch1 for 2ch-split
***********************************************************************/
if ((prr_product == PRR_PRODUCT_H3) && (board_cnf->phyvalid == 0x05)) { if ((prr_product == PRR_PRODUCT_H3) && (board_cnf->phyvalid == 0x05)) {
mmio_write_32(DBSC_DBMEMSWAPCONF0, 0x00000006); mmio_write_32(DBSC_DBMEMSWAPCONF0, 0x00000006);
ddr_phyvalid = 0x03; ddr_phyvalid = 0x03;
...@@ -4325,16 +4149,14 @@ int32_t rcar_dram_init(void) ...@@ -4325,16 +4149,14 @@ int32_t rcar_dram_init(void)
continue; continue;
if (data_l > max_density) if (data_l > max_density)
max_density = data_l; max_density = data_l;
if ((cs == 1) && (prr_product == PRR_PRODUCT_H3) if ((cs == 1) && (prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) (prr_cut <= PRR_PRODUCT_11))
continue; continue;
ch_have_this_cs[cs] |= (1U << ch); ch_have_this_cs[cs] |= (1U << ch);
} }
} }
/*********************************************************************** /* Judge board clock frequency (in MHz) */
Judge board clock frequency (in MHz)
***********************************************************************/
boardcnf_get_brd_clk(cnf_boardtype, &brd_clk, &brd_clkdiv); boardcnf_get_brd_clk(cnf_boardtype, &brd_clk, &brd_clkdiv);
if ((brd_clk / brd_clkdiv) > 25) { if ((brd_clk / brd_clkdiv) > 25) {
brd_clkdiva = 1; brd_clkdiva = 1;
...@@ -4342,9 +4164,7 @@ int32_t rcar_dram_init(void) ...@@ -4342,9 +4164,7 @@ int32_t rcar_dram_init(void)
brd_clkdiva = 0; brd_clkdiva = 0;
} }
/*********************************************************************** /* Judge ddr operating frequency clock(in Mbps) */
Judge ddr operating frequency clock(in Mbps)
***********************************************************************/
boardcnf_get_ddr_mbps(cnf_boardtype, &ddr_mbps, &ddr_mbpsdiv); boardcnf_get_ddr_mbps(cnf_boardtype, &ddr_mbps, &ddr_mbpsdiv);
ddr0800_mul = CLK_DIV(800, 2, brd_clk, brd_clkdiv * (brd_clkdiva + 1)); ddr0800_mul = CLK_DIV(800, 2, brd_clk, brd_clkdiv * (brd_clkdiva + 1));
...@@ -4352,9 +4172,7 @@ int32_t rcar_dram_init(void) ...@@ -4352,9 +4172,7 @@ int32_t rcar_dram_init(void)
ddr_mul = CLK_DIV(ddr_mbps, ddr_mbpsdiv * 2, brd_clk, ddr_mul = CLK_DIV(ddr_mbps, ddr_mbpsdiv * 2, brd_clk,
brd_clkdiv * (brd_clkdiva + 1)); brd_clkdiv * (brd_clkdiva + 1));
/*********************************************************************** /* Adjust tccd */
Adjust tccd
***********************************************************************/
data_l = (0x00006000 & mmio_read_32(RST_MODEMR)) >> 13; data_l = (0x00006000 & mmio_read_32(RST_MODEMR)) >> 13;
bus_mbps = 0; bus_mbps = 0;
bus_mbpsdiv = 0; bus_mbpsdiv = 0;
...@@ -4393,14 +4211,10 @@ int32_t rcar_dram_init(void) ...@@ -4393,14 +4211,10 @@ int32_t rcar_dram_init(void)
MSG_LF("Start\n"); MSG_LF("Start\n");
/*********************************************************************** /* PLL Setting */
PLL Setting
***********************************************************************/
pll3_control(1); pll3_control(1);
/*********************************************************************** /* initialize DDR */
initialize DDR
***********************************************************************/
data_l = init_ddr(); data_l = init_ddr();
if (data_l == ddr_phyvalid) { if (data_l == ddr_phyvalid) {
failcount = 0; failcount = 0;
...@@ -4410,8 +4224,8 @@ int32_t rcar_dram_init(void) ...@@ -4410,8 +4224,8 @@ int32_t rcar_dram_init(void)
foreach_vch(ch) foreach_vch(ch)
mmio_write_32(DBSC_DBPDLK(ch), 0x00000000); mmio_write_32(DBSC_DBPDLK(ch), 0x00000000);
if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) if (((prr_product == PRR_PRODUCT_H3) && (prr_cut <= PRR_PRODUCT_11)) ||
|| ((prr_product == PRR_PRODUCT_M3) && (prr_cut < PRR_PRODUCT_30))) { ((prr_product == PRR_PRODUCT_M3) && (prr_cut < PRR_PRODUCT_30))) {
/* non : H3 Ver.1.x/M3-W Ver.1.x not support */ /* non : H3 Ver.1.x/M3-W Ver.1.x not support */
} else { } else {
mmio_write_32(DBSC_DBSYSCNT0, 0x00000000); mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
...@@ -4453,8 +4267,8 @@ void pvtcode_update(void) ...@@ -4453,8 +4267,8 @@ void pvtcode_update(void)
pvtn_init) / (pvtn_tmp) + pvtn_init) / (pvtn_tmp) +
6 * pvtp_tmp + pvtp_init; 6 * pvtp_tmp + pvtp_init;
} }
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) { (prr_cut <= PRR_PRODUCT_11)) {
data_l = pvtp[ch] | (pvtn[ch] << 6) | (tcal.tcomp_cal[ch] & 0xfffff000); data_l = pvtp[ch] | (pvtn[ch] << 6) | (tcal.tcomp_cal[ch] & 0xfffff000);
reg_ddrphy_write(ch, reg_ddrphy_write(ch,
ddr_regdef_adr(_reg_PHY_PAD_FDBK_TERM), ddr_regdef_adr(_reg_PHY_PAD_FDBK_TERM),
...@@ -4556,8 +4370,8 @@ void ddr_padcal_tcompensate_getinit(uint32_t override) ...@@ -4556,8 +4370,8 @@ void ddr_padcal_tcompensate_getinit(uint32_t override)
else else
pvtn = 0; pvtn = 0;
if ((prr_product == PRR_PRODUCT_H3) if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) { (prr_cut <= PRR_PRODUCT_11)) {
tcal.init_cal[ch] = tcal.init_cal[ch] =
(tcal. (tcal.
init_cal[ch] & 0xfffff000) | (pvtn << 6) | init_cal[ch] & 0xfffff000) | (pvtn << 6) |
...@@ -4578,7 +4392,3 @@ uint8_t get_boardcnf_phyvalid(void) ...@@ -4578,7 +4392,3 @@ uint8_t get_boardcnf_phyvalid(void)
return ddr_phyvalid; return ddr_phyvalid;
} }
#endif /* ddr_qos_init_setting */ #endif /* ddr_qos_init_setting */
/*******************************************************************************
* END
******************************************************************************/
...@@ -17,7 +17,7 @@ static uint32_t boardcnf_get_brd_type(void) ...@@ -17,7 +17,7 @@ static uint32_t boardcnf_get_brd_type(void)
#else #else
static uint32_t boardcnf_get_brd_type(void) static uint32_t boardcnf_get_brd_type(void)
{ {
return (1); return 1;
} }
#endif #endif
...@@ -1630,7 +1630,8 @@ static void pfc_write_and_poll(uint32_t a, uint32_t v) ...@@ -1630,7 +1630,8 @@ static void pfc_write_and_poll(uint32_t a, uint32_t v)
mmio_write_32(PFC_PMMR, ~v); mmio_write_32(PFC_PMMR, ~v);
v = ~mmio_read_32(PFC_PMMR); v = ~mmio_read_32(PFC_PMMR);
mmio_write_32(a, v); mmio_write_32(a, v);
while (v != mmio_read_32(a)); while (v != mmio_read_32(a))
;
dsb_sev(); dsb_sev();
} }
#endif #endif
...@@ -1688,10 +1689,10 @@ static uint32_t opencheck_SSI_WS6(void) ...@@ -1688,10 +1689,10 @@ static uint32_t opencheck_SSI_WS6(void)
if (down == up) { if (down == up) {
/* Same = Connect */ /* Same = Connect */
return 0; return 0;
} else {
/* Diff = Open */
return 1;
} }
/* Diff = Open */
return 1;
} }
#endif #endif
...@@ -1737,12 +1738,12 @@ static uint32_t _board_judge(void) ...@@ -1737,12 +1738,12 @@ static uint32_t _board_judge(void)
} else if (prr_product == PRR_PRODUCT_M3) { } else if (prr_product == PRR_PRODUCT_M3) {
/* RENESAS Kriek board with M3-W */ /* RENESAS Kriek board with M3-W */
brd = 1; brd = 1;
} else if ((prr_product == PRR_PRODUCT_H3) } else if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut <= PRR_PRODUCT_11)) { (prr_cut <= PRR_PRODUCT_11)) {
/* RENESAS Kriek board with PM3 */ /* RENESAS Kriek board with PM3 */
brd = 13; brd = 13;
} else if ((prr_product == PRR_PRODUCT_H3) } else if ((prr_product == PRR_PRODUCT_H3) &&
&& (prr_cut > PRR_PRODUCT_20)) { (prr_cut > PRR_PRODUCT_20)) {
/* RENESAS Kriek board with H3N */ /* RENESAS Kriek board with H3N */
brd = 15; brd = 15;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment