libertas: add support for Marvell SD8688 chip
libertas: add support for Marvell SD8688 chip Use RxPD->pkt_ptr to locate eth803 header in the packet received since SD8688/v10 firmware allows a gap between RxPD and eth803 header. Set SDIO block size to 256 for CMD53. The maximum block size for SD8688 WLAN function is set to 512 in TPLFE_MAX_BLK_SIZE. But using 512 as block size results upto 2K bytes data (4 blocks) being transferred and causes buffer overflow in firmware. Both changes above are backward compatible with earlier firmware versions for SD8385/SD8686. The SDIO_DEVICE_IDs for SD8688 chip are added in include/linux/mmc/sdio_ids.h Signed-off-by: Kiran Divekar <dkiran@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Acked-by: Dan Williams <dcbw@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
87cbfd0688
commit
e45d8e534b
@@ -48,8 +48,11 @@ static char *lbs_fw_name = NULL;
|
||||
module_param_named(fw_name, lbs_fw_name, charp, 0644);
|
||||
|
||||
static const struct sdio_device_id if_sdio_ids[] = {
|
||||
{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_LIBERTAS) },
|
||||
{ /* end: all zeroes */ },
|
||||
{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL,
|
||||
SDIO_DEVICE_ID_MARVELL_LIBERTAS) },
|
||||
{ SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL,
|
||||
SDIO_DEVICE_ID_MARVELL_8688WLAN) },
|
||||
{ /* end: all zeroes */ },
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(sdio, if_sdio_ids);
|
||||
@@ -73,6 +76,12 @@ static struct if_sdio_model if_sdio_models[] = {
|
||||
.helper = "sd8686_helper.bin",
|
||||
.firmware = "sd8686.bin",
|
||||
},
|
||||
{
|
||||
/* 8688 */
|
||||
.model = 0x10,
|
||||
.helper = "sd8688_helper.bin",
|
||||
.firmware = "sd8688.bin",
|
||||
},
|
||||
};
|
||||
|
||||
struct if_sdio_packet {
|
||||
@@ -488,7 +497,7 @@ static int if_sdio_prog_helper(struct if_sdio_card *card)
|
||||
ret = 0;
|
||||
|
||||
release:
|
||||
sdio_set_block_size(card->func, 0);
|
||||
sdio_set_block_size(card->func, IF_SDIO_BLOCK_SIZE);
|
||||
sdio_release_host(card->func);
|
||||
kfree(chunk_buffer);
|
||||
release_fw:
|
||||
@@ -624,7 +633,7 @@ static int if_sdio_prog_real(struct if_sdio_card *card)
|
||||
ret = 0;
|
||||
|
||||
release:
|
||||
sdio_set_block_size(card->func, 0);
|
||||
sdio_set_block_size(card->func, IF_SDIO_BLOCK_SIZE);
|
||||
sdio_release_host(card->func);
|
||||
kfree(chunk_buffer);
|
||||
release_fw:
|
||||
|
Reference in New Issue
Block a user