Merge c9428af37c on remote branch

Change-Id: I12cd02d71306de1d50e43db55a7f77b518cda34f
This commit is contained in:
Linux Build Service Account 2021-07-16 07:32:28 -07:00
commit 7078b5db39

View file

@ -89,6 +89,8 @@
#define IPA_QMAP_ID_BYTE 0
#define IPA_MEM_ALLOC_RETRY 5
static struct sk_buff *ipa3_get_skb_ipa_rx(unsigned int len, gfp_t flags);
static void ipa3_replenish_wlan_rx_cache(struct ipa3_sys_context *sys);
static void ipa3_replenish_rx_cache(struct ipa3_sys_context *sys);
@ -3922,7 +3924,9 @@ static void ipa3_set_aggr_limit(struct ipa_sys_connect_params *in,
sys->ep->status.status_en = false;
sys->rx_buff_sz = IPA_GENERIC_RX_BUFF_SZ(adjusted_sz);
if (in->client == IPA_CLIENT_APPS_WAN_COAL_CONS)
if (in->client == IPA_CLIENT_APPS_WAN_COAL_CONS ||
(in->client == IPA_CLIENT_APPS_WAN_CONS &&
ipa3_ctx->ipa_hw_type <= IPA_HW_v4_2))
in->ipa_ep_cfg.aggr.aggr_hard_byte_limit_en = 1;
*aggr_byte_limit = sys->rx_buff_sz < *aggr_byte_limit ?
@ -4876,6 +4880,33 @@ fail_setup_event_ring:
return result;
}
static void *ipa3_ring_alloc(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp)
{
void *va_addr;
int retry_cnt = 0;
alloc:
va_addr = dma_alloc_coherent(dev, size, dma_handle, gfp);
if (!va_addr) {
if (retry_cnt < IPA_MEM_ALLOC_RETRY) {
IPADBG("Fail to dma alloc retry cnt = %d\n",
retry_cnt);
retry_cnt++;
goto alloc;
}
if (gfp == GFP_ATOMIC) {
gfp = GFP_KERNEL;
goto alloc;
}
IPAERR("fail to dma alloc %u bytes\n", size);
ipa_assert();
}
return va_addr;
}
static int ipa_gsi_setup_event_ring(struct ipa3_ep_context *ep,
u32 ring_size, gfp_t mem_flag)
{
@ -4892,13 +4923,8 @@ static int ipa_gsi_setup_event_ring(struct ipa3_ep_context *ep,
gsi_evt_ring_props.re_size = GSI_EVT_RING_RE_SIZE_16B;
gsi_evt_ring_props.ring_len = ring_size;
gsi_evt_ring_props.ring_base_vaddr =
dma_alloc_coherent(ipa3_ctx->pdev, gsi_evt_ring_props.ring_len,
ipa3_ring_alloc(ipa3_ctx->pdev, gsi_evt_ring_props.ring_len,
&evt_dma_addr, mem_flag);
if (!gsi_evt_ring_props.ring_base_vaddr) {
IPAERR("fail to dma alloc %u bytes\n",
gsi_evt_ring_props.ring_len);
return -ENOMEM;
}
gsi_evt_ring_props.ring_base_addr = evt_dma_addr;
/* copy mem info */
@ -5006,14 +5032,8 @@ static int ipa_gsi_setup_transfer_ring(struct ipa3_ep_context *ep,
gsi_channel_props.ring_len = ring_size;
gsi_channel_props.ring_base_vaddr =
dma_alloc_coherent(ipa3_ctx->pdev, gsi_channel_props.ring_len,
ipa3_ring_alloc(ipa3_ctx->pdev, gsi_channel_props.ring_len,
&dma_addr, mem_flag);
if (!gsi_channel_props.ring_base_vaddr) {
IPAERR("fail to dma alloc %u bytes\n",
gsi_channel_props.ring_len);
result = -ENOMEM;
goto fail_alloc_channel_ring;
}
gsi_channel_props.ring_base_addr = dma_addr;
/* copy mem info */
@ -5091,7 +5111,6 @@ fail_alloc_channel:
dma_free_coherent(ipa3_ctx->pdev, ep->gsi_mem_info.chan_ring_len,
ep->gsi_mem_info.chan_ring_base_vaddr,
ep->gsi_mem_info.chan_ring_base_addr);
fail_alloc_channel_ring:
fail_get_gsi_ep_info:
if (ep->gsi_evt_ring_hdl != ~0) {
gsi_dealloc_evt_ring(ep->gsi_evt_ring_hdl);