aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch')
-rw-r--r--package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch b/package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch
new file mode 100644
index 0000000..5bd8833
--- /dev/null
+++ b/package/kernel/mac80211/patches/309-ath10k-remove-shadow-copy-of-CE-descriptors-for-sour.patch
@@ -0,0 +1,90 @@
+From: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
+Date: Fri, 23 Oct 2015 18:01:06 +0530
+Subject: [PATCH] ath10k: remove shadow copy of CE descriptors for source
+ ring
+
+For the messages from host to target, shadow copy of CE descriptors
+are maintained in source ring. Before writing actual CE descriptor,
+first shadow copy is filled and then it is copied to CE address space.
+To optimize in download path and to reduce d-cache pressure, removing
+shadow copy of CE descriptors. This will also reduce driver memory
+consumption by 33KB during on device probing.
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
+Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
+---
+
+--- a/drivers/net/wireless/ath/ath10k/ce.c
++++ b/drivers/net/wireless/ath/ath10k/ce.c
+@@ -921,27 +921,6 @@ ath10k_ce_alloc_src_ring(struct ath10k *
+ src_ring->base_addr_ce_space_unaligned,
+ CE_DESC_RING_ALIGN);
+
+- /*
+- * Also allocate a shadow src ring in regular
+- * mem to use for faster access.
+- */
+- src_ring->shadow_base_unaligned =
+- kmalloc((nentries * sizeof(struct ce_desc) +
+- CE_DESC_RING_ALIGN), GFP_KERNEL);
+- if (!src_ring->shadow_base_unaligned) {
+- dma_free_coherent(ar->dev,
+- (nentries * sizeof(struct ce_desc) +
+- CE_DESC_RING_ALIGN),
+- src_ring->base_addr_owner_space,
+- src_ring->base_addr_ce_space);
+- kfree(src_ring);
+- return ERR_PTR(-ENOMEM);
+- }
+-
+- src_ring->shadow_base = PTR_ALIGN(
+- src_ring->shadow_base_unaligned,
+- CE_DESC_RING_ALIGN);
+-
+ return src_ring;
+ }
+
+@@ -1120,7 +1099,6 @@ void ath10k_ce_free_pipe(struct ath10k *
+ struct ath10k_ce_pipe *ce_state = &ar_pci->ce_states[ce_id];
+
+ if (ce_state->src_ring) {
+- kfree(ce_state->src_ring->shadow_base_unaligned);
+ dma_free_coherent(ar->dev,
+ (ce_state->src_ring->nentries *
+ sizeof(struct ce_desc) +
+--- a/drivers/net/wireless/ath/ath10k/ce.h
++++ b/drivers/net/wireless/ath/ath10k/ce.h
+@@ -100,12 +100,6 @@ struct ath10k_ce_ring {
+
+ /* CE address space */
+ u32 base_addr_ce_space;
+- /*
+- * Start of shadow copy of descriptors, within regular memory.
+- * Aligned to descriptor-size boundary.
+- */
+- void *shadow_base_unaligned;
+- struct ce_desc *shadow_base;
+
+ /* keep last */
+ void *per_transfer_context[0];
+--- a/drivers/net/wireless/ath/ath10k/pci.c
++++ b/drivers/net/wireless/ath/ath10k/pci.c
+@@ -1594,7 +1594,6 @@ static void ath10k_pci_tx_pipe_cleanup(s
+ struct ath10k_pci *ar_pci;
+ struct ath10k_ce_pipe *ce_pipe;
+ struct ath10k_ce_ring *ce_ring;
+- struct ce_desc *ce_desc;
+ struct sk_buff *skb;
+ int i;
+
+@@ -1609,10 +1608,6 @@ static void ath10k_pci_tx_pipe_cleanup(s
+ if (!pci_pipe->buf_sz)
+ return;
+
+- ce_desc = ce_ring->shadow_base;
+- if (WARN_ON(!ce_desc))
+- return;
+-
+ for (i = 0; i < ce_ring->nentries; i++) {
+ skb = ce_ring->per_transfer_context[i];
+ if (!skb)