diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath11k/ce.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath11k/ce.c | 58 | 
1 files changed, 56 insertions, 2 deletions
| diff --git a/drivers/net/wireless/ath/ath11k/ce.c b/drivers/net/wireless/ath/ath11k/ce.c index 987c65010272..de8b632b058c 100644 --- a/drivers/net/wireless/ath/ath11k/ce.c +++ b/drivers/net/wireless/ath/ath11k/ce.c @@ -187,6 +187,59 @@ const struct ce_attr ath11k_host_ce_config_qca6390[] = {  }; +const struct ce_attr ath11k_host_ce_config_qcn9074[] = { +	/* CE0: host->target HTC control and raw streams */ +	{ +		.flags = CE_ATTR_FLAGS, +		.src_nentries = 16, +		.src_sz_max = 2048, +		.dest_nentries = 0, +	}, + +	/* CE1: target->host HTT + HTC control */ +	{ +		.flags = CE_ATTR_FLAGS, +		.src_nentries = 0, +		.src_sz_max = 2048, +		.dest_nentries = 512, +		.recv_cb = ath11k_htc_rx_completion_handler, +	}, + +	/* CE2: target->host WMI */ +	{ +		.flags = CE_ATTR_FLAGS, +		.src_nentries = 0, +		.src_sz_max = 2048, +		.dest_nentries = 32, +		.recv_cb = ath11k_htc_rx_completion_handler, +	}, + +	/* CE3: host->target WMI (mac0) */ +	{ +		.flags = CE_ATTR_FLAGS, +		.src_nentries = 32, +		.src_sz_max = 2048, +		.dest_nentries = 0, +	}, + +	/* CE4: host->target HTT */ +	{ +		.flags = CE_ATTR_FLAGS | CE_ATTR_DIS_INTR, +		.src_nentries = 2048, +		.src_sz_max = 256, +		.dest_nentries = 0, +	}, + +	/* CE5: target->host pktlog */ +	{ +		.flags = CE_ATTR_FLAGS, +		.src_nentries = 0, +		.src_sz_max = 2048, +		.dest_nentries = 512, +		.recv_cb = ath11k_dp_htt_htc_t2h_msg_handler, +	}, +}; +  static bool ath11k_ce_need_shadow_fix(int ce_id)  {  	/* only ce4 needs shadow workaroud*/ @@ -455,7 +508,7 @@ static void ath11k_ce_srng_msi_ring_params_setup(struct ath11k_base *ab, u32 ce_  						 struct hal_srng_params *ring_params)  {  	u32 msi_data_start; -	u32 msi_data_count; +	u32 msi_data_count, msi_data_idx;  	u32 msi_irq_start;  	u32 addr_lo;  	u32 addr_hi; @@ -469,10 +522,11 @@ static void ath11k_ce_srng_msi_ring_params_setup(struct ath11k_base *ab, u32 ce_  		return;  	ath11k_get_msi_address(ab, &addr_lo, &addr_hi); +	ath11k_get_ce_msi_idx(ab, ce_id, &msi_data_idx);  	ring_params->msi_addr = addr_lo;  	ring_params->msi_addr |= (dma_addr_t)(((uint64_t)addr_hi) << 32); -	ring_params->msi_data = (ce_id % msi_data_count) + msi_data_start; +	ring_params->msi_data = (msi_data_idx % msi_data_count) + msi_data_start;  	ring_params->flags |= HAL_SRNG_FLAGS_MSI_INTR;  } | 
