5 Replies Latest reply on Apr 18, 2016 11:35 AM by clivep

    XL710 poll-mode fix in PF driver incomplete?

    clivep

      We have a polling XL710 VF driver and have found the appropriate poll-mode workaround in the DPDK. We are however not using the DPDK and are relying on the accompanying fix made to the latest Intel PF Linux drivers eg  version 1.3.49. However this fix does not work and we believe it is incomplete. The part we are referring to involves the clearing of the DIS_AUTOMASK_N flag in the GLINT_CTL register. The code in the above release (and earlier ones) is: (i40e_virtchnl_pf.c: 344)

          if ((vf->driver_caps & I40E_VIRTCHNL_VF_OFFLOAD_RX_POLLING) &&

              (vector_id == 0)) {

              reg = rd32(hw, I40E_GLINT_CTL);

              if (!(reg & I40E_GLINT_CTL_DIS_AUTOMASK_VF0_MASK)) {

                  reg |= I40E_GLINT_CTL_DIS_AUTOMASK_VF0_MASK;

                  wr32(hw, I40E_GLINT_CTL, reg);

              }

      We believe this should say:

          if ((vf->driver_caps & I40E_VIRTCHNL_VF_OFFLOAD_RX_POLLING)

             && (vector_id == 1) {

             reg = rd32(hw, I40E_GLINT_CTL);

              if (!(reg & I40E_GLINT_CTL_DIS_AUTOMASK_VF0_MASK)) {

                reg |= I40E_GLINT_CTL_DIS_AUTOMASK_VF0_MASK |

                          I40E_GLINT_CTL_DIS_AUTOMASK_N_MASK);

                 wr32(hw, I40E_GLINT_CTL, reg);

       

              }

          }

      With the above changes the fix then works.

      The addition of the I40E_GLINT_CTL_DIS_AUTOMASK_N_MASK is as per the datasheet S 8.3.3.1.4.2.

      The test for vector_id == 1 is because the default MSIX vector is 1. However there is a good argument for removing this test altogether since the vector involved depends on the VF implementation. Note that the fix in the DPDK eliminates this test.

       

      We would appreciate it if you could verify the above and make changes to the released PF driver.