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.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, 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 CA3FCC433E1 for ; Fri, 12 Jun 2020 18:30:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A53E1207F7 for ; Fri, 12 Jun 2020 18:30:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="HNoytvPz" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726428AbgFLSaU (ORCPT ); Fri, 12 Jun 2020 14:30:20 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:61842 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726391AbgFLSaU (ORCPT ); Fri, 12 Jun 2020 14:30:20 -0400 X-UUID: 4c5a901ec97c4c129a51b3289b4e6a70-20200613 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=HNrPmQ2IIylNycJMJ0rpK8m8tnlpP8o1gtVTahC34RY=; b=HNoytvPz6BSDHAZrVbpS3xHTKexsGhvGOQOa+f7jSeOLp+GqOaysdYfokuYQb1eLKnmHQ/X+COJxx5q1pCik9GQ1USaOmjZ8WsbPpZzZmWzh9sEBB2CpoBPX4DW0sLj9ITcaWGLj/jdWu8Gkp52jLw5r6bsGs57ZxDiKNzw4yF4=; X-UUID: 4c5a901ec97c4c129a51b3289b4e6a70-20200613 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1033995534; Sat, 13 Jun 2020 02:30:15 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs06n1.mediatek.inc (172.21.101.129) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 13 Jun 2020 02:30:14 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sat, 13 Jun 2020 02:30:11 +0800 From: Ryder Lee To: Felix Fietkau , Lorenzo Bianconi CC: Shayne Chen , Sean Wang , , , Ryder Lee Subject: [PATCH v2 3/3] mt76: mt7915: add MU-MIMO support Date: Sat, 13 Jun 2020 02:30:10 +0800 Message-ID: <52232d9b5857dd17e6e11ed4bb81a51e6e8bb757.1591983283.git.ryder.lee@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <2863c9a7e14c791202738597184f4a6b75d5bc07.1591983283.git.ryder.lee@mediatek.com> References: <2863c9a7e14c791202738597184f4a6b75d5bc07.1591983283.git.ryder.lee@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RW5hYmxlIE1VLU1JTU8gREwvVUwgYW5kIGFkZCByZWxhdGl2ZSBjb3VudGVycyBpbiBkZWJ1Z2Zz Lg0KDQpDdXJyZW50bHkgTVUgbW9kdWxlcyByZWFkIFdUQkwgZmlyc3QgdG8gbm90aWZ5IEJBIGNo YW5nZXMgdG8NCm90aGVyIGNyb3NzIG1vZHVsZXMsIHNvIGFkanVzdCBtdDc5MTVfbWN1X3N0YV9i YSgpIGFjY29yZGluZ2x5Lg0KDQpUZXN0ZWQtYnk6IEV2ZWx5biBUc2FpIDxldmVseW4udHNhaUBt ZWRpYXRlay5jb20+DQpTaWduZWQtb2ZmLWJ5OiBSeWRlciBMZWUgPHJ5ZGVyLmxlZUBtZWRpYXRl ay5jb20+DQotLS0NCmNoYW5nZXMgc2luY2UgdjIgLSBtb3ZlIENPTkZJR19NQUM4MDIxMV9ERUJV R0ZTIGZpeHVwIGludG8gcGF0Y2ggMDAwMSANCi0tLQ0KIC4uLi93aXJlbGVzcy9tZWRpYXRlay9t dDc2L210NzkxNS9kZWJ1Z2ZzLmMgICB8ICA5ICsrLQ0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0 ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMgICB8IDcyICsrKysrKysrKysrKysrKysrKy0NCiAuLi4vbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5oICAgfCAgNSArLQ0KIC4uLi9uZXQv d2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvcmVncy5oICB8ICA1ICsrDQogNCBmaWxlcyBj aGFuZ2VkLCA4NiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZGVidWdmcy5jIGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZGVidWdmcy5jDQppbmRleCA3 ZTQ4ZjU2YjViMDguLjM4ZjQ3M2Q1ODdjOSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVs ZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RlYnVnZnMuYw0KKysrIGIvZHJpdmVycy9uZXQvd2ly ZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZGVidWdmcy5jDQpAQCAtMTc4LDcgKzE3OCwxNCBA QCBtdDc5MTVfdHhiZl9zdGF0X3JlYWRfcGh5KHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIHN0cnVj dCBzZXFfZmlsZSAqcykNCiAJc2VxX3ByaW50ZihzLCAiVHggQmVhbWZvcm1lZSBmZWVkYmFjayB0 cmlnZ2VyZWQgY291bnRzOiAlbGRcbiIsDQogCQkgICBGSUVMRF9HRVQoTVRfRVRCRl9UWF9GQl9U UkksIGNudCkpOw0KIA0KLQkvKiBUeCBTVSBjb3VudGVycyAqLw0KKwkvKiBUeCBTVSAmIE1VIGNv dW50ZXJzICovDQorCWNudCA9IG10NzZfcnIoZGV2LCBNVF9NSUJfU0RSMzQoZXh0X3BoeSkpOw0K KwlzZXFfcHJpbnRmKHMsICJUeCBtdWx0aS11c2VyIEJlYW1mb3JtaW5nIGNvdW50czogJWxkXG4i LA0KKwkJICAgRklFTERfR0VUKE1UX01JQl9NVV9CRl9UWF9DTlQsIGNudCkpOw0KKwljbnQgPSBt dDc2X3JyKGRldiwgTVRfTUlCX0RSOChleHRfcGh5KSk7DQorCXNlcV9wcmludGYocywgIlR4IG11 bHRpLXVzZXIgTVBEVSBjb3VudHM6ICVkXG4iLCBjbnQpOw0KKwljbnQgPSBtdDc2X3JyKGRldiwg TVRfTUlCX0RSOShleHRfcGh5KSk7DQorCXNlcV9wcmludGYocywgIlR4IG11bHRpLXVzZXIgc3Vj Y2Vzc2Z1bCBNUERVIGNvdW50czogJWRcbiIsIGNudCk7DQogCWNudCA9IG10NzZfcnIoZGV2LCBN VF9NSUJfRFIxMShleHRfcGh5KSk7DQogCXNlcV9wcmludGYocywgIlR4IHNpbmdsZS11c2VyIHN1 Y2Nlc3NmdWwgTVBEVSBjb3VudHM6ICVkXG4iLCBjbnQpOw0KIA0KZGlmZiAtLWdpdCBhL2RyaXZl cnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jIGIvZHJpdmVycy9uZXQv d2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMNCmluZGV4IGM4YzEyYzc0MGMxYS4u M2QzNTMzMmM0NGJjIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc5MTUvbWN1LmMNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvbXQ3OTE1L21jdS5jDQpAQCAtMTE2NiwxOSArMTE2NiwzMSBAQCBtdDc5MTVfbWN1X3N0YV9i YShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KIAlzdHJ1Y3Qgd3RibF9yZXFfaGRyICp3dGJsX2hk cjsNCiAJc3RydWN0IHRsdiAqc3RhX3d0Ymw7DQogCXN0cnVjdCBza19idWZmICpza2I7DQorCWlu dCByZXQ7DQogDQogCXNrYiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShkZXYsIG12aWYsIG1z dGEsDQogCQkJCSAgICAgICBNVDc5MTVfU1RBX1VQREFURV9NQVhfU0laRSk7DQogCWlmIChJU19F UlIoc2tiKSkNCiAJCXJldHVybiBQVFJfRVJSKHNrYik7DQogDQotCW10NzkxNV9tY3Vfc3RhX2Jh X3Rsdihza2IsIHBhcmFtcywgZW5hYmxlLCB0eCk7DQogCXN0YV93dGJsID0gbXQ3OTE1X21jdV9h ZGRfdGx2KHNrYiwgU1RBX1JFQ19XVEJMLCBzaXplb2Yoc3RydWN0IHRsdikpOw0KIA0KIAl3dGJs X2hkciA9IG10NzkxNV9tY3VfYWxsb2Nfd3RibF9yZXEoZGV2LCBtc3RhLCBXVEJMX1NFVCwgc3Rh X3d0YmwsDQogCQkJCQkgICAgICZza2IpOw0KIAltdDc5MTVfbWN1X3d0YmxfYmFfdGx2KHNrYiwg cGFyYW1zLCBlbmFibGUsIHR4LCBzdGFfd3RibCwgd3RibF9oZHIpOw0KIA0KKwlyZXQgPSBfX210 NzZfbWN1X3NrYl9zZW5kX21zZygmZGV2LT5tdDc2LCBza2IsDQorCQkJCSAgICAgIE1DVV9FWFRf Q01EX1NUQV9SRUNfVVBEQVRFLCB0cnVlKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQor DQorCXNrYiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShkZXYsIG12aWYsIG1zdGEsDQorCQkJ CSAgICAgICBNVDc5MTVfU1RBX1VQREFURV9NQVhfU0laRSk7DQorCWlmIChJU19FUlIoc2tiKSkN CisJCXJldHVybiBQVFJfRVJSKHNrYik7DQorDQorCW10NzkxNV9tY3Vfc3RhX2JhX3Rsdihza2Is IHBhcmFtcywgZW5hYmxlLCB0eCk7DQorDQogCXJldHVybiBfX210NzZfbWN1X3NrYl9zZW5kX21z ZygmZGV2LT5tdDc2LCBza2IsDQogCQkJCSAgICAgICBNQ1VfRVhUX0NNRF9TVEFfUkVDX1VQREFU RSwgdHJ1ZSk7DQogfQ0KQEAgLTE0NjYsMTYgKzE0NzgsMzggQEAgbXQ3OTE1X21jdV9zdGFfbXVy dV90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCiAJ CUhFX1BIWShDQVAyX1VMX01VX1BBUlRJQUxfTVVfTUlNTywgZWxlbS0+cGh5X2NhcF9pbmZvWzJd KTsNCiB9DQogDQorc3RhdGljIGludA0KK210NzkxNV9tY3VfYWRkX211KHN0cnVjdCBtdDc5MTVf ZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgIHN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3 OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3RhID0gKHN0 cnVjdCBtdDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdjsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsN CisJaW50IGxlbiA9IHNpemVvZihzdHJ1Y3Qgc3RhX3JlcV9oZHIpICsgc2l6ZW9mKHN0cnVjdCBz dGFfcmVjX211cnUpOw0KKw0KKwlpZiAoIXN0YS0+dmh0X2NhcC52aHRfc3VwcG9ydGVkICYmICFz dGEtPmhlX2NhcC5oYXNfaGUpDQorCQlyZXR1cm4gMDsNCisNCisJc2tiID0gbXQ3OTE1X21jdV9h bGxvY19zdGFfcmVxKGRldiwgbXZpZiwgbXN0YSwgbGVuKTsNCisJaWYgKElTX0VSUihza2IpKQ0K KwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsNCisNCisJbXQ3OTE1X21jdV9zdGFfbXVydV90bHYoc2ti LCBzdGEpOw0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9za2Jfc2VuZF9tc2coJmRldi0+bXQ3Niwg c2tiLA0KKwkJCQkgICAgICAgTUNVX0VYVF9DTURfU1RBX1JFQ19VUERBVEUsIHRydWUpOw0KK30N CisNCiBzdGF0aWMgdm9pZA0KIG10NzkxNV9tY3Vfc3RhX3RsdihzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KIAkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0 YSkNCiB7DQogCXN0cnVjdCB0bHYgKnRsdjsNCiANCisJLyogc3RhcmVjIGh0ICovDQogCWlmIChz dGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsNCiAJCXN0cnVjdCBzdGFfcmVjX2h0ICpodDsNCiAN Ci0JCS8qIHN0YXJlYyBodCAqLw0KIAkJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgU1RB X1JFQ19IVCwgc2l6ZW9mKCpodCkpOw0KIAkJaHQgPSAoc3RydWN0IHN0YV9yZWNfaHQgKil0bHY7 DQogCQlodC0+aHRfY2FwID0gY3B1X3RvX2xlMTYoc3RhLT5odF9jYXAuY2FwKTsNCkBAIC0yMDY0 LDYgKzIwOTgsMzIgQEAgaW50IG10NzkxNV9tY3VfYWRkX3JhdGVfY3RybChzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KIAkJCQkgICAgICAgTUNVX0VY VF9DTURfU1RBX1JFQ19VUERBVEUsIHRydWUpOw0KIH0NCiANCitzdGF0aWMgaW50DQorbXQ3OTE1 X21jdV9hZGRfZ3JvdXAoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorI2RlZmlu ZSBNVF9TVEFfQlNTX0dST1VQCQkxDQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVj dCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGEg PSAoc3RydWN0IG10NzkxNV9zdGEgKilzdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgew0KKwkJX19s ZTMyIGFjdGlvbjsNCisJCXU4IHdsYW5faWR4X2xvOw0KKwkJdTggc3RhdHVzOw0KKwkJdTggd2xh bl9pZHhfaGk7DQorCQl1OCByc3YwWzVdOw0KKwkJX19sZTMyIHZhbDsNCisJCXU4IHJzdjFbOF07 DQorCX0gX19wYWNrZWQgcmVxID0gew0KKwkJLmFjdGlvbiA9IGNwdV90b19sZTMyKE1UX1NUQV9C U1NfR1JPVVApLA0KKwkJLndsYW5faWR4X2xvID0gdG9fd2NpZF9sbyhtc3RhLT53Y2lkLmlkeCks DQorCQkud2xhbl9pZHhfaGkgPSB0b193Y2lkX2hpKG1zdGEtPndjaWQuaWR4KSwNCisJCS52YWwg PSBjcHVfdG9fbGUzMihtdmlmLT5pZHgpLA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9z ZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9TRVRfRFJSX0NUUkwsDQorCQkJCSAgICZy ZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQogaW50IG10NzkxNV9tY3VfYWRkX3N0YV9h ZHYoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCiAJ CQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIGVuYWJsZSkNCiB7DQpAQCAtMjA3 MywxMCArMjEzMywxOCBAQCBpbnQgbXQ3OTE1X21jdV9hZGRfc3RhX2FkdihzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KIAkJcmV0dXJuIDA7DQogDQog CS8qIG11c3Qga2VlcCB0aGUgb3JkZXIgKi8NCisJcmV0ID0gbXQ3OTE1X21jdV9hZGRfZ3JvdXAo ZGV2LCB2aWYsIHN0YSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KIAlyZXQgPSBt dDc5MTVfbWN1X2FkZF90eGJmKGRldiwgdmlmLCBzdGEsIGVuYWJsZSk7DQogCWlmIChyZXQpDQog CQlyZXR1cm4gcmV0Ow0KIA0KKwlyZXQgPSBtdDc5MTVfbWN1X2FkZF9tdShkZXYsIHZpZiwgc3Rh KTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQogCWlmIChlbmFibGUpDQogCQlyZXR1 cm4gbXQ3OTE1X21jdV9hZGRfcmF0ZV9jdHJsKGRldiwgdmlmLCBzdGEpOw0KIA0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5oIGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmgNCmluZGV4IGMyNDFk ZDdjNGMzNi4uOTgxZGQzZmNkYjQxIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mv bWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmgNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21l ZGlhdGVrL210NzYvbXQ3OTE1L21jdS5oDQpAQCAtMjAxLDYgKzIwMSw3IEBAIGVudW0gew0KIAlN Q1VfRVhUX0NNRF9FRENBX1VQREFURSA9IDB4MjcsDQogCU1DVV9FWFRfQ01EX0RFVl9JTkZPX1VQ REFURSA9IDB4MkEsDQogCU1DVV9FWFRfQ01EX1RIRVJNQUxfQ1RSTCA9IDB4MmMsDQorCU1DVV9F WFRfQ01EX1NFVF9EUlJfQ1RSTCA9IDB4MzYsDQogCU1DVV9FWFRfQ01EX1NFVF9SRERfQ1RSTCA9 IDB4M2EsDQogCU1DVV9FWFRfQ01EX1BST1RFQ1RfQ1RSTCA9IDB4M2UsDQogCU1DVV9FWFRfQ01E X01BQ19JTklUX0NUUkwgPSAweDQ2LA0KQEAgLTY1Myw3ICs2NTQsNyBAQCBzdHJ1Y3Qgc3RhX3Jl Y19tdXJ1IHsNCiAJCWJvb2wgb2ZkbWFfdWxfZW47DQogCQlib29sIG1pbW9fZGxfZW47DQogCQli b29sIG1pbW9fdWxfZW47DQotCQlib29sIHJzdls0XTsNCisJCXU4IHJzdls0XTsNCiAJfSBjZmc7 DQogDQogCXN0cnVjdCB7DQpAQCAtNjY0LDcgKzY2NSw3IEBAIHN0cnVjdCBzdGFfcmVjX211cnUg ew0KIAkJYm9vbCBsdDE2X3NpZ2I7DQogCQlib29sIHJ4X3N1X2NvbXBfc2lnYjsNCiAJCWJvb2wg cnhfc3Vfbm9uX2NvbXBfc2lnYjsNCi0JCWJvb2wgcnN2Ow0KKwkJdTggcnN2Ow0KIAl9IG9mZG1h X2RsOw0KIA0KIAlzdHJ1Y3Qgew0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21l ZGlhdGVrL210NzYvbXQ3OTE1L3JlZ3MuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVr L210NzYvbXQ3OTE1L3JlZ3MuaA0KaW5kZXggYzEyMTcxNWY4YmZmLi5lMDk4OTE0MWQ5ZGEgMTAw NjQ0DQotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9yZWdz LmgNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3JlZ3Mu aA0KQEAgLTExNywxMSArMTE3LDE2IEBADQogI2RlZmluZSBNVF9NSUJfU0RSMTYoX2JhbmQpCQlN VF9XRl9NSUIoX2JhbmQsIDB4MDQ4KQ0KICNkZWZpbmUgTVRfTUlCX1NEUjE2X0JVU1lfTUFTSwkJ R0VOTUFTSygyMywgMCkNCiANCisjZGVmaW5lIE1UX01JQl9TRFIzNChfYmFuZCkJCU1UX1dGX01J QihfYmFuZCwgMHgwOTApDQorI2RlZmluZSBNVF9NSUJfTVVfQkZfVFhfQ05UCQlHRU5NQVNLKDE1 LCAwKQ0KKw0KICNkZWZpbmUgTVRfTUlCX1NEUjM2KF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAw eDA5OCkNCiAjZGVmaW5lIE1UX01JQl9TRFIzNl9UWFRJTUVfTUFTSwlHRU5NQVNLKDIzLCAwKQ0K ICNkZWZpbmUgTVRfTUlCX1NEUjM3KF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDA5YykNCiAj ZGVmaW5lIE1UX01JQl9TRFIzN19SWFRJTUVfTUFTSwlHRU5NQVNLKDIzLCAwKQ0KIA0KKyNkZWZp bmUgTVRfTUlCX0RSOChfYmFuZCkJCU1UX1dGX01JQihfYmFuZCwgMHgwYzApDQorI2RlZmluZSBN VF9NSUJfRFI5KF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDBjNCkNCiAjZGVmaW5lIE1UX01J Ql9EUjExKF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDBjYykNCiANCiAjZGVmaW5lIE1UX01J Ql9NQl9TRFIwKF9iYW5kLCBuKQlNVF9XRl9NSUIoX2JhbmQsIDB4MTAwICsgKChuKSA8PCA0KSkN Ci0tIA0KMi4xOC4wDQo= 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.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,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 A6016C433E1 for ; Fri, 12 Jun 2020 18:30:41 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 77C49207ED for ; Fri, 12 Jun 2020 18:30:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="CsjotWGb"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="HNoytvPz" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 77C49207ED Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=g94iPw6irRI0xTHeQ0YSpp0HrAw1VCsDTHKsaik4O+I=; b=CsjotWGbE6q/CB zqxKzi2DjFrLXogYPZtSV/6z63uaoGpIFa8FWxw9gslAqZNmd1c3O2wn2WKYXy080zWnL/8Dzgcq2 MCfUy7OH0LGsaXREqBPJAIcAOOMLCXwP+wp3gOC6NCFzUrk5b10NPnggs1eSwDnM8V7HEA62YsShe t/FlDzazYscmkcTYk5y2ouQAceHZFLYZXz/ctlbb+k2MoP3sbTIyiZeeiDDaZsYJx6zuPaoDUzigk RHEak+HOlRgpo7v6kfknKEjfvfSAI2/bi6ZtrLLhNuKJmxdAFmdZKC6LMCKgGVcFJCtadA8W/i5d+ nyyivEYuZyj+X7l3knsQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jjoRg-0001ko-In; Fri, 12 Jun 2020 18:30:28 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jjoRd-0001iy-Kr for linux-mediatek@lists.infradead.org; Fri, 12 Jun 2020 18:30:27 +0000 X-UUID: f81c41f499bd4b6fb68fe6c6acc020ef-20200612 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=HNrPmQ2IIylNycJMJ0rpK8m8tnlpP8o1gtVTahC34RY=; b=HNoytvPz6BSDHAZrVbpS3xHTKexsGhvGOQOa+f7jSeOLp+GqOaysdYfokuYQb1eLKnmHQ/X+COJxx5q1pCik9GQ1USaOmjZ8WsbPpZzZmWzh9sEBB2CpoBPX4DW0sLj9ITcaWGLj/jdWu8Gkp52jLw5r6bsGs57ZxDiKNzw4yF4=; X-UUID: f81c41f499bd4b6fb68fe6c6acc020ef-20200612 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 537261598; Fri, 12 Jun 2020 10:29:45 -0800 Received: from MTKMBS06N1.mediatek.inc (172.21.101.129) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 12 Jun 2020 11:30:13 -0700 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs06n1.mediatek.inc (172.21.101.129) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 13 Jun 2020 02:30:14 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sat, 13 Jun 2020 02:30:11 +0800 From: Ryder Lee To: Felix Fietkau , Lorenzo Bianconi Subject: [PATCH v2 3/3] mt76: mt7915: add MU-MIMO support Date: Sat, 13 Jun 2020 02:30:10 +0800 Message-ID: <52232d9b5857dd17e6e11ed4bb81a51e6e8bb757.1591983283.git.ryder.lee@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <2863c9a7e14c791202738597184f4a6b75d5bc07.1591983283.git.ryder.lee@mediatek.com> References: <2863c9a7e14c791202738597184f4a6b75d5bc07.1591983283.git.ryder.lee@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200612_113025_685359_591FE87B X-CRM114-Status: GOOD ( 11.24 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-mediatek@lists.infradead.org, Sean Wang , linux-wireless@vger.kernel.org, Ryder Lee , Shayne Chen Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Enable MU-MIMO DL/UL and add relative counters in debugfs. Currently MU modules read WTBL first to notify BA changes to other cross modules, so adjust mt7915_mcu_sta_ba() accordingly. Tested-by: Evelyn Tsai Signed-off-by: Ryder Lee --- changes since v2 - move CONFIG_MAC80211_DEBUGFS fixup into patch 0001 --- .../wireless/mediatek/mt76/mt7915/debugfs.c | 9 ++- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 72 ++++++++++++++++++- .../net/wireless/mediatek/mt76/mt7915/mcu.h | 5 +- .../net/wireless/mediatek/mt76/mt7915/regs.h | 5 ++ 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c index 7e48f56b5b08..38f473d587c9 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c @@ -178,7 +178,14 @@ mt7915_txbf_stat_read_phy(struct mt7915_phy *phy, struct seq_file *s) seq_printf(s, "Tx Beamformee feedback triggered counts: %ld\n", FIELD_GET(MT_ETBF_TX_FB_TRI, cnt)); - /* Tx SU counters */ + /* Tx SU & MU counters */ + cnt = mt76_rr(dev, MT_MIB_SDR34(ext_phy)); + seq_printf(s, "Tx multi-user Beamforming counts: %ld\n", + FIELD_GET(MT_MIB_MU_BF_TX_CNT, cnt)); + cnt = mt76_rr(dev, MT_MIB_DR8(ext_phy)); + seq_printf(s, "Tx multi-user MPDU counts: %d\n", cnt); + cnt = mt76_rr(dev, MT_MIB_DR9(ext_phy)); + seq_printf(s, "Tx multi-user successful MPDU counts: %d\n", cnt); cnt = mt76_rr(dev, MT_MIB_DR11(ext_phy)); seq_printf(s, "Tx single-user successful MPDU counts: %d\n", cnt); diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c index c8c12c740c1a..3d35332c44bc 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c @@ -1166,19 +1166,31 @@ mt7915_mcu_sta_ba(struct mt7915_dev *dev, struct wtbl_req_hdr *wtbl_hdr; struct tlv *sta_wtbl; struct sk_buff *skb; + int ret; skb = mt7915_mcu_alloc_sta_req(dev, mvif, msta, MT7915_STA_UPDATE_MAX_SIZE); if (IS_ERR(skb)) return PTR_ERR(skb); - mt7915_mcu_sta_ba_tlv(skb, params, enable, tx); sta_wtbl = mt7915_mcu_add_tlv(skb, STA_REC_WTBL, sizeof(struct tlv)); wtbl_hdr = mt7915_mcu_alloc_wtbl_req(dev, msta, WTBL_SET, sta_wtbl, &skb); mt7915_mcu_wtbl_ba_tlv(skb, params, enable, tx, sta_wtbl, wtbl_hdr); + ret = __mt76_mcu_skb_send_msg(&dev->mt76, skb, + MCU_EXT_CMD_STA_REC_UPDATE, true); + if (ret) + return ret; + + skb = mt7915_mcu_alloc_sta_req(dev, mvif, msta, + MT7915_STA_UPDATE_MAX_SIZE); + if (IS_ERR(skb)) + return PTR_ERR(skb); + + mt7915_mcu_sta_ba_tlv(skb, params, enable, tx); + return __mt76_mcu_skb_send_msg(&dev->mt76, skb, MCU_EXT_CMD_STA_REC_UPDATE, true); } @@ -1466,16 +1478,38 @@ mt7915_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta) HE_PHY(CAP2_UL_MU_PARTIAL_MU_MIMO, elem->phy_cap_info[2]); } +static int +mt7915_mcu_add_mu(struct mt7915_dev *dev, struct ieee80211_vif *vif, + struct ieee80211_sta *sta) +{ + struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv; + struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv; + struct sk_buff *skb; + int len = sizeof(struct sta_req_hdr) + sizeof(struct sta_rec_muru); + + if (!sta->vht_cap.vht_supported && !sta->he_cap.has_he) + return 0; + + skb = mt7915_mcu_alloc_sta_req(dev, mvif, msta, len); + if (IS_ERR(skb)) + return PTR_ERR(skb); + + mt7915_mcu_sta_muru_tlv(skb, sta); + + return __mt76_mcu_skb_send_msg(&dev->mt76, skb, + MCU_EXT_CMD_STA_REC_UPDATE, true); +} + static void mt7915_mcu_sta_tlv(struct mt7915_dev *dev, struct sk_buff *skb, struct ieee80211_sta *sta) { struct tlv *tlv; + /* starec ht */ if (sta->ht_cap.ht_supported) { struct sta_rec_ht *ht; - /* starec ht */ tlv = mt7915_mcu_add_tlv(skb, STA_REC_HT, sizeof(*ht)); ht = (struct sta_rec_ht *)tlv; ht->ht_cap = cpu_to_le16(sta->ht_cap.cap); @@ -2064,6 +2098,32 @@ int mt7915_mcu_add_rate_ctrl(struct mt7915_dev *dev, struct ieee80211_vif *vif, MCU_EXT_CMD_STA_REC_UPDATE, true); } +static int +mt7915_mcu_add_group(struct mt7915_dev *dev, struct ieee80211_vif *vif, + struct ieee80211_sta *sta) +{ +#define MT_STA_BSS_GROUP 1 + struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv; + struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv; + struct { + __le32 action; + u8 wlan_idx_lo; + u8 status; + u8 wlan_idx_hi; + u8 rsv0[5]; + __le32 val; + u8 rsv1[8]; + } __packed req = { + .action = cpu_to_le32(MT_STA_BSS_GROUP), + .wlan_idx_lo = to_wcid_lo(msta->wcid.idx), + .wlan_idx_hi = to_wcid_hi(msta->wcid.idx), + .val = cpu_to_le32(mvif->idx), + }; + + return __mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_SET_DRR_CTRL, + &req, sizeof(req), true); +} + int mt7915_mcu_add_sta_adv(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool enable) { @@ -2073,10 +2133,18 @@ int mt7915_mcu_add_sta_adv(struct mt7915_dev *dev, struct ieee80211_vif *vif, return 0; /* must keep the order */ + ret = mt7915_mcu_add_group(dev, vif, sta); + if (ret) + return ret; + ret = mt7915_mcu_add_txbf(dev, vif, sta, enable); if (ret) return ret; + ret = mt7915_mcu_add_mu(dev, vif, sta); + if (ret) + return ret; + if (enable) return mt7915_mcu_add_rate_ctrl(dev, vif, sta); diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h index c241dd7c4c36..981dd3fcdb41 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h @@ -201,6 +201,7 @@ enum { MCU_EXT_CMD_EDCA_UPDATE = 0x27, MCU_EXT_CMD_DEV_INFO_UPDATE = 0x2A, MCU_EXT_CMD_THERMAL_CTRL = 0x2c, + MCU_EXT_CMD_SET_DRR_CTRL = 0x36, MCU_EXT_CMD_SET_RDD_CTRL = 0x3a, MCU_EXT_CMD_PROTECT_CTRL = 0x3e, MCU_EXT_CMD_MAC_INIT_CTRL = 0x46, @@ -653,7 +654,7 @@ struct sta_rec_muru { bool ofdma_ul_en; bool mimo_dl_en; bool mimo_ul_en; - bool rsv[4]; + u8 rsv[4]; } cfg; struct { @@ -664,7 +665,7 @@ struct sta_rec_muru { bool lt16_sigb; bool rx_su_comp_sigb; bool rx_su_non_comp_sigb; - bool rsv; + u8 rsv; } ofdma_dl; struct { diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h index c121715f8bff..e0989141d9da 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h @@ -117,11 +117,16 @@ #define MT_MIB_SDR16(_band) MT_WF_MIB(_band, 0x048) #define MT_MIB_SDR16_BUSY_MASK GENMASK(23, 0) +#define MT_MIB_SDR34(_band) MT_WF_MIB(_band, 0x090) +#define MT_MIB_MU_BF_TX_CNT GENMASK(15, 0) + #define MT_MIB_SDR36(_band) MT_WF_MIB(_band, 0x098) #define MT_MIB_SDR36_TXTIME_MASK GENMASK(23, 0) #define MT_MIB_SDR37(_band) MT_WF_MIB(_band, 0x09c) #define MT_MIB_SDR37_RXTIME_MASK GENMASK(23, 0) +#define MT_MIB_DR8(_band) MT_WF_MIB(_band, 0x0c0) +#define MT_MIB_DR9(_band) MT_WF_MIB(_band, 0x0c4) #define MT_MIB_DR11(_band) MT_WF_MIB(_band, 0x0cc) #define MT_MIB_MB_SDR0(_band, n) MT_WF_MIB(_band, 0x100 + ((n) << 4)) -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek