c6e2e60e858efa8dd92d94f5d442068fb12b9967 |
|
13-Sep-2014 |
Kalle Valo <kvalo@qca.qualcomm.com> |
ath10k: fix use of multiple blank lines Fixes checkpatch warnings: CHECK: Please don't use multiple blank lines Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
7aa7a72a23679abf1cea9b3b65a8921244e769a7 |
|
25-Aug-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: improve logging to include dev id This makes it a lot easier to log and debug messages if there's more than 1 ath10k device on a system. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
728f95eef5238bffdb20e511f5cd553321d404c3 |
|
22-Aug-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: rework posting pci rx buffers It was possible on a host system running low on memory to end up with no rx buffers on pci pipes. This makes the driver more robust as it won't fail to start if it can't allocate all rx buffers right away. If it is fatal then upper layers will notice trouble anyway. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
145cc1214a271c72b81a064f4d65c3cf612e941e |
|
22-Aug-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: split ce irq/handler setup It doesn't make much sense to overwrite send_cb and recv_cb callbacks over and over again whenever transport starts. Just make sure to unmask copy engine interrupts when starting. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
c0c378f9907c9e52aa95a87ac4622039a84bac99 |
|
07-Aug-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: remove target soc ps code The soc powersave was disabled by default. It never was fully tested. Some hw apparently had problems with it and the implementation itself had a possible race. Just remove the refcounting and simply wake up the device when probing and put to sleep when removing. kvalo: make ath10k_pci_wake() and _sleep() static Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
993619443774f7ef4df3b98655df4c3bf298548c |
|
14-Jul-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: sanitize tx ring index access properly The tx ring index was immediately trimmed with a bitmask. This discarded the 0xFFFFFFFF error case (which theoretically can happen when a device is abruptly disconnected) and led to using an invalid tx ring index. This could lead to memory corruption. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
08b8aa0931830cc4b96b47f884fe623aef5c4b84 |
|
26-May-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: abort incomplete scatter-gather pci tx properly This prevents leaving incomplete scatter-gather transfer on CE rings which can lead firmware to crash. Reported-By: Avery Pennarun <apenwarr@gmail.com> Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
25d0dbcbd5c746631ec1ee08bbbc4eba86bb9163 |
|
28-Mar-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: split ce initialization and allocation Definitions by which copy engine structure are allocated do not change so it doesn't make much sense to re-create those structures each time device is booted (e.g. due to firmware recovery). This should decrease chance of memory allocation failures. While at it remove per_transfer_context pointer indirection. The array has been trailing the copy engine ringbuffer structure anyway. This also saves pointer size worth of bytes for each copy engine ringbuffer. Reported-By: Avery Pennarun <apenwarr@gmail.com> Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
68c03249f388aafe74f0e87e2743294d4384c00c |
|
28-Mar-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: convert pci_alloc_consistent() to dma_alloc_coherent() This allows to use GFP_KERNEL allocation. This should decrease chance of allocation failure, e.g. during firmware recovery. Reported-By: Avery Pennarun <apenwarr@gmail.com> Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
a16942e63008875a6a057ea2973becd261ed0c4e |
|
27-Feb-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: bypass htc for htt tx path Going through full htc tx path for htt tx is a waste of resources. By skipping it it's possible to easily submit scatter-gather to the pci hif for reduced host cpu load and improved performance. The new approach uses dma pool to store the following metadata for each tx request: * msdu fragment list * htc header * htt tx command The htt tx command contains a msdu prefetch. Instead of copying it original mapped msdu address is used to submit a second scatter-gather item to hif to make a complete htt tx command. The htt tx command itself hands over dma mapped pointers to msdus and completion of the command itself doesn't mean the frame has been sent and can be unmapped/freed. This is why htc tx completion is skipped for htt tx as all tx related resources are freed upon htt tx completion indication event (which also implicitly means htt tx command itself was completed). Since now each htt tx request effectively consists of 2 copy engine items CE_HTT_H2T_MSG_SRC_NENTRIES is updated to allow maximum of TARGET_10X_NUM_MSDU_DESC msdus being queued. This keeps the tx path resource management simple. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
726346fc713498a84c4d591fce9f1fbe38bf2a44 |
|
27-Feb-2014 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: replace send_head() with tx_sg() PCI is capable of handling scatter-gather lists. This can be used to avoid copying memory. Change the name of the callback while at to reflect its purpose. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
5d1aa94680f1bf581a4cea2c7137a1423f676795 |
|
25-Nov-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: defer irq registration until hif start() It's impossible to rely on disable_irq() and/or CE interrupt masking with legacy shared interrupts. Other devices sharing the same irq line may assert it while ath10k is doing something that requires no interrupts. Irq handlers are now registered after all preparations are complete so spurious/foreign interrupts won't do any harm. The handlers are unregistered when no interrupts are required (i.e. during driver teardown). This also removes the ability to receive FW early indication (since interrupts are not registered until early boot is complete). This is not mission critical (it's more of a hint that early boot failed due to unexpected FW crash) and will be re-added in a follow up patch. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
98563d5aafa45498f8c2f6885b2bd03eab648f19 |
|
08-Nov-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: re-arrange PCI init code This patch moves irq registering after necessary structures have been allocated and initialized. This should prevent interrupts from causing tasklet access invalid memory pointers. Reported-By: Ben Greear <greearb@candelatech.com> Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
28642f428100fa602d08714d0005b6a5a4e47e9b |
|
08-Nov-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: propagate ath10k_ce_disable_interrupts() errors This shouldn't be silenced. This will be necessary for PCI init code reordering. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
1d34902192bf31741729184dd459eccdba5dbc83 |
|
08-Nov-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: fix ath10k_ce_init() failpath Make sure to put target back to sleep. This was a minor issue as it didn't really matter if we put target back to sleep at this point. It just looked wrong. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
93e0daa0ee3ef53a45293e60b2eaf770d7bb1d53 |
|
08-Nov-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: make sure to mask all CE irqs CE error interrupts were not disabled. This could lead to invalid memory accesses / memory corruption. Also make sure CE watermark interrupts are also disabled. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
fad6ed7867f41b2a9a7fc6cd01db37f33a29da1e |
|
08-Nov-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: remove ar_pci->ce_count It wasn't really useful to have it to begin with. This makes it a little simpler to re-arrange PCI init code as some function depended on ar_pci->ce_count being set. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
60f85bea25d5e9915da8b0c87275143b317cec3b |
|
16-Oct-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: fix FW crashes on heavy TX on 10.1.389 AP FW 10.1.389 firmware has some differences in calculation of number of outstanding HTT TX completions. This led to FW crashes of 10.1.389 while main firmware branch was unnaffected. The patch makes sure ath10k doesn't queue up more MSDUs than it should. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
3efcb3b40cc40091661eb376be175a6971616f6b |
|
02-Oct-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: remove num_sends_allowed The value provided by num_sends_allowed is now derived from CE source ringbuffer state. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
2e761b5a5222071d55ebccf65f93d281e4c11958 |
|
02-Oct-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: remove ce_sendlist_send It is completely pointless to keep this function around. It doesn't do anything different than ce_send except it introduces more overhead. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
e9bb0aa39bce2f0a159c562c322c2d2746e6560d |
|
08-Sep-2013 |
Kalle Valo <kvalo@qca.qualcomm.com> |
ath10k: delete struct ce_sendlist struct ce_sendlist is useless as we always add just one buffer onto it. And most importantly, it's ugly as it doesn't use skb properly. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
24cfade11e20255f21ae1ef50591208ab3fe6a4c |
|
08-Sep-2013 |
Kalle Valo <kvalo@qca.qualcomm.com> |
ath10k: add boot debug messages to pci.c and ce.c To unify all boot related debug messages into one debug level. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
5440ce253779fd42ae3b0df64d77430274079ab7 |
|
03-Sep-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: prevent CE from looping indefinitely The double while() could end up running forever. Inner while() would complete very fast. However the completion processing could take enough time for more completions to flow in. In that case the outer while() would not terminate and run again, and again. This could happen especially on a slow host system. This could lead to a system freeze during heavy traffic. Note: this doesn't solve all known starvation issues yet. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
e9780367b0f43536b460fd83931f7c111ec99470 |
|
01-Sep-2013 |
Kalle Valo <kvalo@qca.qualcomm.com> |
ath10k: simplify ath10k_ce_init() wake up handling ath10k_ce_init() and the functions it calls wakeup the chip multiple times. Simplify that to call ath10k_pci_wake() only once. This also makes it easier to add error handling when wakeup fails. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
3aebe54b1c2158bd20c361501de7785c51c65dbe |
|
01-Sep-2013 |
Kalle Valo <kvalo@qca.qualcomm.com> |
ath10k: convert ath10k_pci_wake() to return We should not try to access hw if wakeup fails so add proper error checking for that. Also add the timeout lenght to the warning message. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
a40d3e420d50156b7a43e66d5f5b40c444ebc5da |
|
01-Sep-2013 |
Kalle Valo <kvalo@qca.qualcomm.com> |
ath10k: clean up ath10k_ce_completed_send_next_nolock() The error handling was just weird, simplify it. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
d21fb959d140484beb755854e7bae2f2b3cd44cb |
|
27-Aug-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: rename ce_ring_state to ath10k_ce_ring The new naming makes more sense. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
2aa39115737be4e57d80a404490d79bd1981777f |
|
27-Aug-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: rename ce_state to ath10k_ce_pipe The new naming makes more sense. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
774c7e8c2b2f648ef51aa5896fa350b6300c3043 |
|
27-Aug-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: remove ce_op_state It was only written to and never read back. No use to keep it around. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
39e4086a7365b933265839090b3468c9ecc52a42 |
|
27-Aug-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: use inline ce_state structure Simplifies memory managament of ce_state. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
ba7ee55f8c10e07dd15dbfd7ac20a300bb673316 |
|
13-Aug-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: print errcode when CE ring setup fails This makes it possible to see the reason why the setup fails. It also adheres to code style of error checking in ath drivers. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
9c5ae6915d6f8cf682006e4067de80d22431d92e |
|
09-Aug-2013 |
Janusz Dziedzic <janusz.dziedzic@tieto.com> |
ath10k: check allocation errors in CE Handle pci_alloc_consistent(), kmalloc() errors in copy engine module. Found during code review. Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
57a8930aecb641b7cfabd199c2c998b13894ba74 |
|
07-Aug-2013 |
Bartosz Markowski <bartosz.markowski@tieto.com> |
ath10k: Remove qca98xx hw1.0 support Since the firmware support is no longer available for hw1.0, drop all code (especially workarounds) for those units. Signed-off-by: Bartosz Markowski <bartosz.markowski@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
432358ed1d18c19dbf89008325ff6ba662d0996e |
|
31-Jul-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: prevent using invalid ringbuffer indexes If the device is removed and hotplug fails ioread32() will return 0xFFFFFFFF. In that case reading ringbuffer during device bringup led to out-of-bounds addressing of a ringbuffer array that in turn led to a paging failure. This could be reproduced by the following: * boot without acpi/prevent hotplug from working * insert and manually detect (pci rescan) the device * remove the device physically * load ath10k driver * kernel crashed Ringbuffer index reading is now protected by using an appropriate mask to prevent addressing an invalid array index. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
cba4ca7553deb8273d393645a1be8b01d3761543 |
|
05-Jul-2013 |
Michal Kazior <michal.kazior@tieto.com> |
ath10k: fix typo in define name Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|
5e3dd157d7e70f0e3cea3f2573ed69fb156a19d5 |
|
12-Jun-2013 |
Kalle Valo <kvalo@qca.qualcomm.com> |
ath10k: mac80211 driver for Qualcomm Atheros 802.11ac CQA98xx devices Here's a new mac80211 driver for Qualcomm Atheros 802.11ac QCA98xx devices. A major difference from ath9k is that there's now a firmware and that's why we had to implement a new driver. The wiki page for the driver is: http://wireless.kernel.org/en/users/Drivers/ath10k The driver has had many authors, they are listed here alphabetically: Bartosz Markowski <bartosz.markowski@tieto.com> Janusz Dziedzic <janusz.dziedzic@tieto.com> Kalle Valo <kvalo@qca.qualcomm.com> Marek Kwaczynski <marek.kwaczynski@tieto.com> Marek Puzyniak <marek.puzyniak@tieto.com> Michal Kazior <michal.kazior@tieto.com> Sujith Manoharan <c_manoha@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
|