mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
Merge a17d83f9bb on remote branch
Change-Id: I41407009f44c659423566d37c7f5a99051cad345
This commit is contained in:
commit
5294c2b484
6 changed files with 69 additions and 19 deletions
|
|
@ -1752,7 +1752,14 @@ static inline uint64_t gsi_read_event_ring_rp_ddr(struct gsi_evt_ring_props* pro
|
|||
static inline uint64_t gsi_read_event_ring_rp_reg(struct gsi_evt_ring_props* props,
|
||||
uint8_t id, int ee)
|
||||
{
|
||||
return gsi_readl(gsi_ctx->base + GSI_EE_n_EV_CH_k_CNTXT_4_OFFS(id, ee));
|
||||
uint64_t rp;
|
||||
|
||||
rp = gsi_readl(gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_4_OFFS(id, ee));
|
||||
rp |= ((uint64_t)gsi_readl(gsi_ctx->base +
|
||||
GSI_EE_n_EV_CH_k_CNTXT_5_OFFS(id, ee))) << 32;
|
||||
|
||||
return rp;
|
||||
}
|
||||
|
||||
int gsi_alloc_evt_ring(struct gsi_evt_ring_props *props, unsigned long dev_hdl,
|
||||
|
|
|
|||
|
|
@ -9191,6 +9191,8 @@ static int ipa3_attach_to_smmu(void)
|
|||
}
|
||||
}
|
||||
} else {
|
||||
ipa3_ctx->pdev = &ipa3_ctx->master_pdev->dev;
|
||||
ipa3_ctx->uc_pdev = &ipa3_ctx->master_pdev->dev;
|
||||
IPADBG("smmu is disabled\n");
|
||||
}
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -1357,7 +1357,8 @@ static ssize_t ipa3_read_stats(struct file *file, char __user *ubuf,
|
|||
"lan_repl_rx_empty=%u\n"
|
||||
"flow_enable=%u\n"
|
||||
"flow_disable=%u\n"
|
||||
"rx_page_drop_cnt=%u\n",
|
||||
"rx_page_drop_cnt=%u\n"
|
||||
"lower_order=%u\n",
|
||||
ipa3_ctx->stats.tx_sw_pkts,
|
||||
ipa3_ctx->stats.tx_hw_pkts,
|
||||
ipa3_ctx->stats.tx_non_linear,
|
||||
|
|
@ -1374,7 +1375,8 @@ static ssize_t ipa3_read_stats(struct file *file, char __user *ubuf,
|
|||
ipa3_ctx->stats.lan_repl_rx_empty,
|
||||
ipa3_ctx->stats.flow_enable,
|
||||
ipa3_ctx->stats.flow_disable,
|
||||
ipa3_ctx->stats.rx_page_drop_cnt
|
||||
ipa3_ctx->stats.rx_page_drop_cnt,
|
||||
ipa3_ctx->stats.lower_order
|
||||
);
|
||||
cnt += nbytes;
|
||||
|
||||
|
|
|
|||
|
|
@ -2042,6 +2042,27 @@ fail_kmem_cache_alloc:
|
|||
}
|
||||
}
|
||||
|
||||
static struct page *ipa3_alloc_page(
|
||||
gfp_t flag, u32 *page_order, bool try_lower)
|
||||
{
|
||||
struct page *page = NULL;
|
||||
u32 p_order = *page_order;
|
||||
|
||||
page = __dev_alloc_pages(flag, p_order);
|
||||
/* We will only try 1 page order lower. */
|
||||
if (unlikely(!page)) {
|
||||
if (try_lower && p_order > 0) {
|
||||
p_order = p_order - 1;
|
||||
page = __dev_alloc_pages(flag, p_order);
|
||||
if (likely(page))
|
||||
ipa3_ctx->stats.lower_order++;
|
||||
}
|
||||
}
|
||||
*page_order = p_order;
|
||||
return page;
|
||||
}
|
||||
|
||||
|
||||
static struct ipa3_rx_pkt_wrapper *ipa3_alloc_rx_pkt_page(
|
||||
gfp_t flag, bool is_tmp_alloc)
|
||||
{
|
||||
|
|
@ -2052,12 +2073,18 @@ static struct ipa3_rx_pkt_wrapper *ipa3_alloc_rx_pkt_page(
|
|||
flag);
|
||||
if (unlikely(!rx_pkt))
|
||||
return NULL;
|
||||
rx_pkt->len = PAGE_SIZE << IPA_WAN_PAGE_ORDER;
|
||||
rx_pkt->page_data.page = __dev_alloc_pages(flag,
|
||||
IPA_WAN_PAGE_ORDER);
|
||||
|
||||
rx_pkt->page_data.page_order = IPA_WAN_PAGE_ORDER;
|
||||
/* Try a lower order page for order 3 pages in case allocation fails. */
|
||||
rx_pkt->page_data.page = ipa3_alloc_page(flag,
|
||||
&rx_pkt->page_data.page_order,
|
||||
(is_tmp_alloc && rx_pkt->page_data.page_order == 3));
|
||||
|
||||
if (unlikely(!rx_pkt->page_data.page))
|
||||
goto fail_page_alloc;
|
||||
|
||||
rx_pkt->len = PAGE_SIZE << rx_pkt->page_data.page_order;
|
||||
|
||||
rx_pkt->page_data.dma_addr = dma_map_page(ipa3_ctx->pdev,
|
||||
rx_pkt->page_data.page, 0,
|
||||
rx_pkt->len, DMA_FROM_DEVICE);
|
||||
|
|
@ -2075,7 +2102,7 @@ static struct ipa3_rx_pkt_wrapper *ipa3_alloc_rx_pkt_page(
|
|||
return rx_pkt;
|
||||
|
||||
fail_dma_mapping:
|
||||
__free_pages(rx_pkt->page_data.page, IPA_WAN_PAGE_ORDER);
|
||||
__free_pages(rx_pkt->page_data.page, rx_pkt->page_data.page_order);
|
||||
fail_page_alloc:
|
||||
kmem_cache_free(ipa3_ctx->rx_pkt_wrapper_cache, rx_pkt);
|
||||
return NULL;
|
||||
|
|
@ -2769,8 +2796,7 @@ static void free_rx_page(void *chan_user_data, void *xfer_user_data)
|
|||
}
|
||||
dma_unmap_page(ipa3_ctx->pdev, rx_pkt->page_data.dma_addr,
|
||||
rx_pkt->len, DMA_FROM_DEVICE);
|
||||
__free_pages(rx_pkt->page_data.page,
|
||||
IPA_WAN_PAGE_ORDER);
|
||||
__free_pages(rx_pkt->page_data.page, rx_pkt->page_data.page_order);
|
||||
kmem_cache_free(ipa3_ctx->rx_pkt_wrapper_cache, rx_pkt);
|
||||
}
|
||||
|
||||
|
|
@ -2821,8 +2847,7 @@ static void ipa3_cleanup_rx(struct ipa3_sys_context *sys)
|
|||
rx_pkt->page_data.dma_addr,
|
||||
rx_pkt->len,
|
||||
DMA_FROM_DEVICE);
|
||||
__free_pages(rx_pkt->page_data.page,
|
||||
IPA_WAN_PAGE_ORDER);
|
||||
__free_pages(rx_pkt->page_data.page, rx_pkt->page_data.page_order);
|
||||
}
|
||||
kmem_cache_free(ipa3_ctx->rx_pkt_wrapper_cache,
|
||||
rx_pkt);
|
||||
|
|
@ -2842,7 +2867,7 @@ static void ipa3_cleanup_rx(struct ipa3_sys_context *sys)
|
|||
rx_pkt->len,
|
||||
DMA_FROM_DEVICE);
|
||||
__free_pages(rx_pkt->page_data.page,
|
||||
IPA_WAN_PAGE_ORDER);
|
||||
rx_pkt->page_data.page_order);
|
||||
kmem_cache_free(
|
||||
ipa3_ctx->rx_pkt_wrapper_cache,
|
||||
rx_pkt);
|
||||
|
|
@ -3642,8 +3667,7 @@ static struct sk_buff *handle_page_completion(struct gsi_chan_xfer_notify
|
|||
} else {
|
||||
dma_unmap_page(ipa3_ctx->pdev, rx_page.dma_addr,
|
||||
rx_pkt->len, DMA_FROM_DEVICE);
|
||||
__free_pages(rx_pkt->page_data.page,
|
||||
IPA_WAN_PAGE_ORDER);
|
||||
__free_pages(rx_pkt->page_data.page, rx_pkt->page_data.page_order);
|
||||
}
|
||||
rx_pkt->sys->free_rx_wrapper(rx_pkt);
|
||||
IPA_STATS_INC_CNT(ipa3_ctx->stats.rx_page_drop_cnt);
|
||||
|
|
@ -3671,7 +3695,7 @@ static struct sk_buff *handle_page_completion(struct gsi_chan_xfer_notify
|
|||
dma_unmap_page(ipa3_ctx->pdev, rx_page.dma_addr,
|
||||
rx_pkt->len, DMA_FROM_DEVICE);
|
||||
__free_pages(rx_pkt->page_data.page,
|
||||
IPA_WAN_PAGE_ORDER);
|
||||
rx_pkt->page_data.page_order);
|
||||
}
|
||||
rx_pkt->sys->free_rx_wrapper(rx_pkt);
|
||||
}
|
||||
|
|
@ -3696,7 +3720,7 @@ static struct sk_buff *handle_page_completion(struct gsi_chan_xfer_notify
|
|||
skb_shinfo(rx_skb)->nr_frags,
|
||||
rx_page.page, 0,
|
||||
size,
|
||||
PAGE_SIZE << IPA_WAN_PAGE_ORDER);
|
||||
PAGE_SIZE << rx_page.page_order);
|
||||
}
|
||||
} else {
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -190,13 +190,13 @@ int __ipa_commit_hdr_v3_0(void)
|
|||
|
||||
if (ipa3_generate_hdr_hw_tbl(&hdr_mem)) {
|
||||
IPAERR("fail to generate HDR HW TBL\n");
|
||||
goto end;
|
||||
goto failure_hdr;
|
||||
}
|
||||
|
||||
if (ipa3_generate_hdr_proc_ctx_hw_tbl(hdr_mem.phys_base, &ctx_mem,
|
||||
&aligned_ctx_mem)) {
|
||||
IPAERR("fail to generate HDR PROC CTX HW TBL\n");
|
||||
goto end;
|
||||
goto failure_hdr_proc;
|
||||
}
|
||||
|
||||
/* IC to close the coal frame before HPS Clear if coal is enabled */
|
||||
|
|
@ -322,6 +322,7 @@ int __ipa_commit_hdr_v3_0(void)
|
|||
else
|
||||
rc = 0;
|
||||
|
||||
end:
|
||||
if (ipa3_ctx->hdr_tbl_lcl) {
|
||||
dma_free_coherent(ipa3_ctx->pdev, hdr_mem.size, hdr_mem.base,
|
||||
hdr_mem.phys_base);
|
||||
|
|
@ -333,6 +334,9 @@ int __ipa_commit_hdr_v3_0(void)
|
|||
ipa3_ctx->hdr_mem.base,
|
||||
ipa3_ctx->hdr_mem.phys_base);
|
||||
ipa3_ctx->hdr_mem = hdr_mem;
|
||||
} else {
|
||||
dma_free_coherent(ipa3_ctx->pdev, hdr_mem.size,
|
||||
hdr_mem.base,hdr_mem.phys_base);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -347,10 +351,12 @@ int __ipa_commit_hdr_v3_0(void)
|
|||
ipa3_ctx->hdr_proc_ctx_mem.base,
|
||||
ipa3_ctx->hdr_proc_ctx_mem.phys_base);
|
||||
ipa3_ctx->hdr_proc_ctx_mem = ctx_mem;
|
||||
} else {
|
||||
dma_free_coherent(ipa3_ctx->pdev, ctx_mem.size,
|
||||
ctx_mem.base,ctx_mem.phys_base);
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
if (coal_cmd_pyld)
|
||||
ipahal_destroy_imm_cmd(coal_cmd_pyld);
|
||||
|
||||
|
|
@ -361,6 +367,12 @@ end:
|
|||
ipahal_destroy_imm_cmd(hdr_cmd_pyld);
|
||||
|
||||
return rc;
|
||||
|
||||
failure_hdr_proc:
|
||||
dma_free_coherent(ipa3_ctx->pdev, hdr_mem.size, hdr_mem.base,
|
||||
hdr_mem.phys_base);
|
||||
failure_hdr:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int __ipa_add_hdr_proc_ctx(struct ipa_hdr_proc_ctx_add *proc_ctx,
|
||||
|
|
|
|||
|
|
@ -506,11 +506,13 @@ enum ipa3_wdi_polling_mode {
|
|||
* @page: skb page
|
||||
* @dma_addr: DMA address of this Rx packet
|
||||
* @is_tmp_alloc: skb page from tmp_alloc or recycle_list
|
||||
* @page_order: page order associated with the page.
|
||||
*/
|
||||
struct ipa_rx_page_data {
|
||||
struct page *page;
|
||||
dma_addr_t dma_addr;
|
||||
bool is_tmp_alloc;
|
||||
u32 page_order;
|
||||
};
|
||||
|
||||
struct ipa3_active_client_htable_entry {
|
||||
|
|
@ -1446,6 +1448,7 @@ struct ipa3_stats {
|
|||
u32 tx_non_linear;
|
||||
u32 rx_page_drop_cnt;
|
||||
struct ipa3_page_recycle_stats page_recycle_stats[2];
|
||||
u64 lower_order;
|
||||
};
|
||||
|
||||
/* offset for each stats */
|
||||
|
|
|
|||
Loading…
Reference in a new issue