aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath10k/pci.c
Commit message (Collapse)AuthorAge
...
* ath10k: fix checkpatch warnings about parenthesis alignmentKalle Valo2014-09-18
| | | | | | CHECK: Alignment should match open parenthesis Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: remove diag_*_access functionsMichal Kazior2014-09-02
| | | | | | | | Remove the ugly _access functions. Being explicit is a good thing. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: kill tasklets after free_irqMichal Kazior2014-09-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 5c771e7454d148af35e8b4297d00f880de79ea49 introduced a regression. On some systems spurious interrupts could schedule a tasklet while tearing down leading to, e.g.: BUG: unable to handle kernel paging request at fe589030 IP: [<c1316fb0>] ioread32+0x30/0x40 ... Call Trace: [<fe576c1b>] ath10k_pci_tasklet+0x1b/0x60 [ath10k_pci] [<c1053fbe>] tasklet_action+0x9e/0xb0 [<c10534f1>] __do_softirq+0xf1/0x3f0 [<c1053400>] ? ftrace_raw_event_irq_handler_entry+0xa0/0xa0 [<c1004999>] do_softirq_own_stack+0x29/0x40 <IRQ> [<c1053a76>] irq_exit+0x86/0xb0 ... [<c132d522>] do_pci_disable_device+0x52/0x60 [<c132d57f>] pci_disable_device+0x4f/0xb0 [<c132a961>] ? __pci_set_master+0x51/0x80 [<fe5740b3>] ath10k_pci_release+0x33/0x40 [ath10k_pci] [<fe575d4b>] ath10k_pci_remove+0x7b/0x90 [ath10k_pci] Reported-by: Kalle Valo <kvalo@qca.qualcomm.com> Tested-by: Kalle Valo <kvalo@qca.qualcomm.com> Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: re-enable interrupts properly in hw recoveryMichal Kazior2014-09-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | Recent changes done to start/restart sequences broke hw recovery in some hw configurations. The pci transport was stopped twice however due to a workaround in the pci disabling code the disable/enable for first msi interrupt was not balanced. This ended up with irqs not being properly re-enabled and the following print out during recovery: ath10k: failed to receive control response completion, polling.. ath10k: Service connect timeout: -110 ath10k: Could not init core: -110 Legacy interrupt mode was unaffected while msi ranged mode would be partially crippled (it would miss fw indication interrupts but otherwise it worked fine). This fixes completely broken fw recovery for a single msi interrupt mode and fixes subsequent fw crash reports for msi range interrupt mode. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* Merge branch 'for-linville' of git://github.com/kvalo/athJohn W. Linville2014-08-28
|\
| * ath10k: make target endianess more explicitMichal Kazior2014-08-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Some copy engine structures are target specific and are uploaded to the device during init/configuration. This also cleans up a bit diag_mem_read/write implicit byteswap mess leaving only diag_access_read/write with an implicit endianess byteswap. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: dont duplicate service-pipe mappingMichal Kazior2014-08-27
| | | | | | | | | | | | | | | | | | The mapping is already defined in a structure. It makes little sense to duplicate information stored in it within a function. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: move pci init structuresMichal Kazior2014-08-27
| | | | | | | | | | | | | | | | | | It doesn't make much sense to have copy engine configuration structures spread across the whole source file. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: fix fw crash dumpingMichal Kazior2014-08-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Recent crash dump patches introduced a regression. If debugfs was disabled upon crash user could only see the following: [ 793.880000] ath10k: firmware crashed! (uuid n/a) [ 793.890000] ath10k: qca988x hw2.0 (0x4100016c, 0x043202ff) fw 10.1.467.2-1 api 2 htt 2.1 [ 793.890000] ath10k: debug 0 debugfs 0 tracing 0 dfs 1 The report was missing register dump. Fix it by printing registers regardless if crash_data is present or not. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: improve logging to include dev idMichal Kazior2014-08-26
| | | | | | | | | | | | | | | | | | 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>
| * ath10k: remove ar_pci->startedMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | There are basically no more uses for ar_pci->started. It is also perfectly safe to call hif_stop without hif_start now. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: ignore ar_pci->started in pipe cleanupMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | Structures used by these functions are now guaranteed to remain accessible until driver is unregistered. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: update comment regarding warm resetMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | The old comment was a little out of date. HTT Rx ring is a more relevant problem when stopping transport layer. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: rework posting pci rx buffersMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * ath10k: remove early irq handlingMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | | | It's not really necessary to have a dedicated irq handler just for the sake of catching early fw crashes anymore. It is now safe to use one handler even during early stages of device boot up. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: make sure to really disable irqsMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes two corner cases. One is a race between disabling copy engine interrupts and unhandled pending interrupts on the host. This could end up with a runaway tasklet and consequently memory leak of a few copy engine rx buffers. The other one is an unexpected (and non-maskable via device CSR) MSI fw indication interrupt during teardown. This could trigger the same problem as the first corner case. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: split ce irq/handler setupMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | | | 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>
| * ath10k: setup irq method in probeMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | It doesn't make sense to re-init irqs completely whenever transport is started/stopped. Do it just once upon probing/removing. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: fix legacy irq workaroundMichal Kazior2014-08-25
| | | | | | | | | | | | | | | | | | Wrong register was being set up. This could prevent firmware from booting in some rare cases when using legacy interrupts. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: print more driver info when firmware crashesKalle Valo2014-08-25
| | | | | | | | | | | | | | Sometimes users forget to include important info like firmware version, so better to print all the info. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: rename ath10k_pci_hif_dump_area() to ath10k_pci_fw_crashed_dump()Kalle Valo2014-08-25
| | | | | | | | | | | | | | Better to have a clear name for the function. While at it, clear up the title for the register dump. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: provide firmware crash info via debugfsBen Greear2014-08-25
| | | | | | | | | | | | | | | | | | | | | | | | Store the firmware registers and other relevant data to a firmware crash dump file and provide it to user-space via debugfs. Should help with figuring out why the firmware crashed. kvalo: remove dbglog support, rework and refactor the code to avoid ifdefs and otherwise simplify it as well Signed-off-by: Ben Greear <greearb@candelatech.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: add ath10k_pci_diag_* helpersKalle Valo2014-08-25
| | | | | | | | | | | | | | ath10k_pci_diag_read32() is for reading u32 from a device and ath10k_pci_diag_read_hi() is a helper for reading data using "host interest" table. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: group some pci probing helpersMichal Kazior2014-08-12
| | | | | | | | | | | | | | | | Make probe/remove functions shorter and easier to understand. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: remove pci features varMichal Kazior2014-08-12
| | | | | | | | | | | | | | | | | | | | | | | | The ATH10K_PCI_FEATURE_MSI_X was originally introduced to support both chips QCA988Xv1 and QCA988Xv2. Since v1 isn't supported anymore it doesn't make sense to keep the feature flag around. Since this is the last one remove the whole thing. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: remove target soc ps codeMichal Kazior2014-08-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
| * ath10k: embed ar_pci inside arMichal Kazior2014-08-12
| | | | | | | | | | | | | | | | | | | | Use the common convention of embedding private structures inside parent structures. This reduces allocations and simplifies pci probing code. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| * ath10k: add support for 10.2 firmwareMichal Kazior2014-07-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The 10.2 firmware is a successor of 10.1 firmware (formerly identified as 10.x). Both share a lot but have some slight ABI differences that need to be taken care of. The 10.2 firmware introduces some new features but those can be added in subsequent patches. This patch makes ath10k boot and work with 10.2 with comparable functionality to 10.1. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | PCI: Remove DEFINE_PCI_DEVICE_TABLE macro useBenoit Taine2014-08-12
|/ | | | | | | | | | | | | | | | | | | | | | | | | We should prefer `struct pci_device_id` over `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. This issue was reported by checkpatch. A simplified version of the semantic patch that makes this change is as follows (http://coccinelle.lip6.fr/): // <smpl> @@ identifier i; declarer name DEFINE_PCI_DEVICE_TABLE; initializer z; @@ - DEFINE_PCI_DEVICE_TABLE(i) + const struct pci_device_id i[] = z; // </smpl> [bhelgaas: add semantic patch] Signed-off-by: Benoit Taine <benoit.taine@lip6.fr> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
* ath10k: prevent endless pci rx loopMichal Kazior2014-07-22
| | | | | | | | | | | | | | | It was possible to enter an endless loop while processing a single pci copy engine pipe. This could effectively render ath10k incapable of responding to any requests. An example case when this could happen is when firmware generates a lot of events, e.g. spectral scan phyerr via WMI. Reported-by: Janusz Dziedzic <janusz.dziedzic@tieto.com> Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: fix bmi exchange tx/rx raceMichal Kazior2014-07-15
| | | | | | | | | | | | | | It was possible for tx completion not to be processed. In that case an old stack pointer was left on copy engine tx ring. Next bmi exchange would immediately pop it and use complete() on the completion struct there causing corruption. Make sure to wait for both tx and rx completions properly. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: abort incomplete scatter-gather pci tx properlyMichal Kazior2014-05-27
| | | | | | | | | | 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>
* ath10k: protect src_ring state with ce_lock in tx_sg()Michal Kazior2014-05-27
| | | | | | | | | | | It was possible to read invalid state of CE ring buffer indexes. This could lead to scatter-gather transfer failure in mid-way and crash firmware later by leaving garbage data on the ring. 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>
* ath10k: remove unnecessary tasklet_kill()Michal Kazior2014-05-26
| | | | | | | | The tasklet is already guaranteed to be killed on the teardown path. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: prevent hif_stop being called twiceMichal Kazior2014-05-23
| | | | | | | | | | | | | Recently there was a bug discovered that involved hif_stop() being called twice that ended up with a double free_irq() call but it only manifested with multiple MSI interrupts mapping. Catch this kind of a problem early in driver regardless of interrupt mapping. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: get rid of pci_assign_resource() call from pci_probeBartosz Markowski2014-05-16
| | | | | | | | | | | | | On ARM-based (MSM mach), the pci_assign_resource() is passing some invalid pointers and leading to L2 cache errors, what prevents the PCI communication completly. So far I have not found this funtion to be directly called by any other wifi driver and did not found this assigning needed on any other platform. So removing it completely. Signed-off-by: Bartosz Markowski <bartosz.markowski@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: enable early device dumpsMichal Kazior2014-05-16
| | | | | | | | This can be useful for early initialization debugging, i.e. ROM crashes. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: retry warm reset a few timesMichal Kazior2014-05-16
| | | | | | | | | | | | | Sometimes warm reset works upon retry. It might be related to imperfect warm reset routine, but for now let's just do the retries. This should improve the reliability of some chips that hang/crash with cold reset which is used as a last resort if warm reset fails. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: improve warm reset reliabilityMichal Kazior2014-05-16
| | | | | | | | | | | | | | Warm reset is now able to recover after device crashes which required a cold reset before. This should greatly reduce chances of getting data bus errors or host system freezes due to buggy cold reset on some chips. kvalo: use ath10k_pci_soc_*() Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: don't wait for device init if it crashedMichal Kazior2014-04-24
| | | | | | | | | | | | | When warm resetting it's possible for device to crash during initialization. Instead of waiting 3 seconds just return failure as soon as FW_IND_EVENT_PENDING is set. This speeds up device bootup and recovery in some cases. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: differentiate between target init failuresMichal Kazior2014-04-24
| | | | | | | | This just makes it easier to tell apart different kinds of bringup failure. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: deinit copy engine before resettingMichal Kazior2014-03-28
| | | | | | | | | | | | | | | | | Since copy engine allocation has been revised the ath10k_pci_ce_deinit() now simply zeroes copy engine registers. It's probably a good idea to do that before reseting for a more graceful device reset. Before ath10k_pci_ce_deinit() freed copy engine ringbuffer memory so it was required to call it after resetting. Otherwise it was possible for device to access unmapped/freed copy engine ringbuffer memory. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: split ce initialization and allocationMichal Kazior2014-03-28
| | | | | | | | | | | | | | | | | | | | 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>
* ath10k: convert pci_alloc_consistent() to dma_alloc_coherent()Michal Kazior2014-03-28
| | | | | | | | | | 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>
* ath10k: add module parameter values to the pci info printKalle Valo2014-03-28
| | | | | | Hopefully this makes it easier to debug problems in the future. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: improve pci debug messagesKalle Valo2014-03-28
| | | | | | | To make it easier to debug pci problems improve the log messages in pci.c. Also change some debug messages to warning messages to more easily catch problems. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: delete ar_pci->fw_indicator_addressKalle Valo2014-03-28
| | | | | | It always contains the same constant, no need to have a separate variable for it. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: advertise only firmware API 2 filesKalle Valo2014-03-28
| | | | | | | We do not really support older firmware API 1 anymore, so better remove MODULE_FIRMWARE() declarations for them and only list for API 2 files. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: fix name of target_ps module parameterKalle Valo2014-03-28
| | | | | | | The parameter name was ath10k_target_ps, but actually it should be just target_ps. Module parameter names should not use the ath10k_ prefix. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath10k: add module parameter to disable cold resetKalle Valo2014-03-28
| | | | | | | | As cold reset is not reliable with CUS223 boards, make it possible to disable cold reset entirely and only use warm reset. This makes it also easier to debug warm reset problems. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>