]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
nfp: read ME frequency from vNIC ctrl memory
authorJakub Kicinski <jakub.kicinski@netronome.com>
Thu, 18 Jan 2018 02:51:02 +0000 (18:51 -0800)
committerThadeu Lima de Souza Cascardo <cascardo@canonical.com>
Mon, 19 Mar 2018 12:35:09 +0000 (09:35 -0300)
BugLink: http://bugs.launchpad.net/bugs/1752818
PCIe island clock frequency is used when converting coalescing
parameters from usecs to NFP timestamps.  Most chips don't run
at 1200MHz, allow FW to provide us with the real frequency.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit ce991ab6662a1d11923ba17d482a77686f2a4b74)
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
drivers/net/ethernet/netronome/nfp/nfp_net_common.c
drivers/net/ethernet/netronome/nfp/nfp_net_ctrl.c
drivers/net/ethernet/netronome/nfp/nfp_net_ctrl.h
drivers/net/ethernet/netronome/nfp/nfp_net_main.c
drivers/net/ethernet/netronome/nfp/nfp_netvf_main.c

index 2926c0bd4495a4e464b5719ac6a067828796dc0c..16d91b1915c0fd4b32f3dd386e8dd51240db9724 100644 (file)
@@ -2441,7 +2441,7 @@ void nfp_net_coalesce_write_cfg(struct nfp_net *nn)
         * ME timestamp ticks.  There are 16 ME clock cycles for each timestamp
         * count.
         */
-       factor = nn->me_freq_mhz / 16;
+       factor = nn->tlv_caps.me_freq_mhz / 16;
 
        /* copy RX interrupt coalesce parameters */
        value = (nn->rx_coalesce_max_frames << 16) |
index ff155242a665ad71775f28500419542b5cdb3669..72da1b35241832246a937d3996a69908a42eeb3c 100644 (file)
@@ -42,6 +42,7 @@
 static void nfp_net_tlv_caps_reset(struct nfp_net_tlv_caps *caps)
 {
        memset(caps, 0, sizeof(*caps));
+       caps->me_freq_mhz = 1200;
 }
 
 int nfp_net_tlv_caps_parse(struct device *dev, u8 __iomem *ctrl_mem,
@@ -91,6 +92,16 @@ int nfp_net_tlv_caps_parse(struct device *dev, u8 __iomem *ctrl_mem,
                        dev_err(dev, "END TLV should be empty, has len:%d\n",
                                length);
                        return -EINVAL;
+               case NFP_NET_CFG_TLV_TYPE_ME_FREQ:
+                       if (length != 4) {
+                               dev_err(dev,
+                                       "ME FREQ TLV should be 4B, is %dB\n",
+                                       length);
+                               return -EINVAL;
+                       }
+
+                       caps->me_freq_mhz = readl(data);
+                       break;
                default:
                        if (!FIELD_GET(NFP_NET_CFG_TLV_HEADER_REQUIRED, hdr))
                                break;
index 27bb07645622b9e86cc1f1dc026dca8958328911..11251f5e5cdcf69437c211cca1d2b2daca8c4e6b 100644 (file)
  * %NFP_NET_CFG_TLV_TYPE_END:
  * Empty, end of TLV list.  Must be the last TLV.  Drivers will stop processing
  * further TLVs when encountered.
+ *
+ * %NFP_NET_CFG_TLV_TYPE_ME_FREQ:
+ * Single word, ME frequency in MHz as used in calculation for
+ * %NFP_NET_CFG_RXR_IRQ_MOD and %NFP_NET_CFG_TXR_IRQ_MOD.
  */
 #define NFP_NET_CFG_TLV_TYPE_UNKNOWN           0
 #define NFP_NET_CFG_TLV_TYPE_RESERVED          1
 #define NFP_NET_CFG_TLV_TYPE_END               2
+#define NFP_NET_CFG_TLV_TYPE_ME_FREQ           3
 
 struct device;
 
 /**
  * struct nfp_net_tlv_caps - parsed control BAR TLV capabilities
+ * @me_freq_mhz:       ME clock_freq (MHz)
  */
 struct nfp_net_tlv_caps {
+       u32 me_freq_mhz;
 };
 
 int nfp_net_tlv_caps_parse(struct device *dev, u8 __iomem *ctrl_mem,
index c505014121c498e506d5817bf37243a99d1e37ce..d7b6d2c4538a5da96dfa801c86d4922c76eda1b8 100644 (file)
@@ -208,12 +208,6 @@ nfp_net_pf_init_vnic(struct nfp_pf *pf, struct nfp_net *nn, unsigned int id)
 {
        int err;
 
-       /* Get ME clock frequency from ctrl BAR
-        * XXX for now frequency is hardcoded until we figure out how
-        * to get the value from nfp-hwinfo into ctrl bar
-        */
-       nn->me_freq_mhz = 1200;
-
        err = nfp_net_init(nn);
        if (err)
                return err;
index c879626e035b445568b669af78ef105bd9346d0f..b802a1d554493060abec27f650692d8e64d9848c 100644 (file)
@@ -277,12 +277,6 @@ static int nfp_netvf_pci_probe(struct pci_dev *pdev,
        }
        nfp_net_irqs_assign(nn, vf->irq_entries, num_irqs);
 
-       /* Get ME clock frequency from ctrl BAR
-        * XXX for now frequency is hardcoded until we figure out how
-        * to get the value from nfp-hwinfo into ctrl bar
-        */
-       nn->me_freq_mhz = 1200;
-
        err = nfp_net_init(nn);
        if (err)
                goto err_irqs_disable;