]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
net: enetc: cache accesses to &priv->si->hw
authorVladimir Oltean <vladimir.oltean@nxp.com>
Wed, 28 Sep 2022 09:52:02 +0000 (12:52 +0300)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 14 Dec 2022 13:00:28 +0000 (14:00 +0100)
[ Upstream commit 715bf2610f1d1adf3d4f9b7b3dd729984ec4270a ]

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>
Stable-dep-of: 290b5fe096e7 ("net: enetc: preserve TX ring priority across reconfiguration")
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 0e16bbf616cc0f21d20b1ec78d834491e59d5a0a)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
drivers/net/ethernet/freescale/enetc/enetc.c
drivers/net/ethernet/freescale/enetc/enetc.h
drivers/net/ethernet/freescale/enetc/enetc_qos.c

index 77d765809c1e74a821d168a949099121050d0215..0ced688bf9ba4c66aee99a94fccb0edb222b07e0 100644 (file)
@@ -1831,13 +1831,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)
@@ -1870,13 +1871,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);
 }
@@ -1884,13 +1886,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);
@@ -1978,13 +1980,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)
@@ -2151,6 +2154,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;
@@ -2167,7 +2171,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;
@@ -2186,7 +2190,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 */
@@ -2296,19 +2300,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)
index f304cdb854ec42203bfd593dbeb9229f7c666a68..7ec807bd982808fbf7775947749a636f597525f3 100644 (file)
@@ -423,19 +423,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;
 }
 
index 9fd9abad34f8efa28447f19e831814cf71895eee..6baf2619a51e453841356566b32159055d291933 100644 (file)
@@ -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,10 +40,8 @@ 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);
 }
 
 #define ENETC_QOS_ALIGN        64
@@ -50,6 +49,7 @@ 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;
@@ -62,15 +62,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;
 
@@ -127,14 +125,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);
 
        dma_free_coherent(&priv->si->pdev->dev, data_size + ENETC_QOS_ALIGN,
                          tmp, dma);
@@ -149,6 +144,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;
 
@@ -158,16 +154,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;
@@ -189,7 +183,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;
@@ -210,15 +204,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;
        }
@@ -235,13 +229,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) {
@@ -250,7 +244,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.
         *
@@ -270,8 +264,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 +
@@ -291,10 +285,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;
 }
@@ -304,6 +298,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)
@@ -319,12 +314,11 @@ int enetc_setup_tc_txtime(struct net_device *ndev, void *type_data)
                return -EBUSY;
 
        /* 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;
 }