From: Pavel Belous Date: Tue, 12 Mar 2019 15:25:01 +0000 (+0000) Subject: net/atlantic: fix EEPROM get for small and uneven lengths X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=d940a707858981efc376ff9a8552270437fc7272;p=dpdk.git net/atlantic: fix EEPROM get for small and uneven lengths Fixes: ce4e8d418097 ("net/atlantic: implement EEPROM get/set") Cc: stable@dpdk.org Signed-off-by: Igor Russkikh Signed-off-by: Pavel Belous --- diff --git a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c index 1d91901554..f215ceb704 100644 --- a/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c +++ b/drivers/net/atlantic/hw_atl/hw_atl_utils_fw2x.c @@ -534,13 +534,33 @@ static int aq_fw2x_get_eeprom(struct aq_hw_s *self, int dev_addr, return err; if (result == 0) { - err = hw_atl_utils_fw_downld_dwords(self, + u32 num_dwords = len / sizeof(u32); + u32 bytes_remains = len % sizeof(u32); + + if (num_dwords) { + err = hw_atl_utils_fw_downld_dwords(self, self->rpc_addr + sizeof(u32) * 2, data, - RTE_ALIGN(len, sizeof(u32))); + num_dwords); - if (err < 0) - return err; + if (err < 0) + return err; + } + + if (bytes_remains) { + u32 val = 0; + + err = hw_atl_utils_fw_downld_dwords(self, + self->rpc_addr + sizeof(u32) * 2 + num_dwords, + &val, + sizeof(u32)); + + if (err < 0) + return err; + + rte_memcpy((u8 *)data + len - bytes_remains, + &val, bytes_remains); + } } return 0;