@ -1,7 +1,7 @@
/*
* Copyright ( C ) 2016 Socionext Inc .
* Copyright ( C ) 2016 - 2017 Socionext Inc .
*
* based on commit 1f 6f eb76e7f9753f51955444e422486521f9b3a3 of Diag
* based on commit e732175d0b0dbc2a3855cb8ac791c538666b6fd4 of Diag
*
* SPDX - License - Identifier : GPL - 2.0 +
*/
@ -77,191 +77,95 @@ static const u32 ddrphy_scl_gate_timing[DRAM_CH_NR] = {
0x00000140 , 0x00000180 , 0x00000140
} ;
static const int ddrphy_op_dq_shift_val [ DRAM_BOARD_NR ] [ DRAM_CH_NR ] [ 32 ] = {
{ /* LD20 reference */
{
2 , 1 , 0 , 1 , 2 , 1 , 1 , 1 ,
2 , 1 , 1 , 2 , 1 , 1 , 1 , 1 ,
1 , 2 , 1 , 1 , 1 , 2 , 1 , 1 ,
2 , 2 , 0 , 1 , 1 , 2 , 2 , 1 ,
} ,
{
1 , 1 , 0 , 1 , 2 , 2 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 ,
0 , 1 , 1 , 1 , 2 , 1 , 2 , 1 ,
} ,
{
2 , 2 , 0 , 2 , 1 , 1 , 2 , 1 ,
1 , 1 , 0 , 1 , 1 , - 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 0 , 2 , 2 , 1 , 2 ,
} ,
static const short ddrphy_op_dq_shift_val_ld20 [ DRAM_CH_NR ] [ 32 ] = {
{
2 , 1 , 0 , 1 , 2 , 1 , 1 , 1 ,
2 , 1 , 1 , 2 , 1 , 1 , 1 , 1 ,
1 , 2 , 1 , 1 , 1 , 2 , 1 , 1 ,
2 , 2 , 0 , 1 , 1 , 2 , 2 , 1 ,
} ,
{ /* LD20 TV */
{
2 , 1 , 0 , 1 , 2 , 1 , 1 , 1 ,
2 , 1 , 1 , 2 , 1 , 1 , 1 , 1 ,
1 , 2 , 1 , 1 , 1 , 2 , 1 , 1 ,
2 , 2 , 0 , 1 , 1 , 2 , 2 , 1 ,
} ,
{
1 , 1 , 0 , 1 , 2 , 2 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 ,
0 , 1 , 1 , 1 , 2 , 1 , 2 , 1 ,
} ,
{
2 , 2 , 0 , 2 , 1 , 1 , 2 , 1 ,
1 , 1 , 0 , 1 , 1 , - 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 0 , 2 , 2 , 1 , 2 ,
} ,
{
1 , 1 , 0 , 1 , 2 , 2 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 ,
0 , 1 , 1 , 1 , 2 , 1 , 2 , 1 ,
} ,
{ /* LD20 TV C1 */
{
2 , 1 , 0 , 1 , 2 , 1 , 1 , 1 ,
2 , 1 , 1 , 2 , 1 , 1 , 1 , 1 ,
1 , 2 , 1 , 1 , 1 , 2 , 1 , 1 ,
2 , 2 , 0 , 1 , 1 , 2 , 2 , 1 ,
} ,
{
1 , 1 , 0 , 1 , 2 , 2 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 ,
0 , 1 , 1 , 1 , 2 , 1 , 2 , 1 ,
} ,
{
2 , 2 , 0 , 2 , 1 , 1 , 2 , 1 ,
1 , 1 , 0 , 1 , 1 , - 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 0 , 2 , 2 , 1 , 2 ,
} ,
{
2 , 2 , 0 , 2 , 1 , 1 , 2 , 1 ,
1 , 1 , 0 , 1 , 1 , - 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 0 , 2 , 2 , 1 , 2 ,
} ,
{ /* LD21 reference */
{
1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 1 , 1 , 0 , 2 ,
1 , 1 , 0 , 0 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 ,
} ,
{ 1 , 0 , 2 , 1 , 1 , 1 , 1 , 0 ,
1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 ,
1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 ,
1 , 1 , 1 , 1 , 0 , 1 , 0 , 0 ,
} ,
/* No CH2 */
} ;
static const short ddrphy_op_dq_shift_val_ld21 [ DRAM_CH_NR ] [ 32 ] = {
{
1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 1 , 1 , 0 , 2 ,
1 , 1 , 0 , 0 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 ,
} ,
{ /* LD21 TV */
{
1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 1 , 1 , 0 , 2 ,
1 , 1 , 0 , 0 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 ,
} ,
{ 1 , 0 , 2 , 1 , 1 , 1 , 1 , 0 ,
1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 ,
1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 ,
1 , 1 , 1 , 1 , 0 , 1 , 0 , 0 ,
} ,
/* No CH2 */
{ 1 , 0 , 2 , 1 , 1 , 1 , 1 , 0 ,
1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 ,
1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 ,
1 , 1 , 1 , 1 , 0 , 1 , 0 , 0 ,
} ,
/* No CH2 */
} ;
static const short ( * const ddrphy_op_dq_shift_val [ DRAM_BOARD_NR ] ) [ 32 ] = {
ddrphy_op_dq_shift_val_ld20 , /* LD20 reference */
ddrphy_op_dq_shift_val_ld20 , /* LD20 TV */
ddrphy_op_dq_shift_val_ld20 , /* LD20 TV C */
ddrphy_op_dq_shift_val_ld21 , /* LD21 reference */
ddrphy_op_dq_shift_val_ld21 , /* LD21 TV */
} ;
static int ddrphy_ip_dq_shift_val [ DRAM_BOARD_NR ] [ DRAM_CH_NR ] [ 32 ] = {
{ /* LD20 reference */
{
3 , 3 , 3 , 2 , 3 , 2 , 0 , 2 ,
2 , 3 , 3 , 1 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 0 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 3 , 0 , 2 , 2 ,
} ,
{
2 , 2 , 1 , 1 , - 1 , 1 , 1 , 1 ,
2 , 0 , 2 , 2 , 2 , 1 , 0 , 2 ,
2 , 1 , 2 , 1 , 0 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
} ,
{
2 , 2 , 3 , 2 , 1 , 2 , 2 , 2 ,
2 , 3 , 4 , 2 , 3 , 4 , 3 , 3 ,
2 , 2 , 1 , 2 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 1 , 2 , 2 , 1 ,
} ,
static const short ddrphy_ip_dq_shift_val_ld20 [ DRAM_CH_NR ] [ 32 ] = {
{
3 , 3 , 3 , 2 , 3 , 2 , 0 , 2 ,
2 , 3 , 3 , 1 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 0 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 3 , 0 , 2 , 2 ,
} ,
{ /* LD20 TV */
{
3 , 3 , 3 , 2 , 3 , 2 , 0 , 2 ,
2 , 3 , 3 , 1 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 0 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 3 , 0 , 2 , 2 ,
} ,
{
2 , 2 , 1 , 1 , - 1 , 1 , 1 , 1 ,
2 , 0 , 2 , 2 , 2 , 1 , 0 , 2 ,
2 , 1 , 2 , 1 , 0 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
} ,
{
2 , 2 , 3 , 2 , 1 , 2 , 2 , 2 ,
2 , 3 , 4 , 2 , 3 , 4 , 3 , 3 ,
2 , 2 , 1 , 2 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 1 , 2 , 2 , 1 ,
} ,
{
2 , 2 , 1 , 1 , - 1 , 1 , 1 , 1 ,
2 , 0 , 2 , 2 , 2 , 1 , 0 , 2 ,
2 , 1 , 2 , 1 , 0 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
} ,
{ /* LD20 TV C1 */
{
3 , 3 , 3 , 2 , 3 , 2 , 0 , 2 ,
2 , 3 , 3 , 1 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 0 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 3 , 0 , 2 , 2 ,
} ,
{
2 , 2 , 1 , 1 , - 1 , 1 , 1 , 1 ,
2 , 0 , 2 , 2 , 2 , 1 , 0 , 2 ,
2 , 1 , 2 , 1 , 0 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
} ,
{
2 , 2 , 3 , 2 , 1 , 2 , 2 , 2 ,
2 , 3 , 4 , 2 , 3 , 4 , 3 , 3 ,
2 , 2 , 1 , 2 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 1 , 2 , 2 , 1 ,
} ,
{
2 , 2 , 3 , 2 , 1 , 2 , 2 , 2 ,
2 , 3 , 4 , 2 , 3 , 4 , 3 , 3 ,
2 , 2 , 1 , 2 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 2 , 1 , 2 , 2 , 1 ,
} ,
{ /* LD21 reference */
{
2 , 2 , 2 , 2 , 1 , 2 , 2 , 2 ,
2 , 3 , 3 , 2 , 2 , 2 , 2 , 2 ,
2 , 1 , 2 , 2 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 3 , 1 , 2 , 2 , 2 ,
} ,
{
3 , 4 , 4 , 1 , 0 , 1 , 1 , 1 ,
1 , 2 , 1 , 2 , 2 , 3 , 3 , 2 ,
1 , 0 , 2 , 1 , 1 , 0 , 1 , 0 ,
0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 ,
} ,
/* No CH2 */
} ;
static const short ddrphy_ip_dq_shift_val_ld21 [ DRAM_CH_NR ] [ 32 ] = {
{
2 , 2 , 2 , 2 , 1 , 2 , 2 , 2 ,
2 , 3 , 3 , 2 , 2 , 2 , 2 , 2 ,
2 , 1 , 2 , 2 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 3 , 1 , 2 , 2 , 2 ,
} ,
{ /* LD21 TV */
{
2 , 2 , 2 , 2 , 1 , 2 , 2 , 2 ,
2 , 3 , 3 , 2 , 2 , 2 , 2 , 2 ,
2 , 1 , 2 , 2 , 1 , 1 , 1 , 1 ,
2 , 2 , 2 , 3 , 1 , 2 , 2 , 2 ,
} ,
{
3 , 4 , 4 , 1 , 0 , 1 , 1 , 1 ,
1 , 2 , 1 , 2 , 2 , 3 , 3 , 2 ,
1 , 0 , 2 , 1 , 1 , 0 , 1 , 0 ,
0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 ,
} ,
/* No CH2 */
{
3 , 4 , 4 , 1 , 0 , 1 , 1 , 1 ,
1 , 2 , 1 , 2 , 2 , 3 , 3 , 2 ,
1 , 0 , 2 , 1 , 1 , 0 , 1 , 0 ,
0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 ,
} ,
/* No CH2 */
} ;
static const short ( * const ddrphy_ip_dq_shift_val [ DRAM_BOARD_NR ] ) [ 32 ] = {
ddrphy_ip_dq_shift_val_ld20 , /* LD20 reference */
ddrphy_ip_dq_shift_val_ld20 , /* LD20 TV */
ddrphy_ip_dq_shift_val_ld20 , /* LD20 TV C */
ddrphy_ip_dq_shift_val_ld21 , /* LD21 reference */
ddrphy_ip_dq_shift_val_ld21 , /* LD21 TV */
} ;
/* DDR PHY */
static void ddrphy_select_lane ( void __iomem * phy_base , unsigned int lane ,
unsigned int bit )
{
@ -380,7 +284,7 @@ static void ddrphy_init_tail(void __iomem *phy_base, enum dram_board board,
}
static void ddrphy_shift_one_dq ( void __iomem * phy_base , unsigned int reg ,
u32 mask , u32 incr , in t shift_val )
u32 mask , u32 incr , shor t shift_val )
{
u32 tmp ;
int val ;
@ -403,7 +307,7 @@ static void ddrphy_shift_one_dq(void __iomem *phy_base, unsigned int reg,
static void ddrphy_shift_dq ( void __iomem * phy_base , unsigned int reg ,
u32 mask , u32 incr , u32 override ,
const in t * shift_val_array )
const shor t * shift_val_array )
{
u32 tmp ;
int dx , bit ;