mirror of https://gitee.com/openkylin/linux.git
wlcore: add missing nvs file name info for wilink8
The following commits: commitc815fdebef
("wlcore: spi: Populate config firmware data") commitd776fc86b8
("wlcore: sdio: Populate config firmware data") Populated the nvs entry for wilink6 and wilink7 only while it is still needed for wilink8 as well. This broke user space backward compatibility when upgrading from older kernels, as the alternate mac address would not be read from the nvs that is present in the file system (lib/firmware/ti-connectivity/wl1271-nvs.bin) causing mac address change of the wlan interface. This patch fix this and update the structure field with the same default nvs file name that has been used before. In addition, some distros hold a default wl1271-nvs.bin in the file system with a bogus mac address (deadbeef...) that overrides the mac address that is stored inside the device. Warn users about this bogus mac address and use the internal mac address Fixes:c815fdebef
("wlcore: spi: Populate config firmware data") Fixes:d776fc86b8
("wlcore: sdio: Populate config firmware data") Signed-off-by: Eyal Reizer <eyalr@ti.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Tested-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
90bc7dfdcb
commit
d382b9c007
|
@ -6016,6 +6016,8 @@ static int wl1271_register_hw(struct wl1271 *wl)
|
|||
{
|
||||
int ret;
|
||||
u32 oui_addr = 0, nic_addr = 0;
|
||||
struct platform_device *pdev = wl->pdev;
|
||||
struct wlcore_platdev_data *pdev_data = dev_get_platdata(&pdev->dev);
|
||||
|
||||
if (wl->mac80211_registered)
|
||||
return 0;
|
||||
|
@ -6040,6 +6042,27 @@ static int wl1271_register_hw(struct wl1271 *wl)
|
|||
nic_addr = wl->fuse_nic_addr + 1;
|
||||
}
|
||||
|
||||
if (oui_addr == 0xdeadbe && nic_addr == 0xef0000) {
|
||||
wl1271_warning("Detected unconfigured mac address in nvs, derive from fuse instead.\n");
|
||||
if (!strcmp(pdev_data->family->name, "wl18xx")) {
|
||||
wl1271_warning("This default nvs file can be removed from the file system\n");
|
||||
} else {
|
||||
wl1271_warning("Your device performance is not optimized.\n");
|
||||
wl1271_warning("Please use the calibrator tool to configure your device.\n");
|
||||
}
|
||||
|
||||
if (wl->fuse_oui_addr == 0 && wl->fuse_nic_addr == 0) {
|
||||
wl1271_warning("Fuse mac address is zero. using random mac\n");
|
||||
/* Use TI oui and a random nic */
|
||||
oui_addr = WLCORE_TI_OUI_ADDRESS;
|
||||
nic_addr = get_random_int();
|
||||
} else {
|
||||
oui_addr = wl->fuse_oui_addr;
|
||||
/* fuse has the BD_ADDR, the WLAN addresses are the next two */
|
||||
nic_addr = wl->fuse_nic_addr + 1;
|
||||
}
|
||||
}
|
||||
|
||||
wl12xx_derive_mac_addresses(wl, oui_addr, nic_addr);
|
||||
|
||||
ret = ieee80211_register_hw(wl->hw);
|
||||
|
|
|
@ -230,6 +230,7 @@ static const struct wilink_family_data wl128x_data = {
|
|||
static const struct wilink_family_data wl18xx_data = {
|
||||
.name = "wl18xx",
|
||||
.cfg_name = "ti-connectivity/wl18xx-conf.bin",
|
||||
.nvs_name = "ti-connectivity/wl1271-nvs.bin",
|
||||
};
|
||||
|
||||
static const struct of_device_id wlcore_sdio_of_match_table[] = {
|
||||
|
|
|
@ -92,6 +92,7 @@ static const struct wilink_family_data wl128x_data = {
|
|||
static const struct wilink_family_data wl18xx_data = {
|
||||
.name = "wl18xx",
|
||||
.cfg_name = "ti-connectivity/wl18xx-conf.bin",
|
||||
.nvs_name = "ti-connectivity/wl1271-nvs.bin",
|
||||
};
|
||||
|
||||
struct wl12xx_spi_glue {
|
||||
|
|
|
@ -40,6 +40,9 @@
|
|||
/* wl12xx/wl18xx maximum transmission power (in dBm) */
|
||||
#define WLCORE_MAX_TXPWR 25
|
||||
|
||||
/* Texas Instruments pre assigned OUI */
|
||||
#define WLCORE_TI_OUI_ADDRESS 0x080028
|
||||
|
||||
/* forward declaration */
|
||||
struct wl1271_tx_hw_descr;
|
||||
enum wl_rx_buf_align;
|
||||
|
|
Loading…
Reference in New Issue