@@ -1359,6 +1359,10 @@ static u32 mvpp2_read(struct mvpp2 *priv, u32 offset)
1359
1359
return readl (priv -> swth_base [0 ] + offset );
1360
1360
}
1361
1361
1362
+ static u32 mvpp2_read_relaxed (struct mvpp2 * priv , u32 offset )
1363
+ {
1364
+ return readl_relaxed (priv -> swth_base [0 ] + offset );
1365
+ }
1362
1366
/* These accessors should be used to access:
1363
1367
*
1364
1368
* - per-CPU registers, where each CPU has its own copy of the
@@ -1407,6 +1411,18 @@ static u32 mvpp2_percpu_read(struct mvpp2 *priv, int cpu,
1407
1411
return readl (priv -> swth_base [cpu ] + offset );
1408
1412
}
1409
1413
1414
+ static void mvpp2_percpu_write_relaxed (struct mvpp2 * priv , int cpu ,
1415
+ u32 offset , u32 data )
1416
+ {
1417
+ writel_relaxed (data , priv -> swth_base [cpu ] + offset );
1418
+ }
1419
+
1420
+ static u32 mvpp2_percpu_read_relaxed (struct mvpp2 * priv , int cpu ,
1421
+ u32 offset )
1422
+ {
1423
+ return readl_relaxed (priv -> swth_base [cpu ] + offset );
1424
+ }
1425
+
1410
1426
static dma_addr_t mvpp2_txdesc_dma_addr_get (struct mvpp2_port * port ,
1411
1427
struct mvpp2_tx_desc * tx_desc )
1412
1428
{
@@ -4442,19 +4458,19 @@ static inline void mvpp2_bm_pool_put(struct mvpp2_port *port, int pool,
4442
4458
<< MVPP22_BM_ADDR_HIGH_VIRT_RLS_SHIFT ) &
4443
4459
MVPP22_BM_ADDR_HIGH_VIRT_RLS_MASK ;
4444
4460
4445
- mvpp2_percpu_write (port -> priv , cpu ,
4446
- MVPP22_BM_ADDR_HIGH_RLS_REG , val );
4461
+ mvpp2_percpu_write_relaxed (port -> priv , cpu ,
4462
+ MVPP22_BM_ADDR_HIGH_RLS_REG , val );
4447
4463
}
4448
4464
4449
4465
/* MVPP2_BM_VIRT_RLS_REG is not interpreted by HW, and simply
4450
4466
* returned in the "cookie" field of the RX
4451
4467
* descriptor. Instead of storing the virtual address, we
4452
4468
* store the physical address
4453
4469
*/
4454
- mvpp2_percpu_write (port -> priv , cpu ,
4455
- MVPP2_BM_VIRT_RLS_REG , buf_phys_addr );
4456
- mvpp2_percpu_write (port -> priv , cpu ,
4457
- MVPP2_BM_PHY_RLS_REG (pool ), buf_dma_addr );
4470
+ mvpp2_percpu_write_relaxed (port -> priv , cpu ,
4471
+ MVPP2_BM_VIRT_RLS_REG , buf_phys_addr );
4472
+ mvpp2_percpu_write_relaxed (port -> priv , cpu ,
4473
+ MVPP2_BM_PHY_RLS_REG (pool ), buf_dma_addr );
4458
4474
4459
4475
put_cpu ();
4460
4476
}
@@ -5546,7 +5562,8 @@ static int mvpp2_aggr_desc_num_check(struct mvpp2 *priv,
5546
5562
if ((aggr_txq -> count + num ) > MVPP2_AGGR_TXQ_SIZE ) {
5547
5563
/* Update number of occupied aggregated Tx descriptors */
5548
5564
int cpu = smp_processor_id ();
5549
- u32 val = mvpp2_read (priv , MVPP2_AGGR_TXQ_STATUS_REG (cpu ));
5565
+ u32 val = mvpp2_read_relaxed (priv ,
5566
+ MVPP2_AGGR_TXQ_STATUS_REG (cpu ));
5550
5567
5551
5568
aggr_txq -> count = val & MVPP2_AGGR_TXQ_PENDING_MASK ;
5552
5569
}
@@ -5570,9 +5587,9 @@ static int mvpp2_txq_alloc_reserved_desc(struct mvpp2 *priv,
5570
5587
int cpu = smp_processor_id ();
5571
5588
5572
5589
val = (txq -> id << MVPP2_TXQ_RSVD_REQ_Q_OFFSET ) | num ;
5573
- mvpp2_percpu_write (priv , cpu , MVPP2_TXQ_RSVD_REQ_REG , val );
5590
+ mvpp2_percpu_write_relaxed (priv , cpu , MVPP2_TXQ_RSVD_REQ_REG , val );
5574
5591
5575
- val = mvpp2_percpu_read (priv , cpu , MVPP2_TXQ_RSVD_RSLT_REG );
5592
+ val = mvpp2_percpu_read_relaxed (priv , cpu , MVPP2_TXQ_RSVD_RSLT_REG );
5576
5593
5577
5594
return val & MVPP2_TXQ_RSVD_RSLT_MASK ;
5578
5595
}
@@ -5677,8 +5694,8 @@ static inline int mvpp2_txq_sent_desc_proc(struct mvpp2_port *port,
5677
5694
u32 val ;
5678
5695
5679
5696
/* Reading status reg resets transmitted descriptor counter */
5680
- val = mvpp2_percpu_read (port -> priv , smp_processor_id (),
5681
- MVPP2_TXQ_SENT_REG (txq -> id ));
5697
+ val = mvpp2_percpu_read_relaxed (port -> priv , smp_processor_id (),
5698
+ MVPP2_TXQ_SENT_REG (txq -> id ));
5682
5699
5683
5700
return (val & MVPP2_TRANSMITTED_COUNT_MASK ) >>
5684
5701
MVPP2_TRANSMITTED_COUNT_OFFSET ;
@@ -7044,8 +7061,8 @@ static int mvpp2_poll(struct napi_struct *napi, int budget)
7044
7061
*
7045
7062
* Each CPU has its own Rx/Tx cause register
7046
7063
*/
7047
- cause_rx_tx = mvpp2_percpu_read (port -> priv , qv -> sw_thread_id ,
7048
- MVPP2_ISR_RX_TX_CAUSE_REG (port -> id ));
7064
+ cause_rx_tx = mvpp2_percpu_read_relaxed (port -> priv , qv -> sw_thread_id ,
7065
+ MVPP2_ISR_RX_TX_CAUSE_REG (port -> id ));
7049
7066
7050
7067
cause_misc = cause_rx_tx & MVPP2_CAUSE_MISC_SUM_MASK ;
7051
7068
if (cause_misc ) {
0 commit comments