diff options
author | Huazhong Tan <tanhuazhong@huawei.com> | 2018-01-17 21:37:34 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-01-22 15:36:44 -0500 |
commit | 5e89cfac2e1e74df075047ca5162a4df1aa11f63 (patch) | |
tree | 4a5ed21f57d0caa836ba5e144c6dd851cbfca2d3 | |
parent | 3f1dcc6a56b080b76af2277b978fdd3ae71b12ce (diff) |
net: hns: Fix for variable may be used uninitialized warnings
When !CONFIG_REGMAP hns throws compiler warnings since
dsaf_read_syscon ignores the return result from regmap_read,
which allows val to be uninitialized.
Fixes: 86897c960b49 ("net: hns: add syscon operation for dsaf")
Reported-by: Jason Gunthorpe <jgg@ziepe.ca>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 52 | ||||
-rw-r--r-- | drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h | 7 |
2 files changed, 38 insertions, 21 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c index ca247c2cc238..acf29633ec79 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | |||
@@ -44,12 +44,17 @@ static void dsaf_write_sub(struct dsaf_device *dsaf_dev, u32 reg, u32 val) | |||
44 | 44 | ||
45 | static u32 dsaf_read_sub(struct dsaf_device *dsaf_dev, u32 reg) | 45 | static u32 dsaf_read_sub(struct dsaf_device *dsaf_dev, u32 reg) |
46 | { | 46 | { |
47 | u32 ret; | 47 | u32 ret = 0; |
48 | 48 | int err; | |
49 | if (dsaf_dev->sub_ctrl) | 49 | |
50 | ret = dsaf_read_syscon(dsaf_dev->sub_ctrl, reg); | 50 | if (dsaf_dev->sub_ctrl) { |
51 | else | 51 | err = dsaf_read_syscon(dsaf_dev->sub_ctrl, reg, &ret); |
52 | if (err) | ||
53 | dev_err(dsaf_dev->dev, "dsaf_read_syscon error %d!\n", | ||
54 | err); | ||
55 | } else { | ||
52 | ret = dsaf_read_reg(dsaf_dev->sc_base, reg); | 56 | ret = dsaf_read_reg(dsaf_dev->sc_base, reg); |
57 | } | ||
53 | 58 | ||
54 | return ret; | 59 | return ret; |
55 | } | 60 | } |
@@ -188,18 +193,23 @@ static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb) | |||
188 | static int cpld_set_led_id(struct hns_mac_cb *mac_cb, | 193 | static int cpld_set_led_id(struct hns_mac_cb *mac_cb, |
189 | enum hnae_led_state status) | 194 | enum hnae_led_state status) |
190 | { | 195 | { |
196 | u32 val = 0; | ||
197 | int ret; | ||
198 | |||
191 | if (!mac_cb->cpld_ctrl) | 199 | if (!mac_cb->cpld_ctrl) |
192 | return 0; | 200 | return 0; |
193 | 201 | ||
194 | switch (status) { | 202 | switch (status) { |
195 | case HNAE_LED_ACTIVE: | 203 | case HNAE_LED_ACTIVE: |
196 | mac_cb->cpld_led_value = | 204 | ret = dsaf_read_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg, |
197 | dsaf_read_syscon(mac_cb->cpld_ctrl, | 205 | &val); |
198 | mac_cb->cpld_ctrl_reg); | 206 | if (ret) |
199 | dsaf_set_bit(mac_cb->cpld_led_value, DSAF_LED_ANCHOR_B, | 207 | return ret; |
200 | CPLD_LED_ON_VALUE); | 208 | |
209 | dsaf_set_bit(val, DSAF_LED_ANCHOR_B, CPLD_LED_ON_VALUE); | ||
201 | dsaf_write_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg, | 210 | dsaf_write_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg, |
202 | mac_cb->cpld_led_value); | 211 | val); |
212 | mac_cb->cpld_led_value = val; | ||
203 | break; | 213 | break; |
204 | case HNAE_LED_INACTIVE: | 214 | case HNAE_LED_INACTIVE: |
205 | dsaf_set_bit(mac_cb->cpld_led_value, DSAF_LED_ANCHOR_B, | 215 | dsaf_set_bit(mac_cb->cpld_led_value, DSAF_LED_ANCHOR_B, |
@@ -560,12 +570,19 @@ static phy_interface_t hns_mac_get_phy_if_acpi(struct hns_mac_cb *mac_cb) | |||
560 | 570 | ||
561 | int hns_mac_get_sfp_prsnt(struct hns_mac_cb *mac_cb, int *sfp_prsnt) | 571 | int hns_mac_get_sfp_prsnt(struct hns_mac_cb *mac_cb, int *sfp_prsnt) |
562 | { | 572 | { |
573 | u32 val = 0; | ||
574 | int ret; | ||
575 | |||
563 | if (!mac_cb->cpld_ctrl) | 576 | if (!mac_cb->cpld_ctrl) |
564 | return -ENODEV; | 577 | return -ENODEV; |
565 | 578 | ||
566 | *sfp_prsnt = !dsaf_read_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg | 579 | ret = dsaf_read_syscon(mac_cb->cpld_ctrl, |
567 | + MAC_SFP_PORT_OFFSET); | 580 | mac_cb->cpld_ctrl_reg + MAC_SFP_PORT_OFFSET, |
581 | &val); | ||
582 | if (ret) | ||
583 | return ret; | ||
568 | 584 | ||
585 | *sfp_prsnt = !val; | ||
569 | return 0; | 586 | return 0; |
570 | } | 587 | } |
571 | 588 | ||
@@ -615,7 +632,7 @@ static int hns_mac_config_sds_loopback(struct hns_mac_cb *mac_cb, bool en) | |||
615 | #define RX_CSR(lane, reg) ((0x4080 + (reg) * 0x0002 + (lane) * 0x0200) * 2) | 632 | #define RX_CSR(lane, reg) ((0x4080 + (reg) * 0x0002 + (lane) * 0x0200) * 2) |
616 | u64 reg_offset = RX_CSR(lane_id[mac_cb->mac_id], 0); | 633 | u64 reg_offset = RX_CSR(lane_id[mac_cb->mac_id], 0); |
617 | 634 | ||
618 | int sfp_prsnt; | 635 | int sfp_prsnt = 0; |
619 | int ret = hns_mac_get_sfp_prsnt(mac_cb, &sfp_prsnt); | 636 | int ret = hns_mac_get_sfp_prsnt(mac_cb, &sfp_prsnt); |
620 | 637 | ||
621 | if (!mac_cb->phy_dev) { | 638 | if (!mac_cb->phy_dev) { |
@@ -627,7 +644,7 @@ static int hns_mac_config_sds_loopback(struct hns_mac_cb *mac_cb, bool en) | |||
627 | } | 644 | } |
628 | 645 | ||
629 | if (mac_cb->serdes_ctrl) { | 646 | if (mac_cb->serdes_ctrl) { |
630 | u32 origin; | 647 | u32 origin = 0; |
631 | 648 | ||
632 | if (!AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver)) { | 649 | if (!AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver)) { |
633 | #define HILINK_ACCESS_SEL_CFG 0x40008 | 650 | #define HILINK_ACCESS_SEL_CFG 0x40008 |
@@ -644,7 +661,10 @@ static int hns_mac_config_sds_loopback(struct hns_mac_cb *mac_cb, bool en) | |||
644 | HILINK_ACCESS_SEL_CFG, 3); | 661 | HILINK_ACCESS_SEL_CFG, 3); |
645 | } | 662 | } |
646 | 663 | ||
647 | origin = dsaf_read_syscon(mac_cb->serdes_ctrl, reg_offset); | 664 | ret = dsaf_read_syscon(mac_cb->serdes_ctrl, reg_offset, |
665 | &origin); | ||
666 | if (ret) | ||
667 | return ret; | ||
648 | 668 | ||
649 | dsaf_set_field(origin, 1ull << 10, 10, en); | 669 | dsaf_set_field(origin, 1ull << 10, 10, en); |
650 | dsaf_write_syscon(mac_cb->serdes_ctrl, reg_offset, origin); | 670 | dsaf_write_syscon(mac_cb->serdes_ctrl, reg_offset, origin); |
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h index 46a52d9bb196..886cbbf25761 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h | |||
@@ -1034,12 +1034,9 @@ static inline void dsaf_write_syscon(struct regmap *base, u32 reg, u32 value) | |||
1034 | regmap_write(base, reg, value); | 1034 | regmap_write(base, reg, value); |
1035 | } | 1035 | } |
1036 | 1036 | ||
1037 | static inline u32 dsaf_read_syscon(struct regmap *base, u32 reg) | 1037 | static inline int dsaf_read_syscon(struct regmap *base, u32 reg, u32 *val) |
1038 | { | 1038 | { |
1039 | unsigned int val; | 1039 | return regmap_read(base, reg, val); |
1040 | |||
1041 | regmap_read(base, reg, &val); | ||
1042 | return val; | ||
1043 | } | 1040 | } |
1044 | 1041 | ||
1045 | #define dsaf_read_dev(a, reg) \ | 1042 | #define dsaf_read_dev(a, reg) \ |