summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/cnss (follow)
Commit message (Collapse)AuthorAge
* Silences WLAN, PCIe, and CPU suspend state kernel messagesNick Desaulniers2019-12-23
| | | | | Bug: 27134656 Change-Id: I681ec2171472514489365ca4bfc4ef16d9b344fe
* cnss: Enable cnss_msm_pcie_pm_controldonglian2019-03-20
| | | | | | | | | | | | | | | | | | In order to support WLAN SSR in GVM, we need to enable PCIe suspend/resume. PCIe suspend/resume requires ldo reset. GVM has no direct control to PCIe ldos,instead, they are managed in ghs hypervisor. During WLAN SSR, GVM will send out power messages to ghs via subsystem SSR framework which will reset WLAN/PCIe ldos accordingly. Suspend/resume set is skipped during registration/ un-registration because GVM is not able to inform ghs to do ldo operations in such scenarios. And if PCIe link is suspended upon registration, it can resume no more. Change-Id: I11b44e684a560ca2585ede7e0cee27caccd1074f CRs-Fixed: 2411088 Signed-off-by: Dongliang Yao <dongliang.yao@codeaurora.org>
* Merge "cnss: comment cnss_msm_pcie_pm_control at GreenHills platform"Linux Build Service Account2018-09-06
|\
| * cnss: comment cnss_msm_pcie_pm_control at GreenHills platformChaoli Zhou2018-09-05
| | | | | | | | | | | | | | | | | | | | | | It doesn't support virtualized clock currently, so we cannot disable/enable clock while do PCIE link suspend/resume from Linux side at Greenhills platform, so comment the API cnss_msm_pcie_pm_control to prevent doing PCIE link suspend/resume. Change-Id: Ie10d781042ff3e85b3206fd300e9ec3f71897479 Signed-off-by: Chaoli Zhou <zchaoli@codeaurora.org>
* | Merge "cnss: Use the nosync API in cnss when disabling irq"Linux Build Service Account2018-09-01
|\ \
| * | cnss: Use the nosync API in cnss when disabling irqGuisen Yang2018-08-15
| |/ | | | | | | | | | | | | | | | | | | The disable_irq API will wait for IRQ handler completion when pcie link down, this will cause system error. Use the nosync API to disable irq. Change-Id: Ib8e1c160cb748c2007bd24089e09b0ee6694d04d CRs-Fixed: 2157312 Signed-off-by: Guisen Yang <guiseny@codeaurora.org>
* / platform: msm: resolve NULL pointer dereference issueYao Jiang2018-08-16
|/ | | | | | | Fix some null pointer dereference flaw and parameter not init issues. change-Id: I0ed5f3f62c3794775bf97d353c4e50dd8ceb32da Signed-off-by: Yao Jiang <yaojia@codeaurora.org>
* cnss: notify wlan driver when failed to power upYu Wang2018-06-15
| | | | | | | | | | | | | During SSR, if power-up fails, wlan driver will enter ssr_in_progress state, which will block driver unloading, it's not reasonable. To improve this, notify wlan driver about the failure, then driver unloading can be handled properly according to this flag. CRs-Fixed: 2246361 Change-Id: I669cc0137811a991c00ff9e73ebbb2bcf2d621a1 Signed-off-by: Yu Wang <yyuwang@codeaurora.org>
* cnss: cnss_pci: adapt cnss to msm virtual platformKe Huang2018-04-19
| | | | | | | | the virtual platform changes to use gerenic pci but not use msm pci so adapt the cnss_pci to the msm virtual platform. Change-Id: I8afb5afb9c447e984f2c6f44a722945c48be18dd Signed-off-by: Ke Huang <keh@codeaurora.org>
* cnss2: Add asynchronous probe supportYue Ma2017-09-21
| | | | | | | | | | Add asynchronous probe support so that CNSS2 platform driver is able to probe in parallel with other device drivers which can help to reduce kernel boot time. Change-Id: I740cddafd7e3acfed19416b4183ad2487198a751 CRS-fixed: 2071634 Signed-off-by: Yue Ma <yuem@codeaurora.org>
* net: cnss: Fix crash when SDIO device is not insertedGustavo Solaira2017-08-18
| | | | | | | | | | Check to see if the host is not NULL before trying to use it, this avoids a crash when the driver is probed, but the card is not available. Also remove dependency on ARCH_MSM since it is not used anymore. Change-Id: I476a512dd41e0c336b71c96d8dd2972cdadb8732 Signed-off-by: Gustavo Solaira <gustavos@codeaurora.org>
* net: cnss: add fixed regulator support for wlan enable pinSarada Prasanna Garnayak2017-08-04
| | | | | | | | | | | | | | The QCA wlan chipset uses tlmm, msm and pmic gpio for the WLAN_EN signal pin. The tlmm or msm gpio uses pinctrl or gpio library for configuring the sleep/active state runtime. The pmic gpio runtime configuration is not feasible using gpio library or pinctrl framework. Convert the pmic gpio to fixed regulator to runtime control(enable/disable) via regulator framework. CRs-Fixed: 1040537 Change-Id: Ie74a659f309f248d335e03ca7a0a00244e9715b4 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* cnss: Correct boot sequence for WLAN hardwareYue Ma2017-08-03
| | | | | | | | | | Vote 1.8V IO and XTAL regulators before 3.3V VREG for WLAN hardware to strictly follow the hardware requirement. Make sure 3.3V VREG is voted at least 100us after 1.8V IO. Change-Id: Ifc52c2062349a9913e6c998573b62d111faa5886 CRs-fixed: 1009287 Signed-off-by: Yue Ma <yuem@codeaurora.org>
* cnss_pci: fix the race condition bug in WLAN firmware table configSarada Prasanna Garnayak2017-08-02
| | | | | | | | | | Update the synchronization process of the cnss platform driver memory expansion and WLAN firmware table configuration from the userspace through sysfs firmware update node. CRs-Fixed: 2071560 Change-Id: I672ba84ad10c905be7855c1b8a930ac7adf349f1 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* net: cnss2: Add snapshot of CNSS2 driverYue Ma2017-07-07
| | | | | | | | | | This is a snapshot of the CNSS2 driver and associated files as of msm-3.18 commit c1bbe6d5e136 ("cnss2: Fix kernel checkpatch issues"). Change-Id: Ia77d3abe3f86e4dbeac8d55ea2e0120bed480126 CRs-fixed: 2071634 Signed-off-by: Yue Ma <yuem@codeaurora.org>
* cnss_utils: Add support of cnss_utils for WLANYuanyuan Liu2017-06-29
| | | | | | | | | | | Add support of cnss_utils for WLAN. Export APIs to WLAN host driver which are used to set/get WLAN related information. These information could be retrived later when WLAN driver is reloaded. CRs-Fixed: 2060693 Change-Id: I2c8c36602ec8af133946ff00c41ce648a2628041 Signed-off-by: Yuanyuan Liu <yuanliu@codeaurora.org>
* cnss_pci: fix the race condition in firmware file setupSarada Prasanna Garnayak2017-06-23
| | | | | | | | | | | Add protection code to avoid the redundant firmware setup from the userspace. Synchronize firmware setup global data access by multiple firmware setup routines when firmware setup triggered by userspace is in progress. CRs-Fixed: 2053638 Change-Id: Ib5bf05aade464a0789c7b848457e95d25c4e6f8f Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* cnss: save the cc source to platform driverPaul Zhang2017-05-24
| | | | | | | | | | | | | | | | There is a design limitation in host driver. Driver sends regulatory_hint_user for both user-space and 11d country to kernel. So when wiphy re-registration happens, kernel tells the source as USER even for 11d. And per driver logic the 11d needs to be disabled if INI gCountryCodePriority is set. To mitigate this issue, storing the country source in the platform driver. CRs-Fixed: 2051651 Change-Id: I335a046a886ac3ce35cf96eb71231bfe75d33c60 Signed-off-by: Paul Zhang <paulz@codeaurora.org>
* cnss: add an option to allow driver using asynchronous probeWei Li2017-05-09
| | | | | | | | Add option CONFIG_CNSS_ASYNC to allow CNSS platform driver probe asynchronously for boot time optimization in auto platform Change-Id: Id1fcb8991a47ae56098a9bbd6ff570e22d6450d6 Signed-off-by: Wei Li <weili@codeaurora.org>
* soc: qcom: ssr: add crash status to know why subsys crashedSatya Durga Srinivasu Prabhala2016-12-16
| | | | | | | | | | In some specific cases, clients may want to know why subsystem crashed, for example, in case of watch dog bite, subsystem may not be able to execute error handling. Which would need different code paths to be exercised on the apps processor. Change-Id: I073733b8a56b57f14906b25cba08012c2f0b414a Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
* Merge "msm: kgsl: Remove obsolete IOMMU domain attribute"Linux Build Service Account2016-10-11
|\
| * net: cnss: Remove obsolete IOMMU domain attributeMitchel Humpherys2016-09-26
| | | | | | | | | | | | | | | | | | The DOMAIN_ATTR_COHERENT_HTW_DISABLE IOMMU domain attribute is being removed. SMMU coherency will be configured through the SMMU device tree nodes moving forward. Remove the obsolete option. Change-Id: I99bfca30b073ba3e2fed5d0cae87f2cc1d0914c4 Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
* | net: cnss: Add support to get fw files for QCA SDIO targetGovind Singh2016-09-27
| | | | | | | | | | | | | | | | | | | | Current implementation for getting fw files for a target is supported only in PCIE based QCA chipsets. Add support to get FW files for QCA SDIO targets. CRs-Fixed: 1036232 Change-Id: If6c273d9a86f9fc4bc841388b11b96c385dc64f4 Signed-off-by: Govind Singh <govinds@codeaurora.org>
* | cnss: Add new case in cnss runtime PM request featureSarada Prasanna Garnayak2016-09-21
|/ | | | | | | | | | | | The cnss platform driver provides wrapper API to use the kernel runtime PM APIs in wlan host driver for runtime power management operation. Add flag for pm_runtime_get_noresume() API. CRs-Fixed: 1068920 Change-Id: I36d278bf1837b2a18f74ff52b9be9b7e5a165857 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* cnss: Reset QCA Card during WLAN SubSystem RecoveryKomal Seelam2016-08-30
| | | | | | | | | | During SSR, we observe cases where card enter bad state and does not responding to any I/O commands. Fix it by powering off and on the card. Change-Id: Ia3ab2781c93d1cfe7427e2b1c2644f6628f6465f CRs-Fixed: 1058794 Signed-off-by: Komal Seelam <kseelam@codeaurora.org>
* net: cnss: Release QCA chip resources when Wi-Fi is turned offKomal Seelam2016-08-29
| | | | | | | | | When WiFi is turned off from userspace, save power by toggling WLAN_EN gpio and restore power when wifi is loaded again. CRs-Fixed: 1058794 Change-Id: I0257698d9d168d7c889436a05693061cafe5ea7c Signed-off-by: Komal Seelam <kseelam@codeaurora.org>
* cnss: Use Different Dump Names for QCA PCIe and SDIO targetsKumar, Anand2016-08-29
| | | | | | | | | | On Dual-WiFi platforms, SDIO and PCIe dumps are overwritten by the crashscope, as they use the same dump name. Use different dump names to distinguish the dump between SDIO and PCIe. CRs-Fixed: 1037346 Change-Id: I59c0ee5d3c5f206ae09d6b813f1e5c1ce1434cc1 Signed-off-by: Anand Kumar <anandkumar@codeaurora.org>
* cnss: Provide API to CLD Driver to control SPDT GPIOKomal Seelam2016-08-24
| | | | | | | | | | | | Antenna Sharing GPIO need to be toggled between QCA PCIe and SDIO devices based on the requirement. If SDIO device is to be operational, this GPIO should be turned ON high. Expose API to CLD Driver to control this GPIO for dual-wifi platforms. CRs-Fixed: 1013494 Change-Id: I271ba273a4c70717f066d219ff02e8f0f56e2ac3 Signed-off-by: Komal Kumar <kseelam@codeaurora.org>
* cnss: Expose Power Up/Down API to WLAN Functional DriverKomal Seelam2016-08-24
| | | | | | | | | | | | | | Dynamic Mode Change Feature Request, needs to power ON QCA Chip during system bootup to get Firmware Capabilities. Today the implementation is only during driver load, platform driver power up the chip and call the device driver probe and call device driver remove and cut the chip power during driver unload. As part of this feature request, driver needs API to power down and power up chip after ifconfig down and before ifconfig up. CRs-Fixed: 1009901 Change-Id: I8e964c6bb8d6d8fb6f4bfba17a6b24b97509953c Signed-off-by: Komal Kumar <kseelam@codeaurora.org>
* cnss: Disable wlan irq when PCIe link down is detectedKomal Seelam2016-08-24
| | | | | | | | | | | | | | | | Interrupt Storm is observed on the APPS side, when PCIe link down is simulated, as FW keeps generating interrupts to host, as it's not aware of the PCIe link down. When PCIe link down is identified, wlan platform driver schedules work to start recovery. During Recovery we cut down power to QCA6174, which stops the interrupt storm. During the window where platform driver schedule work and the work actually gets schedules, interrupt storm happened and the APPS triggered watchdog. Change-Id: Ica3c32007bc9b8acce79c5bb2175790ff27180d0 CRs-Fixed: 967956 Signed-off-by: Komal Seelam <kseelam@codeaurora.org>
* cnss: Add optional property to control wlan_en gpio for Dual-Wifi platformsKomal Seelam2016-08-24
| | | | | | | | | | | | | The WIFI PCIe Clock is controlled by WLAN_EN gpio. On Dual-WiFi Platforms, QCA WIFI SDIO chip clock sourced by PCIe Clock. Turning off WLAN_EN gpio would result in SDIO WIFI Functional Failures. Control the gpio, based on the platform. CRs-Fixed: 990796 Change-Id: I1399cd8aa53d1c6fd6b8ff0c5cce66b978770dbd Signed-off-by: Komal Seelam <kseelam@codeaurora.org> Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* cnss: Control vdd-wlan-xtal-aon-supply regulator in cnss platform driverKomal Seelam2016-08-24
| | | | | | | | | | | | | | | | vdd-wlan-xtal-aon-supply(LD0-4) need to be voted by cnss platform driver to keep wlan XO(LDO-5) ON during APPS suspend on mdmcalifornium platforms when wlan is turned ON as per Power UP sequence. Currently LDO-4 is only voted by USB driver when USB is connected. On removing USB, LDO-4 is turned off resulting LDO-5 turned off. When WLAN is turned on removing LDO-5 vote resulted in beaconing failures on mdmcalifornium platforms. Hence add a dummy vote to LDO-4 when WLAN is turned ON. Change-Id: I0c6e7a6c2dc6a51fb19a9d31ceb6823fe9a05ae2 CRs-Fixed: 996537 Signed-off-by: Komal Seelam <kseelam@codeaurora.org>
* cnss: Refactor CNSS Platform Driver for better code maintenanceKomal Seelam2016-05-31
| | | | | | | | | Retain API's in cnss_common.h file for cnss use only. cnss.h is to be used to expose the EXPORT_SYMBOL API's. CRs-Fixed: 1009898 Change-Id: I2b9eb81552f4803c3accd0221ea891697a9a93bc Signed-off-by: Komal Kumar <kseelam@codeaurora.org>
* net: cnss: add dual cnss platform driver support for dual WiFiSarada Prasanna Garnayak2016-05-31
| | | | | | | | | | | | | | | | | | | | | | | | For dual WiFi both cnss sdio and pcie platform needs to be enabled. Added changes below to support dual platform driver for dual WiFi. Refactor the common api and data structure to avoid namespace collision compilation error. Refactor sdio and pcie bus specific kernel api and removed conditional compilation config flag. The platform driver at run time identifies the wlan bus type from the PHY device pointer passed by the wlan driver through vos api and cnss platform driver redirects the cnss api according the bus type. Remove conditional compilation flag from cnss common api and update cnss makefile for dual platform driver compilation with single config flag. CRs-Fixed: 988871 Change-Id: I8205c2979c857c2f3845ba2dc397d2f9dd1afa3b Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org> Signed-off-by: Ryan Hsu <ryanhsu@codeaurora.org>
* net: cnss: remove redundant and dead code from platform driverSarada Prasanna Garnayak2016-05-31
| | | | | | | | | | | | | | | The cnss subsystem restart and pm qos export API has been refactor in respective platform driver according to the bus type SDIO/PCIe. Remove redundant and dead code from platform driver to avoid the namespace collision compilation error. Refactor the recovery work handler according to bus type. This feature adds support for dual cnss platform driver support for dual WiFi. CRs-Fixed: 987560 Change-Id: I0e1b5ff0e9970a40ad9d0619dcb7f8cbae241656 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* net: cnss: add bus bandwidth support for sdio wlan moduleSarada Prasanna Garnayak2016-05-31
| | | | | | | | | | Add cnss sdio platform driver support to vote for bus bandwidth as per throughput requirement from wlan driver. The cnss sdio platform driver export bus bandwidth api for wlan host driver. CRs-Fixed: 990173 Change-Id: Ied2e5a78487b6f6076cd19f32c959a69050e055c Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* cnss: Add Pinctrl Framework to control antenna sharing GPIO 38Komal Seelam2016-03-25
| | | | | | | | | | | Initialize PinCtrl Framework for SDIO platforms to support antenna sharing. The antenna sharing is enabled only for platform which has PCIe QCA and SDIO QCA chipsets. CRs-Fixed: 990796 Change-Id: Ib3da0ce52ef46deae2ba49e4f39808effe18457d Signed-off-by: Komal Kumar <kseelam@codeaurora.org>
* net: cnss: add cnss common api support for dual WiFiSarada Prasanna Garnayak2016-03-25
| | | | | | | | | | Add common api support of subsystem restart and bus bandwidth for dual wifi. This feature redirect the cnss export api according to the bus type SDIO/PCI. CRs-Fixed: 986275 Change-Id: Iaf13d6c6d68ef62b7e4f6581899ec8325c5e9696 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* cnss: Implement API to store WLAN MAC address in platform driverKomal Seelam2016-03-25
| | | | | | | | | | | | | | WLAN Functional Drivers Queries cnss platform driver to get the MAC Address. If the OEM doesn't provide the valid MAC address, the WLAN Driver fallbacks to use other approaches to get MAC address. This works under CONFIG_CNSS_MAC feature flag, which will be enabled only on the OEM platforms. For internal platforms, CNSS driver doesn't hold any valid mac addresses. CRs-Fixed: 985585 Change-Id: I1e8a030a32a640cec84cadd6b36b37938d5fe6be Signed-off-by: Komal Kumar <kseelam@codeaurora.org>
* net: cnss: add subsystem restart support for dual WiFiSarada Prasanna Garnayak2016-03-25
| | | | | | | | | | | | | | Subsystem device add support for subsystem restart recovery and ramdump device for cnss firmware dump collection before the subsystem restart. Refactor subsystem restart wrapper APIs to avoid the name space collision in cnss platform driver compilation in dual WiFi mode. CRs-Fixed: 983677 Change-Id: Ib4a8d1a6d0ce8f1faa43ce0aa8312823b1ca3c15 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* net: cnss: add PM QoS support for dual WiFiSarada Prasanna Garnayak2016-03-25
| | | | | | | | | | | | | | PM QoS adds support to improve the wlan throughput. The cnss platform driver export PM QoS API to wlan host driver. Refactor PM QoS wrapper APIs to avoid the name space collision in cnss platform driver compilation in dual WiFi mode. CRs-Fixed: 983653 Change-Id: Id7a486f2f111476e73d5707eba36611a3530e9cf Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* net: cnss: add DFS NOL support for dual WiFiSarada Prasanna Garnayak2016-03-25
| | | | | | | | | | | | | | | Store WiFi DFS NOL list and return to wlan host driver on query. It adds support for no link operation on radar detection. This export symbol supported by both SDIO and PCIe platform driver. So add this API as a common API for both SDIO and PCIe interface based wlan module and remove the duplicate API from the SDIO and PCIe platform driver. CRs-Fixed: 983618 Change-Id: Idc25806de6f919b88130a1633adbb7bc1048ecd5 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* net: cnss: add unsafe channel list support for dual WiFiSarada Prasanna Garnayak2016-03-25
| | | | | | | | | | | | | | | Store WiFi unsafe Channel list and return to wlan host driver on query. It adds support WiFi unsafe Channel list for LTE-WiFi coexistence. This export symbol supported by both SDIO and PCIe platform driver. So add this API as a common API for both SDIO and PCIe interface based wlan module and remove the duplicate API from the SDIO and PCIe platform driver. CRs-Fixed: 983607 Change-Id: I1698df3fb689ef17294e00032adde5ae635e76de Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* cnss: Use correct regulator APIs for 4.4 kernelYue Ma2016-03-23
| | | | | | | | In 4.4 kernel, regulator_set_optimum_mode() is replaced by regulator_set_load(). Hence update it accordingly for CNSS driver in 4.4 kernel to avoid compilation issue. Signed-off-by: Yue Ma <yuem@codeaurora.org>
* cnss: Expose dump stack functionalityAbhishek Singh2016-03-23
| | | | | | | | | Add changes to expose dump stack functionality which can be used by driver to dump stack information when it requires. CRs-Fixed: 979886 Change-Id: Ib929ad0a510b996ac54d17afd2957ea487c62851 Signed-off-by: Abhishek Singh <absingh@codeaurora.org>
* net: cnss: refactor PM QoS request wrapper APISarada Prasanna Garnayak2016-03-23
| | | | | | | | | | Make PM QoS request API generic to pass the type of latency requirement needed by the client instead of hard coding latency type. Add latency type as a function parameter. CRs-Fixed: 972761 Change-Id: Ic912148d2068fe8a758b6a4b3be570ccf870f03a Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* net: cnss_sdio: add PM QoS support in cnss sdio platform driverSarada Prasanna Garnayak2016-03-23
| | | | | | | | | | To improve the wlan throughput add power management quality of service support in cnss sdio platform driver. The cnss sdio platform driver export PM QoS API to wlan host driver. CRs-Fixed: 970872 Change-Id: Idcea4cde74b280b26706be1bd88b822de80c0ff3 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
* Net: CNSS_SDIO: Add cnss_get_restart_level CNSS APILiangwei Dong2016-03-23
| | | | | | | | | export cnss_get_restart_level cnss API for wlan driver to get current subsystem restart level. Change-Id: I7e5d9b0055707bbad06b6cd1496723da6c28d4d5 CRs-Fixed: 961579 Signed-off-by: Liangwei Dong <liangwei@codeaurora.org>
* cnss: sdio: Define OOB interrupt interfaces.Kai Liu2016-03-23
| | | | | | | | | | | | | Define the OOB interrupt interfaces in case that internal interrupt is unsupported in some platforms. In some specific platform, only polling mode is supported, with these OOB interrupt interfaces implementation, it will support interrupt mode. To be generic, this OOB feature is default unsupported. Change-Id: I3b38e59bd7fdb441c85eb82a79cf9c951ca32130 CRs-Fixed: 937303 Signed-off-by: Kai Liu <kaliu@codeaurora.org>
* cnss: Vote for the WLAN antenna switch regulatorYue Ma2016-03-23
| | | | | | | | | In some targets, explicitly turning on/off the regulator for WLAN antenna switch is needed to enable/dsiable antenna sharing capacity. Hence add the change to achieve this based on device tree option. Change-Id: Ic04019cbe9c42bc92a65f308f56f307c52346d92 Signed-off-by: Yue Ma <yuem@codeaurora.org>