mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 21:24:08 +08:00
net: enetc: cache accesses to &priv->si->hw
The &priv->si->hw construct dereferences 2 pointers and makes lines longer than they need to be, in turn making the code harder to read. Replace &priv->si->hw accesses with a "hw" variable when there are 2 or more accesses within a function that dereference this. This includes loops, since &priv->si->hw is a loop invariant. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
a745c69783
commit
715bf2610f
@ -2116,13 +2116,14 @@ static void enetc_setup_rxbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)
|
||||
|
||||
static void enetc_setup_bdrs(struct enetc_ndev_priv *priv)
|
||||
{
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < priv->num_tx_rings; i++)
|
||||
enetc_setup_txbdr(&priv->si->hw, priv->tx_ring[i]);
|
||||
enetc_setup_txbdr(hw, priv->tx_ring[i]);
|
||||
|
||||
for (i = 0; i < priv->num_rx_rings; i++)
|
||||
enetc_setup_rxbdr(&priv->si->hw, priv->rx_ring[i]);
|
||||
enetc_setup_rxbdr(hw, priv->rx_ring[i]);
|
||||
}
|
||||
|
||||
static void enetc_clear_rxbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)
|
||||
@ -2155,13 +2156,14 @@ static void enetc_clear_txbdr(struct enetc_hw *hw, struct enetc_bdr *tx_ring)
|
||||
|
||||
static void enetc_clear_bdrs(struct enetc_ndev_priv *priv)
|
||||
{
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < priv->num_tx_rings; i++)
|
||||
enetc_clear_txbdr(&priv->si->hw, priv->tx_ring[i]);
|
||||
enetc_clear_txbdr(hw, priv->tx_ring[i]);
|
||||
|
||||
for (i = 0; i < priv->num_rx_rings; i++)
|
||||
enetc_clear_rxbdr(&priv->si->hw, priv->rx_ring[i]);
|
||||
enetc_clear_rxbdr(hw, priv->rx_ring[i]);
|
||||
|
||||
udelay(1);
|
||||
}
|
||||
@ -2169,13 +2171,13 @@ static void enetc_clear_bdrs(struct enetc_ndev_priv *priv)
|
||||
static int enetc_setup_irqs(struct enetc_ndev_priv *priv)
|
||||
{
|
||||
struct pci_dev *pdev = priv->si->pdev;
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
int i, j, err;
|
||||
|
||||
for (i = 0; i < priv->bdr_int_num; i++) {
|
||||
int irq = pci_irq_vector(pdev, ENETC_BDR_INT_BASE_IDX + i);
|
||||
struct enetc_int_vector *v = priv->int_vector[i];
|
||||
int entry = ENETC_BDR_INT_BASE_IDX + i;
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
|
||||
snprintf(v->name, sizeof(v->name), "%s-rxtx%d",
|
||||
priv->ndev->name, i);
|
||||
@ -2263,13 +2265,14 @@ static void enetc_setup_interrupts(struct enetc_ndev_priv *priv)
|
||||
|
||||
static void enetc_clear_interrupts(struct enetc_ndev_priv *priv)
|
||||
{
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < priv->num_tx_rings; i++)
|
||||
enetc_txbdr_wr(&priv->si->hw, i, ENETC_TBIER, 0);
|
||||
enetc_txbdr_wr(hw, i, ENETC_TBIER, 0);
|
||||
|
||||
for (i = 0; i < priv->num_rx_rings; i++)
|
||||
enetc_rxbdr_wr(&priv->si->hw, i, ENETC_RBIER, 0);
|
||||
enetc_rxbdr_wr(hw, i, ENETC_RBIER, 0);
|
||||
}
|
||||
|
||||
static int enetc_phylink_connect(struct net_device *ndev)
|
||||
@ -2436,6 +2439,7 @@ int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data)
|
||||
{
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct tc_mqprio_qopt *mqprio = type_data;
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
struct enetc_bdr *tx_ring;
|
||||
int num_stack_tx_queues;
|
||||
u8 num_tc;
|
||||
@ -2452,7 +2456,7 @@ int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data)
|
||||
/* Reset all ring priorities to 0 */
|
||||
for (i = 0; i < priv->num_tx_rings; i++) {
|
||||
tx_ring = priv->tx_ring[i];
|
||||
enetc_set_bdr_prio(&priv->si->hw, tx_ring->index, 0);
|
||||
enetc_set_bdr_prio(hw, tx_ring->index, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -2471,7 +2475,7 @@ int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data)
|
||||
*/
|
||||
for (i = 0; i < num_tc; i++) {
|
||||
tx_ring = priv->tx_ring[i];
|
||||
enetc_set_bdr_prio(&priv->si->hw, tx_ring->index, i);
|
||||
enetc_set_bdr_prio(hw, tx_ring->index, i);
|
||||
}
|
||||
|
||||
/* Reset the number of netdev queues based on the TC count */
|
||||
@ -2584,19 +2588,21 @@ static int enetc_set_rss(struct net_device *ndev, int en)
|
||||
static void enetc_enable_rxvlan(struct net_device *ndev, bool en)
|
||||
{
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < priv->num_rx_rings; i++)
|
||||
enetc_bdr_enable_rxvlan(&priv->si->hw, i, en);
|
||||
enetc_bdr_enable_rxvlan(hw, i, en);
|
||||
}
|
||||
|
||||
static void enetc_enable_txvlan(struct net_device *ndev, bool en)
|
||||
{
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < priv->num_tx_rings; i++)
|
||||
enetc_bdr_enable_txvlan(&priv->si->hw, i, en);
|
||||
enetc_bdr_enable_txvlan(hw, i, en);
|
||||
}
|
||||
|
||||
void enetc_set_features(struct net_device *ndev, netdev_features_t features)
|
||||
|
@ -467,19 +467,20 @@ int enetc_set_psfp(struct net_device *ndev, bool en);
|
||||
|
||||
static inline void enetc_get_max_cap(struct enetc_ndev_priv *priv)
|
||||
{
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
u32 reg;
|
||||
|
||||
reg = enetc_port_rd(&priv->si->hw, ENETC_PSIDCAPR);
|
||||
reg = enetc_port_rd(hw, ENETC_PSIDCAPR);
|
||||
priv->psfp_cap.max_streamid = reg & ENETC_PSIDCAPR_MSK;
|
||||
/* Port stream filter capability */
|
||||
reg = enetc_port_rd(&priv->si->hw, ENETC_PSFCAPR);
|
||||
reg = enetc_port_rd(hw, ENETC_PSFCAPR);
|
||||
priv->psfp_cap.max_psfp_filter = reg & ENETC_PSFCAPR_MSK;
|
||||
/* Port stream gate capability */
|
||||
reg = enetc_port_rd(&priv->si->hw, ENETC_PSGCAPR);
|
||||
reg = enetc_port_rd(hw, ENETC_PSGCAPR);
|
||||
priv->psfp_cap.max_psfp_gate = (reg & ENETC_PSGCAPR_SGIT_MSK);
|
||||
priv->psfp_cap.max_psfp_gatelist = (reg & ENETC_PSGCAPR_GCL_MSK) >> 16;
|
||||
/* Port flow meter capability */
|
||||
reg = enetc_port_rd(&priv->si->hw, ENETC_PFMCAPR);
|
||||
reg = enetc_port_rd(hw, ENETC_PFMCAPR);
|
||||
priv->psfp_cap.max_psfp_meter = reg & ENETC_PFMCAPR_MSK;
|
||||
}
|
||||
|
||||
|
@ -17,8 +17,9 @@ static u16 enetc_get_max_gcl_len(struct enetc_hw *hw)
|
||||
|
||||
void enetc_sched_speed_set(struct enetc_ndev_priv *priv, int speed)
|
||||
{
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
u32 old_speed = priv->speed;
|
||||
u32 pspeed;
|
||||
u32 pspeed, tmp;
|
||||
|
||||
if (speed == old_speed)
|
||||
return;
|
||||
@ -39,16 +40,15 @@ void enetc_sched_speed_set(struct enetc_ndev_priv *priv, int speed)
|
||||
}
|
||||
|
||||
priv->speed = speed;
|
||||
enetc_port_wr(&priv->si->hw, ENETC_PMR,
|
||||
(enetc_port_rd(&priv->si->hw, ENETC_PMR)
|
||||
& (~ENETC_PMR_PSPEED_MASK))
|
||||
| pspeed);
|
||||
tmp = enetc_port_rd(hw, ENETC_PMR);
|
||||
enetc_port_wr(hw, ENETC_PMR, (tmp & ~ENETC_PMR_PSPEED_MASK) | pspeed);
|
||||
}
|
||||
|
||||
static int enetc_setup_taprio(struct net_device *ndev,
|
||||
struct tc_taprio_qopt_offload *admin_conf)
|
||||
{
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
struct enetc_cbd cbd = {.cmd = 0};
|
||||
struct tgs_gcl_conf *gcl_config;
|
||||
struct tgs_gcl_data *gcl_data;
|
||||
@ -61,15 +61,13 @@ static int enetc_setup_taprio(struct net_device *ndev,
|
||||
int err;
|
||||
int i;
|
||||
|
||||
if (admin_conf->num_entries > enetc_get_max_gcl_len(&priv->si->hw))
|
||||
if (admin_conf->num_entries > enetc_get_max_gcl_len(hw))
|
||||
return -EINVAL;
|
||||
gcl_len = admin_conf->num_entries;
|
||||
|
||||
tge = enetc_rd(&priv->si->hw, ENETC_QBV_PTGCR_OFFSET);
|
||||
tge = enetc_rd(hw, ENETC_QBV_PTGCR_OFFSET);
|
||||
if (!admin_conf->enable) {
|
||||
enetc_wr(&priv->si->hw,
|
||||
ENETC_QBV_PTGCR_OFFSET,
|
||||
tge & (~ENETC_QBV_TGE));
|
||||
enetc_wr(hw, ENETC_QBV_PTGCR_OFFSET, tge & ~ENETC_QBV_TGE);
|
||||
|
||||
priv->active_offloads &= ~ENETC_F_QBV;
|
||||
|
||||
@ -117,14 +115,11 @@ static int enetc_setup_taprio(struct net_device *ndev,
|
||||
cbd.cls = BDCR_CMD_PORT_GCL;
|
||||
cbd.status_flags = 0;
|
||||
|
||||
enetc_wr(&priv->si->hw, ENETC_QBV_PTGCR_OFFSET,
|
||||
tge | ENETC_QBV_TGE);
|
||||
enetc_wr(hw, ENETC_QBV_PTGCR_OFFSET, tge | ENETC_QBV_TGE);
|
||||
|
||||
err = enetc_send_cmd(priv->si, &cbd);
|
||||
if (err)
|
||||
enetc_wr(&priv->si->hw,
|
||||
ENETC_QBV_PTGCR_OFFSET,
|
||||
tge & (~ENETC_QBV_TGE));
|
||||
enetc_wr(hw, ENETC_QBV_PTGCR_OFFSET, tge & ~ENETC_QBV_TGE);
|
||||
|
||||
enetc_cbd_free_data_mem(priv->si, data_size, tmp, &dma);
|
||||
|
||||
@ -138,6 +133,7 @@ int enetc_setup_tc_taprio(struct net_device *ndev, void *type_data)
|
||||
{
|
||||
struct tc_taprio_qopt_offload *taprio = type_data;
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
int err;
|
||||
int i;
|
||||
|
||||
@ -147,16 +143,14 @@ int enetc_setup_tc_taprio(struct net_device *ndev, void *type_data)
|
||||
return -EBUSY;
|
||||
|
||||
for (i = 0; i < priv->num_tx_rings; i++)
|
||||
enetc_set_bdr_prio(&priv->si->hw,
|
||||
priv->tx_ring[i]->index,
|
||||
enetc_set_bdr_prio(hw, priv->tx_ring[i]->index,
|
||||
taprio->enable ? i : 0);
|
||||
|
||||
err = enetc_setup_taprio(ndev, taprio);
|
||||
|
||||
if (err)
|
||||
for (i = 0; i < priv->num_tx_rings; i++)
|
||||
enetc_set_bdr_prio(&priv->si->hw,
|
||||
priv->tx_ring[i]->index,
|
||||
enetc_set_bdr_prio(hw, priv->tx_ring[i]->index,
|
||||
taprio->enable ? 0 : i);
|
||||
|
||||
return err;
|
||||
@ -178,7 +172,7 @@ int enetc_setup_tc_cbs(struct net_device *ndev, void *type_data)
|
||||
struct tc_cbs_qopt_offload *cbs = type_data;
|
||||
u32 port_transmit_rate = priv->speed;
|
||||
u8 tc_nums = netdev_get_num_tc(ndev);
|
||||
struct enetc_si *si = priv->si;
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
u32 hi_credit_bit, hi_credit_reg;
|
||||
u32 max_interference_size;
|
||||
u32 port_frame_max_size;
|
||||
@ -199,15 +193,15 @@ int enetc_setup_tc_cbs(struct net_device *ndev, void *type_data)
|
||||
* lower than this TC have been disabled.
|
||||
*/
|
||||
if (tc == prio_top &&
|
||||
enetc_get_cbs_enable(&si->hw, prio_next)) {
|
||||
enetc_get_cbs_enable(hw, prio_next)) {
|
||||
dev_err(&ndev->dev,
|
||||
"Disable TC%d before disable TC%d\n",
|
||||
prio_next, tc);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
enetc_port_wr(&si->hw, ENETC_PTCCBSR1(tc), 0);
|
||||
enetc_port_wr(&si->hw, ENETC_PTCCBSR0(tc), 0);
|
||||
enetc_port_wr(hw, ENETC_PTCCBSR1(tc), 0);
|
||||
enetc_port_wr(hw, ENETC_PTCCBSR0(tc), 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -224,13 +218,13 @@ int enetc_setup_tc_cbs(struct net_device *ndev, void *type_data)
|
||||
* higher than this TC have been enabled.
|
||||
*/
|
||||
if (tc == prio_next) {
|
||||
if (!enetc_get_cbs_enable(&si->hw, prio_top)) {
|
||||
if (!enetc_get_cbs_enable(hw, prio_top)) {
|
||||
dev_err(&ndev->dev,
|
||||
"Enable TC%d first before enable TC%d\n",
|
||||
prio_top, prio_next);
|
||||
return -EINVAL;
|
||||
}
|
||||
bw_sum += enetc_get_cbs_bw(&si->hw, prio_top);
|
||||
bw_sum += enetc_get_cbs_bw(hw, prio_top);
|
||||
}
|
||||
|
||||
if (bw_sum + bw >= 100) {
|
||||
@ -239,7 +233,7 @@ int enetc_setup_tc_cbs(struct net_device *ndev, void *type_data)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
enetc_port_rd(&si->hw, ENETC_PTCMSDUR(tc));
|
||||
enetc_port_rd(hw, ENETC_PTCMSDUR(tc));
|
||||
|
||||
/* For top prio TC, the max_interfrence_size is maxSizedFrame.
|
||||
*
|
||||
@ -259,8 +253,8 @@ int enetc_setup_tc_cbs(struct net_device *ndev, void *type_data)
|
||||
u32 m0, ma, r0, ra;
|
||||
|
||||
m0 = port_frame_max_size * 8;
|
||||
ma = enetc_port_rd(&si->hw, ENETC_PTCMSDUR(prio_top)) * 8;
|
||||
ra = enetc_get_cbs_bw(&si->hw, prio_top) *
|
||||
ma = enetc_port_rd(hw, ENETC_PTCMSDUR(prio_top)) * 8;
|
||||
ra = enetc_get_cbs_bw(hw, prio_top) *
|
||||
port_transmit_rate * 10000ULL;
|
||||
r0 = port_transmit_rate * 1000000ULL;
|
||||
max_interference_size = m0 + ma +
|
||||
@ -280,10 +274,10 @@ int enetc_setup_tc_cbs(struct net_device *ndev, void *type_data)
|
||||
hi_credit_reg = (u32)div_u64((ENETC_CLK * 100ULL) * hi_credit_bit,
|
||||
port_transmit_rate * 1000000ULL);
|
||||
|
||||
enetc_port_wr(&si->hw, ENETC_PTCCBSR1(tc), hi_credit_reg);
|
||||
enetc_port_wr(hw, ENETC_PTCCBSR1(tc), hi_credit_reg);
|
||||
|
||||
/* Set bw register and enable this traffic class */
|
||||
enetc_port_wr(&si->hw, ENETC_PTCCBSR0(tc), bw | ENETC_CBSE);
|
||||
enetc_port_wr(hw, ENETC_PTCCBSR0(tc), bw | ENETC_CBSE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -293,6 +287,7 @@ int enetc_setup_tc_txtime(struct net_device *ndev, void *type_data)
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct tc_etf_qopt_offload *qopt = type_data;
|
||||
u8 tc_nums = netdev_get_num_tc(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
int tc;
|
||||
|
||||
if (!tc_nums)
|
||||
@ -304,12 +299,11 @@ int enetc_setup_tc_txtime(struct net_device *ndev, void *type_data)
|
||||
return -EINVAL;
|
||||
|
||||
/* TSD and Qbv are mutually exclusive in hardware */
|
||||
if (enetc_rd(&priv->si->hw, ENETC_QBV_PTGCR_OFFSET) & ENETC_QBV_TGE)
|
||||
if (enetc_rd(hw, ENETC_QBV_PTGCR_OFFSET) & ENETC_QBV_TGE)
|
||||
return -EBUSY;
|
||||
|
||||
priv->tx_ring[tc]->tsd_enable = qopt->enable;
|
||||
enetc_port_wr(&priv->si->hw, ENETC_PTCTSDR(tc),
|
||||
qopt->enable ? ENETC_TSDE : 0);
|
||||
enetc_port_wr(hw, ENETC_PTCTSDR(tc), qopt->enable ? ENETC_TSDE : 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user