@@ -174,16 +174,11 @@ static void rpcif_rzg2l_timing_adjust_sdr(struct rpcif_priv *rpc)
174
174
regmap_write (rpc -> regmap , RPCIF_PHYADD , 0x80000032 );
175
175
}
176
176
177
- int rpcif_hw_init (struct device * dev , bool hyperflash )
177
+ static int rpcif_hw_init_impl (struct rpcif_priv * rpc , bool hyperflash )
178
178
{
179
- struct rpcif_priv * rpc = dev_get_drvdata (dev );
180
179
u32 dummy ;
181
180
int ret ;
182
181
183
- ret = pm_runtime_resume_and_get (dev );
184
- if (ret )
185
- return ret ;
186
-
187
182
if (rpc -> info -> type == RPCIF_RZ_G2L ) {
188
183
ret = reset_control_reset (rpc -> rstc );
189
184
if (ret )
@@ -231,12 +226,26 @@ int rpcif_hw_init(struct device *dev, bool hyperflash)
231
226
regmap_write (rpc -> regmap , RPCIF_SSLDR , RPCIF_SSLDR_SPNDL (7 ) |
232
227
RPCIF_SSLDR_SLNDL (7 ) | RPCIF_SSLDR_SCKDL (7 ));
233
228
234
- pm_runtime_put (dev );
235
-
236
229
rpc -> bus_size = hyperflash ? 2 : 1 ;
237
230
238
231
return 0 ;
239
232
}
233
+
234
+ int rpcif_hw_init (struct device * dev , bool hyperflash )
235
+ {
236
+ struct rpcif_priv * rpc = dev_get_drvdata (dev );
237
+ int ret ;
238
+
239
+ ret = pm_runtime_resume_and_get (dev );
240
+ if (ret )
241
+ return ret ;
242
+
243
+ ret = rpcif_hw_init_impl (rpc , hyperflash );
244
+
245
+ pm_runtime_put (dev );
246
+
247
+ return ret ;
248
+ }
240
249
EXPORT_SYMBOL (rpcif_hw_init );
241
250
242
251
static int wait_msg_xfer_end (struct rpcif_priv * rpc )
@@ -261,11 +270,9 @@ static u8 rpcif_bit_size(u8 buswidth)
261
270
return buswidth > 4 ? 2 : ilog2 (buswidth );
262
271
}
263
272
264
- void rpcif_prepare (struct device * dev , const struct rpcif_op * op , u64 * offs ,
265
- size_t * len )
273
+ static void rpcif_prepare_impl (struct rpcif_priv * rpc , const struct rpcif_op * op ,
274
+ u64 * offs , size_t * len )
266
275
{
267
- struct rpcif_priv * rpc = dev_get_drvdata (dev );
268
-
269
276
rpc -> smcr = 0 ;
270
277
rpc -> smadr = 0 ;
271
278
rpc -> enable = 0 ;
@@ -346,18 +353,21 @@ void rpcif_prepare(struct device *dev, const struct rpcif_op *op, u64 *offs,
346
353
rpc -> enable |= RPCIF_SMENR_SPIDB (rpcif_bit_size (op -> data .buswidth ));
347
354
}
348
355
}
349
- EXPORT_SYMBOL (rpcif_prepare );
350
356
351
- int rpcif_manual_xfer (struct device * dev )
357
+ void rpcif_prepare (struct device * dev , const struct rpcif_op * op , u64 * offs ,
358
+ size_t * len )
352
359
{
353
360
struct rpcif_priv * rpc = dev_get_drvdata (dev );
361
+
362
+ rpcif_prepare_impl (rpc , op , offs , len );
363
+ }
364
+ EXPORT_SYMBOL (rpcif_prepare );
365
+
366
+ static int rpcif_manual_xfer_impl (struct rpcif_priv * rpc )
367
+ {
354
368
u32 smenr , smcr , pos = 0 , max = rpc -> bus_size == 2 ? 8 : 4 ;
355
369
int ret = 0 ;
356
370
357
- ret = pm_runtime_resume_and_get (dev );
358
- if (ret < 0 )
359
- return ret ;
360
-
361
371
regmap_update_bits (rpc -> regmap , RPCIF_PHYCNT ,
362
372
RPCIF_PHYCNT_CAL , RPCIF_PHYCNT_CAL );
363
373
regmap_update_bits (rpc -> regmap , RPCIF_CMNCR ,
@@ -465,15 +475,29 @@ int rpcif_manual_xfer(struct device *dev)
465
475
goto err_out ;
466
476
}
467
477
468
- exit :
469
- pm_runtime_put (dev );
470
478
return ret ;
471
479
472
480
err_out :
473
481
if (reset_control_reset (rpc -> rstc ))
474
- dev_err (dev , "Failed to reset HW\n" );
475
- rpcif_hw_init (dev , rpc -> bus_size == 2 );
476
- goto exit ;
482
+ dev_err (rpc -> dev , "Failed to reset HW\n" );
483
+ rpcif_hw_init_impl (rpc , rpc -> bus_size == 2 );
484
+ return ret ;
485
+ }
486
+
487
+ int rpcif_manual_xfer (struct device * dev )
488
+ {
489
+ struct rpcif_priv * rpc = dev_get_drvdata (dev );
490
+ int ret ;
491
+
492
+ ret = pm_runtime_resume_and_get (dev );
493
+ if (ret )
494
+ return ret ;
495
+
496
+ ret = rpcif_manual_xfer_impl (rpc );
497
+
498
+ pm_runtime_put (dev );
499
+
500
+ return ret ;
477
501
}
478
502
EXPORT_SYMBOL (rpcif_manual_xfer );
479
503
@@ -519,20 +543,15 @@ static void memcpy_fromio_readw(void *to,
519
543
}
520
544
}
521
545
522
- ssize_t rpcif_dirmap_read (struct device * dev , u64 offs , size_t len , void * buf )
546
+ static size_t rpcif_dirmap_read_impl (struct rpcif_priv * rpc , u64 offs ,
547
+ size_t len , void * buf )
523
548
{
524
- struct rpcif_priv * rpc = dev_get_drvdata (dev );
525
549
loff_t from = offs & (rpc -> size - 1 );
526
550
size_t size = rpc -> size - from ;
527
- int ret ;
528
551
529
552
if (len > size )
530
553
len = size ;
531
554
532
- ret = pm_runtime_resume_and_get (dev );
533
- if (ret < 0 )
534
- return ret ;
535
-
536
555
regmap_update_bits (rpc -> regmap , RPCIF_CMNCR , RPCIF_CMNCR_MD , 0 );
537
556
regmap_write (rpc -> regmap , RPCIF_DRCR , 0 );
538
557
regmap_write (rpc -> regmap , RPCIF_DRCMR , rpc -> command );
@@ -549,9 +568,24 @@ ssize_t rpcif_dirmap_read(struct device *dev, u64 offs, size_t len, void *buf)
549
568
else
550
569
memcpy_fromio (buf , rpc -> dirmap + from , len );
551
570
571
+ return len ;
572
+ }
573
+
574
+ ssize_t rpcif_dirmap_read (struct device * dev , u64 offs , size_t len , void * buf )
575
+ {
576
+ struct rpcif_priv * rpc = dev_get_drvdata (dev );
577
+ size_t read ;
578
+ int ret ;
579
+
580
+ ret = pm_runtime_resume_and_get (dev );
581
+ if (ret )
582
+ return ret ;
583
+
584
+ read = rpcif_dirmap_read_impl (rpc , offs , len , buf );
585
+
552
586
pm_runtime_put (dev );
553
587
554
- return len ;
588
+ return read ;
555
589
}
556
590
EXPORT_SYMBOL (rpcif_dirmap_read );
557
591
0 commit comments