mirror of https://gitee.com/openkylin/linux.git
wlcore/wl12xx: turn no-Tx-align quirk into Tx-align
Inverting the quirk flag to indicate Tx-alignment. This aligns it with the similar Rx-side quirk. The call to wl1271_set_block_size() decides whether SDIO block size alignment can be used or not. In case we're using SPI, we can't use the block size alignment, so the function returns false. So we set the quirk when wl1271_set_block_size() returns true and let the wl12xx lower driver unset the bit for wl127x (since it doesn't support this quirk). Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
53d67a50cd
commit
f83985bb5f
|
@ -272,9 +272,10 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
|||
wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
|
||||
wl->chip.id);
|
||||
|
||||
wl->quirks |= WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT |
|
||||
WLCORE_QUIRK_LEGACY_NVS;
|
||||
wl->plt_fw_name = WL127X_PLT_FW_NAME;
|
||||
/* clear the alignment quirk, since we don't support it */
|
||||
wl->quirks &= ~WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN;
|
||||
|
||||
wl->quirks |= WLCORE_QUIRK_LEGACY_NVS;
|
||||
wl->sr_fw_name = WL127X_FW_NAME_SINGLE;
|
||||
wl->mr_fw_name = WL127X_FW_NAME_MULTI;
|
||||
|
||||
|
@ -287,8 +288,10 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
|
|||
wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
|
||||
wl->chip.id);
|
||||
|
||||
wl->quirks |= WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT |
|
||||
WLCORE_QUIRK_LEGACY_NVS;
|
||||
/* clear the alignment quirk, since we don't support it */
|
||||
wl->quirks &= ~WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN;
|
||||
|
||||
wl->quirks |= WLCORE_QUIRK_LEGACY_NVS;
|
||||
wl->plt_fw_name = WL127X_PLT_FW_NAME;
|
||||
wl->sr_fw_name = WL127X_FW_NAME_SINGLE;
|
||||
wl->mr_fw_name = WL127X_FW_NAME_MULTI;
|
||||
|
|
|
@ -500,7 +500,7 @@ int wl1271_chip_specific_init(struct wl1271 *wl)
|
|||
if (wl->chip.id == CHIP_ID_1283_PG20) {
|
||||
u32 host_cfg_bitmap = HOST_IF_CFG_RX_FIFO_ENABLE;
|
||||
|
||||
if (!(wl->quirks & WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT))
|
||||
if (wl->quirks & WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN)
|
||||
/* Enable SDIO padding */
|
||||
host_cfg_bitmap |= HOST_IF_CFG_TX_PAD_TO_SDIO_BLK;
|
||||
|
||||
|
|
|
@ -1345,8 +1345,8 @@ static int wl12xx_chip_wakeup(struct wl1271 *wl, bool plt)
|
|||
* negligible, we use the same block size for all different
|
||||
* chip types.
|
||||
*/
|
||||
if (!wl1271_set_block_size(wl))
|
||||
wl->quirks |= WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT;
|
||||
if (wl1271_set_block_size(wl))
|
||||
wl->quirks |= WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN;
|
||||
|
||||
ret = wl->ops->identify_chip(wl);
|
||||
if (ret < 0)
|
||||
|
|
|
@ -176,10 +176,10 @@ u8 wl12xx_tx_get_hlid(struct wl1271 *wl, struct wl12xx_vif *wlvif,
|
|||
unsigned int wlcore_calc_packet_alignment(struct wl1271 *wl,
|
||||
unsigned int packet_length)
|
||||
{
|
||||
if (wl->quirks & WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT)
|
||||
return ALIGN(packet_length, WL1271_TX_ALIGN_TO);
|
||||
else
|
||||
if (wl->quirks & WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN)
|
||||
return ALIGN(packet_length, WL12XX_BUS_BLOCK_SIZE);
|
||||
else
|
||||
return ALIGN(packet_length, WL1271_TX_ALIGN_TO);
|
||||
}
|
||||
EXPORT_SYMBOL(wlcore_calc_packet_alignment);
|
||||
|
||||
|
|
|
@ -353,7 +353,7 @@ int wlcore_free_hw(struct wl1271 *wl);
|
|||
#define WLCORE_QUIRK_END_OF_TRANSACTION BIT(0)
|
||||
|
||||
/* wl127x and SPI don't support SDIO block size alignment */
|
||||
#define WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT BIT(2)
|
||||
#define WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN BIT(2)
|
||||
|
||||
/* means aggregated Rx packets are aligned to a SDIO block */
|
||||
#define WLCORE_QUIRK_RX_BLOCKSIZE_ALIGN BIT(3)
|
||||
|
|
Loading…
Reference in New Issue