net/i40e/base: read LLDP config area with correct endianness
authorQi Zhang <qi.z.zhang@intel.com>
Tue, 25 Sep 2018 02:34:30 +0000 (10:34 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 11 Oct 2018 16:53:47 +0000 (18:53 +0200)
The NVM is in little endian so when we read from it we need to do
the correct thing for the endianness of the machine.

Cc: stable@dpdk.org
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Acked-by: Beilei Xing <beilei.xing@intel.com>
drivers/net/i40e/base/i40e_dcb.c

index 7cd444b..a26f82b 100644 (file)
@@ -1262,18 +1262,20 @@ static enum i40e_status_code _i40e_read_lldp_cfg(struct i40e_hw *hw,
 {
        u32 address, offset = (2 * word_offset);
        enum i40e_status_code ret;
+       __le16 raw_mem;
        u16 mem;
 
        ret = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
        if (ret != I40E_SUCCESS)
                return ret;
 
-       ret = i40e_aq_read_nvm(hw, 0x0, module * 2, sizeof(mem), &mem, true,
-                              NULL);
+       ret = i40e_aq_read_nvm(hw, 0x0, module * 2, sizeof(raw_mem), &raw_mem,
+                              true, NULL);
        i40e_release_nvm(hw);
        if (ret != I40E_SUCCESS)
                return ret;
 
+       mem = LE16_TO_CPU(raw_mem);
        /* Check if this pointer needs to be read in word size or 4K sector
         * units.
         */
@@ -1286,12 +1288,13 @@ static enum i40e_status_code _i40e_read_lldp_cfg(struct i40e_hw *hw,
        if (ret != I40E_SUCCESS)
                goto err_lldp_cfg;
 
-       ret = i40e_aq_read_nvm(hw, module, offset, sizeof(mem), &mem, true,
-                              NULL);
+       ret = i40e_aq_read_nvm(hw, module, offset, sizeof(raw_mem), &raw_mem,
+                              true, NULL);
        i40e_release_nvm(hw);
        if (ret != I40E_SUCCESS)
                return ret;
 
+       mem = LE16_TO_CPU(raw_mem);
        offset = mem + word_offset;
        offset *= 2;