Message ID | 20240403103032.54823-11-nbd@nbd.name (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Felix Fietkau |
Headers | show |
Series | [01/13] wifi: mt76: mt7915: initialize rssi on adding stations | expand |
On 4/3/2024 3:30 AM, Felix Fietkau wrote: > When pre-calibration data is missing, do not fail the driver probe. > Instead, just print a warning and fall back to regular calibration. > > Signed-off-by: Felix Fietkau <nbd@nbd.name> > --- > .../net/wireless/mediatek/mt76/mt7915/eeprom.c | 15 ++++++++++----- > drivers/net/wireless/mediatek/mt76/mt7915/init.c | 2 +- > drivers/net/wireless/mediatek/mt76/mt7915/main.c | 2 +- > 3 files changed, 12 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c > index 5fdcbb521ff7..bfdbc15abaa9 100644 > --- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c > +++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c > @@ -28,7 +28,15 @@ static int mt7915_eeprom_load_precal(struct mt7915_dev *dev) > if (!ret) > return ret; > > - return mt76_get_of_data_from_nvmem(mdev, dev->cal, "precal", size); > + ret = mt76_get_of_data_from_nvmem(mdev, dev->cal, "precal", size); > + if (!ret) > + return ret; > + > + dev_warn(mdev->dev, "missing precal data, size=%d\n", size); > + devm_kfree(mdev->dev, dev->cal); if you are going to devm_kfree the memory for this case, why not also for the mt76_get_of_data_from_mtd() failure case? > + dev->cal = NULL; > + > + return ret; > } > > static int mt7915_check_eeprom(struct mt7915_dev *dev) > @@ -254,10 +262,7 @@ int mt7915_eeprom_init(struct mt7915_dev *dev) > return ret; > } > > - ret = mt7915_eeprom_load_precal(dev); > - if (ret) > - return ret; > - > + mt7915_eeprom_load_precal(dev); if you're not going to check the status, why not make it a void function?
On 4/3/2024 12:51 PM, Jeff Johnson wrote: > if you are going to devm_kfree the memory for this case, why not also for the > mt76_get_of_data_from_mtd() failure case? ignore that comment -- obviously that was the success case and the failure ace comes here
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c index 5fdcbb521ff7..bfdbc15abaa9 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c @@ -28,7 +28,15 @@ static int mt7915_eeprom_load_precal(struct mt7915_dev *dev) if (!ret) return ret; - return mt76_get_of_data_from_nvmem(mdev, dev->cal, "precal", size); + ret = mt76_get_of_data_from_nvmem(mdev, dev->cal, "precal", size); + if (!ret) + return ret; + + dev_warn(mdev->dev, "missing precal data, size=%d\n", size); + devm_kfree(mdev->dev, dev->cal); + dev->cal = NULL; + + return ret; } static int mt7915_check_eeprom(struct mt7915_dev *dev) @@ -254,10 +262,7 @@ int mt7915_eeprom_init(struct mt7915_dev *dev) return ret; } - ret = mt7915_eeprom_load_precal(dev); - if (ret) - return ret; - + mt7915_eeprom_load_precal(dev); mt7915_eeprom_parse_hw_cap(dev, &dev->phy); memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR, ETH_ALEN); diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/init.c b/drivers/net/wireless/mediatek/mt76/mt7915/init.c index d9e391fbb4bf..a978f434dc5e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/init.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/init.c @@ -823,7 +823,7 @@ mt7915_init_hardware(struct mt7915_dev *dev, struct mt7915_phy *phy2) if (ret < 0) return ret; - if (dev->flash_mode) { + if (dev->cal) { ret = mt7915_mcu_apply_group_cal(dev); if (ret) return ret; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c index 49d5b459fb44..b16a63366907 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c @@ -329,7 +329,7 @@ int mt7915_set_channel(struct mt7915_phy *phy) mt76_set_channel(phy->mt76); - if (dev->flash_mode) { + if (dev->cal) { ret = mt7915_mcu_apply_tx_dpd(phy); if (ret) goto out;
When pre-calibration data is missing, do not fail the driver probe. Instead, just print a warning and fall back to regular calibration. Signed-off-by: Felix Fietkau <nbd@nbd.name> --- .../net/wireless/mediatek/mt76/mt7915/eeprom.c | 15 ++++++++++----- drivers/net/wireless/mediatek/mt76/mt7915/init.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7915/main.c | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-)