diff mbox series

[11/13] wifi: mt76: mt7915: add fallback in case of missing precal data

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

Commit Message

Felix Fietkau April 3, 2024, 10:30 a.m. UTC
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(-)

Comments

Jeff Johnson April 3, 2024, 7:51 p.m. UTC | #1
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?
Jeff Johnson April 3, 2024, 8:03 p.m. UTC | #2
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 mbox series

Patch

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;