1. 29 12月, 2016 2 次提交
  2. 13 9月, 2016 2 次提交
  3. 09 9月, 2016 1 次提交
    • R
      ath10k: implement NAPI support · 3c97f5de
      Rajkumar Manoharan 提交于
      Add NAPI support for rx and tx completion. NAPI poll is scheduled
      from interrupt handler. The design is as below
      
       - on interrupt
           - schedule napi and mask interrupts
       - on poll
         - process all pipes (no actual Tx/Rx)
         - process Rx within budget
         - if quota exceeds budget reschedule napi poll by returning budget
         - process Tx completions and update budget if necessary
         - process Tx fetch indications (pull-push)
         - push any other pending Tx (if possible)
         - before resched or napi completion replenish htt rx ring buffer
         - if work done < budget, complete napi poll and unmask interrupts
      
      This change also get rid of two tasklets (intr_tq and txrx_compl_task).
      
      Measured peak throughput with NAPI on IPQ4019 platform in controlled
      environment. No noticeable reduction in throughput is seen and also
      observed improvements in CPU usage. Approx. 15% CPU usage got reduced
      in UDP uplink case.
      
      DL: AP DUT Tx
      UL: AP DUT Rx
      
      IPQ4019 (avg. cpu usage %)
      
      ========
                      TOT              +NAPI
                    ===========      =============
      TCP DL       644 Mbps (42%)    645 Mbps (36%)
      TCP UL       673 Mbps (30%)    675 Mbps (26%)
      UDP DL       682 Mbps (49%)    680 Mbps (49%)
      UDP UL       720 Mbps (28%)    717 Mbps (11%)
      Signed-off-by: NRajkumar Manoharan <rmanohar@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      3c97f5de
  4. 02 9月, 2016 1 次提交
  5. 31 8月, 2016 1 次提交
  6. 08 7月, 2016 1 次提交
  7. 30 6月, 2016 1 次提交
    • M
      ath10k: fix crash during card removal · fb7caaba
      Mohammed Shafi Shajakhan 提交于
      Usually when the firmware crashes we check for the value
      'FW_IND_EVENT_PENDING' in 'FW_INDICATOR_ADDRESS' and proceed with
      disabling the irq and dumping firmware 'crash dump'. Now
      when the PCI card is unplugged from the device the PCI controller
      seems to generate a spurious interrupt after some time which
      was as treated a firmware crash and resulting in the below race
      condition (and eventually crashing the system)
      
      	ath10k_core_unregister -> ath10k_core_free_board_files
      
      	...... device unplug spurious interrupt .........
      
      	ath10k_pci_taklet -> ath10k_pci_fw_crashed_dump  ...etc
      
      Clearly even after the firmware board files related data structure
      is freed up we are getting a spurious interrupt from PCI with 0xfffffff
      in the 'FW_INDICATOR_ADDRESS' resulting in scheduling of the pci tasklet
      and doing a crash dump, printing f/w board related info resulting in the
      below crash. Fix this by detecting this spurious interrupt in ath10k PCI
      irq handler itself and return IRQ_NONE. Thanks to Michal Kazior for
      helping us conclude the most appropriate fix.
      
      Call trace:
      
       EIP is at ath10k_debug_print_board_info+0x39/0xb0
      [ath10k_core]
      EAX: 00000000 EBX: d4de15a0 ECX: 00000000 EDX: 00000064
      ESI: f615ddd0 EDI: f8530000 EBP: f615de3c ESP: f615ddbc
       DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
      CR0: 80050033 CR2: 00000004 CR3: 01c0a000 CR4: 000006f0
      Stack:
       f615ddd0 00000064 f8b4ecdd 00000000 00000000 00412f4e
      00000000 00000000
      00000000 00000000 00000000 00000000 00000000 00000000
      00000000 00000000
       00000000 00000000 00000000 00000000 00000000 00000000
      00000000 00000000
      Call Trace:
        [<f8b1f517>] ath10k_print_driver_info+0x17/0x30
      [ath10k_core]
      [<f875463a>] ath10k_pci_fw_crashed_dump+0x7a/0xe0
      [ath10k_pci]
      [<f87549d0>] ath10k_pci_tasklet+0x70/0x90 [ath10k_pci]
      [<c106151e>] tasklet_action+0x9e/0xb0
      
      Cc: Michal Kazior <michal.kazior@tieto.com>
      Signed-off-by: NMohammed Shafi Shajakhan <mohammed@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      fb7caaba
  8. 07 6月, 2016 2 次提交
  9. 02 6月, 2016 2 次提交
  10. 25 5月, 2016 2 次提交
  11. 21 4月, 2016 1 次提交
  12. 13 4月, 2016 1 次提交
  13. 04 4月, 2016 2 次提交
    • R
      ath10k: reuse copy engine 5 (htt rx) descriptors · 128abd09
      Rajkumar Manoharan 提交于
      Whenever htt rx indication i.e target to host messages are received
      on rx copy engine (CE5), the message will be freed after processing
      the response. Then CE 5 will be refilled with new descriptors at
      post rx processing. This memory alloc and free operations can be avoided
      by reusing the same descriptors.
      
      During CE pipe allocation, full ring is not initialized i.e n-1 entries
      are filled up. So for CE 5 full ring should be filled up to reuse
      descriptors. Moreover CE 5 write index will be updated in single shot
      instead of incremental access. This could avoid multiple pci_write and
      ce_ring access. From experiments, It improves CPU usage by ~3% in IPQ4019
      platform.
      Signed-off-by: NRajkumar Manoharan <rmanohar@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      128abd09
    • R
      ath10k: cleanup copy engine receive next completion · 24d9ef5e
      Rajkumar Manoharan 提交于
      The physical address necessary to unmap DMA ('bufferp') is stored
      in ath10k_skb_cb as 'paddr'. For diag register read and write
      operations, 'paddr' is stored in transfer context. ath10k doesn't rely
      on the meta/transfer_id. So the unused output arguments {bufferp, nbytesp
      and transfer_idp} are removed from CE recv_next completion.
      Signed-off-by: NRajkumar Manoharan <rmanohar@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      24d9ef5e
  14. 04 3月, 2016 1 次提交
  15. 28 1月, 2016 4 次提交
    • R
      ath10k: add basic skeleton to support ahb · 0b523ced
      Raja Mani 提交于
      qca4019 uses ahb instead of pci where it slightly differs in device
      enumeration, clock control, reset control, etc. Good thing is that
      ahb also uses copy engine for the data transaction. So, the most of
      the stuff implemented in pci.c/ce.c are reusable in ahb case too.
      
      Device enumeration in ahb case comes through platform driver/device
      model. All resource details like irq, memory map, clocks, etc for
      qca4019 can be fetched from of_node of platform device.
      
      Simply flow would look like,
      
       device tree => platform device (kernel) => platform driver (ath10k)
      
      Device tree entry will have all qca4019 resource details and the same
      info will be passed to kernel. Kernel will prepare new platform device
      for that entry and expose DT info to of_node in platform device.
      Later, ath10k would register platform driver with unique compatible name
      and then kernels binds to corresponding compatible entry & calls ath10k
      ahb probe functions. From there onwards, ath10k will take control of it
      and move forward.
      
      New bool flag CONFIG_ATH10K_AHB is added in Kconfig to conditionally
      enable ahb support in ath10k. On enabling this flag, ath10k_pci.ko
      will have ahb support. This patch adds only basic skeleton and few
      macros to support ahb in the context of qca4019.
      Signed-off-by: NRaja Mani <rmani@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      0b523ced
    • R
      ath10k: pull reusable code from pci probe and remove for ahb · 90188f80
      Raja Mani 提交于
      Some of the code present in ath10k_pci_{probe|remove} are reusable
      in ahb case too. To avoid code duplication, move reusable code to
      new functions. Later, those new functions can be called from ahb
      module's probe and exit functions.
      Signed-off-by: NRaja Mani <rmani@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      90188f80
    • R
      ath10k: make ath10k_pci_read32/write32() ops more generic · 4ddb3299
      Raja Mani 提交于
      ath10k_pci_read32/write32() does work more specific to
      PCI by ensuring pci wake/sleep for every read and write.
      There is a plan to use most of stuff available in pci.c
      (irq stuff, copy engine, etc) for AHB case. Such kind
      of pci wake/sleep for every read/write is not required
      in AHB case (qca4019). All those reusable areas in pci.c
      and ce.c calls ath10k_pci_read32/write32() for low level
      read and write.
      
      In fact, ath10k_pci_read32/write32() should do what it does
      today for PCI case. But for AHB, it has to do differently.
      To make ath10k_pci_read32/write32() more generic, new function
      pointers are added in ar_pci for the function which does
      operation more close to the bus. Later, corresponding bus
      specific read and write function will be mapped to that.
      
      ath10k_pci_read32/write32() are changed to call directly
      those function pointers without worrying which bus underlying
      to it. Also, the function to get number of bank is changed
      in the same way.
      Signed-off-by: NRaja Mani <rmani@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      4ddb3299
    • R
      ath10k: make some of ath10k_pci_* func reusable · f52f5171
      Raja Mani 提交于
      Some of static functions present in pci.c file are reusable
      in ahb (qca4019) case. Remove static word for those reusable
      functions and have those function prototype declaration in
      pci.h file. So that, pci.h header file can be included in
      ahb module and reused. There is no functionality changes done
      in this patch.
      Signed-off-by: NRaja Mani <rmani@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      f52f5171
  16. 31 12月, 2015 2 次提交
  17. 17 11月, 2015 1 次提交
  18. 13 11月, 2015 4 次提交
  19. 05 11月, 2015 1 次提交
  20. 29 10月, 2015 4 次提交
  21. 19 10月, 2015 1 次提交
    • A
      ath10k: disable PCI PS for QCA988X and QCA99X0 · 1aaf8efb
      Anilkumar Kolli 提交于
      This patch disables PCI PS for QCA988X and QCA99X0, Since PCI PS is
      validated for QCA6174, let it be enabled only for QCA6174. It would be
      better to execute PCI PS related functions only for the supported devices.
      
      PCI time out issue is observed with QCA99X0 on x86 platform, We will
      disable PCI PS for QCA988X and QCA99X0 until PCI PS is properly implemented.
      
      Taking and releasing ps_lock is causing higher CPU consumption. Michal Kazior
      suggested ps_lock overhead to be reworked so that ath10k_pci_wake/sleep
      functions are called less often, i.e. move the powersave logic up (only during
      irq handling, tx path, submitting fw commands) but that's a bigger change and
      can be implemented later.
      Signed-off-by: NAnilkumar Kolli <akolli@qti.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      1aaf8efb
  22. 16 10月, 2015 3 次提交