qcacmn: Waikiki CFR changes

Waikiki CFR changes

CRs-Fixed: 3057989
Change-Id: Ib2028ecede35cc2e531a394f5229a71b84757b9f
此提交包含在:
Shwetha G K
2021-10-12 10:38:56 +05:30
提交者 Madan Koyyalamudi
父節點 9c320060ac
當前提交 0d831d42c4
共有 3 個檔案被更改,包括 307 行新增35 行删除

查看文件

@@ -93,6 +93,26 @@
#define STREAMFS_NUM_SUBBUF_PINE 255
/* Max 37 users in MU case for Waikiki */
#define WAIKIKI_CFR_MU_USERS 37
#define WAIKIKI_MAX_HEADER_LENGTH_WORDS 87
#define WAIKIKI_MAX_DATA_LENGTH_BYTES 64128
/* Max size :
* sizeof(csi_cfr_header) + 348 bytes(cfr header) + 64128 bytes(cfr payload)
* where cfr_header size = rtt upload header len + freeze_tlv len +
* uplink user setup info + alignment bytes
* = 16bytes + 32bytes + (8bytes * 37users) + 4bytes
*/
#define STREAMFS_MAX_SUBBUF_WAIKIKI \
(sizeof(struct csi_cfr_header) + \
(WAIKIKI_MAX_HEADER_LENGTH_WORDS * 4) + \
WAIKIKI_MAX_DATA_LENGTH_BYTES)
#define STREAMFS_NUM_SUBBUF_WAIKIKI 127
/* Max 4 users in MU case for Spruce */
#define SPRUCE_CFR_MU_USERS 4
@@ -111,14 +131,30 @@
#define STREAMFS_NUM_SUBBUF_SPRUCE 255
/* enum macrx_freeze_tlv_version: Reported by uCode in enh_dma_header
* MACRX_FREEZE_TLV_VERSION_1: Single MU UL user info reported by MAC
* MACRX_FREEZE_TLV_VERSION_2: Upto 4 MU UL user info reported by MAC
* MACRX_FREEZE_TLV_VERSION_3: Upto 37 MU UL user info reported by MAC
* MACRX_FREEZE_TLV_VERSION_1: Single MU UL user info reported by MAC.
* This is used in Cypress/HastingsPrime chips. Corresponding structures are
* macrx_freeze_capture_channel and 1 uplink_user_setup_info.
*
* MACRX_FREEZE_TLV_VERSION_2: Upto 4 MU UL user info reported by MAC.
* This is used in Maple/Spruce/Moselle chips. Corresponding structures are
* macrx_freeze_capture_channel and 2 uplink_user_setup_info.
*
* MACRX_FREEZE_TLV_VERSION_3: Upto 37 MU UL user info reported by MAC.
* This is used in Pine chip. The corresponding structures are
* macrx_freeze_capture_channel_v3 and 37 uplink_user_setup_info.
*
* MACRX_FREEZE_TLV_VERSION_4: Upto 37 MU UL user info reported by MAC.
* This is used in Hamilton 1/2.
*
* MACRX_FREEZE_TLV_VERSION_5: Upto 37 MU UL user info reported by MAC.
* This is used in Waikiki chipsets.
*/
enum macrx_freeze_tlv_version {
MACRX_FREEZE_TLV_VERSION_1 = 1,
MACRX_FREEZE_TLV_VERSION_2 = 2,
MACRX_FREEZE_TLV_VERSION_3 = 3,
MACRX_FREEZE_TLV_VERSION_4 = 4,
MACRX_FREEZE_TLV_VERSION_5 = 5,
MACRX_FREEZE_TLV_VERSION_MAX
};
@@ -152,6 +188,16 @@ enum macrx_freeze_tlv_version {
*/
#define STREAMFS_NUM_SUBBUF_MAPLE 255
enum UCODE_UPLOAD_HEADER_VERSION {
UPLOAD_HEADER_VERSION_1 = 1,
UPLOAD_HEADER_VERSION_2 = 2,
UPLOAD_HEADER_VERSION_3 = 3,
UPLOAD_HEADER_VERSION_4 = 4,
UPLOAD_HEADER_VERSION_8 = 8,
UPLOAD_HEADER_VERSION_9 = 9,
UPLOAD_HEADER_VERSION_MAX
};
/*
* @tag: ucode fills this with 0xBA
*
@@ -210,6 +256,10 @@ enum macrx_freeze_tlv_version {
*
* 1 - HKV2/Hastings
* 2 - Cypress
* 3 - Hasting Prime
* 4 - Pine
* 8 - Hamilton
* 9 - Waikiki
*
* @target_id:
*
@@ -483,6 +533,56 @@ struct uplink_user_setup_info {
reserved_0c : 1; //[31]
};
struct macrx_freeze_capture_channel_v5 {
uint16_t freeze : 1, //[0]
capture_reason : 3, //[3:1]
packet_type : 2, //[5:4]
packet_sub_type : 4, //[9:6]
reserved : 5, //[14:10]
sw_peer_id_valid : 1; //[15]
uint16_t sw_peer_id : 16; //[15:0]
uint16_t phy_ppdu_id : 16; //[15:0]
uint16_t packet_ta_lower_16 : 16; //[15:0]
uint16_t packet_ta_mid_16 : 16; //[15:0]
uint16_t packet_ta_upper_16 : 16; //[15:0]
uint16_t packet_ra_lower_16 : 16; //[15:0]
uint16_t packet_ra_mid_16 : 16; //[15:0]
uint16_t packet_ra_upper_16 : 16; //[15:0]
uint16_t tsf_timestamp_15_0 : 16; //[15:0]
uint16_t tsf_timestamp_31_16 : 16; //[15:0]
uint16_t tsf_timestamp_47_32 : 16; //[15:0]
uint16_t tsf_timestamp_63_48 : 16; //[15:0]
uint16_t user_index_or_user_mask_5_0 : 6, //[5:0]
directed : 1, //[6]
reserved_13 : 9; //[15:7]
uint16_t user_mask_21_6 : 16; //[15:0]
uint16_t user_mask_36_22 : 15, //[14:0]
reserved_15a : 1; //[15]
};
struct uplink_user_setup_info_v2 {
uint32_t bw_info_valid : 1, //[0]
uplink_receive_type : 2, //[2:1]
reserved_0a : 1, //[3]
uplink_11ax_mcs : 4, //[7:4]
nss : 3, //[10:8]
stream_offset : 3, //[13:11]
sta_dcm : 1, //[14]
sta_coding : 1, //[15]
ru_type_80_0 : 4, //[19:16]
ru_type_80_1 : 4, //[23:20]
ru_type_80_2 : 4, //[27:24]
ru_type_80_3 : 4; //[31:28]
uint32_t ru_start_index_80_0 : 6, //[5:0]
reserved_1a : 2, //[7:6]
ru_start_index_80_1 : 6, //[13:8]
reserved_1b : 2, //[15:14]
ru_start_index_80_2 : 6, //[21:16]
reserved_1c : 2, //[23:22]
ru_start_index_80_3 : 6, //[29:24]
reserved_1d : 2; //[31-30]
};
/**
* cfr_enh_init_pdev() - Inits cfr pdev and registers necessary handlers.
* @psoc: pointer to psoc object

查看文件

@@ -254,7 +254,8 @@ void target_if_cfr_fill_header(struct csi_cfr_header *hdr,
hdr->cmn.cfr_metadata_version = CFR_META_VERSION_6;
hdr->cmn.chip_type = CFR_CAPTURE_RADIO_ALDER;
} else {
if (target_type == TARGET_TYPE_QCN9000)
if (target_type == TARGET_TYPE_QCN9000 ||
target_type == TARGET_TYPE_QCN9224)
hdr->cmn.cfr_metadata_version = CFR_META_VERSION_7;
else if ((target_type == TARGET_TYPE_QCA6018) ||
((target_type == TARGET_TYPE_QCA5018) && (!is_rcc)))
@@ -268,6 +269,8 @@ void target_if_cfr_fill_header(struct csi_cfr_header *hdr,
hdr->cmn.chip_type = CFR_CAPTURE_RADIO_MAPLE;
else if (target_type == TARGET_TYPE_QCN6122)
hdr->cmn.chip_type = CFR_CAPTURE_RADIO_SPRUCE;
else if (target_type == TARGET_TYPE_QCN9224)
hdr->cmn.chip_type = CFR_CAPTURE_RADIO_WAIKIKI;
else
hdr->cmn.chip_type = CFR_CAPTURE_RADIO_CYP;
}

查看文件

@@ -289,6 +289,57 @@ static void dump_freeze_tlv_v3(void *freeze_tlv, uint32_t cookie)
freeze->directed);
}
/**
* dump_freeze_tlv_v5() - Dump freeze TLV sent in enhanced DMA header
* @freeze_tlv: Freeze TLV sent from MAC to PHY
* @cookie: Index into lookup table
*
* Return: none
*/
static void dump_freeze_tlv_v5(void *freeze_tlv, uint32_t cookie)
{
struct macrx_freeze_capture_channel_v5 *freeze =
(struct macrx_freeze_capture_channel_v5 *)freeze_tlv;
cfr_debug("<DBRCOMP><FREEZE><%u>\n"
"freeze: %d capture_reason: %d packet_type: 0x%x\n"
"packet_subtype: 0x%x sw_peer_id_valid: %d sw_peer_id: %d\n"
"phy_ppdu_id: 0x%04x packet_ta_lower_16: 0x%04x\n"
"packet_ta_mid_16: 0x%04x packet_ta_upper_16: 0x%04x\n"
"packet_ra_lower_16: 0x%04x packet_ra_mid_16: 0x%04x\n"
"packet_ra_upper_16: 0x%04x\n"
"tsf_timestamp_15_0: 0x%04x\n"
"tsf_timestamp_31_16: 0x%04x\n"
"tsf_timestamp_47_32: 0x%04x\n"
"tsf_timestamp_63_48: 0x%04x\n"
"user_index_or_user_mask_5_0: 0x%04x\n"
"directed: %d\n"
"user_mask_21_6: 0x%04x\n"
"user_mask_36_22: 0x%04x\n",
cookie,
freeze->freeze,
freeze->capture_reason,
freeze->packet_type,
freeze->packet_sub_type,
freeze->sw_peer_id_valid,
freeze->sw_peer_id,
freeze->phy_ppdu_id,
freeze->packet_ta_lower_16,
freeze->packet_ta_mid_16,
freeze->packet_ta_upper_16,
freeze->packet_ra_lower_16,
freeze->packet_ra_mid_16,
freeze->packet_ra_upper_16,
freeze->tsf_timestamp_15_0,
freeze->tsf_timestamp_31_16,
freeze->tsf_timestamp_47_32,
freeze->tsf_timestamp_63_48,
freeze->user_index_or_user_mask_5_0,
freeze->directed,
freeze->user_mask_21_6,
freeze->user_mask_36_22);
}
/**
* dump_mu_rx_info() - Dump MU info in enhanced DMA header
* @mu_rx_user_info: MU info sent by ucode
@@ -332,6 +383,61 @@ static void dump_mu_rx_info(void *mu_rx_user_info,
}
}
/**
* dump_mu_rx_info_v2() - Dump MU info in enhanced DMA header
* @mu_rx_user_info: MU info sent by ucode
* @mu_rx_num_users: Number of MU users in UL-MU-PPDU
* @cookie: Index into lookup table
*
* Return: none
*/
static void dump_mu_rx_info_v2(void *mu_rx_user_info,
uint8_t mu_rx_num_users,
uint32_t cookie)
{
uint8_t i;
struct uplink_user_setup_info_v2 *ul_mu_user_info =
(struct uplink_user_setup_info_v2 *)mu_rx_user_info;
for (i = 0 ; i < mu_rx_num_users; i++) {
cfr_debug("<DBRCOMP><MU><%u>\n"
"<user_id:%d>\n"
"bw_info_valid = %d\n"
"uplink_receive_type = %d\n"
"uplink_11ax_mcs = %d\n"
"nss = %d\n"
"stream_offset = %d\n"
"sta_dcm = %d\n"
"sta_coding = %d\n"
"ru_type_80_0 = %d\n"
"ru_type_80_1 = %d\n"
"ru_type_80_2 = %d\n"
"ru_type_80_3 = %d\n"
"ru_start_index_80_0 = %d\n"
"ru_start_index_80_1 = %d\n"
"ru_start_index_80_2 = %d\n"
"ru_start_index_80_3 = %d\n",
cookie,
i,
ul_mu_user_info->bw_info_valid,
ul_mu_user_info->uplink_receive_type,
ul_mu_user_info->uplink_11ax_mcs,
ul_mu_user_info->nss,
ul_mu_user_info->stream_offset,
ul_mu_user_info->sta_dcm,
ul_mu_user_info->sta_coding,
ul_mu_user_info->ru_type_80_0,
ul_mu_user_info->ru_type_80_1,
ul_mu_user_info->ru_type_80_2,
ul_mu_user_info->ru_type_80_3,
ul_mu_user_info->ru_start_index_80_0,
ul_mu_user_info->ru_start_index_80_1,
ul_mu_user_info->ru_start_index_80_2,
ul_mu_user_info->ru_start_index_80_3);
ul_mu_user_info += sizeof(struct uplink_user_setup_info_v2);
}
}
static void dump_metadata(struct csi_cfr_header *header, uint32_t cookie)
{
uint8_t user_id, chain_id;
@@ -444,49 +550,98 @@ static void dump_enh_dma_hdr(struct whal_cfir_enhanced_hdr *dma_hdr,
uint32_t cookie)
{
if (!error) {
cfr_debug("<DBRCOMP><%u>\n"
"Tag: 0x%02x Length: %d udone: %d\n"
"ctype: %d preamble: %d Nss: %d\n"
"num_chains: %d bw: %d peervalid: %d\n"
"peer_id: %d ppdu_id: 0x%04x total_bytes: %d\n"
"header_version: %d target_id: %d cfr_fmt: %d\n"
"mu_rx_data_incl: %d freeze_data_incl: %d\n"
"mu_rx_num_users: %d decimation_factor: %d\n"
"freeze_tlv_version: %d\n",
cookie,
dma_hdr->tag,
dma_hdr->length,
dma_hdr->upload_done,
dma_hdr->capture_type,
dma_hdr->preamble_type,
dma_hdr->nss,
dma_hdr->num_chains,
dma_hdr->upload_pkt_bw,
dma_hdr->sw_peer_id_valid,
dma_hdr->sw_peer_id,
dma_hdr->phy_ppdu_id,
dma_hdr->total_bytes,
dma_hdr->header_version,
dma_hdr->target_id,
dma_hdr->cfr_fmt,
dma_hdr->mu_rx_data_incl,
dma_hdr->freeze_data_incl,
dma_hdr->mu_rx_num_users,
dma_hdr->decimation_factor,
dma_hdr->freeze_tlv_version);
if (dma_hdr->header_version == UPLOAD_HEADER_VERSION_9) {
cfr_debug("<DBRCOMP><%u>\n"
"Tag: 0x%02x Length: %d udone: %d\n"
"ctype: %d preamble: %d Nss: %d\n"
"num_chains: %d bw: %d peervalid: %d\n"
"peer_id: %d ppdu_id: 0x%04x\n"
"total_bytes: %d header_version: %d\n"
"target_id: %d cfr_fmt: %d\n"
"mu_rx_data_incl: %d freeze_data_incl: %d\n"
"mu_rx_num_users: %d decimation_factor: %d\n"
"freeze_tlv_version: %d\n"
"he_ltf_type: %u ext_preamble_type = %u\n",
cookie,
dma_hdr->tag,
dma_hdr->length,
dma_hdr->upload_done,
dma_hdr->capture_type,
dma_hdr->preamble_type,
dma_hdr->nss,
dma_hdr->num_chains,
dma_hdr->upload_pkt_bw,
dma_hdr->sw_peer_id_valid,
dma_hdr->sw_peer_id,
dma_hdr->phy_ppdu_id,
dma_hdr->total_bytes,
dma_hdr->header_version,
dma_hdr->target_id,
dma_hdr->cfr_fmt,
dma_hdr->mu_rx_data_incl,
dma_hdr->freeze_data_incl,
dma_hdr->mu_rx_num_users,
dma_hdr->decimation_factor,
dma_hdr->freeze_tlv_version,
dma_hdr->rsvd3,
dma_hdr->rsvd4);
} else {
cfr_debug("<DBRCOMP><%u>\n"
"Tag: 0x%02x Length: %d udone: %d\n"
"ctype: %d preamble: %d Nss: %d\n"
"num_chains: %d bw: %d peervalid: %d\n"
"peer_id: %d ppdu_id: 0x%04x\n"
"total_bytes: %d header_version: %d\n"
"target_id: %d cfr_fmt: %d\n"
"mu_rx_data_incl: %d freeze_data_incl: %d\n"
"mu_rx_num_users: %d decimation_factor: %d\n"
"freeze_tlv_version: %d\n",
cookie,
dma_hdr->tag,
dma_hdr->length,
dma_hdr->upload_done,
dma_hdr->capture_type,
dma_hdr->preamble_type,
dma_hdr->nss,
dma_hdr->num_chains,
dma_hdr->upload_pkt_bw,
dma_hdr->sw_peer_id_valid,
dma_hdr->sw_peer_id,
dma_hdr->phy_ppdu_id,
dma_hdr->total_bytes,
dma_hdr->header_version,
dma_hdr->target_id,
dma_hdr->cfr_fmt,
dma_hdr->mu_rx_data_incl,
dma_hdr->freeze_data_incl,
dma_hdr->mu_rx_num_users,
dma_hdr->decimation_factor,
dma_hdr->freeze_tlv_version);
}
if (dma_hdr->freeze_data_incl) {
if (dma_hdr->freeze_tlv_version ==
MACRX_FREEZE_TLV_VERSION_3)
dump_freeze_tlv_v3(freeze_tlv, cookie);
else if (dma_hdr->freeze_tlv_version ==
MACRX_FREEZE_TLV_VERSION_5)
dump_freeze_tlv_v5(freeze_tlv, cookie);
else
dump_freeze_tlv(freeze_tlv, cookie);
}
if (dma_hdr->mu_rx_data_incl)
if ((dma_hdr->mu_rx_data_incl) &&
(dma_hdr->freeze_tlv_version ==
MACRX_FREEZE_TLV_VERSION_5)) {
dump_mu_rx_info_v2(mu_rx_user_info,
dma_hdr->mu_rx_num_users,
cookie);
} else if (dma_hdr->mu_rx_data_incl) {
dump_mu_rx_info(mu_rx_user_info,
dma_hdr->mu_rx_num_users,
cookie);
}
} else {
cfr_err("<DBRCOMP><%u>\n"
"Tag: 0x%02x Length: %d udone: %d\n"
@@ -570,6 +725,11 @@ static QDF_STATUS check_dma_length(struct look_up_table *lut,
lut->payload_length <= MAPLE_MAX_DATA_LENGTH_BYTES) {
return QDF_STATUS_SUCCESS;
}
} else if (target_type == TARGET_TYPE_QCN9224) {
if (lut->header_length <= WAIKIKI_MAX_HEADER_LENGTH_WORDS &&
lut->payload_length <= WAIKIKI_MAX_DATA_LENGTH_BYTES) {
return QDF_STATUS_SUCCESS;
}
} else {
if (lut->header_length <= CYP_MAX_HEADER_LENGTH_WORDS &&
lut->payload_length <= CYP_MAX_DATA_LENGTH_BYTES) {
@@ -1077,6 +1237,10 @@ static bool enh_cfr_dbr_event_handler(struct wlan_objmgr_pdev *pdev,
if (dma_hdr.freeze_tlv_version == MACRX_FREEZE_TLV_VERSION_3) {
freeze_tlv_len =
sizeof(struct macrx_freeze_capture_channel_v3);
} else if (dma_hdr.freeze_tlv_version ==
MACRX_FREEZE_TLV_VERSION_5) {
freeze_tlv_len =
sizeof(struct macrx_freeze_capture_channel_v5);
} else {
freeze_tlv_len =
sizeof(struct macrx_freeze_capture_channel);
@@ -2040,6 +2204,11 @@ QDF_STATUS cfr_enh_init_pdev(struct wlan_objmgr_psoc *psoc,
pcfr->num_subbufs = STREAMFS_NUM_SUBBUF_SPRUCE;
pcfr->chip_type = CFR_CAPTURE_RADIO_SPRUCE;
pcfr->max_mu_users = SPRUCE_CFR_MU_USERS;
} else if (target_type == TARGET_TYPE_QCN9224) {
pcfr->subbuf_size = STREAMFS_MAX_SUBBUF_WAIKIKI;
pcfr->num_subbufs = STREAMFS_NUM_SUBBUF_WAIKIKI;
pcfr->chip_type = CFR_CAPTURE_RADIO_WAIKIKI;
pcfr->max_mu_users = WAIKIKI_CFR_MU_USERS;
} else {
pcfr->subbuf_size = STREAMFS_MAX_SUBBUF_CYP;
pcfr->num_subbufs = STREAMFS_NUM_SUBBUF_CYP;