mirror of https://gitee.com/openkylin/linux.git
mwifiex: check revision id while choosing PCIe firmware
Some of the chipsets have two revisions. This patch selects appropriate firmware by checking revision id. Signed-off-by: Shengzhen Li <szli@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
8fa0a0dc63
commit
a362e16b83
|
@ -190,7 +190,6 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev,
|
||||||
|
|
||||||
if (ent->driver_data) {
|
if (ent->driver_data) {
|
||||||
struct mwifiex_pcie_device *data = (void *)ent->driver_data;
|
struct mwifiex_pcie_device *data = (void *)ent->driver_data;
|
||||||
card->pcie.firmware = data->firmware;
|
|
||||||
card->pcie.reg = data->reg;
|
card->pcie.reg = data->reg;
|
||||||
card->pcie.blksz_fw_dl = data->blksz_fw_dl;
|
card->pcie.blksz_fw_dl = data->blksz_fw_dl;
|
||||||
card->pcie.tx_buf_size = data->tx_buf_size;
|
card->pcie.tx_buf_size = data->tx_buf_size;
|
||||||
|
@ -269,6 +268,11 @@ static const struct pci_device_id mwifiex_ids[] = {
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0,
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0,
|
||||||
.driver_data = (unsigned long)&mwifiex_pcie8997,
|
.driver_data = (unsigned long)&mwifiex_pcie8997,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
PCIE_VENDOR_ID_V2_MARVELL, PCIE_DEVICE_ID_MARVELL_88W8997,
|
||||||
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0,
|
||||||
|
.driver_data = (unsigned long)&mwifiex_pcie8997,
|
||||||
|
},
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2758,6 +2762,51 @@ static int mwifiex_pcie_request_irq(struct mwifiex_adapter *adapter)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function get firmare name for downloading by revision id
|
||||||
|
*
|
||||||
|
* Read revision id register to get revision id
|
||||||
|
*/
|
||||||
|
static void mwifiex_pcie_get_fw_name(struct mwifiex_adapter *adapter)
|
||||||
|
{
|
||||||
|
int revision_id = 0;
|
||||||
|
struct pcie_service_card *card = adapter->card;
|
||||||
|
|
||||||
|
switch (card->dev->device) {
|
||||||
|
case PCIE_DEVICE_ID_MARVELL_88W8766P:
|
||||||
|
strcpy(adapter->fw_name, PCIE8766_DEFAULT_FW_NAME);
|
||||||
|
break;
|
||||||
|
case PCIE_DEVICE_ID_MARVELL_88W8897:
|
||||||
|
mwifiex_write_reg(adapter, 0x0c58, 0x80c00000);
|
||||||
|
mwifiex_read_reg(adapter, 0x0c58, &revision_id);
|
||||||
|
revision_id &= 0xff00;
|
||||||
|
switch (revision_id) {
|
||||||
|
case PCIE8897_A0:
|
||||||
|
strcpy(adapter->fw_name, PCIE8897_A0_FW_NAME);
|
||||||
|
break;
|
||||||
|
case PCIE8897_B0:
|
||||||
|
strcpy(adapter->fw_name, PCIE8897_B0_FW_NAME);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PCIE_DEVICE_ID_MARVELL_88W8997:
|
||||||
|
mwifiex_read_reg(adapter, 0x0c48, &revision_id);
|
||||||
|
switch (revision_id) {
|
||||||
|
case PCIE8997_V2:
|
||||||
|
strcpy(adapter->fw_name, PCIE8997_FW_NAME_V2);
|
||||||
|
break;
|
||||||
|
case PCIE8997_Z:
|
||||||
|
strcpy(adapter->fw_name, PCIE8997_FW_NAME_Z);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function registers the PCIE device.
|
* This function registers the PCIE device.
|
||||||
*
|
*
|
||||||
|
@ -2778,8 +2827,8 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
|
||||||
adapter->tx_buf_size = card->pcie.tx_buf_size;
|
adapter->tx_buf_size = card->pcie.tx_buf_size;
|
||||||
adapter->mem_type_mapping_tbl = card->pcie.mem_type_mapping_tbl;
|
adapter->mem_type_mapping_tbl = card->pcie.mem_type_mapping_tbl;
|
||||||
adapter->num_mem_types = card->pcie.num_mem_types;
|
adapter->num_mem_types = card->pcie.num_mem_types;
|
||||||
strcpy(adapter->fw_name, card->pcie.firmware);
|
|
||||||
adapter->ext_scan = card->pcie.can_ext_scan;
|
adapter->ext_scan = card->pcie.can_ext_scan;
|
||||||
|
mwifiex_pcie_get_fw_name(adapter);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2907,6 +2956,3 @@ MODULE_AUTHOR("Marvell International Ltd.");
|
||||||
MODULE_DESCRIPTION("Marvell WiFi-Ex PCI-Express Driver version " PCIE_VERSION);
|
MODULE_DESCRIPTION("Marvell WiFi-Ex PCI-Express Driver version " PCIE_VERSION);
|
||||||
MODULE_VERSION(PCIE_VERSION);
|
MODULE_VERSION(PCIE_VERSION);
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
MODULE_FIRMWARE(PCIE8766_DEFAULT_FW_NAME);
|
|
||||||
MODULE_FIRMWARE(PCIE8897_DEFAULT_FW_NAME);
|
|
||||||
MODULE_FIRMWARE(PCIE8997_DEFAULT_FW_NAME);
|
|
||||||
|
|
|
@ -30,14 +30,22 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#define PCIE8766_DEFAULT_FW_NAME "mrvl/pcie8766_uapsta.bin"
|
#define PCIE8766_DEFAULT_FW_NAME "mrvl/pcie8766_uapsta.bin"
|
||||||
#define PCIE8897_DEFAULT_FW_NAME "mrvl/pcie8897_uapsta.bin"
|
#define PCIE8897_A0_FW_NAME "mrvl/pcie8897_uapsta_a0.bin"
|
||||||
#define PCIE8997_DEFAULT_FW_NAME "mrvl/pcie8997_uapsta.bin"
|
#define PCIE8897_B0_FW_NAME "mrvl/pcie8897_uapsta.bin"
|
||||||
|
#define PCIE8997_FW_NAME_Z "mrvl/pcieusb8997_combo.bin"
|
||||||
|
#define PCIE8997_FW_NAME_V2 "mrvl/pcieusb8997_combo_v2.bin"
|
||||||
|
|
||||||
#define PCIE_VENDOR_ID_MARVELL (0x11ab)
|
#define PCIE_VENDOR_ID_MARVELL (0x11ab)
|
||||||
|
#define PCIE_VENDOR_ID_V2_MARVELL (0x1b4b)
|
||||||
#define PCIE_DEVICE_ID_MARVELL_88W8766P (0x2b30)
|
#define PCIE_DEVICE_ID_MARVELL_88W8766P (0x2b30)
|
||||||
#define PCIE_DEVICE_ID_MARVELL_88W8897 (0x2b38)
|
#define PCIE_DEVICE_ID_MARVELL_88W8897 (0x2b38)
|
||||||
#define PCIE_DEVICE_ID_MARVELL_88W8997 (0x2b42)
|
#define PCIE_DEVICE_ID_MARVELL_88W8997 (0x2b42)
|
||||||
|
|
||||||
|
#define PCIE8897_A0 0x1100
|
||||||
|
#define PCIE8897_B0 0x1200
|
||||||
|
#define PCIE8997_Z 0x0
|
||||||
|
#define PCIE8997_V2 0x471
|
||||||
|
|
||||||
/* Constants for Buffer Descriptor (BD) rings */
|
/* Constants for Buffer Descriptor (BD) rings */
|
||||||
#define MWIFIEX_MAX_TXRX_BD 0x20
|
#define MWIFIEX_MAX_TXRX_BD 0x20
|
||||||
#define MWIFIEX_TXBD_MASK 0x3F
|
#define MWIFIEX_TXBD_MASK 0x3F
|
||||||
|
@ -263,7 +271,6 @@ static struct memory_type_mapping mem_type_mapping_tbl_w8997[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mwifiex_pcie_device {
|
struct mwifiex_pcie_device {
|
||||||
const char *firmware;
|
|
||||||
const struct mwifiex_pcie_card_reg *reg;
|
const struct mwifiex_pcie_card_reg *reg;
|
||||||
u16 blksz_fw_dl;
|
u16 blksz_fw_dl;
|
||||||
u16 tx_buf_size;
|
u16 tx_buf_size;
|
||||||
|
@ -274,7 +281,6 @@ struct mwifiex_pcie_device {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mwifiex_pcie_device mwifiex_pcie8766 = {
|
static const struct mwifiex_pcie_device mwifiex_pcie8766 = {
|
||||||
.firmware = PCIE8766_DEFAULT_FW_NAME,
|
|
||||||
.reg = &mwifiex_reg_8766,
|
.reg = &mwifiex_reg_8766,
|
||||||
.blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
|
.blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
|
||||||
.tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K,
|
.tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K,
|
||||||
|
@ -283,7 +289,6 @@ static const struct mwifiex_pcie_device mwifiex_pcie8766 = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mwifiex_pcie_device mwifiex_pcie8897 = {
|
static const struct mwifiex_pcie_device mwifiex_pcie8897 = {
|
||||||
.firmware = PCIE8897_DEFAULT_FW_NAME,
|
|
||||||
.reg = &mwifiex_reg_8897,
|
.reg = &mwifiex_reg_8897,
|
||||||
.blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
|
.blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
|
||||||
.tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K,
|
.tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K,
|
||||||
|
@ -294,7 +299,6 @@ static const struct mwifiex_pcie_device mwifiex_pcie8897 = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mwifiex_pcie_device mwifiex_pcie8997 = {
|
static const struct mwifiex_pcie_device mwifiex_pcie8997 = {
|
||||||
.firmware = PCIE8997_DEFAULT_FW_NAME,
|
|
||||||
.reg = &mwifiex_reg_8997,
|
.reg = &mwifiex_reg_8997,
|
||||||
.blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
|
.blksz_fw_dl = MWIFIEX_PCIE_BLOCK_SIZE_FW_DNLD,
|
||||||
.tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K,
|
.tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K,
|
||||||
|
|
Loading…
Reference in New Issue