net: aquantia: temperature retrieval fix
authorIgor Russkikh <Igor.Russkikh@aquantia.com>
Fri, 11 Oct 2019 13:45:19 +0000 (13:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Oct 2019 00:01:52 +0000 (17:01 -0700)
Chip temperature is a two byte word, colocated internally with cable
length data. We do all readouts from HW memory by dwords, thus
we should clear extra high bytes, otherwise temperature output
gets weird as soon as we attach a cable to the NIC.

Fixes: 8f8940118654 ("net: aquantia: add infrastructure to readout chip temperature")
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils_fw2x.c

index da726489e3c8debbe6c93fdb20d9006314c63a39..7bc51f8d6f2fcd0c0016e1cc6c3f8c04247455b7 100644 (file)
@@ -337,7 +337,7 @@ static int aq_fw2x_get_phy_temp(struct aq_hw_s *self, int *temp)
        /* Convert PHY temperature from 1/256 degree Celsius
         * to 1/1000 degree Celsius.
         */
-       *temp = temp_res  * 1000 / 256;
+       *temp = (temp_res & 0xFFFF) * 1000 / 256;
 
        return 0;
 }