Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Huazhong Tan and committed by
David S. Miller
5e89cfac 3f1dcc6a

+37 -20
+35 -15
drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
··· 44 44 45 45 static u32 dsaf_read_sub(struct dsaf_device *dsaf_dev, u32 reg) 46 46 { 47 - u32 ret; 47 + u32 ret = 0; 48 + int err; 48 49 49 - if (dsaf_dev->sub_ctrl) 50 - ret = dsaf_read_syscon(dsaf_dev->sub_ctrl, reg); 51 - else 50 + if (dsaf_dev->sub_ctrl) { 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 56 ret = dsaf_read_reg(dsaf_dev->sc_base, reg); 57 + } 53 58 54 59 return ret; 55 60 } ··· 193 188 static int cpld_set_led_id(struct hns_mac_cb *mac_cb, 194 189 enum hnae_led_state status) 195 190 { 191 + u32 val = 0; 192 + int ret; 193 + 196 194 if (!mac_cb->cpld_ctrl) 197 195 return 0; 198 196 199 197 switch (status) { 200 198 case HNAE_LED_ACTIVE: 201 - mac_cb->cpld_led_value = 202 - dsaf_read_syscon(mac_cb->cpld_ctrl, 203 - mac_cb->cpld_ctrl_reg); 204 - dsaf_set_bit(mac_cb->cpld_led_value, DSAF_LED_ANCHOR_B, 205 - CPLD_LED_ON_VALUE); 199 + ret = dsaf_read_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg, 200 + &val); 201 + if (ret) 202 + return ret; 203 + 204 + dsaf_set_bit(val, DSAF_LED_ANCHOR_B, CPLD_LED_ON_VALUE); 206 205 dsaf_write_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg, 207 - mac_cb->cpld_led_value); 206 + val); 207 + mac_cb->cpld_led_value = val; 208 208 break; 209 209 case HNAE_LED_INACTIVE: 210 210 dsaf_set_bit(mac_cb->cpld_led_value, DSAF_LED_ANCHOR_B, ··· 570 560 571 561 int hns_mac_get_sfp_prsnt(struct hns_mac_cb *mac_cb, int *sfp_prsnt) 572 562 { 563 + u32 val = 0; 564 + int ret; 565 + 573 566 if (!mac_cb->cpld_ctrl) 574 567 return -ENODEV; 575 568 576 - *sfp_prsnt = !dsaf_read_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg 577 - + MAC_SFP_PORT_OFFSET); 569 + ret = dsaf_read_syscon(mac_cb->cpld_ctrl, 570 + mac_cb->cpld_ctrl_reg + MAC_SFP_PORT_OFFSET, 571 + &val); 572 + if (ret) 573 + return ret; 578 574 575 + *sfp_prsnt = !val; 579 576 return 0; 580 577 } 581 578 ··· 632 615 #define RX_CSR(lane, reg) ((0x4080 + (reg) * 0x0002 + (lane) * 0x0200) * 2) 633 616 u64 reg_offset = RX_CSR(lane_id[mac_cb->mac_id], 0); 634 617 635 - int sfp_prsnt; 618 + int sfp_prsnt = 0; 636 619 int ret = hns_mac_get_sfp_prsnt(mac_cb, &sfp_prsnt); 637 620 638 621 if (!mac_cb->phy_dev) { ··· 644 627 } 645 628 646 629 if (mac_cb->serdes_ctrl) { 647 - u32 origin; 630 + u32 origin = 0; 648 631 649 632 if (!AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver)) { 650 633 #define HILINK_ACCESS_SEL_CFG 0x40008 ··· 661 644 HILINK_ACCESS_SEL_CFG, 3); 662 645 } 663 646 664 - origin = dsaf_read_syscon(mac_cb->serdes_ctrl, reg_offset); 647 + ret = dsaf_read_syscon(mac_cb->serdes_ctrl, reg_offset, 648 + &origin); 649 + if (ret) 650 + return ret; 665 651 666 652 dsaf_set_field(origin, 1ull << 10, 10, en); 667 653 dsaf_write_syscon(mac_cb->serdes_ctrl, reg_offset, origin);
+2 -5
drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
··· 1034 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; 1040 - 1041 - regmap_read(base, reg, &val); 1042 - return val; 1039 + return regmap_read(base, reg, val); 1043 1040 } 1044 1041 1045 1042 #define dsaf_read_dev(a, reg) \