From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from m43-7.mailgun.net ([69.72.43.7]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kI7m6-0003PB-C6 for ath11k@lists.infradead.org; Tue, 15 Sep 2020 10:01:26 +0000 From: Sowmiya Sree Elavalagan Subject: [PATCH v3] ath11k: cold boot calibration support Date: Tue, 15 Sep 2020 15:29:51 +0530 Message-Id: <1600163991-2093-1-git-send-email-ssreeela@codeaurora.org> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "ath11k" Errors-To: ath11k-bounces+kvalo=adurom.com@lists.infradead.org To: ath11k@lists.infradead.org Cc: Govindaraj Saminathan , Sowmiya Sree Elavalagan , linux-wireless@vger.kernel.org RnJvbTogR292aW5kYXJhaiBTYW1pbmF0aGFuIDxnc2FtaW5AY29kZWF1cm9yYS5vcmc+Cgpjb2xk IGJvb3QgY2FsaWJyYXRpb24gaXMgdGhlIHByb2Nlc3MgdG8gY2FsaWJyYXRlIGFsbCB0aGUgY2hh bm5lbHMKZHVyaW5nIHRoZSBib290LXVwIHRvIGF2b2lkIHRoZSBjYWxpYnJhdGlvbiBkZWxheSBk dXJpbmcgdGhlCmNoYW5uZWwgY2hhbmdlLgpEdXJpbmcgdGhlIGJvb3QtdXAsIGZpcm13YXJlIHN0 YXJ0ZWQgd2l0aCBtb2RlIOKAnGNvbGRfYm9vdF9jYWxpYnJhdGlvbuKAnQpGaXJtd2FyZSBjYWxp YnJhdGUgYWxsIGNoYW5uZWxzIGFuZCBnZW5lcmF0ZSBDYWxEYihERFIpLgpTdWJzZXF1ZW50IFdJ RkkgT04gd2lsbCByZXVzZSB0aGUgc2FtZSBDYWxEYi4KRmlybXdhcmUgcmVzdGFydGVkIHdpdGgg TWlzc2lvbiBtb2RlIHRvIGNvbnRpbnVlIHRoZSBub3JtYWwgb3BlcmF0aW9uLgoKY2FsZGIgbWVt b3J5IGFkZHJlc3Mgc2VuZCB0byBmaXJtd2FyZSB0aHJvdWdoIHRoZSBRTUkgbWVzc2FnZS5GaXJt d2FyZQp1c2UgdGhpcyBhZGRyZXNzIHRvIHN0b3JlIHRoZSBjYWxkYiBkYXRhIGFuZCB1c2UgaXQg dW50aWwgbmV4dCByZWJvb3QuCgpUaGlzIHdpbGwgZ2l2ZSB0aGUgaW1wcm92ZW1lbnQgZHVyaW5n IHRoZSBjaGFubmVsIGNoYW5nZS4gQnV0IGl0IGlzCmluY3JlYXNpbmcgdGhlIGJvb3QtdXAgdGlt ZSh1cCB0byAxNXNlYyBkZXBlbmQgb24gbnVtYmVyIG9mIHJhZGlvcykuClNvIGlmIHRoZSB1c2Vy IHdhbnQgdG8gcmVkdWNlIHRoZSBib290LXVwIHRpbWUgYW5kIGFjY2VwdGluZyBmb3IgY2hhbm5l bApjaGFuZ2UgZGVsYXksIHVzZXIgY2FuIGRpc2FibGUgdGhpcyBmZWF0dXJlIHVzaW5nIHRoZSBt b2R1bGUgcGFyYW0KY29sZF9ib290X2NhbCA9MC4KVGVzdGVkLW9uOiBJUFE4MDc0IFdMQU4uSEsu Mi40LjAuMS0wMDE5Mi1RQ0FIS1NXUExfU0lMSUNPTlotMQoKClNpZ25lZC1vZmYtYnk6IEdvdmlu ZGFyYWogU2FtaW5hdGhhbiA8Z3NhbWluQGNvZGVhdXJvcmEub3JnPgpDby1kZXZlbG9wZWQtYnk6 IFNvd21peWEgU3JlZSBFbGF2YWxhZ2FuIDxzc3JlZWVsYUBjb2RlYXVyb3JhLm9yZz4KU2lnbmVk LW9mZi1ieTogU293bWl5YSBTcmVlIEVsYXZhbGFnYW4gPHNzcmVlZWxhQGNvZGVhdXJvcmEub3Jn PgotLS0KdjI6CiAgIC0gRml4ZWQgY29tcGlsYXRpb25zIHdhcm5pbmdzCiAgICAgUmVwb3J0ZWQt Ynk6IGtlcm5lbCB0ZXN0IHJvYm90IDxsa3BAaW50ZWwuY29tPgp2MzoKICAgLSBSZWJhc2VkCiAg ICAgQWRkZWQgY29sZF9ib290X2NhbGliIGZsYWcgaW4gaHcgcGFyYW1zIHRvIGVuYWJsZSBjb2xk IGJvb3QgY2FsaWJyYXRpb24gb25seSBmb3Igc3VwcG9ydGVkIGhhcmR3YXJlCi0tLQogZHJpdmVy cy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyAgfCAyNyArKysrKysrKysrKysrKwogZHJp dmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmMgfCAgMyArKwogZHJpdmVycy9uZXQv d2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmggfCAgNSArKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNz L2F0aC9hdGgxMWsvaHcuaCAgIHwgIDEgKwogZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEx ay9xbWkuYyAgfCA2NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCiBkcml2ZXJz L25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5oICB8ICAzICsrCiA2IGZpbGVzIGNoYW5nZWQs IDk5IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9h dGgxMWsvYWhiLmMKaW5kZXggNjM4MGQ0OC4uY2NiNmQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9u ZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9h dGgvYXRoMTFrL2FoYi5jCkBAIC01NzMsNiArNTczLDMxIEBAIHN0YXRpYyB2b2lkIGF0aDExa19h aGJfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQogCXJwcm9jX3NodXRkb3duKGFi LT50Z3RfcnByb2MpOwogfQogCitzdGF0aWMgaW50IGF0aDExa19haGJfZndyZXNldF9mcm9tX2Nv bGRfYm9vdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQoreworCWludCB0aW1lb3V0OworCisJaWYg KGF0aDExa19jb2xkX2Jvb3RfY2FsID09IDAgfHwgYWItPnFtaS5jYWxfZG9uZSB8fAorCSAgICBh Yi0+aHdfcGFyYW1zLmNvbGRfYm9vdF9jYWxpYiA9PSAwKQorCQlyZXR1cm4gMDsKKworCWF0aDEx a19kYmcoYWIsIEFUSDExS19EQkdfQUhCLCAid2FpdCBmb3IgY29sZCBib290IGRvbmVcbiIpOwor CXRpbWVvdXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoYWItPnFtaS5jb2xkX2Jvb3Rfd2FpdHEsCisJ CQkJICAgICAoYWItPnFtaS5jYWxfZG9uZSAgPT0gMSksCisJCQkJICAgICBBVEgxMUtfQ09MRF9C T09UX0ZXX1JFU0VUX0RFTEFZKTsKKwlpZiAodGltZW91dCA8PSAwKSB7CisJCWF0aDExa193YXJu KGFiLCAiQ29sZGJvb3QgQ2FsaWJyYXRpb24gdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElN RURPVVQ7CisJfQorCisJLyogcmVzZXQgdGhlIGZpcm13YXJlICovCisJYXRoMTFrX2FoYl9wb3dl cl9kb3duKGFiKTsKKwlhdGgxMWtfYWhiX3Bvd2VyX3VwKGFiKTsKKworCWF0aDExa19kYmcoYWIs IEFUSDExS19EQkdfQUhCLCAiZXhpdCB3YWl0IGZvciBjb2xkIGJvb3QgZG9uZVxuIik7CisJcmV0 dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0 cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7CiAJc3RydWN0IGF0aDExa19xbWlfY2VfY2ZnICpjZmcg PSAmYWItPnFtaS5jZV9jZmc7CkBAIC05MDMsNiArOTI4LDggQEAgc3RhdGljIGludCBhdGgxMWtf YWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWdvdG8gZXJyX2NlX2Zy ZWU7CiAJfQogCisJYXRoMTFrX2FoYl9md3Jlc2V0X2Zyb21fY29sZF9ib290KGFiKTsKKwogCXJl dHVybiAwOwogCiBlcnJfY2VfZnJlZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz L2F0aC9hdGgxMWsvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3Jl LmMKaW5kZXggNDM3YjExMi4uYzdkYjBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvYXRoL2F0aDExay9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEx ay9jb3JlLmMKQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaHdf cGFyYW1zIGF0aDExa19od19wYXJhbXNbXSA9IHsKIAkJLnZkZXZfc3RhcnRfZGVsYXkgPSBmYWxz ZSwKIAkJLmh0dF9wZWVyX21hcF92MiA9IHRydWUsCiAJCS50Y2xfMF9vbmx5ID0gZmFsc2UsCisJ CS5jb2xkX2Jvb3RfY2FsaWIgPSB0cnVlLAogCX0sCiAJewogCQkubmFtZSA9ICJxY2E2MzkwIGh3 Mi4wIiwKQEAgLTY4LDYgKzY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMWtfaHdfcGFy YW1zIGF0aDExa19od19wYXJhbXNbXSA9IHsKIAkJLnZkZXZfc3RhcnRfZGVsYXkgPSB0cnVlLAog CQkuaHR0X3BlZXJfbWFwX3YyID0gZmFsc2UsCiAJCS50Y2xfMF9vbmx5ID0gdHJ1ZSwKKwkJLmNv bGRfYm9vdF9jYWxpYiA9IGZhbHNlLAogCX0sCiB9OwogCkBAIC04NzEsNiArODczLDcgQEAgc3Ry dWN0IGF0aDExa19iYXNlICphdGgxMWtfY29yZV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNp emVfdCBwcml2X3NpemUsCiAJSU5JVF9MSVNUX0hFQUQoJmFiLT5wZWVycyk7CiAJaW5pdF93YWl0 cXVldWVfaGVhZCgmYWItPnBlZXJfbWFwcGluZ193cSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgm YWItPndtaV9hYi50eF9jcmVkaXRzX3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhYi0+cW1p LmNvbGRfYm9vdF93YWl0cSk7CiAJSU5JVF9XT1JLKCZhYi0+cmVzdGFydF93b3JrLCBhdGgxMWtf Y29yZV9yZXN0YXJ0KTsKIAl0aW1lcl9zZXR1cCgmYWItPnJ4X3JlcGxlbmlzaF9yZXRyeSwgYXRo MTFrX2NlX3J4X3JlcGxlbmlzaF9yZXRyeSwgMCk7CiAJYWItPmRldiA9IGRldjsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvY29yZS5oIGIvZHJpdmVycy9uZXQv d2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgKaW5kZXggZDIxMTkxYy4uMWQ4MjQyZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgKKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9jb3JlLmgKQEAgLTk5LDggKzk5LDEzIEBAIGVudW0g YXRoMTFrX2Zpcm13YXJlX21vZGUgewogCiAJLyogZmFjdG9yeSB0ZXN0cyBldGMgKi8KIAlBVEgx MUtfRklSTVdBUkVfTU9ERV9GVE0sCisKKwkvKiBDb2xkIGJvb3QgY2FsaWJyYXRpb24gKi8KKwlB VEgxMUtfRklSTVdBUkVfTU9ERV9DT0xEX0JPT1QgPSA3LAogfTsKIAorZXh0ZXJuIGJvb2wgYXRo MTFrX2NvbGRfYm9vdF9jYWw7CisKICNkZWZpbmUgQVRIMTFLX0lSUV9OVU1fTUFYIDUyCiAjZGVm aW5lIEFUSDExS19FWFRfSVJRX05VTV9NQVgJMTYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv d2lyZWxlc3MvYXRoL2F0aDExay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEx ay9ody5oCmluZGV4IGQxNWZhN2YuLmE1ODU3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL2F0aC9hdGgxMWsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRo MTFrL2h3LmgKQEAgLTE1Miw2ICsxNTIsNyBAQCBzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyB7CiAJ Ym9vbCB2ZGV2X3N0YXJ0X2RlbGF5OwogCWJvb2wgaHR0X3BlZXJfbWFwX3YyOwogCWJvb2wgdGNs XzBfb25seTsKKwlib29sIGNvbGRfYm9vdF9jYWxpYjsKIH07CiAKIHN0cnVjdCBhdGgxMWtfaHdf b3BzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmMg Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5jCmluZGV4IGI5MDZiNTAuLjI1 Yzk5ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmMK KysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9xbWkuYwpAQCAtMTIsNiArMTIs MTIgQEAKICNkZWZpbmUgU0xFRVBfQ0xPQ0tfU0VMRUNUX0lOVEVSTkFMX0JJVAkweDAyCiAjZGVm aW5lIEhPU1RfQ1NUQVRFX0JJVAkJCTB4MDQKIAorYm9vbCBhdGgxMWtfY29sZF9ib290X2NhbCA9 IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoY29sZF9ib290X2NhbCwgYXRoMTFrX2NvbGRfYm9vdF9j YWwsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjb2xkX2Jvb3RfY2FsLAorCQkgIkNv bGQgYm9vdCB3aWxsIGJyaW5nIGRvd24gdGhlIGNoYW5uZWwgc3dpdGNoIHRpbWUgYnV0ICIKKwkJ ICJpdCB3aWxsIGluY3JlYXNlIHRoZSBkcml2ZXIgbG9hZCB0aW1lIChlbmFibGU6MSwgZGlzYWJs ZTowKSIpOworCiBzdGF0aWMgc3RydWN0IHFtaV9lbGVtX2luZm8gcW1pX3dsYW5md19ob3N0X2Nh cF9yZXFfbXNnX3YwMV9laVtdID0gewogCXsKIAkJLmRhdGFfdHlwZQk9IFFNSV9PUFRfRkxBRywK QEAgLTE3NjcsOSArMTc3MywxNiBAQCBzdGF0aWMgaW50IGF0aDExa19xbWlfYXNzaWduX3Rhcmdl dF9tZW1fY2h1bmsoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCQlhdGgxMWtfd2FybihhYiwg InFtaSBtZW0gc2l6ZSBpcyBsb3cgdG8gbG9hZCBjYWxkYXRhXG4iKTsKIAkJCQlyZXR1cm4gLUVJ TlZBTDsKIAkJCX0KLQkJCS8qIFRPRE8gYXRoMTFrIGRvZXMgbm90IHN1cHBvcnQgY29sZCBib290 IGNhbGlicmF0aW9uICovCi0JCQlhYi0+cW1pLnRhcmdldF9tZW1baWR4XS5wYWRkciA9IDA7Ci0J CQlhYi0+cW1pLnRhcmdldF9tZW1baWR4XS52YWRkciA9IE5VTEw7CisKKwkJCWlmIChhdGgxMWtf Y29sZF9ib290X2NhbCAmJiBhYi0+aHdfcGFyYW1zLmNvbGRfYm9vdF9jYWxpYikgeworCQkJCWFi LT5xbWkudGFyZ2V0X21lbVtpZHhdLnBhZGRyID0KKwkJCQkJCSAgICAgQVRIMTFLX1FNSV9DQUxE Ql9BRERSRVNTOworCQkJCWFiLT5xbWkudGFyZ2V0X21lbVtpZHhdLnZhZGRyID0KKwkJCQkJCSAg ICAgKHZvaWQgKilBVEgxMUtfUU1JX0NBTERCX0FERFJFU1M7CisJCQl9IGVsc2UgeworCQkJCWFi LT5xbWkudGFyZ2V0X21lbVtpZHhdLnBhZGRyID0gMDsKKwkJCQlhYi0+cW1pLnRhcmdldF9tZW1b aWR4XS52YWRkciA9IE5VTEw7CisJCQl9CiAJCQlhYi0+cW1pLnRhcmdldF9tZW1baWR4XS5zaXpl ID0gYWItPnFtaS50YXJnZXRfbWVtW2ldLnNpemU7CiAJCQlhYi0+cW1pLnRhcmdldF9tZW1baWR4 XS50eXBlID0gYWItPnFtaS50YXJnZXRfbWVtW2ldLnR5cGU7CiAJCQlpZHgrKzsKQEAgLTIzMzEs NiArMjM0NCwzMiBAQCBpbnQgYXRoMTFrX3FtaV9maXJtd2FyZV9zdGFydChzdHJ1Y3QgYXRoMTFr X2Jhc2UgKmFiLAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGF0aDExa19xbWlfcHJvY2Vz c19jb2xkYm9vdF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQoreworCWludCB0 aW1lb3V0OworCWludCByZXQ7CisKKwlyZXQgPSBhdGgxMWtfcW1pX3dsYW5md19tb2RlX3NlbmQo YWIsIEFUSDExS19GSVJNV0FSRV9NT0RFX0NPTERfQk9PVCk7CisJaWYgKHJldCA8IDApIHsKKwkJ YXRoMTFrX3dhcm4oYWIsICJxbWkgZmFpbGVkIHRvIHNlbmQgd2xhbiBmdyBtb2RlOiVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWF0aDExa19kYmcoYWIsIEFUSDExS19EQkdfUU1J LCAiQ29sZGJvb3QgY2FsaWJyYXRpb24gd2FpdCBzdGFydGVkXG4iKTsKKworCXRpbWVvdXQgPSB3 YWl0X2V2ZW50X3RpbWVvdXQoYWItPnFtaS5jb2xkX2Jvb3Rfd2FpdHEsCisJCQkJICAgICAoYWIt PnFtaS5jYWxfZG9uZSAgPT0gMSksCisJCQkJICAgICBBVEgxMUtfQ09MRF9CT09UX0ZXX1JFU0VU X0RFTEFZKTsKKwlpZiAodGltZW91dCA8PSAwKSB7CisJCWF0aDExa193YXJuKGFiLCAiQ29sZGJv b3QgQ2FsaWJyYXRpb24gdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQor CisJYXRoMTFrX2RiZyhhYiwgQVRIMTFLX0RCR19RTUksICJDb2xkYm9vdCBjYWxpYnJhdGlvbiB3 YWl0IGVuZGVkXG4iKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50CiBhdGgxMWtfcW1p X2RyaXZlcl9ldmVudF9wb3N0KHN0cnVjdCBhdGgxMWtfcW1pICpxbWksCiAJCQkgICAgIGVudW0g YXRoMTFrX3FtaV9ldmVudF90eXBlIHR5cGUsCkBAIC0yNDgwLDExICsyNTE5LDE4IEBAIHN0YXRp YyB2b2lkIGF0aDExa19xbWlfbXNnX2Z3X3JlYWR5X2NiKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlf aGRsLAogCWF0aDExa19xbWlfZHJpdmVyX2V2ZW50X3Bvc3QocW1pLCBBVEgxMUtfUU1JX0VWRU5U X0ZXX1JFQURZLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX3FtaV9tc2dfY29sZF9i b290X2NhbF9kb25lX2NiKHN0cnVjdCBxbWlfaGFuZGxlICpxbWksCitzdGF0aWMgdm9pZCBhdGgx MWtfcW1pX21zZ19jb2xkX2Jvb3RfY2FsX2RvbmVfY2Ioc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9o ZGwsCiAJCQkJCQkgc3RydWN0IHNvY2thZGRyX3FydHIgKnNxLAogCQkJCQkJIHN0cnVjdCBxbWlf dHhuICp0eG4sCiAJCQkJCQkgY29uc3Qgdm9pZCAqZGVjb2RlZCkKIHsKKwlzdHJ1Y3QgYXRoMTFr X3FtaSAqcW1pID0gY29udGFpbmVyX29mKHFtaV9oZGwsCisJCQkJCSAgICAgIHN0cnVjdCBhdGgx MWtfcW1pLCBoYW5kbGUpOworCXN0cnVjdCBhdGgxMWtfYmFzZSAqYWIgPSBxbWktPmFiOworCisJ YWItPnFtaS5jYWxfZG9uZSA9IDE7CisJd2FrZV91cCgmYWItPnFtaS5jb2xkX2Jvb3Rfd2FpdHEp OworCWF0aDExa19kYmcoYWIsIEFUSDExS19EQkdfUU1JLCAicW1pIGNvbGQgYm9vdCBjYWxpYnJh dGlvbiBkb25lXG4iKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfbXNnX2hhbmRsZXIg YXRoMTFrX3FtaV9tc2dfaGFuZGxlcnNbXSA9IHsKQEAgLTI1OTcsOSArMjY0MywxNiBAQCBzdGF0 aWMgdm9pZCBhdGgxMWtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJYXRoMTFrX2NvcmVfcW1pX2Zpcm13YXJlX3Jl YWR5KGFiKTsKLQkJCWFiLT5xbWkuY2FsX2RvbmUgPSAxOwotCQkJc2V0X2JpdChBVEgxMUtfRkxB R19SRUdJU1RFUkVELCAmYWItPmRldl9mbGFncyk7CisJCQlpZiAoYXRoMTFrX2NvbGRfYm9vdF9j YWwgJiYgYWItPnFtaS5jYWxfZG9uZSA9PSAwICYmCisJCQkgICAgYWItPmh3X3BhcmFtcy5jb2xk X2Jvb3RfY2FsaWIpIHsKKwkJCQlhdGgxMWtfcW1pX3Byb2Nlc3NfY29sZGJvb3RfY2FsaWJyYXRp b24oYWIpOworCQkJfSBlbHNlIHsKKwkJCQljbGVhcl9iaXQoQVRIMTFLX0ZMQUdfQ1JBU0hfRkxV U0gsCisJCQkJCSAgJmFiLT5kZXZfZmxhZ3MpOworCQkJCWNsZWFyX2JpdChBVEgxMUtfRkxBR19S RUNPVkVSWSwgJmFiLT5kZXZfZmxhZ3MpOworCQkJCWF0aDExa19jb3JlX3FtaV9maXJtd2FyZV9y ZWFkeShhYik7CisJCQkJc2V0X2JpdChBVEgxMUtfRkxBR19SRUdJU1RFUkVELCAmYWItPmRldl9m bGFncyk7CisJCQl9CiAKIAkJCWJyZWFrOwogCQljYXNlIEFUSDExS19RTUlfRVZFTlRfQ09MRF9C T09UX0NBTF9ET05FOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEx ay9xbWkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvcW1pLmgKaW5kZXggNjBl OTA0Ni4uOGVlZTNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEx ay9xbWkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3FtaS5oCkBAIC0x Miw2ICsxMiw3IEBACiAjZGVmaW5lIEFUSDExS19IT1NUX1ZFUlNJT05fU1RSSU5HCQkiV0lOIgog I2RlZmluZSBBVEgxMUtfUU1JX1dMQU5GV19USU1FT1VUX01TCQk1MDAwCiAjZGVmaW5lIEFUSDEx S19RTUlfTUFYX0JERl9GSUxFX05BTUVfU0laRQk2NAorI2RlZmluZSBBVEgxMUtfUU1JX0NBTERC X0FERFJFU1MJCTB4NEJBMDAwMDAKICNkZWZpbmUgQVRIMTFLX1FNSV9CREZfTUFYX1NJWkUJCQko MjU2ICogMTAyNCkKICNkZWZpbmUgQVRIMTFLX1FNSV9DQUxEQVRBX09GRlNFVAkJKDEyOCAqIDEw MjQpCiAjZGVmaW5lIEFUSDExS19RTUlfV0xBTkZXX01BWF9CVUlMRF9JRF9MRU5fVjAxCTEyOApA QCAtMzMsNiArMzQsNyBAQAogI2RlZmluZSBRTUlfV0xBTkZXX01BWF9EQVRBX1NJWkVfVjAxCQk2 MTQ0CiAjZGVmaW5lIEFUSDExS19GSVJNV0FSRV9NT0RFX09GRgkJNAogI2RlZmluZSBBVEgxMUtf UU1JX1RBUkdFVF9NRU1fTU9ERV9ERUZBVUxUCTAKKyNkZWZpbmUgQVRIMTFLX0NPTERfQk9PVF9G V19SRVNFVF9ERUxBWQkJKDQwICogSFopCiAKIHN0cnVjdCBhdGgxMWtfYmFzZTsKIApAQCAtMTI1 LDYgKzEyNyw3IEBAIHN0cnVjdCBhdGgxMWtfcW1pIHsKIAlzdHJ1Y3QgdGFyZ2V0X2luZm8gdGFy Z2V0OwogCXN0cnVjdCBtM19tZW1fcmVnaW9uIG0zX21lbTsKIAl1bnNpZ25lZCBpbnQgc2Vydmlj ZV9pbnNfaWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgY29sZF9ib290X3dhaXRxOwogfTsKIAogI2Rl ZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9NU0dfVjAxX01BWF9MRU4JCTE4OQotLSAKMi43 LjQKCgotLSAKYXRoMTFrIG1haWxpbmcgbGlzdAphdGgxMWtAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2F0aDExawo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45172C433E2 for ; Tue, 15 Sep 2020 10:01:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C9D5E208E4 for ; Tue, 15 Sep 2020 10:01:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mg.codeaurora.org header.i=@mg.codeaurora.org header.b="Apph2h2O" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726125AbgIOKBX (ORCPT ); Tue, 15 Sep 2020 06:01:23 -0400 Received: from m43-7.mailgun.net ([69.72.43.7]:23820 "EHLO m43-7.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726095AbgIOKBV (ORCPT ); Tue, 15 Sep 2020 06:01:21 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1600164079; h=Content-Transfer-Encoding: Content-Type: MIME-Version: Message-Id: Date: Subject: Cc: To: From: Sender; bh=s/fzlOSuS26bZxfXDzW32Qb8iequJ6Ez4MlHKxDOsWA=; b=Apph2h2O7IYKhUgy3t18n5vbksuNtWyjIHhDHZsTmF5pG/0V/mmngkHeIocA2TJgxwQQsJYv 2hwaYN9oyl2w8R7RJRuGdZBig1fesM74hFk1QdpQbVVQOItNpHKcqaFGixhbc6EX+szph4n8 9adLK3rki4dwxhMkhnqxD2XUQzs= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyI3YTAwOSIsICJsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmciLCAiYmU5ZTRhIl0= Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n06.prod.us-west-2.postgun.com with SMTP id 5f6090b3be06707b34d564fa (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Tue, 15 Sep 2020 10:00:19 GMT Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 961D3C433FE; Tue, 15 Sep 2020 10:00:18 +0000 (UTC) Received: from ssreeela-linux.qualcomm.com (blr-c-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: ssreeela) by smtp.codeaurora.org (Postfix) with ESMTPSA id 478E9C433CA; Tue, 15 Sep 2020 10:00:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 478E9C433CA Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=fail smtp.mailfrom=ssreeela@codeaurora.org From: Sowmiya Sree Elavalagan To: ath11k@lists.infradead.org Cc: linux-wireless@vger.kernel.org, Govindaraj Saminathan , Sowmiya Sree Elavalagan Subject: [PATCH v3] ath11k: cold boot calibration support Date: Tue, 15 Sep 2020 15:29:51 +0530 Message-Id: <1600163991-2093-1-git-send-email-ssreeela@codeaurora.org> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Govindaraj Saminathan cold boot calibration is the process to calibrate all the channels during the boot-up to avoid the calibration delay during the channel change. During the boot-up, firmware started with mode “cold_boot_calibration” Firmware calibrate all channels and generate CalDb(DDR). Subsequent WIFI ON will reuse the same CalDb. Firmware restarted with Mission mode to continue the normal operation. caldb memory address send to firmware through the QMI message.Firmware use this address to store the caldb data and use it until next reboot. This will give the improvement during the channel change. But it is increasing the boot-up time(up to 15sec depend on number of radios). So if the user want to reduce the boot-up time and accepting for channel change delay, user can disable this feature using the module param cold_boot_cal =0. Tested-on: IPQ8074 WLAN.HK.2.4.0.1-00192-QCAHKSWPL_SILICONZ-1 Signed-off-by: Govindaraj Saminathan Co-developed-by: Sowmiya Sree Elavalagan Signed-off-by: Sowmiya Sree Elavalagan --- v2: - Fixed compilations warnings Reported-by: kernel test robot v3: - Rebased Added cold_boot_calib flag in hw params to enable cold boot calibration only for supported hardware --- drivers/net/wireless/ath/ath11k/ahb.c | 27 ++++++++++++++ drivers/net/wireless/ath/ath11k/core.c | 3 ++ drivers/net/wireless/ath/ath11k/core.h | 5 +++ drivers/net/wireless/ath/ath11k/hw.h | 1 + drivers/net/wireless/ath/ath11k/qmi.c | 67 ++++++++++++++++++++++++++++++---- drivers/net/wireless/ath/ath11k/qmi.h | 3 ++ 6 files changed, 99 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c index 6380d48..ccb6d40 100644 --- a/drivers/net/wireless/ath/ath11k/ahb.c +++ b/drivers/net/wireless/ath/ath11k/ahb.c @@ -573,6 +573,31 @@ static void ath11k_ahb_power_down(struct ath11k_base *ab) rproc_shutdown(ab->tgt_rproc); } +static int ath11k_ahb_fwreset_from_cold_boot(struct ath11k_base *ab) +{ + int timeout; + + if (ath11k_cold_boot_cal == 0 || ab->qmi.cal_done || + ab->hw_params.cold_boot_calib == 0) + return 0; + + ath11k_dbg(ab, ATH11K_DBG_AHB, "wait for cold boot done\n"); + timeout = wait_event_timeout(ab->qmi.cold_boot_waitq, + (ab->qmi.cal_done == 1), + ATH11K_COLD_BOOT_FW_RESET_DELAY); + if (timeout <= 0) { + ath11k_warn(ab, "Coldboot Calibration timed out\n"); + return -ETIMEDOUT; + } + + /* reset the firmware */ + ath11k_ahb_power_down(ab); + ath11k_ahb_power_up(ab); + + ath11k_dbg(ab, ATH11K_DBG_AHB, "exit wait for cold boot done\n"); + return 0; +} + static void ath11k_ahb_init_qmi_ce_config(struct ath11k_base *ab) { struct ath11k_qmi_ce_cfg *cfg = &ab->qmi.ce_cfg; @@ -903,6 +928,8 @@ static int ath11k_ahb_probe(struct platform_device *pdev) goto err_ce_free; } + ath11k_ahb_fwreset_from_cold_boot(ab); + return 0; err_ce_free: diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c index 437b112..c7db0e1 100644 --- a/drivers/net/wireless/ath/ath11k/core.c +++ b/drivers/net/wireless/ath/ath11k/core.c @@ -43,6 +43,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .vdev_start_delay = false, .htt_peer_map_v2 = true, .tcl_0_only = false, + .cold_boot_calib = true, }, { .name = "qca6390 hw2.0", @@ -68,6 +69,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .vdev_start_delay = true, .htt_peer_map_v2 = false, .tcl_0_only = true, + .cold_boot_calib = false, }, }; @@ -871,6 +873,7 @@ struct ath11k_base *ath11k_core_alloc(struct device *dev, size_t priv_size, INIT_LIST_HEAD(&ab->peers); init_waitqueue_head(&ab->peer_mapping_wq); init_waitqueue_head(&ab->wmi_ab.tx_credits_wq); + init_waitqueue_head(&ab->qmi.cold_boot_waitq); INIT_WORK(&ab->restart_work, ath11k_core_restart); timer_setup(&ab->rx_replenish_retry, ath11k_ce_rx_replenish_retry, 0); ab->dev = dev; diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h index d21191c..1d8242e 100644 --- a/drivers/net/wireless/ath/ath11k/core.h +++ b/drivers/net/wireless/ath/ath11k/core.h @@ -99,8 +99,13 @@ enum ath11k_firmware_mode { /* factory tests etc */ ATH11K_FIRMWARE_MODE_FTM, + + /* Cold boot calibration */ + ATH11K_FIRMWARE_MODE_COLD_BOOT = 7, }; +extern bool ath11k_cold_boot_cal; + #define ATH11K_IRQ_NUM_MAX 52 #define ATH11K_EXT_IRQ_NUM_MAX 16 diff --git a/drivers/net/wireless/ath/ath11k/hw.h b/drivers/net/wireless/ath/ath11k/hw.h index d15fa7f..a585772 100644 --- a/drivers/net/wireless/ath/ath11k/hw.h +++ b/drivers/net/wireless/ath/ath11k/hw.h @@ -152,6 +152,7 @@ struct ath11k_hw_params { bool vdev_start_delay; bool htt_peer_map_v2; bool tcl_0_only; + bool cold_boot_calib; }; struct ath11k_hw_ops { diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c index b906b50..25c99de 100644 --- a/drivers/net/wireless/ath/ath11k/qmi.c +++ b/drivers/net/wireless/ath/ath11k/qmi.c @@ -12,6 +12,12 @@ #define SLEEP_CLOCK_SELECT_INTERNAL_BIT 0x02 #define HOST_CSTATE_BIT 0x04 +bool ath11k_cold_boot_cal = 1; +module_param_named(cold_boot_cal, ath11k_cold_boot_cal, bool, 0644); +MODULE_PARM_DESC(cold_boot_cal, + "Cold boot will bring down the channel switch time but " + "it will increase the driver load time (enable:1, disable:0)"); + static struct qmi_elem_info qmi_wlanfw_host_cap_req_msg_v01_ei[] = { { .data_type = QMI_OPT_FLAG, @@ -1767,9 +1773,16 @@ static int ath11k_qmi_assign_target_mem_chunk(struct ath11k_base *ab) ath11k_warn(ab, "qmi mem size is low to load caldata\n"); return -EINVAL; } - /* TODO ath11k does not support cold boot calibration */ - ab->qmi.target_mem[idx].paddr = 0; - ab->qmi.target_mem[idx].vaddr = NULL; + + if (ath11k_cold_boot_cal && ab->hw_params.cold_boot_calib) { + ab->qmi.target_mem[idx].paddr = + ATH11K_QMI_CALDB_ADDRESS; + ab->qmi.target_mem[idx].vaddr = + (void *)ATH11K_QMI_CALDB_ADDRESS; + } else { + ab->qmi.target_mem[idx].paddr = 0; + ab->qmi.target_mem[idx].vaddr = NULL; + } ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size; ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type; idx++; @@ -2331,6 +2344,32 @@ int ath11k_qmi_firmware_start(struct ath11k_base *ab, return 0; } +static int ath11k_qmi_process_coldboot_calibration(struct ath11k_base *ab) +{ + int timeout; + int ret; + + ret = ath11k_qmi_wlanfw_mode_send(ab, ATH11K_FIRMWARE_MODE_COLD_BOOT); + if (ret < 0) { + ath11k_warn(ab, "qmi failed to send wlan fw mode:%d\n", ret); + return ret; + } + + ath11k_dbg(ab, ATH11K_DBG_QMI, "Coldboot calibration wait started\n"); + + timeout = wait_event_timeout(ab->qmi.cold_boot_waitq, + (ab->qmi.cal_done == 1), + ATH11K_COLD_BOOT_FW_RESET_DELAY); + if (timeout <= 0) { + ath11k_warn(ab, "Coldboot Calibration timed out\n"); + return -ETIMEDOUT; + } + + ath11k_dbg(ab, ATH11K_DBG_QMI, "Coldboot calibration wait ended\n"); + + return 0; +} + static int ath11k_qmi_driver_event_post(struct ath11k_qmi *qmi, enum ath11k_qmi_event_type type, @@ -2480,11 +2519,18 @@ static void ath11k_qmi_msg_fw_ready_cb(struct qmi_handle *qmi_hdl, ath11k_qmi_driver_event_post(qmi, ATH11K_QMI_EVENT_FW_READY, NULL); } -static void ath11k_qmi_msg_cold_boot_cal_done_cb(struct qmi_handle *qmi, +static void ath11k_qmi_msg_cold_boot_cal_done_cb(struct qmi_handle *qmi_hdl, struct sockaddr_qrtr *sq, struct qmi_txn *txn, const void *decoded) { + struct ath11k_qmi *qmi = container_of(qmi_hdl, + struct ath11k_qmi, handle); + struct ath11k_base *ab = qmi->ab; + + ab->qmi.cal_done = 1; + wake_up(&ab->qmi.cold_boot_waitq); + ath11k_dbg(ab, ATH11K_DBG_QMI, "qmi cold boot calibration done\n"); } static const struct qmi_msg_handler ath11k_qmi_msg_handlers[] = { @@ -2597,9 +2643,16 @@ static void ath11k_qmi_driver_event_work(struct work_struct *work) break; } - ath11k_core_qmi_firmware_ready(ab); - ab->qmi.cal_done = 1; - set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags); + if (ath11k_cold_boot_cal && ab->qmi.cal_done == 0 && + ab->hw_params.cold_boot_calib) { + ath11k_qmi_process_coldboot_calibration(ab); + } else { + clear_bit(ATH11K_FLAG_CRASH_FLUSH, + &ab->dev_flags); + clear_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags); + ath11k_core_qmi_firmware_ready(ab); + set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags); + } break; case ATH11K_QMI_EVENT_COLD_BOOT_CAL_DONE: diff --git a/drivers/net/wireless/ath/ath11k/qmi.h b/drivers/net/wireless/ath/ath11k/qmi.h index 60e9046..8eee3d5 100644 --- a/drivers/net/wireless/ath/ath11k/qmi.h +++ b/drivers/net/wireless/ath/ath11k/qmi.h @@ -12,6 +12,7 @@ #define ATH11K_HOST_VERSION_STRING "WIN" #define ATH11K_QMI_WLANFW_TIMEOUT_MS 5000 #define ATH11K_QMI_MAX_BDF_FILE_NAME_SIZE 64 +#define ATH11K_QMI_CALDB_ADDRESS 0x4BA00000 #define ATH11K_QMI_BDF_MAX_SIZE (256 * 1024) #define ATH11K_QMI_CALDATA_OFFSET (128 * 1024) #define ATH11K_QMI_WLANFW_MAX_BUILD_ID_LEN_V01 128 @@ -33,6 +34,7 @@ #define QMI_WLANFW_MAX_DATA_SIZE_V01 6144 #define ATH11K_FIRMWARE_MODE_OFF 4 #define ATH11K_QMI_TARGET_MEM_MODE_DEFAULT 0 +#define ATH11K_COLD_BOOT_FW_RESET_DELAY (40 * HZ) struct ath11k_base; @@ -125,6 +127,7 @@ struct ath11k_qmi { struct target_info target; struct m3_mem_region m3_mem; unsigned int service_ins_id; + wait_queue_head_t cold_boot_waitq; }; #define QMI_WLANFW_HOST_CAP_REQ_MSG_V01_MAX_LEN 189 -- 2.7.4