From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail26.static.mailgun.info ([104.130.122.26]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jIuS2-0001AW-1S for ath10k@lists.infradead.org; Mon, 30 Mar 2020 13:27:39 +0000 From: Sowmiya Sree Elavalagan Subject: [PATCH v2 1/2] ath10k: enable VHT160 and VHT80+80 modes Date: Mon, 30 Mar 2020 18:56:31 +0530 Message-Id: <1585574792-719-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: "ath10k" Errors-To: ath10k-bounces+kvalo=adurom.com@lists.infradead.org To: ath10k@lists.infradead.org Cc: Lei Wang , Sowmiya Sree Elavalagan , Rick Wu , linux-wireless@vger.kernel.org, Sebastian Gottschall RnJvbTogTGVpIFdhbmcgPGxlaXdhQGNvZGVhdXJvcmEub3JnPgoKU2V0IHJpZ2h0IGNoYW5uZWwg ZnJlcXVlbmNpZXMgaW4gVkhUMTYwIG1vZGUgYWNjb3JkaW5nIHRvIHRoZSBWSFQxNjAKaW50ZXJv cGVyYWJpbGl0eSB3b3JrYXJvdW5kIGFkZGVkIGFzIHBhcnQgb2YgSUVFRSBTdGQgODAyLjEx4oSi LTIwMTYgaW4KIlRhYmxlIDktMjUy4oCUVkhUIE9wZXJhdGlvbiBJbmZvcm1hdGlvbiBzdWJmaWVs ZHMiLCBiYW5kX2NlbnRlcl9mcmVxMgpjb3JyZXNwb25kcyB0byBDQ0ZTMSBpbiBUYWJsZSA5LTI1 My4gUHJldmlvdXMgaW1wbGVtZW50YXRpb24KKGJhbmRfY2VudGVyX2ZyZXEyID0gMCBmb3IgVkhU MTYwKSBpcyBvbmx5IGRlcHJlY2F0ZWQuCgpFbmFibGUgVkhUODArODAgbW9kZSBhbmQgc2V0IHRo ZSBwcm9wZXIgcGVlciBSWCBuc3MgdmFsdWUgZm9yIFZIVDE2MCBhbmQKVkhUODArODAgbW9kZS4K CkJhc2VkIG9uIHBhdGNoZXMgYnkgU2ViYXN0aWFuIEdvdHRzY2hhbGw6CgpodHRwczovL2xrbWwu a2VybmVsLm9yZy9yLzIwMTgwNzA0MDk1NDQ0LjY2Mi0xLXMuZ290dHNjaGFsbEBkZC13cnQuY29t CgpodHRwczovL2xrbWwua2VybmVsLm9yZy9yLzIwMTgwNzA0MTIwNTE5LjY0NzktMS1zLmdvdHRz Y2hhbGxAZGQtd3J0LmNvbQoKVGVzdGVkOiBxY2E5OTg0IHdpdGggZmlybXdhcmUgdmVyIDEwLjQt My4xMC0wMDA0NwoKQ28tZGV2ZWxvcGVkLWJ5OiBTZWJhc3RpYW4gR290dHNjaGFsbCA8cy5nb3R0 c2NoYWxsQGRkLXdydC5jb20+ClNpZ25lZC1vZmYtYnk6IFNlYmFzdGlhbiBHb3R0c2NoYWxsIDxz LmdvdHRzY2hhbGxAZGQtd3J0LmNvbT4KQ28tZGV2ZWxvcGVkLWJ5OiBSaWNrIFd1IDxyd3VAY29k ZWF1cm9yYS5vcmc+ClNpZ25lZC1vZmYtYnk6IFJpY2sgV3UgPHJ3dUBjb2RlYXVyb3JhLm9yZz4K U2lnbmVkLW9mZi1ieTogTGVpIFdhbmcgPGxlaXdhQGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2Zm LWJ5OiBTb3dtaXlhIFNyZWUgRWxhdmFsYWdhbiA8c3NyZWVlbGFAY29kZWF1cm9yYS5vcmc+Ci0t LQogZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYyB8IDg0ICsrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0tLS0tCiBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBr L3dtaS5jIHwgMjMgKysrKysrLS0tLQogZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93 bWkuaCB8ICA1ICsrLQogMyBmaWxlcyBjaGFuZ2VkLCA4MCBpbnNlcnRpb25zKCspLCAzMiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21h Yy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYwppbmRleCAyZDAzYjhk Li5hNTlhN2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21h Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMKQEAgLTI1MDUs NiArMjUwNSwzMCBAQCBhdGgxMGtfcGVlcl9hc3NvY19oX3ZodF9saW1pdCh1MTYgdHhfbWNzX3Nl dCwKIAlyZXR1cm4gdHhfbWNzX3NldDsKIH0KIAorc3RhdGljIHUzMiBnZXRfMTYwbWh6X25zc19m cm9tX21heHJhdGUoaW50IHJhdGUpCit7CisJdTMyIG5zczsKKworCXN3aXRjaCAocmF0ZSkgewor CWNhc2UgNzgwOgorCQluc3MgPSAxOworCQlicmVhazsKKwljYXNlIDE1NjA6CisJCW5zcyA9IDI7 CisJCWJyZWFrOworCWNhc2UgMjEwNjoKKwkJbnNzID0gMzsgLyogbm90IHN1cHBvcnQgTUNTOSBm cm9tIHNwZWMqLworCQlicmVhazsKKwljYXNlIDMxMjA6CisJCW5zcyA9IDQ7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCSBuc3MgPSAxOworCX0KKworCXJldHVybiBuc3M7Cit9CisKIHN0YXRpYyB2 b2lkIGF0aDEwa19wZWVyX2Fzc29jX2hfdmh0KHN0cnVjdCBhdGgxMGsgKmFyLAogCQkJCSAgICBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq c3RhLApAQCAtMjUxMiw2ICsyNTM2LDcgQEAgc3RhdGljIHZvaWQgYXRoMTBrX3BlZXJfYXNzb2Nf aF92aHQoc3RydWN0IGF0aDEwayAqYXIsCiB7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdGFf dmh0X2NhcCAqdmh0X2NhcCA9ICZzdGEtPnZodF9jYXA7CiAJc3RydWN0IGF0aDEwa192aWYgKmFy dmlmID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGgxMGtfaHdfcGFyYW1zICpo dyA9ICZhci0+aHdfcGFyYW1zOwogCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiBkZWY7CiAJZW51 bSBubDgwMjExX2JhbmQgYmFuZDsKIAljb25zdCB1MTYgKnZodF9tY3NfbWFzazsKQEAgLTI1Nzgs MjIgKzI2MDMsMzggQEAgc3RhdGljIHZvaWQgYXRoMTBrX3BlZXJfYXNzb2NfaF92aHQoc3RydWN0 IGF0aDEwayAqYXIsCiAJYXJnLT5wZWVyX3ZodF9yYXRlcy50eF9tY3Nfc2V0ID0gYXRoMTBrX3Bl ZXJfYXNzb2NfaF92aHRfbGltaXQoCiAJCV9fbGUxNl90b19jcHUodmh0X2NhcC0+dmh0X21jcy50 eF9tY3NfbWFwKSwgdmh0X21jc19tYXNrKTsKIAotCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdf TUFDLCAibWFjIHZodCBwZWVyICVwTSBtYXhfbXBkdSAlZCBmbGFncyAweCV4XG4iLAotCQkgICBz dGEtPmFkZHIsIGFyZy0+cGVlcl9tYXhfbXBkdSwgYXJnLT5wZWVyX2ZsYWdzKTsKKwkvKiBDb25m aWd1cmUgYmFuZHdpZHRoLU5TUyBtYXBwaW5nIHRvIEZXCisJICogZm9yIHRoZSBjaGlwJ3MgdHgg Y2hhaW5zIHNldHRpbmcgb24gMTYwTWh6IGJ3CisJICovCisJaWYgKGFyZy0+cGVlcl9waHltb2Rl ID09IE1PREVfMTFBQ19WSFQxNjAgfHwKKwkgICAgYXJnLT5wZWVyX3BoeW1vZGUgPT0gTU9ERV8x MUFDX1ZIVDgwXzgwKSB7CisJCXUzMiByeF9uc3M7CisJCXUzMiBtYXhfcmF0ZTsKIAotCWlmIChh cmctPnBlZXJfdmh0X3JhdGVzLnJ4X21heF9yYXRlICYmCi0JICAgIChzdGEtPnZodF9jYXAuY2Fw ICYgSUVFRTgwMjExX1ZIVF9DQVBfU1VQUF9DSEFOX1dJRFRIX01BU0spKSB7Ci0JCXN3aXRjaCAo YXJnLT5wZWVyX3ZodF9yYXRlcy5yeF9tYXhfcmF0ZSkgewotCQljYXNlIDE1NjA6Ci0JCQkvKiBN dXN0IGJlIDJ4MiBhdCAxNjBNaHogaXMgYWxsIGl0IGNhbiBkby4gKi8KLQkJCWFyZy0+cGVlcl9i d19yeG5zc19vdmVycmlkZSA9IDI7Ci0JCQlicmVhazsKLQkJY2FzZSA3ODA6Ci0JCQkvKiBDYW4g b25seSBkbyAxeDEgYXQgMTYwTWh6IChMb25nIEd1YXJkIEludGVydmFsKSAqLwotCQkJYXJnLT5w ZWVyX2J3X3J4bnNzX292ZXJyaWRlID0gMTsKLQkJCWJyZWFrOworCQltYXhfcmF0ZSA9IGFyZy0+ cGVlcl92aHRfcmF0ZXMucnhfbWF4X3JhdGU7CisJCXJ4X25zcyA9IGdldF8xNjBtaHpfbnNzX2Zy b21fbWF4cmF0ZShtYXhfcmF0ZSk7CisKKwkJaWYgKHJ4X25zcyA9PSAwKQorCQkJcnhfbnNzID0g YXJnLT5wZWVyX251bV9zcGF0aWFsX3N0cmVhbXM7CisJCWVsc2UKKwkJCXJ4X25zcyA9IG1pbihh cmctPnBlZXJfbnVtX3NwYXRpYWxfc3RyZWFtcywgcnhfbnNzKTsKKworCQltYXhfcmF0ZSA9IGh3 LT52aHQxNjBfbWNzX3R4X2hpZ2hlc3Q7CisJCXJ4X25zcyA9IG1pbihyeF9uc3MsIGdldF8xNjBt aHpfbnNzX2Zyb21fbWF4cmF0ZShtYXhfcmF0ZSkpOworCisJCWFyZy0+cGVlcl9id19yeG5zc19v dmVycmlkZSA9CisJCQlGSUVMRF9QUkVQKFdNSV9QRUVSX05TU19NQVBfRU5BQkxFLCAxKSB8CisJ CQlGSUVMRF9QUkVQKFdNSV9QRUVSX05TU18xNjBNSFpfTUFTSywgKHJ4X25zcyAtIDEpKTsKKwor CQlpZiAoYXJnLT5wZWVyX3BoeW1vZGUgPT0gTU9ERV8xMUFDX1ZIVDgwXzgwKSB7CisJCQlhcmct PnBlZXJfYndfcnhuc3Nfb3ZlcnJpZGUgfD0KKwkJCUZJRUxEX1BSRVAoV01JX1BFRVJfTlNTXzgw XzgwTUhaX01BU0ssIChyeF9uc3MgLSAxKSk7CiAJCX0KIAl9CisJYXRoMTBrX2RiZyhhciwgQVRI MTBLX0RCR19NQUMsCisJCSAgICJtYWMgdmh0IHBlZXIgJXBNIG1heF9tcGR1ICVkIGZsYWdzIDB4 JXggcGVlcl9yeF9uc3Nfb3ZlcnJpZGUgMHgleFxuIiwKKwkJICAgc3RhLT5hZGRyLCBhcmctPnBl ZXJfbWF4X21wZHUsCisJCSAgIGFyZy0+cGVlcl9mbGFncywgYXJnLT5wZWVyX2J3X3J4bnNzX292 ZXJyaWRlKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoMTBrX3BlZXJfYXNzb2NfaF9xb3Moc3RydWN0 IGF0aDEwayAqYXIsCkBAIC0yNzQ1LDkgKzI3ODYsOSBAQCBzdGF0aWMgaW50IGF0aDEwa19wZWVy X2Fzc29jX3ByZXBhcmUoc3RydWN0IGF0aDEwayAqYXIsCiAJYXRoMTBrX3BlZXJfYXNzb2NfaF9j cnlwdG8oYXIsIHZpZiwgc3RhLCBhcmcpOwogCWF0aDEwa19wZWVyX2Fzc29jX2hfcmF0ZXMoYXIs IHZpZiwgc3RhLCBhcmcpOwogCWF0aDEwa19wZWVyX2Fzc29jX2hfaHQoYXIsIHZpZiwgc3RhLCBh cmcpOworCWF0aDEwa19wZWVyX2Fzc29jX2hfcGh5bW9kZShhciwgdmlmLCBzdGEsIGFyZyk7CiAJ YXRoMTBrX3BlZXJfYXNzb2NfaF92aHQoYXIsIHZpZiwgc3RhLCBhcmcpOwogCWF0aDEwa19wZWVy X2Fzc29jX2hfcW9zKGFyLCB2aWYsIHN0YSwgYXJnKTsKLQlhdGgxMGtfcGVlcl9hc3NvY19oX3Bo eW1vZGUoYXIsIHZpZiwgc3RhLCBhcmcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTYzLDEzICs0 NjA0LDYgQEAgc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhX3ZodF9jYXAgYXRoMTBrX2NyZWF0 ZV92aHRfY2FwKHN0cnVjdCBhdGgxMGsgKmFyKQogCQl2aHRfY2FwLmNhcCB8PSB2YWw7CiAJfQog Ci0JLyogQ3VycmVudGx5IHRoZSBmaXJtd2FyZSBzZWVtcyB0byBiZSBidWdneSwgZG9uJ3QgZW5h YmxlIDgwKzgwCi0JICogbW9kZSB1bnRpbCB0aGF0J3MgcmVzb2x2ZWQuCi0JICovCi0JaWYgKChh ci0+dmh0X2NhcF9pbmZvICYgSUVFRTgwMjExX1ZIVF9DQVBfU0hPUlRfR0lfMTYwKSAmJgotCSAg ICAoYXItPnZodF9jYXBfaW5mbyAmIElFRUU4MDIxMV9WSFRfQ0FQX1NVUFBfQ0hBTl9XSURUSF9N QVNLKSA9PSAwKQotCQl2aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfVkhUX0NBUF9TVVBQX0NIQU5f V0lEVEhfMTYwTUhaOwotCiAJbWNzX21hcCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykg ewogCQlpZiAoKGkgPCBhci0+bnVtX3JmX2NoYWlucykgJiYgKGFyLT5jZmdfdHhfY2hhaW5tYXNr ICYgQklUKGkpKSkKQEAgLTg2MjUsNyArODY1OSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGF0aDEwa18xMF80X2lmX2NvbWJbXSA9IHsKIAkJLnJh ZGFyX2RldGVjdF93aWR0aHMgPQlCSVQoTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQpIHwKIAkJ CQkJQklUKE5MODAyMTFfQ0hBTl9XSURUSF8yMCkgfAogCQkJCQlCSVQoTkw4MDIxMV9DSEFOX1dJ RFRIXzQwKSB8Ci0JCQkJCUJJVChOTDgwMjExX0NIQU5fV0lEVEhfODApLAorCQkJCQlCSVQoTkw4 MDIxMV9DSEFOX1dJRFRIXzgwKSB8CisJCQkJCUJJVChOTDgwMjExX0NIQU5fV0lEVEhfODBQODAp IHwKKwkJCQkJQklUKE5MODAyMTFfQ0hBTl9XSURUSF8xNjApLAogI2VuZGlmCiAJfSwKIH07CkBA IC04NjQzLDcgKzg2NzksOSBAQCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24gYXRoMTBrXzEw XzRfYmNuX2ludF9pZl9jb21iW10gPSB7CiAJCS5yYWRhcl9kZXRlY3Rfd2lkdGhzID0gIEJJVChO TDgwMjExX0NIQU5fV0lEVEhfMjBfTk9IVCkgfAogCQkJCQlCSVQoTkw4MDIxMV9DSEFOX1dJRFRI XzIwKSB8CiAJCQkJCUJJVChOTDgwMjExX0NIQU5fV0lEVEhfNDApIHwKLQkJCQkJQklUKE5MODAy MTFfQ0hBTl9XSURUSF84MCksCisJCQkJCUJJVChOTDgwMjExX0NIQU5fV0lEVEhfODApIHwKKwkJ CQkJQklUKE5MODAyMTFfQ0hBTl9XSURUSF84MFA4MCkgfAorCQkJCQlCSVQoTkw4MDIxMV9DSEFO X1dJRFRIXzE2MCksCiAjZW5kaWYKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL2F0aC9hdGgxMGsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBr L3dtaS5jCmluZGV4IDJlYTc3YmIuLmRiNmY0YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL2F0aC9hdGgxMGsvd21pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0 aDEway93bWkuYwpAQCAtMTcxNCwxMiArMTcxNCwyMyBAQCB2b2lkIGF0aDEwa193bWlfcHV0X3dt aV9jaGFubmVsKHN0cnVjdCB3bWlfY2hhbm5lbCAqY2gsCiAJaWYgKGFyZy0+Y2hhbl9yYWRhcikK IAkJZmxhZ3MgfD0gV01JX0NIQU5fRkxBR19ERlM7CiAKKwljaC0+YmFuZF9jZW50ZXJfZnJlcTIg PSAwOwogCWNoLT5taHogPSBfX2NwdV90b19sZTMyKGFyZy0+ZnJlcSk7CiAJY2gtPmJhbmRfY2Vu dGVyX2ZyZXExID0gX19jcHVfdG9fbGUzMihhcmctPmJhbmRfY2VudGVyX2ZyZXExKTsKIAlpZiAo YXJnLT5tb2RlID09IE1PREVfMTFBQ19WSFQ4MF84MCkKIAkJY2gtPmJhbmRfY2VudGVyX2ZyZXEy ID0gX19jcHVfdG9fbGUzMihhcmctPmJhbmRfY2VudGVyX2ZyZXEyKTsKLQllbHNlCi0JCWNoLT5i YW5kX2NlbnRlcl9mcmVxMiA9IDA7CisKKwlpZiAoYXJnLT5tb2RlID09IE1PREVfMTFBQ19WSFQx NjApIHsKKwkJaWYgKGFyZy0+ZnJlcSA+IGFyZy0+YmFuZF9jZW50ZXJfZnJlcTEpCisJCQljaC0+ YmFuZF9jZW50ZXJfZnJlcTEgPQorCQkJCV9fY3B1X3RvX2xlMzIoYXJnLT5iYW5kX2NlbnRlcl9m cmVxMSArIDQwKTsKKwkJZWxzZQorCQkJY2gtPmJhbmRfY2VudGVyX2ZyZXExID0KKwkJCQlfX2Nw dV90b19sZTMyKGFyZy0+YmFuZF9jZW50ZXJfZnJlcTEgLSA0MCk7CisKKwkJY2gtPmJhbmRfY2Vu dGVyX2ZyZXEyID0gX19jcHVfdG9fbGUzMihhcmctPmJhbmRfY2VudGVyX2ZyZXExKTsKKwl9CisK IAljaC0+bWluX3Bvd2VyID0gYXJnLT5taW5fcG93ZXI7CiAJY2gtPm1heF9wb3dlciA9IGFyZy0+ bWF4X3Bvd2VyOwogCWNoLT5yZWdfcG93ZXIgPSBhcmctPm1heF9yZWdfcG93ZXI7CkBAIC03NjI4 LDEyICs3NjM5LDggQEAgYXRoMTBrX3dtaV9wZWVyX2Fzc29jX2ZpbGxfMTBfNChzdHJ1Y3QgYXRo MTBrICphciwgdm9pZCAqYnVmLAogCXN0cnVjdCB3bWlfMTBfNF9wZWVyX2Fzc29jX2NvbXBsZXRl X2NtZCAqY21kID0gYnVmOwogCiAJYXRoMTBrX3dtaV9wZWVyX2Fzc29jX2ZpbGxfMTBfMihhciwg YnVmLCBhcmcpOwotCWlmIChhcmctPnBlZXJfYndfcnhuc3Nfb3ZlcnJpZGUpCi0JCWNtZC0+cGVl cl9id19yeG5zc19vdmVycmlkZSA9Ci0JCQlfX2NwdV90b19sZTMyKChhcmctPnBlZXJfYndfcnhu c3Nfb3ZlcnJpZGUgLSAxKSB8Ci0JCQkJICAgICAgQklUKFBFRVJfQldfUlhOU1NfT1ZFUlJJREVf T0ZGU0VUKSk7Ci0JZWxzZQotCQljbWQtPnBlZXJfYndfcnhuc3Nfb3ZlcnJpZGUgPSAwOworCWNt ZC0+cGVlcl9id19yeG5zc19vdmVycmlkZSA9CisJCV9fY3B1X3RvX2xlMzIoYXJnLT5wZWVyX2J3 X3J4bnNzX292ZXJyaWRlKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9h dGgxMGsvd21pLmgKaW5kZXggNmRmNDE1Ny4uNWJhMGM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9u ZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9h dGgvYXRoMTBrL3dtaS5oCkBAIC02NTA4LDcgKzY1MDgsMTAgQEAgc3RydWN0IHdtaV8xMF8yX3Bl ZXJfYXNzb2NfY29tcGxldGVfY21kIHsKIAlfX2xlMzIgaW5mbzA7IC8qIFdNSV9QRUVSX0FTU09D X0lORk8wXyAqLwogfSBfX3BhY2tlZDsKIAotI2RlZmluZSBQRUVSX0JXX1JYTlNTX09WRVJSSURF X09GRlNFVCAgMzEKKy8qIE5TUyBNYXBwaW5nIHRvIEZXICovCisjZGVmaW5lIFdNSV9QRUVSX05T U19NQVBfRU5BQkxFCUJJVCgzMSkKKyNkZWZpbmUgV01JX1BFRVJfTlNTXzE2ME1IWl9NQVNLCUdF Tk1BU0soMiwgMCkKKyNkZWZpbmUgV01JX1BFRVJfTlNTXzgwXzgwTUhaX01BU0sJR0VOTUFTSyg1 LCAzKQogCiBzdHJ1Y3Qgd21pXzEwXzRfcGVlcl9hc3NvY19jb21wbGV0ZV9jbWQgewogCXN0cnVj dCB3bWlfMTBfMl9wZWVyX2Fzc29jX2NvbXBsZXRlX2NtZCBjbWQ7Ci0tIAoyLjcuNAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYXRoMTBrIG1haWxpbmcg bGlzdAphdGgxMGtAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2F0aDEwawo= 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=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,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 EFB97C43331 for ; Mon, 30 Mar 2020 13:27:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B2D9E20733 for ; Mon, 30 Mar 2020 13:27:43 +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="L6RZXM8o" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727796AbgC3N1n (ORCPT ); Mon, 30 Mar 2020 09:27:43 -0400 Received: from mail27.static.mailgun.info ([104.130.122.27]:12894 "EHLO mail27.static.mailgun.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727751AbgC3N1m (ORCPT ); Mon, 30 Mar 2020 09:27:42 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1585574861; h=Content-Transfer-Encoding: Content-Type: MIME-Version: Message-Id: Date: Subject: Cc: To: From: Sender; bh=pJJ1JdIPxRAFhKDVFuCt05Kc/0qC00mtHXT4aWjJTow=; b=L6RZXM8oVCc2HQlDPrU5yJlUlRjrMaA9km1BuID+1DAGgUyi4R3tIRLRJoAN2pDcKeW4W8tm 14HIRf4YsF2JCGrZorFkTmbDmkpBHgnZ5RBhd6S0iR1AuDVp+LR4XEEqnnJ6oH7Si5suHshc tqILnX9llYEfVFePDgA6DdUGsFc= X-Mailgun-Sending-Ip: 104.130.122.27 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 mxa.mailgun.org with ESMTP id 5e81f3c6.7f9616de2960-smtp-out-n05; Mon, 30 Mar 2020 13:27:34 -0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 5D05EC433F2; Mon, 30 Mar 2020 13:27:34 +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 628DCC433D2; Mon, 30 Mar 2020 13:27:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 628DCC433D2 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=none smtp.mailfrom=ssreeela@codeaurora.org From: Sowmiya Sree Elavalagan To: ath10k@lists.infradead.org Cc: linux-wireless@vger.kernel.org, Lei Wang , Sebastian Gottschall , Rick Wu , Sowmiya Sree Elavalagan Subject: [PATCH v2 1/2] ath10k: enable VHT160 and VHT80+80 modes Date: Mon, 30 Mar 2020 18:56:31 +0530 Message-Id: <1585574792-719-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: Lei Wang Set right channel frequencies in VHT160 mode according to the VHT160 interoperability workaround added as part of IEEE Std 802.11™-2016 in "Table 9-252—VHT Operation Information subfields", band_center_freq2 corresponds to CCFS1 in Table 9-253. Previous implementation (band_center_freq2 = 0 for VHT160) is only deprecated. Enable VHT80+80 mode and set the proper peer RX nss value for VHT160 and VHT80+80 mode. Based on patches by Sebastian Gottschall: https://lkml.kernel.org/r/20180704095444.662-1-s.gottschall@dd-wrt.com https://lkml.kernel.org/r/20180704120519.6479-1-s.gottschall@dd-wrt.com Tested: qca9984 with firmware ver 10.4-3.10-00047 Co-developed-by: Sebastian Gottschall Signed-off-by: Sebastian Gottschall Co-developed-by: Rick Wu Signed-off-by: Rick Wu Signed-off-by: Lei Wang Signed-off-by: Sowmiya Sree Elavalagan --- drivers/net/wireless/ath/ath10k/mac.c | 84 +++++++++++++++++++++++++---------- drivers/net/wireless/ath/ath10k/wmi.c | 23 ++++++---- drivers/net/wireless/ath/ath10k/wmi.h | 5 ++- 3 files changed, 80 insertions(+), 32 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 2d03b8d..a59a7a5 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -2505,6 +2505,30 @@ ath10k_peer_assoc_h_vht_limit(u16 tx_mcs_set, return tx_mcs_set; } +static u32 get_160mhz_nss_from_maxrate(int rate) +{ + u32 nss; + + switch (rate) { + case 780: + nss = 1; + break; + case 1560: + nss = 2; + break; + case 2106: + nss = 3; /* not support MCS9 from spec*/ + break; + case 3120: + nss = 4; + break; + default: + nss = 1; + } + + return nss; +} + static void ath10k_peer_assoc_h_vht(struct ath10k *ar, struct ieee80211_vif *vif, struct ieee80211_sta *sta, @@ -2512,6 +2536,7 @@ static void ath10k_peer_assoc_h_vht(struct ath10k *ar, { const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap; struct ath10k_vif *arvif = (void *)vif->drv_priv; + struct ath10k_hw_params *hw = &ar->hw_params; struct cfg80211_chan_def def; enum nl80211_band band; const u16 *vht_mcs_mask; @@ -2578,22 +2603,38 @@ static void ath10k_peer_assoc_h_vht(struct ath10k *ar, arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit( __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask); - ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n", - sta->addr, arg->peer_max_mpdu, arg->peer_flags); + /* Configure bandwidth-NSS mapping to FW + * for the chip's tx chains setting on 160Mhz bw + */ + if (arg->peer_phymode == MODE_11AC_VHT160 || + arg->peer_phymode == MODE_11AC_VHT80_80) { + u32 rx_nss; + u32 max_rate; - if (arg->peer_vht_rates.rx_max_rate && - (sta->vht_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK)) { - switch (arg->peer_vht_rates.rx_max_rate) { - case 1560: - /* Must be 2x2 at 160Mhz is all it can do. */ - arg->peer_bw_rxnss_override = 2; - break; - case 780: - /* Can only do 1x1 at 160Mhz (Long Guard Interval) */ - arg->peer_bw_rxnss_override = 1; - break; + max_rate = arg->peer_vht_rates.rx_max_rate; + rx_nss = get_160mhz_nss_from_maxrate(max_rate); + + if (rx_nss == 0) + rx_nss = arg->peer_num_spatial_streams; + else + rx_nss = min(arg->peer_num_spatial_streams, rx_nss); + + max_rate = hw->vht160_mcs_tx_highest; + rx_nss = min(rx_nss, get_160mhz_nss_from_maxrate(max_rate)); + + arg->peer_bw_rxnss_override = + FIELD_PREP(WMI_PEER_NSS_MAP_ENABLE, 1) | + FIELD_PREP(WMI_PEER_NSS_160MHZ_MASK, (rx_nss - 1)); + + if (arg->peer_phymode == MODE_11AC_VHT80_80) { + arg->peer_bw_rxnss_override |= + FIELD_PREP(WMI_PEER_NSS_80_80MHZ_MASK, (rx_nss - 1)); } } + ath10k_dbg(ar, ATH10K_DBG_MAC, + "mac vht peer %pM max_mpdu %d flags 0x%x peer_rx_nss_override 0x%x\n", + sta->addr, arg->peer_max_mpdu, + arg->peer_flags, arg->peer_bw_rxnss_override); } static void ath10k_peer_assoc_h_qos(struct ath10k *ar, @@ -2745,9 +2786,9 @@ static int ath10k_peer_assoc_prepare(struct ath10k *ar, ath10k_peer_assoc_h_crypto(ar, vif, sta, arg); ath10k_peer_assoc_h_rates(ar, vif, sta, arg); ath10k_peer_assoc_h_ht(ar, vif, sta, arg); + ath10k_peer_assoc_h_phymode(ar, vif, sta, arg); ath10k_peer_assoc_h_vht(ar, vif, sta, arg); ath10k_peer_assoc_h_qos(ar, vif, sta, arg); - ath10k_peer_assoc_h_phymode(ar, vif, sta, arg); return 0; } @@ -4563,13 +4604,6 @@ static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar) vht_cap.cap |= val; } - /* Currently the firmware seems to be buggy, don't enable 80+80 - * mode until that's resolved. - */ - if ((ar->vht_cap_info & IEEE80211_VHT_CAP_SHORT_GI_160) && - (ar->vht_cap_info & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) == 0) - vht_cap.cap |= IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ; - mcs_map = 0; for (i = 0; i < 8; i++) { if ((i < ar->num_rf_chains) && (ar->cfg_tx_chainmask & BIT(i))) @@ -8625,7 +8659,9 @@ static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = { .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) | BIT(NL80211_CHAN_WIDTH_20) | BIT(NL80211_CHAN_WIDTH_40) | - BIT(NL80211_CHAN_WIDTH_80), + BIT(NL80211_CHAN_WIDTH_80) | + BIT(NL80211_CHAN_WIDTH_80P80) | + BIT(NL80211_CHAN_WIDTH_160), #endif }, }; @@ -8643,7 +8679,9 @@ ieee80211_iface_combination ath10k_10_4_bcn_int_if_comb[] = { .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) | BIT(NL80211_CHAN_WIDTH_20) | BIT(NL80211_CHAN_WIDTH_40) | - BIT(NL80211_CHAN_WIDTH_80), + BIT(NL80211_CHAN_WIDTH_80) | + BIT(NL80211_CHAN_WIDTH_80P80) | + BIT(NL80211_CHAN_WIDTH_160), #endif }, }; diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c index 2ea77bb..db6f4c7 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.c +++ b/drivers/net/wireless/ath/ath10k/wmi.c @@ -1714,12 +1714,23 @@ void ath10k_wmi_put_wmi_channel(struct wmi_channel *ch, if (arg->chan_radar) flags |= WMI_CHAN_FLAG_DFS; + ch->band_center_freq2 = 0; ch->mhz = __cpu_to_le32(arg->freq); ch->band_center_freq1 = __cpu_to_le32(arg->band_center_freq1); if (arg->mode == MODE_11AC_VHT80_80) ch->band_center_freq2 = __cpu_to_le32(arg->band_center_freq2); - else - ch->band_center_freq2 = 0; + + if (arg->mode == MODE_11AC_VHT160) { + if (arg->freq > arg->band_center_freq1) + ch->band_center_freq1 = + __cpu_to_le32(arg->band_center_freq1 + 40); + else + ch->band_center_freq1 = + __cpu_to_le32(arg->band_center_freq1 - 40); + + ch->band_center_freq2 = __cpu_to_le32(arg->band_center_freq1); + } + ch->min_power = arg->min_power; ch->max_power = arg->max_power; ch->reg_power = arg->max_reg_power; @@ -7628,12 +7639,8 @@ ath10k_wmi_peer_assoc_fill_10_4(struct ath10k *ar, void *buf, struct wmi_10_4_peer_assoc_complete_cmd *cmd = buf; ath10k_wmi_peer_assoc_fill_10_2(ar, buf, arg); - if (arg->peer_bw_rxnss_override) - cmd->peer_bw_rxnss_override = - __cpu_to_le32((arg->peer_bw_rxnss_override - 1) | - BIT(PEER_BW_RXNSS_OVERRIDE_OFFSET)); - else - cmd->peer_bw_rxnss_override = 0; + cmd->peer_bw_rxnss_override = + __cpu_to_le32(arg->peer_bw_rxnss_override); } static int diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h index 6df4157..5ba0c9a 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.h +++ b/drivers/net/wireless/ath/ath10k/wmi.h @@ -6508,7 +6508,10 @@ struct wmi_10_2_peer_assoc_complete_cmd { __le32 info0; /* WMI_PEER_ASSOC_INFO0_ */ } __packed; -#define PEER_BW_RXNSS_OVERRIDE_OFFSET 31 +/* NSS Mapping to FW */ +#define WMI_PEER_NSS_MAP_ENABLE BIT(31) +#define WMI_PEER_NSS_160MHZ_MASK GENMASK(2, 0) +#define WMI_PEER_NSS_80_80MHZ_MASK GENMASK(5, 3) struct wmi_10_4_peer_assoc_complete_cmd { struct wmi_10_2_peer_assoc_complete_cmd cmd; -- 2.7.4