Re: [PATCH 5/6] wl1251: Parse and use MAC address from supplied NVS data
From: Kalle Valo
Date: Fri Jan 27 2017 - 02:54:54 EST
Pali RohÃr <pali.rohar@xxxxxxxxx> writes:
> This patch implements parsing MAC address from NVS data which are sent to
> wl1251 chip. Calibration NVS data could contain valid MAC address and it
> will be used instead randomly generated.
> This patch also move code for requesting NVS data from userspace to driver
> initialization code to make sure that NVS data will be there at time when
> permanent MAC address is needed.
> Calibration NVS data for wl1251 are model specific. Every one device with
> wl1251 chip should have been calibrated in factory and needs to provide own
> calibration data.
> Default example wl1251-nvs.bin data found in linux-firmware repository and
> contains MAC address 00:00:20:07:03:09. So this MAC address is marked as
> invalid as it is not real device specific address, just example one.
> Format of calibration NVS data can be found at:
> Signed-off-by: Pali RohÃr <pali.rohar@xxxxxxxxx>
> +static int wl1251_read_nvs_mac(struct wl1251 *wl)
> + u8 mac[ETH_ALEN];
> + int i;
> + if (wl->nvs_len < 0x24)
> + return -ENODATA;
> + /* length is 2 and data address is 0x546c (mask is 0xfffe) */
> + if (wl->nvs[0x19] != 2 || wl->nvs[0x1a] != 0x6d || wl->nvs[0x1b] != 0x54)
> + return -EINVAL;
> + /* MAC is stored in reverse order */
> + for (i = 0; i < ETH_ALEN; i++)
> + mac[i] = wl->nvs[0x1c + ETH_ALEN - i - 1];
No magic numbers, please. Replace all nvs offsets with proper defines to
make the code more readable.