* [PATCH] wifi: rt2x00: check retval for of_get_mac_address
@ 2025-10-14 5:08 Rosen Penev
2025-10-21 10:21 ` Stanislaw Gruszka
0 siblings, 1 reply; 2+ messages in thread
From: Rosen Penev @ 2025-10-14 5:08 UTC (permalink / raw)
To: linux-wireless; +Cc: Stanislaw Gruszka, open list
of_get_mac_address can return -EPROBE_DEFER when nvmem is not probed yet
for whatever reason. In this case, nvmem mac assignments will not work.
Based on the function path, this change only has effect for rt2800soc.c
and rt2800pci.c. The former tends to use nvmem for assignments.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 4 +++-
drivers/net/wireless/ralink/rt2x00/rt2x00.h | 2 +-
drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 10 ++++++++--
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
index b312b40f4aa3..af19153697ed 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
@@ -11010,7 +11010,9 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
* Start validation of the data that has been read.
*/
mac = rt2800_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
- rt2x00lib_set_mac_address(rt2x00dev, mac);
+ retval = rt2x00lib_set_mac_address(rt2x00dev, mac);
+ if (retval)
+ return retval;
word = rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0);
if (word == 0xffff) {
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
index 0b67b09695b6..4d6437deaa9a 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
@@ -1416,7 +1416,7 @@ static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
*/
u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
struct ieee80211_vif *vif);
-void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr);
+int rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr);
/*
* Interrupt context handlers.
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
index ee667e1a7937..4af132acadb6 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
@@ -984,14 +984,20 @@ static void rt2x00lib_rate(struct ieee80211_rate *entry,
entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
}
-void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
+int rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
{
- of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
+ int ret;
+
+ ret = of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
+ if (ret == -EPROBE_DEFER)
+ return ret;
if (!is_valid_ether_addr(eeprom_mac_addr)) {
eth_random_addr(eeprom_mac_addr);
rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", eeprom_mac_addr);
}
+
+ return 0;
}
EXPORT_SYMBOL_GPL(rt2x00lib_set_mac_address);
--
2.51.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] wifi: rt2x00: check retval for of_get_mac_address
2025-10-14 5:08 [PATCH] wifi: rt2x00: check retval for of_get_mac_address Rosen Penev
@ 2025-10-21 10:21 ` Stanislaw Gruszka
0 siblings, 0 replies; 2+ messages in thread
From: Stanislaw Gruszka @ 2025-10-21 10:21 UTC (permalink / raw)
To: Rosen Penev; +Cc: linux-wireless, open list
Hi
On Mon, Oct 13, 2025 at 10:08:33PM -0700, Rosen Penev wrote:
> of_get_mac_address can return -EPROBE_DEFER when nvmem is not probed yet
> for whatever reason. In this case, nvmem mac assignments will not work.
>
> Based on the function path, this change only has effect for rt2800soc.c
> and rt2800pci.c. The former tends to use nvmem for assignments.
What you mean? The USB probing also goes through
rt2800_validate_eeprom().
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
Anyway patch looks ok for me.
Acked-by: Stanislaw Gruszka <stf_xl@wp.pl>
> drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 4 +++-
> drivers/net/wireless/ralink/rt2x00/rt2x00.h | 2 +-
> drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 10 ++++++++--
> 3 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> index b312b40f4aa3..af19153697ed 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c
> @@ -11010,7 +11010,9 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> * Start validation of the data that has been read.
> */
> mac = rt2800_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
> - rt2x00lib_set_mac_address(rt2x00dev, mac);
> + retval = rt2x00lib_set_mac_address(rt2x00dev, mac);
> + if (retval)
> + return retval;
>
> word = rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0);
> if (word == 0xffff) {
> diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
> index 0b67b09695b6..4d6437deaa9a 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
> @@ -1416,7 +1416,7 @@ static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
> */
> u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
> struct ieee80211_vif *vif);
> -void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr);
> +int rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr);
>
> /*
> * Interrupt context handlers.
> diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
> index ee667e1a7937..4af132acadb6 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
> @@ -984,14 +984,20 @@ static void rt2x00lib_rate(struct ieee80211_rate *entry,
> entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
> }
>
> -void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
> +int rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
> {
> - of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
> + int ret;
> +
> + ret = of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
> + if (ret == -EPROBE_DEFER)
> + return ret;
>
> if (!is_valid_ether_addr(eeprom_mac_addr)) {
> eth_random_addr(eeprom_mac_addr);
> rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", eeprom_mac_addr);
> }
> +
> + return 0;
> }
> EXPORT_SYMBOL_GPL(rt2x00lib_set_mac_address);
>
> --
> 2.51.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-10-21 10:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-14 5:08 [PATCH] wifi: rt2x00: check retval for of_get_mac_address Rosen Penev
2025-10-21 10:21 ` Stanislaw Gruszka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).