mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
wifi: wcn36xx: add support for pronto-v3
Pronto v3 has a different DXE address than prior Pronto versions. This patch changes the macro to return the correct register address based on the pronto version. Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com> Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://lore.kernel.org/r/20230311150647.22935-2-sireeshkodali1@gmail.com
This commit is contained in:
parent
f94d7a3a51
commit
f94557154d
|
|
@ -112,8 +112,8 @@ int wcn36xx_dxe_alloc_ctl_blks(struct wcn36xx *wcn)
|
|||
wcn->dxe_rx_l_ch.desc_num = WCN36XX_DXE_CH_DESC_NUMB_RX_L;
|
||||
wcn->dxe_rx_h_ch.desc_num = WCN36XX_DXE_CH_DESC_NUMB_RX_H;
|
||||
|
||||
wcn->dxe_tx_l_ch.dxe_wq = WCN36XX_DXE_WQ_TX_L;
|
||||
wcn->dxe_tx_h_ch.dxe_wq = WCN36XX_DXE_WQ_TX_H;
|
||||
wcn->dxe_tx_l_ch.dxe_wq = WCN36XX_DXE_WQ_TX_L(wcn);
|
||||
wcn->dxe_tx_h_ch.dxe_wq = WCN36XX_DXE_WQ_TX_H(wcn);
|
||||
|
||||
wcn->dxe_tx_l_ch.ctrl_bd = WCN36XX_DXE_CTRL_TX_L_BD;
|
||||
wcn->dxe_tx_h_ch.ctrl_bd = WCN36XX_DXE_CTRL_TX_H_BD;
|
||||
|
|
@ -165,8 +165,9 @@ void wcn36xx_dxe_free_ctl_blks(struct wcn36xx *wcn)
|
|||
wcn36xx_dxe_free_ctl_block(&wcn->dxe_rx_h_ch);
|
||||
}
|
||||
|
||||
static int wcn36xx_dxe_init_descs(struct device *dev, struct wcn36xx_dxe_ch *wcn_ch)
|
||||
static int wcn36xx_dxe_init_descs(struct wcn36xx *wcn, struct wcn36xx_dxe_ch *wcn_ch)
|
||||
{
|
||||
struct device *dev = wcn->dev;
|
||||
struct wcn36xx_dxe_desc *cur_dxe = NULL;
|
||||
struct wcn36xx_dxe_desc *prev_dxe = NULL;
|
||||
struct wcn36xx_dxe_ctl *cur_ctl = NULL;
|
||||
|
|
@ -190,11 +191,11 @@ static int wcn36xx_dxe_init_descs(struct device *dev, struct wcn36xx_dxe_ch *wcn
|
|||
switch (wcn_ch->ch_type) {
|
||||
case WCN36XX_DXE_CH_TX_L:
|
||||
cur_dxe->ctrl = WCN36XX_DXE_CTRL_TX_L;
|
||||
cur_dxe->dst_addr_l = WCN36XX_DXE_WQ_TX_L;
|
||||
cur_dxe->dst_addr_l = WCN36XX_DXE_WQ_TX_L(wcn);
|
||||
break;
|
||||
case WCN36XX_DXE_CH_TX_H:
|
||||
cur_dxe->ctrl = WCN36XX_DXE_CTRL_TX_H;
|
||||
cur_dxe->dst_addr_l = WCN36XX_DXE_WQ_TX_H;
|
||||
cur_dxe->dst_addr_l = WCN36XX_DXE_WQ_TX_H(wcn);
|
||||
break;
|
||||
case WCN36XX_DXE_CH_RX_L:
|
||||
cur_dxe->ctrl = WCN36XX_DXE_CTRL_RX_L;
|
||||
|
|
@ -914,7 +915,7 @@ int wcn36xx_dxe_init(struct wcn36xx *wcn)
|
|||
/***************************************/
|
||||
/* Init descriptors for TX LOW channel */
|
||||
/***************************************/
|
||||
ret = wcn36xx_dxe_init_descs(wcn->dev, &wcn->dxe_tx_l_ch);
|
||||
ret = wcn36xx_dxe_init_descs(wcn, &wcn->dxe_tx_l_ch);
|
||||
if (ret) {
|
||||
dev_err(wcn->dev, "Error allocating descriptor\n");
|
||||
return ret;
|
||||
|
|
@ -928,14 +929,14 @@ int wcn36xx_dxe_init(struct wcn36xx *wcn)
|
|||
/* Program DMA destination addr for TX LOW */
|
||||
wcn36xx_dxe_write_register(wcn,
|
||||
WCN36XX_DXE_CH_DEST_ADDR_TX_L,
|
||||
WCN36XX_DXE_WQ_TX_L);
|
||||
WCN36XX_DXE_WQ_TX_L(wcn));
|
||||
|
||||
wcn36xx_dxe_read_register(wcn, WCN36XX_DXE_REG_CH_EN, ®_data);
|
||||
|
||||
/***************************************/
|
||||
/* Init descriptors for TX HIGH channel */
|
||||
/***************************************/
|
||||
ret = wcn36xx_dxe_init_descs(wcn->dev, &wcn->dxe_tx_h_ch);
|
||||
ret = wcn36xx_dxe_init_descs(wcn, &wcn->dxe_tx_h_ch);
|
||||
if (ret) {
|
||||
dev_err(wcn->dev, "Error allocating descriptor\n");
|
||||
goto out_err_txh_ch;
|
||||
|
|
@ -950,14 +951,14 @@ int wcn36xx_dxe_init(struct wcn36xx *wcn)
|
|||
/* Program DMA destination addr for TX HIGH */
|
||||
wcn36xx_dxe_write_register(wcn,
|
||||
WCN36XX_DXE_CH_DEST_ADDR_TX_H,
|
||||
WCN36XX_DXE_WQ_TX_H);
|
||||
WCN36XX_DXE_WQ_TX_H(wcn));
|
||||
|
||||
wcn36xx_dxe_read_register(wcn, WCN36XX_DXE_REG_CH_EN, ®_data);
|
||||
|
||||
/***************************************/
|
||||
/* Init descriptors for RX LOW channel */
|
||||
/***************************************/
|
||||
ret = wcn36xx_dxe_init_descs(wcn->dev, &wcn->dxe_rx_l_ch);
|
||||
ret = wcn36xx_dxe_init_descs(wcn, &wcn->dxe_rx_l_ch);
|
||||
if (ret) {
|
||||
dev_err(wcn->dev, "Error allocating descriptor\n");
|
||||
goto out_err_rxl_ch;
|
||||
|
|
@ -988,7 +989,7 @@ int wcn36xx_dxe_init(struct wcn36xx *wcn)
|
|||
/***************************************/
|
||||
/* Init descriptors for RX HIGH channel */
|
||||
/***************************************/
|
||||
ret = wcn36xx_dxe_init_descs(wcn->dev, &wcn->dxe_rx_h_ch);
|
||||
ret = wcn36xx_dxe_init_descs(wcn, &wcn->dxe_rx_h_ch);
|
||||
if (ret) {
|
||||
dev_err(wcn->dev, "Error allocating descriptor\n");
|
||||
goto out_err_rxh_ch;
|
||||
|
|
|
|||
|
|
@ -135,8 +135,8 @@ H2H_TEST_RX_TX = DMA2
|
|||
WCN36xx_DXE_CTRL_ENDIANNESS)
|
||||
|
||||
/* TODO This must calculated properly but not hardcoded */
|
||||
#define WCN36XX_DXE_WQ_TX_L 0x17
|
||||
#define WCN36XX_DXE_WQ_TX_H 0x17
|
||||
#define WCN36XX_DXE_WQ_TX_L(wcn) ((wcn)->is_pronto_v3 ? 0x6 : 0x17)
|
||||
#define WCN36XX_DXE_WQ_TX_H(wcn) ((wcn)->is_pronto_v3 ? 0x6 : 0x17)
|
||||
#define WCN36XX_DXE_WQ_RX_L 0xB
|
||||
#define WCN36XX_DXE_WQ_RX_H 0x4
|
||||
|
||||
|
|
|
|||
|
|
@ -1508,6 +1508,7 @@ static int wcn36xx_platform_get_resources(struct wcn36xx *wcn,
|
|||
}
|
||||
|
||||
wcn->is_pronto = !!of_device_is_compatible(mmio_node, "qcom,pronto");
|
||||
wcn->is_pronto_v3 = !!of_device_is_compatible(mmio_node, "qcom,pronto-v3-pil");
|
||||
|
||||
/* Map the CCU memory */
|
||||
index = of_property_match_string(mmio_node, "reg-names", "ccu");
|
||||
|
|
|
|||
|
|
@ -217,6 +217,7 @@ struct wcn36xx {
|
|||
u8 fw_major;
|
||||
u32 fw_feat_caps[WCN36XX_HAL_CAPS_SIZE];
|
||||
bool is_pronto;
|
||||
bool is_pronto_v3;
|
||||
|
||||
/* extra byte for the NULL termination */
|
||||
u8 crm_version[WCN36XX_HAL_VERSION_LENGTH + 1];
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user