@@ -35,13 +35,17 @@ static u32 orig_ddr_err_disable;
35
35
static u32 orig_ddr_err_sbe ;
36
36
static bool little_endian ;
37
37
38
- static inline u32 ddr_in32 (void __iomem * addr )
38
+ static inline u32 ddr_in32 (struct fsl_mc_pdata * pdata , unsigned int off )
39
39
{
40
+ void __iomem * addr = pdata -> mc_vbase + off ;
41
+
40
42
return little_endian ? ioread32 (addr ) : ioread32be (addr );
41
43
}
42
44
43
- static inline void ddr_out32 (void __iomem * addr , u32 value )
45
+ static inline void ddr_out32 (struct fsl_mc_pdata * pdata , unsigned int off , u32 value )
44
46
{
47
+ void __iomem * addr = pdata -> mc_vbase + off ;
48
+
45
49
if (little_endian )
46
50
iowrite32 (value , addr );
47
51
else
@@ -60,7 +64,7 @@ static ssize_t fsl_mc_inject_data_hi_show(struct device *dev,
60
64
struct mem_ctl_info * mci = to_mci (dev );
61
65
struct fsl_mc_pdata * pdata = mci -> pvt_info ;
62
66
return sprintf (data , "0x%08x" ,
63
- ddr_in32 (pdata -> mc_vbase + FSL_MC_DATA_ERR_INJECT_HI ));
67
+ ddr_in32 (pdata , FSL_MC_DATA_ERR_INJECT_HI ));
64
68
}
65
69
66
70
static ssize_t fsl_mc_inject_data_lo_show (struct device * dev ,
@@ -70,7 +74,7 @@ static ssize_t fsl_mc_inject_data_lo_show(struct device *dev,
70
74
struct mem_ctl_info * mci = to_mci (dev );
71
75
struct fsl_mc_pdata * pdata = mci -> pvt_info ;
72
76
return sprintf (data , "0x%08x" ,
73
- ddr_in32 (pdata -> mc_vbase + FSL_MC_DATA_ERR_INJECT_LO ));
77
+ ddr_in32 (pdata , FSL_MC_DATA_ERR_INJECT_LO ));
74
78
}
75
79
76
80
static ssize_t fsl_mc_inject_ctrl_show (struct device * dev ,
@@ -80,7 +84,7 @@ static ssize_t fsl_mc_inject_ctrl_show(struct device *dev,
80
84
struct mem_ctl_info * mci = to_mci (dev );
81
85
struct fsl_mc_pdata * pdata = mci -> pvt_info ;
82
86
return sprintf (data , "0x%08x" ,
83
- ddr_in32 (pdata -> mc_vbase + FSL_MC_ECC_ERR_INJECT ));
87
+ ddr_in32 (pdata , FSL_MC_ECC_ERR_INJECT ));
84
88
}
85
89
86
90
static ssize_t fsl_mc_inject_data_hi_store (struct device * dev ,
@@ -97,7 +101,7 @@ static ssize_t fsl_mc_inject_data_hi_store(struct device *dev,
97
101
if (rc )
98
102
return rc ;
99
103
100
- ddr_out32 (pdata -> mc_vbase + FSL_MC_DATA_ERR_INJECT_HI , val );
104
+ ddr_out32 (pdata , FSL_MC_DATA_ERR_INJECT_HI , val );
101
105
return count ;
102
106
}
103
107
return 0 ;
@@ -117,7 +121,7 @@ static ssize_t fsl_mc_inject_data_lo_store(struct device *dev,
117
121
if (rc )
118
122
return rc ;
119
123
120
- ddr_out32 (pdata -> mc_vbase + FSL_MC_DATA_ERR_INJECT_LO , val );
124
+ ddr_out32 (pdata , FSL_MC_DATA_ERR_INJECT_LO , val );
121
125
return count ;
122
126
}
123
127
return 0 ;
@@ -137,7 +141,7 @@ static ssize_t fsl_mc_inject_ctrl_store(struct device *dev,
137
141
if (rc )
138
142
return rc ;
139
143
140
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ECC_ERR_INJECT , val );
144
+ ddr_out32 (pdata , FSL_MC_ECC_ERR_INJECT , val );
141
145
return count ;
142
146
}
143
147
return 0 ;
@@ -286,7 +290,7 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
286
290
int bad_data_bit ;
287
291
int bad_ecc_bit ;
288
292
289
- err_detect = ddr_in32 (pdata -> mc_vbase + FSL_MC_ERR_DETECT );
293
+ err_detect = ddr_in32 (pdata , FSL_MC_ERR_DETECT );
290
294
if (!err_detect )
291
295
return ;
292
296
@@ -295,23 +299,23 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
295
299
296
300
/* no more processing if not ECC bit errors */
297
301
if (!(err_detect & (DDR_EDE_SBE | DDR_EDE_MBE ))) {
298
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_DETECT , err_detect );
302
+ ddr_out32 (pdata , FSL_MC_ERR_DETECT , err_detect );
299
303
return ;
300
304
}
301
305
302
- syndrome = ddr_in32 (pdata -> mc_vbase + FSL_MC_CAPTURE_ECC );
306
+ syndrome = ddr_in32 (pdata , FSL_MC_CAPTURE_ECC );
303
307
304
308
/* Mask off appropriate bits of syndrome based on bus width */
305
- bus_width = (ddr_in32 (pdata -> mc_vbase + FSL_MC_DDR_SDRAM_CFG ) &
309
+ bus_width = (ddr_in32 (pdata , FSL_MC_DDR_SDRAM_CFG ) &
306
310
DSC_DBW_MASK ) ? 32 : 64 ;
307
311
if (bus_width == 64 )
308
312
syndrome &= 0xff ;
309
313
else
310
314
syndrome &= 0xffff ;
311
315
312
316
err_addr = make64 (
313
- ddr_in32 (pdata -> mc_vbase + FSL_MC_CAPTURE_EXT_ADDRESS ),
314
- ddr_in32 (pdata -> mc_vbase + FSL_MC_CAPTURE_ADDRESS ));
317
+ ddr_in32 (pdata , FSL_MC_CAPTURE_EXT_ADDRESS ),
318
+ ddr_in32 (pdata , FSL_MC_CAPTURE_ADDRESS ));
315
319
pfn = err_addr >> PAGE_SHIFT ;
316
320
317
321
for (row_index = 0 ; row_index < mci -> nr_csrows ; row_index ++ ) {
@@ -320,8 +324,8 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
320
324
break ;
321
325
}
322
326
323
- cap_high = ddr_in32 (pdata -> mc_vbase + FSL_MC_CAPTURE_DATA_HI );
324
- cap_low = ddr_in32 (pdata -> mc_vbase + FSL_MC_CAPTURE_DATA_LO );
327
+ cap_high = ddr_in32 (pdata , FSL_MC_CAPTURE_DATA_HI );
328
+ cap_low = ddr_in32 (pdata , FSL_MC_CAPTURE_DATA_LO );
325
329
326
330
/*
327
331
* Analyze single-bit errors on 64-bit wide buses
@@ -367,7 +371,7 @@ static void fsl_mc_check(struct mem_ctl_info *mci)
367
371
row_index , 0 , -1 ,
368
372
mci -> ctl_name , "" );
369
373
370
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_DETECT , err_detect );
374
+ ddr_out32 (pdata , FSL_MC_ERR_DETECT , err_detect );
371
375
}
372
376
373
377
static irqreturn_t fsl_mc_isr (int irq , void * dev_id )
@@ -376,7 +380,7 @@ static irqreturn_t fsl_mc_isr(int irq, void *dev_id)
376
380
struct fsl_mc_pdata * pdata = mci -> pvt_info ;
377
381
u32 err_detect ;
378
382
379
- err_detect = ddr_in32 (pdata -> mc_vbase + FSL_MC_ERR_DETECT );
383
+ err_detect = ddr_in32 (pdata , FSL_MC_ERR_DETECT );
380
384
if (!err_detect )
381
385
return IRQ_NONE ;
382
386
@@ -396,7 +400,7 @@ static void fsl_ddr_init_csrows(struct mem_ctl_info *mci)
396
400
u32 cs_bnds ;
397
401
int index ;
398
402
399
- sdram_ctl = ddr_in32 (pdata -> mc_vbase + FSL_MC_DDR_SDRAM_CFG );
403
+ sdram_ctl = ddr_in32 (pdata , FSL_MC_DDR_SDRAM_CFG );
400
404
401
405
sdtype = sdram_ctl & DSC_SDTYPE_MASK ;
402
406
if (sdram_ctl & DSC_RD_EN ) {
@@ -444,7 +448,7 @@ static void fsl_ddr_init_csrows(struct mem_ctl_info *mci)
444
448
csrow = mci -> csrows [index ];
445
449
dimm = csrow -> channels [0 ]-> dimm ;
446
450
447
- cs_bnds = ddr_in32 (pdata -> mc_vbase + FSL_MC_CS_BNDS_0 +
451
+ cs_bnds = ddr_in32 (pdata , FSL_MC_CS_BNDS_0 +
448
452
(index * FSL_MC_CS_BNDS_OFS ));
449
453
450
454
start = (cs_bnds & 0xffff0000 ) >> 16 ;
@@ -531,7 +535,7 @@ int fsl_mc_err_probe(struct platform_device *op)
531
535
goto err ;
532
536
}
533
537
534
- sdram_ctl = ddr_in32 (pdata -> mc_vbase + FSL_MC_DDR_SDRAM_CFG );
538
+ sdram_ctl = ddr_in32 (pdata , FSL_MC_DDR_SDRAM_CFG );
535
539
if (!(sdram_ctl & DSC_ECC_EN )) {
536
540
/* no ECC */
537
541
pr_warn ("%s: No ECC DIMMs discovered\n" , __func__ );
@@ -558,11 +562,11 @@ int fsl_mc_err_probe(struct platform_device *op)
558
562
fsl_ddr_init_csrows (mci );
559
563
560
564
/* store the original error disable bits */
561
- orig_ddr_err_disable = ddr_in32 (pdata -> mc_vbase + FSL_MC_ERR_DISABLE );
562
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_DISABLE , 0 );
565
+ orig_ddr_err_disable = ddr_in32 (pdata , FSL_MC_ERR_DISABLE );
566
+ ddr_out32 (pdata , FSL_MC_ERR_DISABLE , 0 );
563
567
564
568
/* clear all error bits */
565
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_DETECT , ~0 );
569
+ ddr_out32 (pdata , FSL_MC_ERR_DETECT , ~0 );
566
570
567
571
res = edac_mc_add_mc_with_groups (mci , fsl_ddr_dev_groups );
568
572
if (res ) {
@@ -571,15 +575,15 @@ int fsl_mc_err_probe(struct platform_device *op)
571
575
}
572
576
573
577
if (edac_op_state == EDAC_OPSTATE_INT ) {
574
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_INT_EN ,
578
+ ddr_out32 (pdata , FSL_MC_ERR_INT_EN ,
575
579
DDR_EIE_MBEE | DDR_EIE_SBEE );
576
580
577
581
/* store the original error management threshold */
578
- orig_ddr_err_sbe = ddr_in32 (pdata -> mc_vbase +
582
+ orig_ddr_err_sbe = ddr_in32 (pdata ,
579
583
FSL_MC_ERR_SBE ) & 0xff0000 ;
580
584
581
585
/* set threshold to 1 error per interrupt */
582
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_SBE , 0x10000 );
586
+ ddr_out32 (pdata , FSL_MC_ERR_SBE , 0x10000 );
583
587
584
588
/* register interrupts */
585
589
pdata -> irq = platform_get_irq (op , 0 );
@@ -620,12 +624,12 @@ void fsl_mc_err_remove(struct platform_device *op)
620
624
edac_dbg (0 , "\n" );
621
625
622
626
if (edac_op_state == EDAC_OPSTATE_INT ) {
623
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_INT_EN , 0 );
627
+ ddr_out32 (pdata , FSL_MC_ERR_INT_EN , 0 );
624
628
}
625
629
626
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_DISABLE ,
630
+ ddr_out32 (pdata , FSL_MC_ERR_DISABLE ,
627
631
orig_ddr_err_disable );
628
- ddr_out32 (pdata -> mc_vbase + FSL_MC_ERR_SBE , orig_ddr_err_sbe );
632
+ ddr_out32 (pdata , FSL_MC_ERR_SBE , orig_ddr_err_sbe );
629
633
630
634
edac_mc_del_mc (& op -> dev );
631
635
edac_mc_free (mci );
0 commit comments