@@ -173,6 +173,81 @@ static const struct atmel_qspi_mode atmel_qspi_modes[] = {
173
173
{ 4 , 4 , 4 , QSPI_IFR_WIDTH_QUAD_CMD },
174
174
};
175
175
176
+ #ifdef VERBOSE_DEBUG
177
+ static const char * atmel_qspi_reg_name (u32 offset , char * tmp , size_t sz )
178
+ {
179
+ switch (offset ) {
180
+ case QSPI_CR :
181
+ return "CR" ;
182
+ case QSPI_MR :
183
+ return "MR" ;
184
+ case QSPI_RD :
185
+ return "MR" ;
186
+ case QSPI_TD :
187
+ return "TD" ;
188
+ case QSPI_SR :
189
+ return "SR" ;
190
+ case QSPI_IER :
191
+ return "IER" ;
192
+ case QSPI_IDR :
193
+ return "IDR" ;
194
+ case QSPI_IMR :
195
+ return "IMR" ;
196
+ case QSPI_SCR :
197
+ return "SCR" ;
198
+ case QSPI_IAR :
199
+ return "IAR" ;
200
+ case QSPI_ICR :
201
+ return "ICR/WICR" ;
202
+ case QSPI_IFR :
203
+ return "IFR" ;
204
+ case QSPI_RICR :
205
+ return "RICR" ;
206
+ case QSPI_SMR :
207
+ return "SMR" ;
208
+ case QSPI_SKR :
209
+ return "SKR" ;
210
+ case QSPI_WPMR :
211
+ return "WPMR" ;
212
+ case QSPI_WPSR :
213
+ return "WPSR" ;
214
+ case QSPI_VERSION :
215
+ return "VERSION" ;
216
+ default :
217
+ snprintf (tmp , sz , "0x%02x" , offset );
218
+ break ;
219
+ }
220
+
221
+ return tmp ;
222
+ }
223
+ #endif /* VERBOSE_DEBUG */
224
+
225
+ static u32 atmel_qspi_read (struct atmel_qspi * aq , u32 offset )
226
+ {
227
+ u32 value = readl_relaxed (aq -> regs + offset );
228
+
229
+ #ifdef VERBOSE_DEBUG
230
+ char tmp [8 ];
231
+
232
+ dev_vdbg (& aq -> pdev -> dev , "read 0x%08x from %s\n" , value ,
233
+ atmel_qspi_reg_name (offset , tmp , sizeof (tmp )));
234
+ #endif /* VERBOSE_DEBUG */
235
+
236
+ return value ;
237
+ }
238
+
239
+ static void atmel_qspi_write (u32 value , struct atmel_qspi * aq , u32 offset )
240
+ {
241
+ #ifdef VERBOSE_DEBUG
242
+ char tmp [8 ];
243
+
244
+ dev_vdbg (& aq -> pdev -> dev , "write 0x%08x into %s\n" , value ,
245
+ atmel_qspi_reg_name (offset , tmp , sizeof (tmp )));
246
+ #endif /* VERBOSE_DEBUG */
247
+
248
+ writel_relaxed (value , aq -> regs + offset );
249
+ }
250
+
176
251
static inline bool atmel_qspi_is_compatible (const struct spi_mem_op * op ,
177
252
const struct atmel_qspi_mode * mode )
178
253
{
@@ -293,32 +368,32 @@ static int atmel_qspi_set_cfg(struct atmel_qspi *aq,
293
368
* Serial Memory Mode (SMM).
294
369
*/
295
370
if (aq -> mr != QSPI_MR_SMM ) {
296
- writel_relaxed (QSPI_MR_SMM , aq -> regs + QSPI_MR );
371
+ atmel_qspi_write (QSPI_MR_SMM , aq , QSPI_MR );
297
372
aq -> mr = QSPI_MR_SMM ;
298
373
}
299
374
300
375
/* Clear pending interrupts */
301
- (void )readl_relaxed (aq -> regs + QSPI_SR );
376
+ (void )atmel_qspi_read (aq , QSPI_SR );
302
377
303
378
if (aq -> caps -> has_ricr ) {
304
379
if (!op -> addr .nbytes && op -> data .dir == SPI_MEM_DATA_IN )
305
380
ifr |= QSPI_IFR_APBTFRTYP_READ ;
306
381
307
382
/* Set QSPI Instruction Frame registers */
308
- writel_relaxed (iar , aq -> regs + QSPI_IAR );
383
+ atmel_qspi_write (iar , aq , QSPI_IAR );
309
384
if (op -> data .dir == SPI_MEM_DATA_IN )
310
- writel_relaxed (icr , aq -> regs + QSPI_RICR );
385
+ atmel_qspi_write (icr , aq , QSPI_RICR );
311
386
else
312
- writel_relaxed (icr , aq -> regs + QSPI_WICR );
313
- writel_relaxed (ifr , aq -> regs + QSPI_IFR );
387
+ atmel_qspi_write (icr , aq , QSPI_WICR );
388
+ atmel_qspi_write (ifr , aq , QSPI_IFR );
314
389
} else {
315
390
if (op -> data .dir == SPI_MEM_DATA_OUT )
316
391
ifr |= QSPI_IFR_SAMA5D2_WRITE_TRSFR ;
317
392
318
393
/* Set QSPI Instruction Frame registers */
319
- writel_relaxed (iar , aq -> regs + QSPI_IAR );
320
- writel_relaxed (icr , aq -> regs + QSPI_ICR );
321
- writel_relaxed (ifr , aq -> regs + QSPI_IFR );
394
+ atmel_qspi_write (iar , aq , QSPI_IAR );
395
+ atmel_qspi_write (icr , aq , QSPI_ICR );
396
+ atmel_qspi_write (ifr , aq , QSPI_IFR );
322
397
}
323
398
324
399
return 0 ;
@@ -345,7 +420,7 @@ static int atmel_qspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
345
420
/* Skip to the final steps if there is no data */
346
421
if (op -> data .nbytes ) {
347
422
/* Dummy read of QSPI_IFR to synchronize APB and AHB accesses */
348
- (void )readl_relaxed (aq -> regs + QSPI_IFR );
423
+ (void )atmel_qspi_read (aq , QSPI_IFR );
349
424
350
425
/* Send/Receive data */
351
426
if (op -> data .dir == SPI_MEM_DATA_IN )
@@ -356,22 +431,22 @@ static int atmel_qspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
356
431
op -> data .nbytes );
357
432
358
433
/* Release the chip-select */
359
- writel_relaxed (QSPI_CR_LASTXFER , aq -> regs + QSPI_CR );
434
+ atmel_qspi_write (QSPI_CR_LASTXFER , aq , QSPI_CR );
360
435
}
361
436
362
437
/* Poll INSTRuction End status */
363
- sr = readl_relaxed (aq -> regs + QSPI_SR );
438
+ sr = atmel_qspi_read (aq , QSPI_SR );
364
439
if ((sr & QSPI_SR_CMD_COMPLETED ) == QSPI_SR_CMD_COMPLETED )
365
440
return err ;
366
441
367
442
/* Wait for INSTRuction End interrupt */
368
443
reinit_completion (& aq -> cmd_completion );
369
444
aq -> pending = sr & QSPI_SR_CMD_COMPLETED ;
370
- writel_relaxed (QSPI_SR_CMD_COMPLETED , aq -> regs + QSPI_IER );
445
+ atmel_qspi_write (QSPI_SR_CMD_COMPLETED , aq , QSPI_IER );
371
446
if (!wait_for_completion_timeout (& aq -> cmd_completion ,
372
447
msecs_to_jiffies (1000 )))
373
448
err = - ETIMEDOUT ;
374
- writel_relaxed (QSPI_SR_CMD_COMPLETED , aq -> regs + QSPI_IDR );
449
+ atmel_qspi_write (QSPI_SR_CMD_COMPLETED , aq , QSPI_IDR );
375
450
376
451
return err ;
377
452
}
@@ -410,31 +485,31 @@ static int atmel_qspi_setup(struct spi_device *spi)
410
485
scbr -- ;
411
486
412
487
aq -> scr = QSPI_SCR_SCBR (scbr );
413
- writel_relaxed (aq -> scr , aq -> regs + QSPI_SCR );
488
+ atmel_qspi_write (aq -> scr , aq , QSPI_SCR );
414
489
415
490
return 0 ;
416
491
}
417
492
418
493
static void atmel_qspi_init (struct atmel_qspi * aq )
419
494
{
420
495
/* Reset the QSPI controller */
421
- writel_relaxed (QSPI_CR_SWRST , aq -> regs + QSPI_CR );
496
+ atmel_qspi_write (QSPI_CR_SWRST , aq , QSPI_CR );
422
497
423
498
/* Set the QSPI controller by default in Serial Memory Mode */
424
- writel_relaxed (QSPI_MR_SMM , aq -> regs + QSPI_MR );
499
+ atmel_qspi_write (QSPI_MR_SMM , aq , QSPI_MR );
425
500
aq -> mr = QSPI_MR_SMM ;
426
501
427
502
/* Enable the QSPI controller */
428
- writel_relaxed (QSPI_CR_QSPIEN , aq -> regs + QSPI_CR );
503
+ atmel_qspi_write (QSPI_CR_QSPIEN , aq , QSPI_CR );
429
504
}
430
505
431
506
static irqreturn_t atmel_qspi_interrupt (int irq , void * dev_id )
432
507
{
433
508
struct atmel_qspi * aq = dev_id ;
434
509
u32 status , mask , pending ;
435
510
436
- status = readl_relaxed (aq -> regs + QSPI_SR );
437
- mask = readl_relaxed (aq -> regs + QSPI_IMR );
511
+ status = atmel_qspi_read (aq , QSPI_SR );
512
+ mask = atmel_qspi_read (aq , QSPI_IMR );
438
513
pending = status & mask ;
439
514
440
515
if (!pending )
@@ -569,7 +644,7 @@ static int atmel_qspi_remove(struct platform_device *pdev)
569
644
struct atmel_qspi * aq = spi_controller_get_devdata (ctrl );
570
645
571
646
spi_unregister_controller (ctrl );
572
- writel_relaxed (QSPI_CR_QSPIDIS , aq -> regs + QSPI_CR );
647
+ atmel_qspi_write (QSPI_CR_QSPIDIS , aq , QSPI_CR );
573
648
clk_disable_unprepare (aq -> qspick );
574
649
clk_disable_unprepare (aq -> pclk );
575
650
return 0 ;
@@ -596,7 +671,7 @@ static int __maybe_unused atmel_qspi_resume(struct device *dev)
596
671
597
672
atmel_qspi_init (aq );
598
673
599
- writel_relaxed (aq -> scr , aq -> regs + QSPI_SCR );
674
+ atmel_qspi_write (aq -> scr , aq , QSPI_SCR );
600
675
601
676
return 0 ;
602
677
}
0 commit comments