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=-5.5 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,UNWANTED_LANGUAGE_BODY, USER_AGENT_SANE_2 autolearn=unavailable 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 5EC15C2D0C0 for ; Mon, 16 Dec 2019 12:08:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 10F2F206D3 for ; Mon, 16 Dec 2019 12:08:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="uOsTI51t" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727531AbfLPMIB (ORCPT ); Mon, 16 Dec 2019 07:08:01 -0500 Received: from mailgw02.mediatek.com ([1.203.163.81]:31525 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727335AbfLPMIA (ORCPT ); Mon, 16 Dec 2019 07:08:00 -0500 X-UUID: bb46f94224c747da8dab4df32ad56664-20191216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=GeJYaSSTviQGKC+jAYdPZIk4wLCbJe9Ewnhq0SJZGGQ=; b=uOsTI51tocohCkTABdbaGNiljpGH8Miv1RGczY0gCzXdvtxERE1RsSJe06wyaI+7r+vg3swuQP7csMt53bsL7Qx8N08TaI6xFIcPJhAqBfhX1bsCm2aYC4xcfNhbhCTTU4f6E+e7P9Aalfv15ftlKtxFk+x2Bsfqe0zCSdE/e2A=; X-UUID: bb46f94224c747da8dab4df32ad56664-20191216 Received: from mtkcas35.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 782335631; Mon, 16 Dec 2019 20:07:45 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS33N2.mediatek.inc (172.27.4.76) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 20:08:05 +0800 Received: from [10.17.3.153] (172.27.4.253) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 16 Dec 2019 20:07:26 +0800 Message-ID: <1576498063.28043.74.camel@mhfsdcap03> Subject: Re: [RESEND,PATCH 02/13] iommu/mediatek: Add mt6779 IOMMU basic support From: Yong Wu To: Chao Hao CC: Joerg Roedel , Rob Herring , Matthias Brugger , , , , , , , Jun Yan , Cui Zhang , Guangming Cao , Anan Sun , Miles Chen Date: Mon, 16 Dec 2019 20:07:43 +0800 In-Reply-To: <20191104115238.2394-3-chao.hao@mediatek.com> References: <20191104115238.2394-1-chao.hao@mediatek.com> <20191104115238.2394-3-chao.hao@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 7791763B64BF2B57A9BC52F627E5B0DC36BFAB124FEDC002E5773B2BE4DD279C2000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gTW9uLCAyMDE5LTExLTA0IGF0IDE5OjUyICswODAwLCBDaGFvIEhhbyB3cm90ZToNCj4gMS4g QWRkIG10Njc3OSByZWdpc3RlcnMgZGVmaW5lIGZvciBpb21tdS4NCj4gMi4gQWRkIG10Njc3OV9k YXRhIGRlZmluZSB0byBzdXBwb3J0IG10Njc3OSBpb21tdSBIVyBpbml0Lg0KPiAzLiBUaGVyZSBh cmUgdHdvIGlvbW11cywgb25lIGlzIG1tX2lvbW11LCB0aGUgb3RoZXIgaXMgdnB1X2lvbW11Lg0K PiBNTV9JT01NVSBpcyBjb25uZWN0ZWQgc21pX2xhcmIgdG8gc3VwcG9ydCBtdWx0aW1lZGlhIGVu Z2luZSB0bw0KPiBhY2Nlc3MgRFJBTSwgYW5kIFZQVV9JT01NVSBpcyBjb25uZWN0ZWQgdG8gQVBV X2J1cyB0byBzdXBwb3J0DQo+IFZQVSxNRExBLEVETUEgdG8gYWNjZXNzIERSQU0uIE1NX0lPTU1V IGFuZCBWUFVfSU9NTVUgdXNlIHRoZSBzYW1lDQo+IHBhZ2UgdGFibGUgdG8gc2ltcGxpZnkgZGVz aWduIGJ5ICJtdGtfaW9tbXVfZ2V0X200dV9kYXRhIi4NCj4gNC4gRm9yIHNtaV9sYXJiNiwgaXQg ZG9lc24ndCB1c2UgbW1faW9tbXUsIHNvIHdlIGNhbiBkaXN0aW5ndWlzaA0KPiB2cHVfaW9tbXUg YnkgaXQgd2hlbiBleGN1dGVzIGlvbW11X3Byb2JlLg0KPiA1LiBGb3IgbXQ2Nzc5IEFQVV9JT01N VSBmYXVsdCBpZCBpcyBpcnJlZ3VsYXIsIHNvIGl0IHdhcyB0cmVhdGVkDQo+IHNwZWNpYWxseS4N Cj4gDQo+IFNpZ25lZC1vZmYtYnk6IENoYW8gSGFvIDxjaGFvLmhhb0BtZWRpYXRlay5jb20+DQo+ IC0tLQ0KPiAgZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuYyB8IDkxICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLQ0KPiAgZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuaCB8IDEw ICsrKystDQo+ICAyIGZpbGVzIGNoYW5nZWQsIDg3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9u cygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmMgYi9kcml2 ZXJzL2lvbW11L210a19pb21tdS5jDQo+IGluZGV4IDhjYTJlOTk5NjRmZS4uZjI4NDdlNjYxMTM3 IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2lvbW11L210a19pb21tdS5jDQo+ICsrKyBiL2RyaXZl cnMvaW9tbXUvbXRrX2lvbW11LmMNCj4gQEAgLTM4LDEyICszOCwyNCBAQA0KPiAgI2RlZmluZSBS RUdfTU1VX0lOVkxEX0VORF9BCQkJMHgwMjgNCj4gIA0KPiAgI2RlZmluZSBSRUdfTU1VX0lOVl9T RUwJCQkJMHgwMzgNCj4gKyNkZWZpbmUgUkVHX01NVV9JTlZfU0VMX01UNjc3OQkJCTB4MDJjDQo+ ICAjZGVmaW5lIEZfSU5WTERfRU4wCQkJCUJJVCgwKQ0KPiAgI2RlZmluZSBGX0lOVkxEX0VOMQkJ CQlCSVQoMSkNCj4gIA0KPiAgI2RlZmluZSBSRUdfTU1VX1NUQU5EQVJEX0FYSV9NT0RFCQkweDA0 OA0KPiArDQo+ICsjZGVmaW5lIFJFR19NTVVfTUlTQ19DUlRMX01UNjc3OQkJMHgwNDgNCg0KRGVm aW5pbmcgdHdvIHJlZ2lzdGVyIGluIHRoZSBzYW1lIG9mZnNldCBsb29rIHN0cmFuZ2UuIHNlZSBi ZWxvdy4NCg0KPiArI2RlZmluZSBSRUdfTU1VX1NUQU5EQVJEX0FYSV9NT0RFX01UNjc3OQkoQklU KDMpIHwgQklUKDE5KSkNCj4gKyNkZWZpbmUgUkVHX01NVV9DT0hFUkVOQ0VfRU4JCQkoQklUKDAp IHwgQklUKDE2KSkNCj4gKyNkZWZpbmUgUkVHX01NVV9JTl9PUkRFUl9XUl9FTgkJCShCSVQoMSkg fCBCSVQoMTcpKQ0KPiArI2RlZmluZSBGX01NVV9IQUxGX0VOVFJZX01PREVfTAkJCShCSVQoNSkg fCBCSVQoMjEpKQ0KPiArI2RlZmluZSBGX01NVV9CTE9DS0lOR19NT0RFX0wJCQkoQklUKDQpIHwg QklUKDIwKSkNCg0KVGhlIGxhc3QgZm91ciBvbmVzIGFyZSBub3QgdXNlZC4gUGxlYXNlIHJlbW92 ZS4NCg0KPiArDQo+ICAjZGVmaW5lIFJFR19NTVVfRENNX0RJUwkJCQkweDA1MA0KPiAgDQo+ICsj ZGVmaW5lIFJFR19NTVVfV1JfTEVOCQkJCTB4MDU0DQo+ICsjZGVmaW5lIEZfTU1VX1dSX1RIUk9U X0RJUwkJCShCSVQoNSkgfCAgQklUKDIxKSkNCj4gKw0KPiAgI2RlZmluZSBSRUdfTU1VX0NUUkxf UkVHCQkJMHgxMTANCj4gICNkZWZpbmUgRl9NTVVfVEZfUFJPVF9UT19QUk9HUkFNX0FERFIJCSgy IDw8IDQpDQo+ICAjZGVmaW5lIEZfTU1VX1BSRUZFVENIX1JUX1JFUExBQ0VfTU9ECQlCSVQoNCkN Cj4gQEAgLTg4LDEwICsxMDAsMTQgQEANCj4gICNkZWZpbmUgUkVHX01NVTFfSU5WTERfUEEJCQkw eDE0OA0KPiAgI2RlZmluZSBSRUdfTU1VMF9JTlRfSUQJCQkJMHgxNTANCj4gICNkZWZpbmUgUkVH X01NVTFfSU5UX0lECQkJCTB4MTU0DQo+ICsjZGVmaW5lIEZfTU1VX0lOVF9JRF9DT01NX0lEKGEp CQkJKCgoYSkgPj4gOSkgJiAweDcpDQo+ICsjZGVmaW5lIEZfTU1VX0lOVF9JRF9TVUJfQ09NTV9J RChhKQkJKCgoYSkgPj4gNykgJiAweDMpDQo+ICAjZGVmaW5lIEZfTU1VX0lOVF9JRF9MQVJCX0lE KGEpCQkJKCgoYSkgPj4gNykgJiAweDcpDQo+ICAjZGVmaW5lIEZfTU1VX0lOVF9JRF9QT1JUX0lE KGEpCQkJKCgoYSkgPj4gMikgJiAweDFmKQ0KPiArI2RlZmluZSBGX01NVV9JTlRfSURfQ09NTV9B UFVfSUQoYSkJCSgoYSkgJiAweDMpDQo+ICsjZGVmaW5lIEZfTU1VX0lOVF9JRF9TVUJfQVBVX0lE KGEpCQkoKChhKSA+PiAyKSAmIDB4MykNCj4gIA0KPiAtI2RlZmluZSBNVEtfUFJPVEVDVF9QQV9B TElHTgkJCTEyOA0KPiArI2RlZmluZSBNVEtfUFJPVEVDVF9QQV9BTElHTgkJCTI1Ng0KPiAgDQo+ ICAvKg0KPiAgICogR2V0IHRoZSBsb2NhbCBhcmJpdGVyIElEIGFuZCB0aGUgcG9ydGlkIHdpdGhp biB0aGUgbGFyYiBhcmJpdGVyDQo+IEBAIC0xNjUsNyArMTgxLDcgQEAgc3RhdGljIHZvaWQgbXRr X2lvbW11X3RsYl9mbHVzaF9hbGwodm9pZCAqY29va2llKQ0KPiAgDQo+ICAJZm9yX2VhY2hfbTR1 KGRhdGEpIHsNCj4gIAkJd3JpdGVsX3JlbGF4ZWQoRl9JTlZMRF9FTjEgfCBGX0lOVkxEX0VOMCwN Cj4gLQkJCSAgICAgICBkYXRhLT5iYXNlICsgUkVHX01NVV9JTlZfU0VMKTsNCj4gKwkJCSAgICAg ICBkYXRhLT5iYXNlICsgZGF0YS0+cGxhdF9kYXRhLT5pbnZfc2VsX3JlZyk7DQo+ICAJCXdyaXRl bF9yZWxheGVkKEZfQUxMX0lOVkxELCBkYXRhLT5iYXNlICsgUkVHX01NVV9JTlZBTElEQVRFKTsN Cj4gIAkJd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGUgdGxiIGZsdXNoIGFsbCBkb25lICovDQo+ICAJ fQ0KPiBAQCAtMTgyLDcgKzE5OCw3IEBAIHN0YXRpYyB2b2lkIG10a19pb21tdV90bGJfZmx1c2hf cmFuZ2Vfc3luYyh1bnNpZ25lZCBsb25nIGlvdmEsIHNpemVfdCBzaXplLA0KPiAgCWZvcl9lYWNo X200dShkYXRhKSB7DQo+ICAJCXNwaW5fbG9ja19pcnFzYXZlKCZkYXRhLT50bGJfbG9jaywgZmxh Z3MpOw0KPiAgCQl3cml0ZWxfcmVsYXhlZChGX0lOVkxEX0VOMSB8IEZfSU5WTERfRU4wLA0KPiAt CQkJICAgICAgIGRhdGEtPmJhc2UgKyBSRUdfTU1VX0lOVl9TRUwpOw0KPiArCQkJICAgICAgIGRh dGEtPmJhc2UgKyBkYXRhLT5wbGF0X2RhdGEtPmludl9zZWxfcmVnKTsNCj4gIA0KPiAgCQl3cml0 ZWxfcmVsYXhlZChpb3ZhLCBkYXRhLT5iYXNlICsgUkVHX01NVV9JTlZMRF9TVEFSVF9BKTsNCj4g IAkJd3JpdGVsX3JlbGF4ZWQoaW92YSArIHNpemUgLSAxLA0KPiBAQCAtMjI2LDcgKzI0Miw3IEBA IHN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfaW9tbXVfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkN Cj4gIAlzdHJ1Y3QgbXRrX2lvbW11X2RhdGEgKmRhdGEgPSBkZXZfaWQ7DQo+ICAJc3RydWN0IG10 a19pb21tdV9kb21haW4gKmRvbSA9IGRhdGEtPm00dV9kb207DQo+ICAJdTMyIGludF9zdGF0ZSwg cmVndmFsLCBmYXVsdF9pb3ZhLCBmYXVsdF9wYTsNCj4gLQl1bnNpZ25lZCBpbnQgZmF1bHRfbGFy YiwgZmF1bHRfcG9ydDsNCj4gKwl1bnNpZ25lZCBpbnQgZmF1bHRfbGFyYiwgZmF1bHRfcG9ydCwg c3ViX2NvbW0gPSAwOw0KPiAgCWJvb2wgbGF5ZXIsIHdyaXRlOw0KPiAgDQo+ICAJLyogUmVhZCBl cnJvciBpbmZvIGZyb20gcmVnaXN0ZXJzICovDQo+IEBAIC0yNDIsMTcgKzI1OCwzMCBAQCBzdGF0 aWMgaXJxcmV0dXJuX3QgbXRrX2lvbW11X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+ICAJ fQ0KPiAgCWxheWVyID0gZmF1bHRfaW92YSAmIEZfTU1VX0ZBVUxUX1ZBX0xBWUVSX0JJVDsNCj4g IAl3cml0ZSA9IGZhdWx0X2lvdmEgJiBGX01NVV9GQVVMVF9WQV9XUklURV9CSVQ7DQo+IC0JZmF1 bHRfbGFyYiA9IEZfTU1VX0lOVF9JRF9MQVJCX0lEKHJlZ3ZhbCk7DQo+ICAJZmF1bHRfcG9ydCA9 IEZfTU1VX0lOVF9JRF9QT1JUX0lEKHJlZ3ZhbCk7DQo+ICsJaWYgKGRhdGEtPnBsYXRfZGF0YS0+ aGFzX3N1Yl9jb21tW2RhdGEtPm00dV9pZF0pIHsNCj4gKwkJLyogbTR1MSBpcyBWUFUgaW4gbXQ2 Nzc5LiovDQo+ICsJCWlmIChkYXRhLT5tNHVfaWQgJiYgZGF0YS0+cGxhdF9kYXRhLT5tNHVfcGxh dCA9PSBNNFVfTVQ2Nzc5KSB7DQo+ICsJCQlmYXVsdF9sYXJiID0gRl9NTVVfSU5UX0lEX0NPTU1f QVBVX0lEKHJlZ3ZhbCk7DQo+ICsJCQlzdWJfY29tbSA9IEZfTU1VX0lOVF9JRF9TVUJfQVBVX0lE KHJlZ3ZhbCk7DQo+ICsJCQlmYXVsdF9wb3J0ID0gMDsgLyogZm9yIG10Njc3OSBBUFUgSUQgaXMg aXJyZWd1bGFyICovDQo+ICsJCX0gZWxzZSB7DQo+ICsJCQlmYXVsdF9sYXJiID0gRl9NTVVfSU5U X0lEX0NPTU1fSUQocmVndmFsKTsNCj4gKwkJCXN1Yl9jb21tID0gRl9NTVVfSU5UX0lEX1NVQl9D T01NX0lEKHJlZ3ZhbCk7DQo+ICsJCX0NCj4gKwl9IGVsc2Ugew0KPiArCQlmYXVsdF9sYXJiID0g Rl9NTVVfSU5UX0lEX0xBUkJfSUQocmVndmFsKTsNCj4gKwl9DQo+ICANCj4gLQlmYXVsdF9sYXJi ID0gZGF0YS0+cGxhdF9kYXRhLT5sYXJiaWRfcmVtYXBbZmF1bHRfbGFyYl07DQo+ICsJZmF1bHRf bGFyYiA9IGRhdGEtPnBsYXRfZGF0YS0+bGFyYmlkX3JlbWFwW2RhdGEtPm00dV9pZF1bZmF1bHRf bGFyYl07DQo+ICANCj4gIAlpZiAocmVwb3J0X2lvbW11X2ZhdWx0KCZkb20tPmRvbWFpbiwgZGF0 YS0+ZGV2LCBmYXVsdF9pb3ZhLA0KPiAgCQkJICAgICAgIHdyaXRlID8gSU9NTVVfRkFVTFRfV1JJ VEUgOiBJT01NVV9GQVVMVF9SRUFEKSkgew0KPiAgCQlkZXZfZXJyX3JhdGVsaW1pdGVkKA0KPiAg CQkJZGF0YS0+ZGV2LA0KPiAtCQkJImZhdWx0IHR5cGU9MHgleCBpb3ZhPTB4JXggcGE9MHgleCBs YXJiPSVkIHBvcnQ9JWQgbGF5ZXI9JWQgJXNcbiIsDQo+IC0JCQlpbnRfc3RhdGUsIGZhdWx0X2lv dmEsIGZhdWx0X3BhLCBmYXVsdF9sYXJiLCBmYXVsdF9wb3J0LA0KPiArCQkJImZhdWx0IHR5cGU9 MHgleCBpb3ZhPTB4JXggcGE9MHgleCBsYXJiPSVkIHN1Yl9jb21tPSVkIHBvcnQ9JWQgcmVndmFs PTB4JXggbGF5ZXI9JWQgJXNcbiIsDQo+ICsJCQlpbnRfc3RhdGUsIGZhdWx0X2lvdmEsIGZhdWx0 X3BhLCBmYXVsdF9sYXJiLA0KPiArCQkJc3ViX2NvbW0sIGZhdWx0X3BvcnQsIHJlZ3ZhbCwNCj4g IAkJCWxheWVyLCB3cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIpOw0KPiAgCX0NCj4gIA0KPiBAQCAt NTQ1LDExICs1NzQsMTIgQEAgc3RhdGljIGludCBtdGtfaW9tbXVfaHdfaW5pdChjb25zdCBzdHJ1 Y3QgbXRrX2lvbW11X2RhdGEgKmRhdGEpDQo+ICAJCXJldHVybiByZXQ7DQo+ICAJfQ0KPiAgDQo+ ICsJcmVndmFsID0gcmVhZGxfcmVsYXhlZChkYXRhLT5iYXNlICsgUkVHX01NVV9DVFJMX1JFRyk7 DQo+ICAJaWYgKGRhdGEtPnBsYXRfZGF0YS0+bTR1X3BsYXQgPT0gTTRVX01UODE3MykNCj4gLQkJ cmVndmFsID0gRl9NTVVfUFJFRkVUQ0hfUlRfUkVQTEFDRV9NT0QgfA0KPiArCQlyZWd2YWwgfD0g Rl9NTVVfUFJFRkVUQ0hfUlRfUkVQTEFDRV9NT0QgfA0KPiAgCQkJIEZfTU1VX1RGX1BST1RfVE9f UFJPR1JBTV9BRERSX01UODE3MzsNCj4gIAllbHNlDQo+IC0JCXJlZ3ZhbCA9IEZfTU1VX1RGX1BS T1RfVE9fUFJPR1JBTV9BRERSOw0KPiArCQlyZWd2YWwgfD0gRl9NTVVfVEZfUFJPVF9UT19QUk9H UkFNX0FERFI7DQo+ICAJd3JpdGVsX3JlbGF4ZWQocmVndmFsLCBkYXRhLT5iYXNlICsgUkVHX01N VV9DVFJMX1JFRyk7DQo+ICANCj4gIAlyZWd2YWwgPSBGX0wyX01VTElUX0hJVF9FTiB8DQo+IEBA IC01ODksNiArNjE5LDIwIEBAIHN0YXRpYyBpbnQgbXRrX2lvbW11X2h3X2luaXQoY29uc3Qgc3Ry dWN0IG10a19pb21tdV9kYXRhICpkYXRhKQ0KPiAgCWlmIChkYXRhLT5wbGF0X2RhdGEtPnJlc2V0 X2F4aSkNCj4gIAkJd3JpdGVsX3JlbGF4ZWQoMCwgZGF0YS0+YmFzZSArIFJFR19NTVVfU1RBTkRB UkRfQVhJX01PREUpOw0KPiAgDQo+ICsJaWYgKGRhdGEtPnBsYXRfZGF0YS0+aGFzX3dyX2xlbikg ew0KPiArCQkvKiB3cml0ZSBjb21tYW5kIHRocm90dGxpbmcgbW9kZSAqLw0KPiArCQlyZWd2YWwg PSByZWFkbF9yZWxheGVkKGRhdGEtPmJhc2UgKyBSRUdfTU1VX1dSX0xFTik7DQo+ICsJCXJlZ3Zh bCAmPSB+Rl9NTVVfV1JfVEhST1RfRElTOw0KPiArCQl3cml0ZWxfcmVsYXhlZChyZWd2YWwsIGRh dGEtPmJhc2UgKyBSRUdfTU1VX1dSX0xFTik7DQo+ICsJfQ0KPiArCS8qIHNwZWNpYWwgc2V0dGlu Z3MgZm9yIG1tdTAgKG11bHRpbWVkaWEgaW9tbXUpICovDQo+ICsJaWYgKGRhdGEtPnBsYXRfZGF0 YS0+aGFzX21pc2NfY3RybFtkYXRhLT5tNHVfaWRdKSB7DQo+ICsJCXJlZ3ZhbCA9IHJlYWRsX3Jl bGF4ZWQoZGF0YS0+YmFzZSArIFJFR19NTVVfTUlTQ19DUlRMX01UNjc3OSk7DQo+ICsJCS8qIG5v bi1zdGFuZGFyZCBBWEkgbW9kZSAqLw0KPiArCQlyZWd2YWwgJj0gflJFR19NTVVfU1RBTkRBUkRf QVhJX01PREVfTVQ2Nzc5Ow0KPiArCQl3cml0ZWxfcmVsYXhlZChyZWd2YWwsIGRhdGEtPmJhc2Ug KyBSRUdfTU1VX01JU0NfQ1JUTF9NVDY3NzkpOw0KPiArCX0NCg0KICAgICAweDQ4IGFyZSBSRUdf TU1VX1NUQU5EQVJEX0FYSV9NT0RFIGluIGJvdGggbXQ4MTczIGFuZCBtdDgxODMsIHdoaWxlDQpp dCBpcyBSRUdfTU1VX01JU0NfQ1JUTCBpbiBtdDI3MTIsIG10Njc3OSBhbmQgdGhlIGxhdGVzdCBz b2MsIHJpZ2h0PyBJDQp0aGluayB3ZSBjYW4gdXNlIG9uZSBkZWZpbmluZywgbGlrZSB0aGlzOg0K DQogICAgICAgICAgI2RlZmluZSAgUkVHX01NVV9NSVNDX0NUUkwgMHg0OA0KDQogICAgICAgICBp ZiAoIWRhdGEtPnBsYXRfZGF0YS0+aGFzX21pc2NfY3RybFtkYXRhLT5tNHVfaWRdKSB7DQogICAg ICAgICAgICAgICAvKiBEaXNhYmxlIHN0YW5kYXJkIGF4aSBtb2RlIHdoaWxlIGl0IGlzDQpSRUdf TU1VX1NUQU5EQVJEX0FYSV9NT0RFICovDQoJCXdyaXRlbF9yZWxheGVkKDAsIGRhdGEtPmJhc2Ug KyBSRUdfTU1VX01JU0NfQ1RSTCk7DQoJIH0gZWxzZSBpZiAoZGF0YS0+bTR1X2lkID09IDApIHsN CgkJcmVndmFsID0gcmVhZGxfcmVsYXhlZChkYXRhLT5iYXNlICsgUkVHX01NVV9NSVNDX0NUUkwp Ow0KCQlyZWd2YWwgJj0gflJFR19NTVVfU1RBTkRBUkRfQVhJX01PREVfTVQ2Nzc5Ow0KCQl3cml0 ZWxfcmVsYXhlZChyZWd2YWwsIGRhdGEtPmJhc2UgKyBSRUdfTU1VX01JU0NfQ1RSTCk7DQogICAg ICAgICB9DQoNCgkgTWVhbndoaWxlIHJlbW92ZSB0aGUgc2V0dGluZyBmb3IgUkVHX01NVV9TVEFO REFSRF9BWElfTU9ERSBhYm92ZS4NCg0KPiArDQo+ICAJaWYgKGRldm1fcmVxdWVzdF9pcnEoZGF0 YS0+ZGV2LCBkYXRhLT5pcnEsIG10a19pb21tdV9pc3IsIDAsDQo+ICAJCQkgICAgIGRldl9uYW1l KGRhdGEtPmRldiksICh2b2lkICopZGF0YSkpIHsNCj4gIAkJd3JpdGVsX3JlbGF4ZWQoMCwgZGF0 YS0+YmFzZSArIFJFR19NTVVfUFRfQkFTRV9BRERSKTsNCj4gQEAgLTY3OCw2ICs3MjIsOSBAQCBz dGF0aWMgaW50IG10a19pb21tdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K PiAgCQl9DQo+ICAJCWRhdGEtPmxhcmJfaW11W2lkXS5kZXYgPSAmcGxhcmJkZXYtPmRldjsNCj4g IA0KPiArCQlpZiAoZGF0YS0+cGxhdF9kYXRhLT5tNHUxX21hc2sgPT0gKDEgPDwgaWQpKQ0KPiAr CQkJZGF0YS0+bTR1X2lkID0gMTsNCj4gKw0KPiAgCQljb21wb25lbnRfbWF0Y2hfYWRkX3JlbGVh c2UoZGV2LCAmbWF0Y2gsIHJlbGVhc2Vfb2YsDQo+ICAJCQkJCSAgICBjb21wYXJlX29mLCBsYXJi bm9kZSk7DQo+ICAJfQ0KPiBAQCAtNzMxLDYgKzc3OCw3IEBAIHN0YXRpYyBpbnQgX19tYXliZV91 bnVzZWQgbXRrX2lvbW11X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KPiAgCXN0cnVjdCBt dGtfaW9tbXVfc3VzcGVuZF9yZWcgKnJlZyA9ICZkYXRhLT5yZWc7DQo+ICAJdm9pZCBfX2lvbWVt ICpiYXNlID0gZGF0YS0+YmFzZTsNCj4gIA0KPiArCXJlZy0+d3JfbGVuID0gcmVhZGxfcmVsYXhl ZChiYXNlICsgUkVHX01NVV9XUl9MRU4pOw0KPiAgCXJlZy0+c3RhbmRhcmRfYXhpX21vZGUgPSBy ZWFkbF9yZWxheGVkKGJhc2UgKw0KPiAgCQkJCQkgICAgICAgUkVHX01NVV9TVEFOREFSRF9BWElf TU9ERSk7DQo+ICAJcmVnLT5kY21fZGlzID0gcmVhZGxfcmVsYXhlZChiYXNlICsgUkVHX01NVV9E Q01fRElTKTsNCj4gQEAgLTc1Niw2ICs4MDQsNyBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2Vk IG10a19pb21tdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiAgCQlkZXZfZXJyKGRhdGEt PmRldiwgIkZhaWxlZCB0byBlbmFibGUgY2xrKCVkKSBpbiByZXN1bWVcbiIsIHJldCk7DQo+ICAJ CXJldHVybiByZXQ7DQo+ICAJfQ0KPiArCXdyaXRlbF9yZWxheGVkKHJlZy0+d3JfbGVuLCBiYXNl ICsgUkVHX01NVV9XUl9MRU4pOw0KPiAgCXdyaXRlbF9yZWxheGVkKHJlZy0+c3RhbmRhcmRfYXhp X21vZGUsDQo+ICAJCSAgICAgICBiYXNlICsgUkVHX01NVV9TVEFOREFSRF9BWElfTU9ERSk7DQo+ ICAJd3JpdGVsX3JlbGF4ZWQocmVnLT5kY21fZGlzLCBiYXNlICsgUkVHX01NVV9EQ01fRElTKTsN Cj4gQEAgLTc3OSw3ICs4MjgsMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfaW9tbXVfcGxh dF9kYXRhIG10MjcxMl9kYXRhID0gew0KPiAgCS5oYXNfNGdiX21vZGUgPSB0cnVlLA0KPiAgCS5o YXNfYmNsayAgICAgPSB0cnVlLA0KPiAgCS5oYXNfdmxkX3BhX3JuZyAgID0gdHJ1ZSwNCj4gLQku bGFyYmlkX3JlbWFwID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDl9LA0KPiArCS5sYXJi aWRfcmVtYXBbMF0gPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOX0sDQo+ICsJLmludl9z ZWxfcmVnID0gUkVHX01NVV9JTlZfU0VMLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBtdGtfaW9tbXVfcGxhdF9kYXRhIG10Njc3OV9kYXRhID0gew0KPiArCS5tNHVfcGxhdCA9 IE00VV9NVDY3NzksDQo+ICsJLmxhcmJpZF9yZW1hcFswXSA9IHswLCAxLCAyLCAzLCA1LCA3LCAx MCwgOX0sDQo+ICsJLyogdnA2YSwgdnA2YiwgbWRsYS9jb3JlMiwgbWRsYS9lZG1jKi8NCj4gKwku bGFyYmlkX3JlbWFwWzFdID0gezIsIDAsIDMsIDF9LA0KPiArCS5oYXNfc3ViX2NvbW0gPSB7dHJ1 ZSwgdHJ1ZX0sDQo+ICsJLmhhc193cl9sZW4gPSB0cnVlLA0KPiArCS5oYXNfbWlzY19jdHJsID0g e3RydWUsIGZhbHNlfSwNCj4gKwkuaW52X3NlbF9yZWcgPSBSRUdfTU1VX0lOVl9TRUxfTVQ2Nzc5 LA0KPiArCS5tNHUxX21hc2sgPSAgQklUKDYpLA0KPiAgfTsNCj4gIA0KPiAgc3RhdGljIGNvbnN0 IHN0cnVjdCBtdGtfaW9tbXVfcGxhdF9kYXRhIG10ODE3M19kYXRhID0gew0KPiBAQCAtNzg3LDE3 ICs4NDksMjAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfaW9tbXVfcGxhdF9kYXRhIG10ODE3 M19kYXRhID0gew0KPiAgCS5oYXNfNGdiX21vZGUgPSB0cnVlLA0KPiAgCS5oYXNfYmNsayAgICAg PSB0cnVlLA0KPiAgCS5yZXNldF9heGkgICAgPSB0cnVlLA0KPiAtCS5sYXJiaWRfcmVtYXAgPSB7 MCwgMSwgMiwgMywgNCwgNX0sIC8qIExpbmVhciBtYXBwaW5nLiAqLw0KPiArCS5sYXJiaWRfcmVt YXBbMF0gPSB7MCwgMSwgMiwgMywgNCwgNX0sIC8qIExpbmVhciBtYXBwaW5nLiAqLw0KPiArCS5p bnZfc2VsX3JlZyA9IFJFR19NTVVfSU5WX1NFTCwNCj4gIH07DQo+ICANCj4gIHN0YXRpYyBjb25z dCBzdHJ1Y3QgbXRrX2lvbW11X3BsYXRfZGF0YSBtdDgxODNfZGF0YSA9IHsNCj4gIAkubTR1X3Bs YXQgICAgID0gTTRVX01UODE4MywNCj4gIAkucmVzZXRfYXhpICAgID0gdHJ1ZSwNCj4gLQkubGFy YmlkX3JlbWFwID0gezAsIDQsIDUsIDYsIDcsIDIsIDMsIDF9LA0KPiArCS5sYXJiaWRfcmVtYXBb MF0gPSB7MCwgNCwgNSwgNiwgNywgMiwgMywgMX0sDQo+ICsJLmludl9zZWxfcmVnID0gUkVHX01N VV9JTlZfU0VMLA0KPiAgfTsNCj4gIA0KPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXRrX2lvbW11X29mX2lkc1tdID0gew0KPiAgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWss bXQyNzEyLW00dSIsIC5kYXRhID0gJm10MjcxMl9kYXRhfSwNCj4gKwl7IC5jb21wYXRpYmxlID0g Im1lZGlhdGVrLG10Njc3OS1tNHUiLCAuZGF0YSA9ICZtdDY3NzlfZGF0YX0sDQo+ICAJeyAuY29t cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbTR1IiwgLmRhdGEgPSAmbXQ4MTczX2RhdGF9LA0K PiAgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTgzLW00dSIsIC5kYXRhID0gJm10ODE4 M19kYXRhfSwNCj4gIAl7fQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9tdGtfaW9tbXUu aCBiL2RyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmgNCj4gaW5kZXggZWE5NDlhMzI0ZTMzLi4xMzJk Yzc2NWE0MGIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvaW9tbXUvbXRrX2lvbW11LmgNCj4gKysr IGIvZHJpdmVycy9pb21tdS9tdGtfaW9tbXUuaA0KPiBAQCAtMjUsMTEgKzI1LDEzIEBAIHN0cnVj dCBtdGtfaW9tbXVfc3VzcGVuZF9yZWcgew0KPiAgCXUzMgkJCQlpbnRfbWFpbl9jb250cm9sOw0K PiAgCXUzMgkJCQlpdnJwX3BhZGRyOw0KPiAgCXUzMgkJCQl2bGRfcGFfcm5nOw0KPiArCXUzMgkJ CQl3cl9sZW47DQo+ICB9Ow0KPiAgDQo+ICBlbnVtIG10a19pb21tdV9wbGF0IHsNCj4gIAlNNFVf TVQyNzAxLA0KPiAgCU00VV9NVDI3MTIsDQo+ICsJTTRVX01UNjc3OSwNCj4gIAlNNFVfTVQ4MTcz LA0KPiAgCU00VV9NVDgxODMsDQo+ICB9Ow0KPiBAQCAtNDIsNyArNDQsMTIgQEAgc3RydWN0IG10 a19pb21tdV9wbGF0X2RhdGEgew0KPiAgCWJvb2wgICAgICAgICAgICAgICAgaGFzX2JjbGs7DQo+ ICAJYm9vbCAgICAgICAgICAgICAgICBoYXNfdmxkX3BhX3JuZzsNCj4gIAlib29sICAgICAgICAg ICAgICAgIHJlc2V0X2F4aTsNCj4gLQl1bnNpZ25lZCBjaGFyICAgICAgIGxhcmJpZF9yZW1hcFtN VEtfTEFSQl9OUl9NQVhdOw0KPiArCWJvb2wgICAgICAgICAgICAgICAgaGFzX3N1Yl9jb21tWzJd Ow0KPiArCWJvb2wgICAgICAgICAgICAgICAgaGFzX3dyX2xlbjsNCj4gKwlib29sICAgICAgICAg ICAgICAgIGhhc19taXNjX2N0cmxbMl07DQo+ICsJdTMyICAgICAgICAgICAgICAgICBpbnZfc2Vs X3JlZzsNCj4gKwl1MzIgICAgICAgICAgICAgICAgIG00dTFfbWFzazsNCg0KYWxwaGFiZXRpY2Fs bHkgZm9yIHRoZSBuZXcgb25lcy4NCg0KPiArCXVuc2lnbmVkIGNoYXIgICAgICAgbGFyYmlkX3Jl bWFwWzJdW01US19MQVJCX05SX01BWF07DQo+ICB9Ow0KPiAgDQo+ICBzdHJ1Y3QgbXRrX2lvbW11 X2RvbWFpbjsNCj4gQEAgLTU5LDYgKzY2LDcgQEAgc3RydWN0IG10a19pb21tdV9kYXRhIHsNCj4g IAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV80R0I7DQo+ICAJc3Bpbmxv Y2tfdAkJCXRsYl9sb2NrOyAvKiBsb2NrIGZvciB0bGIgcmFuZ2UgZmx1c2ggKi8NCj4gIA0KPiAr CXUzMgkJCQltNHVfaWQ7DQo+ICAJc3RydWN0IGlvbW11X2RldmljZQkJaW9tbXU7DQo+ICAJY29u c3Qgc3RydWN0IG10a19pb21tdV9wbGF0X2RhdGEgKnBsYXRfZGF0YTsNCg0KQmFzaWNhbGx5IHRo aXMgcGF0Y2ggbG9va3Mgb2sgZm9yIG1lLiBCdXQgcGxlYXNlIHNwbGl0IGl0IHRvIHNldmVyYWwN CnBhdGNoZXM6DQoNCjEpIEV4dGVuZCBsYXJiaWRfcmVtYXAgdG8gbGFyYmlkX3JlbWFwWzJdLg0K ICAgQWN0dWFsbHkgbXQyNzEyIGFsc28gbmVlZCB0aGlzLiB0aGlzIGlzIHRoZSBtdDI3MTIgZGVm aW5pdGlvbi4NCiAgIGxhcmJpZF9yZW1hcFswXSA9IHswLCAxLCAyLCAzfSwNCiAgIGxhcmJpZF9y ZW1hcFsxXSA9IHs0LCA1LCA3LCA4LCA5fSwNCg0KMikgUmVnYXJkaW5nIHRoZSAweDQ4KG1pc2Nf Y3RybCByZWdpc3RlcikNCg0KMykgQWRkIG00dTFfbWFzayB0byBkaXN0aW5ndWlzaCB0aGUgbTR1 X2lkLg0KDQo0KSBBZGQgUkVHX01NVV9XUl9MRU4gaWYgeW91IG5lZWQuDQoNCjUpIFB1dCBpbnZf c2VsX3JlZyBpbiB0aGUgcGxhdF9kYXRhIGZvciBwcmVwYXJpbmcgYWRkIDB4MmMgc3VwcG9ydCBp bg0KbXQ2Nzc5Lg0KDQo2KSBBZGQgbmV3IGZsb3cgdG8gZ2V0IFNVQl9DT01NT04gSUQgYW5kIFZQ VSBsYXJiaWQgaW4gdGhlIHRyYW5zbGF0aW9uDQpmYXVsdC4NCg0KNykgQWRkIG10Njc3OSBzdXBw b3J0Lg0KDQo+ICANCg0K 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=-5.2 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,UNPARSEABLE_RELAY,UNWANTED_LANGUAGE_BODY, USER_AGENT_SANE_2 autolearn=unavailable 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 E50B3C43603 for ; Mon, 16 Dec 2019 12:13:05 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.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 B4AE3206CB for ; Mon, 16 Dec 2019 12:13:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="uOsTI51t" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B4AE3206CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 68D4D87823; Mon, 16 Dec 2019 12:13:05 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ZYweyzxl9RqD; Mon, 16 Dec 2019 12:13:04 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id 599E48768B; Mon, 16 Dec 2019 12:13:04 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 426C3C18DD; Mon, 16 Dec 2019 12:13:04 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4001FC077D for ; Mon, 16 Dec 2019 12:13:03 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 2EDCA877B1 for ; Mon, 16 Dec 2019 12:13:03 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id M5kN0b1yTmV9 for ; Mon, 16 Dec 2019 12:13:02 +0000 (UTC) X-Greylist: delayed 00:05:03 by SQLgrey-1.7.6 Received: from mailgw02.mediatek.com (unknown [1.203.163.81]) by hemlock.osuosl.org (Postfix) with ESMTP id 5B2948768B for ; Mon, 16 Dec 2019 12:13:01 +0000 (UTC) X-UUID: bb46f94224c747da8dab4df32ad56664-20191216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=GeJYaSSTviQGKC+jAYdPZIk4wLCbJe9Ewnhq0SJZGGQ=; b=uOsTI51tocohCkTABdbaGNiljpGH8Miv1RGczY0gCzXdvtxERE1RsSJe06wyaI+7r+vg3swuQP7csMt53bsL7Qx8N08TaI6xFIcPJhAqBfhX1bsCm2aYC4xcfNhbhCTTU4f6E+e7P9Aalfv15ftlKtxFk+x2Bsfqe0zCSdE/e2A=; X-UUID: bb46f94224c747da8dab4df32ad56664-20191216 Received: from mtkcas35.mediatek.inc [(172.27.4.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 782335631; Mon, 16 Dec 2019 20:07:45 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS33N2.mediatek.inc (172.27.4.76) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 20:08:05 +0800 Received: from [10.17.3.153] (172.27.4.253) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 16 Dec 2019 20:07:26 +0800 Message-ID: <1576498063.28043.74.camel@mhfsdcap03> Subject: Re: [RESEND,PATCH 02/13] iommu/mediatek: Add mt6779 IOMMU basic support From: Yong Wu To: Chao Hao Date: Mon, 16 Dec 2019 20:07:43 +0800 In-Reply-To: <20191104115238.2394-3-chao.hao@mediatek.com> References: <20191104115238.2394-1-chao.hao@mediatek.com> <20191104115238.2394-3-chao.hao@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 7791763B64BF2B57A9BC52F627E5B0DC36BFAB124FEDC002E5773B2BE4DD279C2000:8 X-MTK: N Cc: Anan Sun , devicetree@vger.kernel.org, Cui Zhang , Jun Yan , wsd_upstream@mediatek.com, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, Rob Herring , linux-mediatek@lists.infradead.org, Miles Chen , Matthias Brugger , linux-arm-kernel@lists.infradead.org, Guangming Cao X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" On Mon, 2019-11-04 at 19:52 +0800, Chao Hao wrote: > 1. Add mt6779 registers define for iommu. > 2. Add mt6779_data define to support mt6779 iommu HW init. > 3. There are two iommus, one is mm_iommu, the other is vpu_iommu. > MM_IOMMU is connected smi_larb to support multimedia engine to > access DRAM, and VPU_IOMMU is connected to APU_bus to support > VPU,MDLA,EDMA to access DRAM. MM_IOMMU and VPU_IOMMU use the same > page table to simplify design by "mtk_iommu_get_m4u_data". > 4. For smi_larb6, it doesn't use mm_iommu, so we can distinguish > vpu_iommu by it when excutes iommu_probe. > 5. For mt6779 APU_IOMMU fault id is irregular, so it was treated > specially. > > Signed-off-by: Chao Hao > --- > drivers/iommu/mtk_iommu.c | 91 +++++++++++++++++++++++++++++++++------ > drivers/iommu/mtk_iommu.h | 10 ++++- > 2 files changed, 87 insertions(+), 14 deletions(-) > > diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c > index 8ca2e99964fe..f2847e661137 100644 > --- a/drivers/iommu/mtk_iommu.c > +++ b/drivers/iommu/mtk_iommu.c > @@ -38,12 +38,24 @@ > #define REG_MMU_INVLD_END_A 0x028 > > #define REG_MMU_INV_SEL 0x038 > +#define REG_MMU_INV_SEL_MT6779 0x02c > #define F_INVLD_EN0 BIT(0) > #define F_INVLD_EN1 BIT(1) > > #define REG_MMU_STANDARD_AXI_MODE 0x048 > + > +#define REG_MMU_MISC_CRTL_MT6779 0x048 Defining two register in the same offset look strange. see below. > +#define REG_MMU_STANDARD_AXI_MODE_MT6779 (BIT(3) | BIT(19)) > +#define REG_MMU_COHERENCE_EN (BIT(0) | BIT(16)) > +#define REG_MMU_IN_ORDER_WR_EN (BIT(1) | BIT(17)) > +#define F_MMU_HALF_ENTRY_MODE_L (BIT(5) | BIT(21)) > +#define F_MMU_BLOCKING_MODE_L (BIT(4) | BIT(20)) The last four ones are not used. Please remove. > + > #define REG_MMU_DCM_DIS 0x050 > > +#define REG_MMU_WR_LEN 0x054 > +#define F_MMU_WR_THROT_DIS (BIT(5) | BIT(21)) > + > #define REG_MMU_CTRL_REG 0x110 > #define F_MMU_TF_PROT_TO_PROGRAM_ADDR (2 << 4) > #define F_MMU_PREFETCH_RT_REPLACE_MOD BIT(4) > @@ -88,10 +100,14 @@ > #define REG_MMU1_INVLD_PA 0x148 > #define REG_MMU0_INT_ID 0x150 > #define REG_MMU1_INT_ID 0x154 > +#define F_MMU_INT_ID_COMM_ID(a) (((a) >> 9) & 0x7) > +#define F_MMU_INT_ID_SUB_COMM_ID(a) (((a) >> 7) & 0x3) > #define F_MMU_INT_ID_LARB_ID(a) (((a) >> 7) & 0x7) > #define F_MMU_INT_ID_PORT_ID(a) (((a) >> 2) & 0x1f) > +#define F_MMU_INT_ID_COMM_APU_ID(a) ((a) & 0x3) > +#define F_MMU_INT_ID_SUB_APU_ID(a) (((a) >> 2) & 0x3) > > -#define MTK_PROTECT_PA_ALIGN 128 > +#define MTK_PROTECT_PA_ALIGN 256 > > /* > * Get the local arbiter ID and the portid within the larb arbiter > @@ -165,7 +181,7 @@ static void mtk_iommu_tlb_flush_all(void *cookie) > > for_each_m4u(data) { > writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, > - data->base + REG_MMU_INV_SEL); > + data->base + data->plat_data->inv_sel_reg); > writel_relaxed(F_ALL_INVLD, data->base + REG_MMU_INVALIDATE); > wmb(); /* Make sure the tlb flush all done */ > } > @@ -182,7 +198,7 @@ static void mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size, > for_each_m4u(data) { > spin_lock_irqsave(&data->tlb_lock, flags); > writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, > - data->base + REG_MMU_INV_SEL); > + data->base + data->plat_data->inv_sel_reg); > > writel_relaxed(iova, data->base + REG_MMU_INVLD_START_A); > writel_relaxed(iova + size - 1, > @@ -226,7 +242,7 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id) > struct mtk_iommu_data *data = dev_id; > struct mtk_iommu_domain *dom = data->m4u_dom; > u32 int_state, regval, fault_iova, fault_pa; > - unsigned int fault_larb, fault_port; > + unsigned int fault_larb, fault_port, sub_comm = 0; > bool layer, write; > > /* Read error info from registers */ > @@ -242,17 +258,30 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id) > } > layer = fault_iova & F_MMU_FAULT_VA_LAYER_BIT; > write = fault_iova & F_MMU_FAULT_VA_WRITE_BIT; > - fault_larb = F_MMU_INT_ID_LARB_ID(regval); > fault_port = F_MMU_INT_ID_PORT_ID(regval); > + if (data->plat_data->has_sub_comm[data->m4u_id]) { > + /* m4u1 is VPU in mt6779.*/ > + if (data->m4u_id && data->plat_data->m4u_plat == M4U_MT6779) { > + fault_larb = F_MMU_INT_ID_COMM_APU_ID(regval); > + sub_comm = F_MMU_INT_ID_SUB_APU_ID(regval); > + fault_port = 0; /* for mt6779 APU ID is irregular */ > + } else { > + fault_larb = F_MMU_INT_ID_COMM_ID(regval); > + sub_comm = F_MMU_INT_ID_SUB_COMM_ID(regval); > + } > + } else { > + fault_larb = F_MMU_INT_ID_LARB_ID(regval); > + } > > - fault_larb = data->plat_data->larbid_remap[fault_larb]; > + fault_larb = data->plat_data->larbid_remap[data->m4u_id][fault_larb]; > > if (report_iommu_fault(&dom->domain, data->dev, fault_iova, > write ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ)) { > dev_err_ratelimited( > data->dev, > - "fault type=0x%x iova=0x%x pa=0x%x larb=%d port=%d layer=%d %s\n", > - int_state, fault_iova, fault_pa, fault_larb, fault_port, > + "fault type=0x%x iova=0x%x pa=0x%x larb=%d sub_comm=%d port=%d regval=0x%x layer=%d %s\n", > + int_state, fault_iova, fault_pa, fault_larb, > + sub_comm, fault_port, regval, > layer, write ? "write" : "read"); > } > > @@ -545,11 +574,12 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data) > return ret; > } > > + regval = readl_relaxed(data->base + REG_MMU_CTRL_REG); > if (data->plat_data->m4u_plat == M4U_MT8173) > - regval = F_MMU_PREFETCH_RT_REPLACE_MOD | > + regval |= F_MMU_PREFETCH_RT_REPLACE_MOD | > F_MMU_TF_PROT_TO_PROGRAM_ADDR_MT8173; > else > - regval = F_MMU_TF_PROT_TO_PROGRAM_ADDR; > + regval |= F_MMU_TF_PROT_TO_PROGRAM_ADDR; > writel_relaxed(regval, data->base + REG_MMU_CTRL_REG); > > regval = F_L2_MULIT_HIT_EN | > @@ -589,6 +619,20 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data) > if (data->plat_data->reset_axi) > writel_relaxed(0, data->base + REG_MMU_STANDARD_AXI_MODE); > > + if (data->plat_data->has_wr_len) { > + /* write command throttling mode */ > + regval = readl_relaxed(data->base + REG_MMU_WR_LEN); > + regval &= ~F_MMU_WR_THROT_DIS; > + writel_relaxed(regval, data->base + REG_MMU_WR_LEN); > + } > + /* special settings for mmu0 (multimedia iommu) */ > + if (data->plat_data->has_misc_ctrl[data->m4u_id]) { > + regval = readl_relaxed(data->base + REG_MMU_MISC_CRTL_MT6779); > + /* non-standard AXI mode */ > + regval &= ~REG_MMU_STANDARD_AXI_MODE_MT6779; > + writel_relaxed(regval, data->base + REG_MMU_MISC_CRTL_MT6779); > + } 0x48 are REG_MMU_STANDARD_AXI_MODE in both mt8173 and mt8183, while it is REG_MMU_MISC_CRTL in mt2712, mt6779 and the latest soc, right? I think we can use one defining, like this: #define REG_MMU_MISC_CTRL 0x48 if (!data->plat_data->has_misc_ctrl[data->m4u_id]) { /* Disable standard axi mode while it is REG_MMU_STANDARD_AXI_MODE */ writel_relaxed(0, data->base + REG_MMU_MISC_CTRL); } else if (data->m4u_id == 0) { regval = readl_relaxed(data->base + REG_MMU_MISC_CTRL); regval &= ~REG_MMU_STANDARD_AXI_MODE_MT6779; writel_relaxed(regval, data->base + REG_MMU_MISC_CTRL); } Meanwhile remove the setting for REG_MMU_STANDARD_AXI_MODE above. > + > if (devm_request_irq(data->dev, data->irq, mtk_iommu_isr, 0, > dev_name(data->dev), (void *)data)) { > writel_relaxed(0, data->base + REG_MMU_PT_BASE_ADDR); > @@ -678,6 +722,9 @@ static int mtk_iommu_probe(struct platform_device *pdev) > } > data->larb_imu[id].dev = &plarbdev->dev; > > + if (data->plat_data->m4u1_mask == (1 << id)) > + data->m4u_id = 1; > + > component_match_add_release(dev, &match, release_of, > compare_of, larbnode); > } > @@ -731,6 +778,7 @@ static int __maybe_unused mtk_iommu_suspend(struct device *dev) > struct mtk_iommu_suspend_reg *reg = &data->reg; > void __iomem *base = data->base; > > + reg->wr_len = readl_relaxed(base + REG_MMU_WR_LEN); > reg->standard_axi_mode = readl_relaxed(base + > REG_MMU_STANDARD_AXI_MODE); > reg->dcm_dis = readl_relaxed(base + REG_MMU_DCM_DIS); > @@ -756,6 +804,7 @@ static int __maybe_unused mtk_iommu_resume(struct device *dev) > dev_err(data->dev, "Failed to enable clk(%d) in resume\n", ret); > return ret; > } > + writel_relaxed(reg->wr_len, base + REG_MMU_WR_LEN); > writel_relaxed(reg->standard_axi_mode, > base + REG_MMU_STANDARD_AXI_MODE); > writel_relaxed(reg->dcm_dis, base + REG_MMU_DCM_DIS); > @@ -779,7 +828,20 @@ static const struct mtk_iommu_plat_data mt2712_data = { > .has_4gb_mode = true, > .has_bclk = true, > .has_vld_pa_rng = true, > - .larbid_remap = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, > + .larbid_remap[0] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, > + .inv_sel_reg = REG_MMU_INV_SEL, > +}; > + > +static const struct mtk_iommu_plat_data mt6779_data = { > + .m4u_plat = M4U_MT6779, > + .larbid_remap[0] = {0, 1, 2, 3, 5, 7, 10, 9}, > + /* vp6a, vp6b, mdla/core2, mdla/edmc*/ > + .larbid_remap[1] = {2, 0, 3, 1}, > + .has_sub_comm = {true, true}, > + .has_wr_len = true, > + .has_misc_ctrl = {true, false}, > + .inv_sel_reg = REG_MMU_INV_SEL_MT6779, > + .m4u1_mask = BIT(6), > }; > > static const struct mtk_iommu_plat_data mt8173_data = { > @@ -787,17 +849,20 @@ static const struct mtk_iommu_plat_data mt8173_data = { > .has_4gb_mode = true, > .has_bclk = true, > .reset_axi = true, > - .larbid_remap = {0, 1, 2, 3, 4, 5}, /* Linear mapping. */ > + .larbid_remap[0] = {0, 1, 2, 3, 4, 5}, /* Linear mapping. */ > + .inv_sel_reg = REG_MMU_INV_SEL, > }; > > static const struct mtk_iommu_plat_data mt8183_data = { > .m4u_plat = M4U_MT8183, > .reset_axi = true, > - .larbid_remap = {0, 4, 5, 6, 7, 2, 3, 1}, > + .larbid_remap[0] = {0, 4, 5, 6, 7, 2, 3, 1}, > + .inv_sel_reg = REG_MMU_INV_SEL, > }; > > static const struct of_device_id mtk_iommu_of_ids[] = { > { .compatible = "mediatek,mt2712-m4u", .data = &mt2712_data}, > + { .compatible = "mediatek,mt6779-m4u", .data = &mt6779_data}, > { .compatible = "mediatek,mt8173-m4u", .data = &mt8173_data}, > { .compatible = "mediatek,mt8183-m4u", .data = &mt8183_data}, > {} > diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h > index ea949a324e33..132dc765a40b 100644 > --- a/drivers/iommu/mtk_iommu.h > +++ b/drivers/iommu/mtk_iommu.h > @@ -25,11 +25,13 @@ struct mtk_iommu_suspend_reg { > u32 int_main_control; > u32 ivrp_paddr; > u32 vld_pa_rng; > + u32 wr_len; > }; > > enum mtk_iommu_plat { > M4U_MT2701, > M4U_MT2712, > + M4U_MT6779, > M4U_MT8173, > M4U_MT8183, > }; > @@ -42,7 +44,12 @@ struct mtk_iommu_plat_data { > bool has_bclk; > bool has_vld_pa_rng; > bool reset_axi; > - unsigned char larbid_remap[MTK_LARB_NR_MAX]; > + bool has_sub_comm[2]; > + bool has_wr_len; > + bool has_misc_ctrl[2]; > + u32 inv_sel_reg; > + u32 m4u1_mask; alphabetically for the new ones. > + unsigned char larbid_remap[2][MTK_LARB_NR_MAX]; > }; > > struct mtk_iommu_domain; > @@ -59,6 +66,7 @@ struct mtk_iommu_data { > bool enable_4GB; > spinlock_t tlb_lock; /* lock for tlb range flush */ > > + u32 m4u_id; > struct iommu_device iommu; > const struct mtk_iommu_plat_data *plat_data; Basically this patch looks ok for me. But please split it to several patches: 1) Extend larbid_remap to larbid_remap[2]. Actually mt2712 also need this. this is the mt2712 definition. larbid_remap[0] = {0, 1, 2, 3}, larbid_remap[1] = {4, 5, 7, 8, 9}, 2) Regarding the 0x48(misc_ctrl register) 3) Add m4u1_mask to distinguish the m4u_id. 4) Add REG_MMU_WR_LEN if you need. 5) Put inv_sel_reg in the plat_data for preparing add 0x2c support in mt6779. 6) Add new flow to get SUB_COMMON ID and VPU larbid in the translation fault. 7) Add mt6779 support. > _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu 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=-5.5 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,UNWANTED_LANGUAGE_BODY, USER_AGENT_SANE_2 autolearn=unavailable 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 9F66BC43603 for ; Mon, 16 Dec 2019 12:09:24 +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 737FE206D3 for ; Mon, 16 Dec 2019 12:09:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="TKa4Sfzm"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="LNpfJ6i+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 737FE206D3 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: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gachGXoYnT3uFbW9rAz8ORYmzwQTMa5t7BIOmD0+QXE=; b=TKa4SfzmUTFTis ZnTU8ziABbQpYBr0uGmh+NDU2oMjUIngU0Li+TcflkX23NJe76qXkuq2hE4GMOuKRD9XkATh9rb5y aJAuZDKcD+CgQdlZ1ogQI1xSkZcBEIS2nu5mVOoJBKvMFNZKB0i8eUdG6jMgGUnT1CnbuTHz9yLYN RVAtxsCH3+Fv8p3nEd70Uui1MSFwS61mkwS0w0hBAr9T5Jw2A3AuGX/AgsosqzrVkRH/5gJ9+lXa4 gZ0acF4t+sVGEVb5RtRmvn2CGaKMwOlZFLZJTs7HvodnNrLFD/zTvBzuep3w1lyocTQxkIWPUlYOY 4PWu8TF1At5h0WCgjhEQ==; 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 1igpBc-0005SN-GM; Mon, 16 Dec 2019 12:09:16 +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 1igpAK-00046v-Ah; Mon, 16 Dec 2019 12:07:59 +0000 X-UUID: a89308b7c5c9462db080ffda537f6ed9-20191216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=GeJYaSSTviQGKC+jAYdPZIk4wLCbJe9Ewnhq0SJZGGQ=; b=LNpfJ6i+J53G173si6c6XVTXJqgiJk6L6F5FbdAj0oaoYUoikP0eDwpxBzraMF9NY9rtfAmkn/rnBu+M2vsQoy0LQszbF12xhlnrg3VjqeS8HNH5sKv/d/52Tvmoivf1MxNyCyi5NAiCBvDlWqziRxGmoeDVS3gVzjftr52SaLo=; X-UUID: a89308b7c5c9462db080ffda537f6ed9-20191216 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 2114147072; Mon, 16 Dec 2019 04:07:50 -0800 Received: from MTKMBS33N2.mediatek.inc (172.27.4.76) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 04:08:07 -0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS33N2.mediatek.inc (172.27.4.76) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 20:08:05 +0800 Received: from [10.17.3.153] (172.27.4.253) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 16 Dec 2019 20:07:26 +0800 Message-ID: <1576498063.28043.74.camel@mhfsdcap03> Subject: Re: [RESEND,PATCH 02/13] iommu/mediatek: Add mt6779 IOMMU basic support From: Yong Wu To: Chao Hao Date: Mon, 16 Dec 2019 20:07:43 +0800 In-Reply-To: <20191104115238.2394-3-chao.hao@mediatek.com> References: <20191104115238.2394-1-chao.hao@mediatek.com> <20191104115238.2394-3-chao.hao@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 7791763B64BF2B57A9BC52F627E5B0DC36BFAB124FEDC002E5773B2BE4DD279C2000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191216_040756_846983_95AF3F6E X-CRM114-Status: GOOD ( 22.63 ) 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: Anan Sun , devicetree@vger.kernel.org, Cui Zhang , Jun Yan , wsd_upstream@mediatek.com, Joerg Roedel , linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, Rob Herring , linux-mediatek@lists.infradead.org, Miles Chen , Matthias Brugger , linux-arm-kernel@lists.infradead.org, Guangming Cao 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 On Mon, 2019-11-04 at 19:52 +0800, Chao Hao wrote: > 1. Add mt6779 registers define for iommu. > 2. Add mt6779_data define to support mt6779 iommu HW init. > 3. There are two iommus, one is mm_iommu, the other is vpu_iommu. > MM_IOMMU is connected smi_larb to support multimedia engine to > access DRAM, and VPU_IOMMU is connected to APU_bus to support > VPU,MDLA,EDMA to access DRAM. MM_IOMMU and VPU_IOMMU use the same > page table to simplify design by "mtk_iommu_get_m4u_data". > 4. For smi_larb6, it doesn't use mm_iommu, so we can distinguish > vpu_iommu by it when excutes iommu_probe. > 5. For mt6779 APU_IOMMU fault id is irregular, so it was treated > specially. > > Signed-off-by: Chao Hao > --- > drivers/iommu/mtk_iommu.c | 91 +++++++++++++++++++++++++++++++++------ > drivers/iommu/mtk_iommu.h | 10 ++++- > 2 files changed, 87 insertions(+), 14 deletions(-) > > diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c > index 8ca2e99964fe..f2847e661137 100644 > --- a/drivers/iommu/mtk_iommu.c > +++ b/drivers/iommu/mtk_iommu.c > @@ -38,12 +38,24 @@ > #define REG_MMU_INVLD_END_A 0x028 > > #define REG_MMU_INV_SEL 0x038 > +#define REG_MMU_INV_SEL_MT6779 0x02c > #define F_INVLD_EN0 BIT(0) > #define F_INVLD_EN1 BIT(1) > > #define REG_MMU_STANDARD_AXI_MODE 0x048 > + > +#define REG_MMU_MISC_CRTL_MT6779 0x048 Defining two register in the same offset look strange. see below. > +#define REG_MMU_STANDARD_AXI_MODE_MT6779 (BIT(3) | BIT(19)) > +#define REG_MMU_COHERENCE_EN (BIT(0) | BIT(16)) > +#define REG_MMU_IN_ORDER_WR_EN (BIT(1) | BIT(17)) > +#define F_MMU_HALF_ENTRY_MODE_L (BIT(5) | BIT(21)) > +#define F_MMU_BLOCKING_MODE_L (BIT(4) | BIT(20)) The last four ones are not used. Please remove. > + > #define REG_MMU_DCM_DIS 0x050 > > +#define REG_MMU_WR_LEN 0x054 > +#define F_MMU_WR_THROT_DIS (BIT(5) | BIT(21)) > + > #define REG_MMU_CTRL_REG 0x110 > #define F_MMU_TF_PROT_TO_PROGRAM_ADDR (2 << 4) > #define F_MMU_PREFETCH_RT_REPLACE_MOD BIT(4) > @@ -88,10 +100,14 @@ > #define REG_MMU1_INVLD_PA 0x148 > #define REG_MMU0_INT_ID 0x150 > #define REG_MMU1_INT_ID 0x154 > +#define F_MMU_INT_ID_COMM_ID(a) (((a) >> 9) & 0x7) > +#define F_MMU_INT_ID_SUB_COMM_ID(a) (((a) >> 7) & 0x3) > #define F_MMU_INT_ID_LARB_ID(a) (((a) >> 7) & 0x7) > #define F_MMU_INT_ID_PORT_ID(a) (((a) >> 2) & 0x1f) > +#define F_MMU_INT_ID_COMM_APU_ID(a) ((a) & 0x3) > +#define F_MMU_INT_ID_SUB_APU_ID(a) (((a) >> 2) & 0x3) > > -#define MTK_PROTECT_PA_ALIGN 128 > +#define MTK_PROTECT_PA_ALIGN 256 > > /* > * Get the local arbiter ID and the portid within the larb arbiter > @@ -165,7 +181,7 @@ static void mtk_iommu_tlb_flush_all(void *cookie) > > for_each_m4u(data) { > writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, > - data->base + REG_MMU_INV_SEL); > + data->base + data->plat_data->inv_sel_reg); > writel_relaxed(F_ALL_INVLD, data->base + REG_MMU_INVALIDATE); > wmb(); /* Make sure the tlb flush all done */ > } > @@ -182,7 +198,7 @@ static void mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size, > for_each_m4u(data) { > spin_lock_irqsave(&data->tlb_lock, flags); > writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, > - data->base + REG_MMU_INV_SEL); > + data->base + data->plat_data->inv_sel_reg); > > writel_relaxed(iova, data->base + REG_MMU_INVLD_START_A); > writel_relaxed(iova + size - 1, > @@ -226,7 +242,7 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id) > struct mtk_iommu_data *data = dev_id; > struct mtk_iommu_domain *dom = data->m4u_dom; > u32 int_state, regval, fault_iova, fault_pa; > - unsigned int fault_larb, fault_port; > + unsigned int fault_larb, fault_port, sub_comm = 0; > bool layer, write; > > /* Read error info from registers */ > @@ -242,17 +258,30 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id) > } > layer = fault_iova & F_MMU_FAULT_VA_LAYER_BIT; > write = fault_iova & F_MMU_FAULT_VA_WRITE_BIT; > - fault_larb = F_MMU_INT_ID_LARB_ID(regval); > fault_port = F_MMU_INT_ID_PORT_ID(regval); > + if (data->plat_data->has_sub_comm[data->m4u_id]) { > + /* m4u1 is VPU in mt6779.*/ > + if (data->m4u_id && data->plat_data->m4u_plat == M4U_MT6779) { > + fault_larb = F_MMU_INT_ID_COMM_APU_ID(regval); > + sub_comm = F_MMU_INT_ID_SUB_APU_ID(regval); > + fault_port = 0; /* for mt6779 APU ID is irregular */ > + } else { > + fault_larb = F_MMU_INT_ID_COMM_ID(regval); > + sub_comm = F_MMU_INT_ID_SUB_COMM_ID(regval); > + } > + } else { > + fault_larb = F_MMU_INT_ID_LARB_ID(regval); > + } > > - fault_larb = data->plat_data->larbid_remap[fault_larb]; > + fault_larb = data->plat_data->larbid_remap[data->m4u_id][fault_larb]; > > if (report_iommu_fault(&dom->domain, data->dev, fault_iova, > write ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ)) { > dev_err_ratelimited( > data->dev, > - "fault type=0x%x iova=0x%x pa=0x%x larb=%d port=%d layer=%d %s\n", > - int_state, fault_iova, fault_pa, fault_larb, fault_port, > + "fault type=0x%x iova=0x%x pa=0x%x larb=%d sub_comm=%d port=%d regval=0x%x layer=%d %s\n", > + int_state, fault_iova, fault_pa, fault_larb, > + sub_comm, fault_port, regval, > layer, write ? "write" : "read"); > } > > @@ -545,11 +574,12 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data) > return ret; > } > > + regval = readl_relaxed(data->base + REG_MMU_CTRL_REG); > if (data->plat_data->m4u_plat == M4U_MT8173) > - regval = F_MMU_PREFETCH_RT_REPLACE_MOD | > + regval |= F_MMU_PREFETCH_RT_REPLACE_MOD | > F_MMU_TF_PROT_TO_PROGRAM_ADDR_MT8173; > else > - regval = F_MMU_TF_PROT_TO_PROGRAM_ADDR; > + regval |= F_MMU_TF_PROT_TO_PROGRAM_ADDR; > writel_relaxed(regval, data->base + REG_MMU_CTRL_REG); > > regval = F_L2_MULIT_HIT_EN | > @@ -589,6 +619,20 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data) > if (data->plat_data->reset_axi) > writel_relaxed(0, data->base + REG_MMU_STANDARD_AXI_MODE); > > + if (data->plat_data->has_wr_len) { > + /* write command throttling mode */ > + regval = readl_relaxed(data->base + REG_MMU_WR_LEN); > + regval &= ~F_MMU_WR_THROT_DIS; > + writel_relaxed(regval, data->base + REG_MMU_WR_LEN); > + } > + /* special settings for mmu0 (multimedia iommu) */ > + if (data->plat_data->has_misc_ctrl[data->m4u_id]) { > + regval = readl_relaxed(data->base + REG_MMU_MISC_CRTL_MT6779); > + /* non-standard AXI mode */ > + regval &= ~REG_MMU_STANDARD_AXI_MODE_MT6779; > + writel_relaxed(regval, data->base + REG_MMU_MISC_CRTL_MT6779); > + } 0x48 are REG_MMU_STANDARD_AXI_MODE in both mt8173 and mt8183, while it is REG_MMU_MISC_CRTL in mt2712, mt6779 and the latest soc, right? I think we can use one defining, like this: #define REG_MMU_MISC_CTRL 0x48 if (!data->plat_data->has_misc_ctrl[data->m4u_id]) { /* Disable standard axi mode while it is REG_MMU_STANDARD_AXI_MODE */ writel_relaxed(0, data->base + REG_MMU_MISC_CTRL); } else if (data->m4u_id == 0) { regval = readl_relaxed(data->base + REG_MMU_MISC_CTRL); regval &= ~REG_MMU_STANDARD_AXI_MODE_MT6779; writel_relaxed(regval, data->base + REG_MMU_MISC_CTRL); } Meanwhile remove the setting for REG_MMU_STANDARD_AXI_MODE above. > + > if (devm_request_irq(data->dev, data->irq, mtk_iommu_isr, 0, > dev_name(data->dev), (void *)data)) { > writel_relaxed(0, data->base + REG_MMU_PT_BASE_ADDR); > @@ -678,6 +722,9 @@ static int mtk_iommu_probe(struct platform_device *pdev) > } > data->larb_imu[id].dev = &plarbdev->dev; > > + if (data->plat_data->m4u1_mask == (1 << id)) > + data->m4u_id = 1; > + > component_match_add_release(dev, &match, release_of, > compare_of, larbnode); > } > @@ -731,6 +778,7 @@ static int __maybe_unused mtk_iommu_suspend(struct device *dev) > struct mtk_iommu_suspend_reg *reg = &data->reg; > void __iomem *base = data->base; > > + reg->wr_len = readl_relaxed(base + REG_MMU_WR_LEN); > reg->standard_axi_mode = readl_relaxed(base + > REG_MMU_STANDARD_AXI_MODE); > reg->dcm_dis = readl_relaxed(base + REG_MMU_DCM_DIS); > @@ -756,6 +804,7 @@ static int __maybe_unused mtk_iommu_resume(struct device *dev) > dev_err(data->dev, "Failed to enable clk(%d) in resume\n", ret); > return ret; > } > + writel_relaxed(reg->wr_len, base + REG_MMU_WR_LEN); > writel_relaxed(reg->standard_axi_mode, > base + REG_MMU_STANDARD_AXI_MODE); > writel_relaxed(reg->dcm_dis, base + REG_MMU_DCM_DIS); > @@ -779,7 +828,20 @@ static const struct mtk_iommu_plat_data mt2712_data = { > .has_4gb_mode = true, > .has_bclk = true, > .has_vld_pa_rng = true, > - .larbid_remap = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, > + .larbid_remap[0] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, > + .inv_sel_reg = REG_MMU_INV_SEL, > +}; > + > +static const struct mtk_iommu_plat_data mt6779_data = { > + .m4u_plat = M4U_MT6779, > + .larbid_remap[0] = {0, 1, 2, 3, 5, 7, 10, 9}, > + /* vp6a, vp6b, mdla/core2, mdla/edmc*/ > + .larbid_remap[1] = {2, 0, 3, 1}, > + .has_sub_comm = {true, true}, > + .has_wr_len = true, > + .has_misc_ctrl = {true, false}, > + .inv_sel_reg = REG_MMU_INV_SEL_MT6779, > + .m4u1_mask = BIT(6), > }; > > static const struct mtk_iommu_plat_data mt8173_data = { > @@ -787,17 +849,20 @@ static const struct mtk_iommu_plat_data mt8173_data = { > .has_4gb_mode = true, > .has_bclk = true, > .reset_axi = true, > - .larbid_remap = {0, 1, 2, 3, 4, 5}, /* Linear mapping. */ > + .larbid_remap[0] = {0, 1, 2, 3, 4, 5}, /* Linear mapping. */ > + .inv_sel_reg = REG_MMU_INV_SEL, > }; > > static const struct mtk_iommu_plat_data mt8183_data = { > .m4u_plat = M4U_MT8183, > .reset_axi = true, > - .larbid_remap = {0, 4, 5, 6, 7, 2, 3, 1}, > + .larbid_remap[0] = {0, 4, 5, 6, 7, 2, 3, 1}, > + .inv_sel_reg = REG_MMU_INV_SEL, > }; > > static const struct of_device_id mtk_iommu_of_ids[] = { > { .compatible = "mediatek,mt2712-m4u", .data = &mt2712_data}, > + { .compatible = "mediatek,mt6779-m4u", .data = &mt6779_data}, > { .compatible = "mediatek,mt8173-m4u", .data = &mt8173_data}, > { .compatible = "mediatek,mt8183-m4u", .data = &mt8183_data}, > {} > diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h > index ea949a324e33..132dc765a40b 100644 > --- a/drivers/iommu/mtk_iommu.h > +++ b/drivers/iommu/mtk_iommu.h > @@ -25,11 +25,13 @@ struct mtk_iommu_suspend_reg { > u32 int_main_control; > u32 ivrp_paddr; > u32 vld_pa_rng; > + u32 wr_len; > }; > > enum mtk_iommu_plat { > M4U_MT2701, > M4U_MT2712, > + M4U_MT6779, > M4U_MT8173, > M4U_MT8183, > }; > @@ -42,7 +44,12 @@ struct mtk_iommu_plat_data { > bool has_bclk; > bool has_vld_pa_rng; > bool reset_axi; > - unsigned char larbid_remap[MTK_LARB_NR_MAX]; > + bool has_sub_comm[2]; > + bool has_wr_len; > + bool has_misc_ctrl[2]; > + u32 inv_sel_reg; > + u32 m4u1_mask; alphabetically for the new ones. > + unsigned char larbid_remap[2][MTK_LARB_NR_MAX]; > }; > > struct mtk_iommu_domain; > @@ -59,6 +66,7 @@ struct mtk_iommu_data { > bool enable_4GB; > spinlock_t tlb_lock; /* lock for tlb range flush */ > > + u32 m4u_id; > struct iommu_device iommu; > const struct mtk_iommu_plat_data *plat_data; Basically this patch looks ok for me. But please split it to several patches: 1) Extend larbid_remap to larbid_remap[2]. Actually mt2712 also need this. this is the mt2712 definition. larbid_remap[0] = {0, 1, 2, 3}, larbid_remap[1] = {4, 5, 7, 8, 9}, 2) Regarding the 0x48(misc_ctrl register) 3) Add m4u1_mask to distinguish the m4u_id. 4) Add REG_MMU_WR_LEN if you need. 5) Put inv_sel_reg in the plat_data for preparing add 0x2c support in mt6779. 6) Add new flow to get SUB_COMMON ID and VPU larbid in the translation fault. 7) Add mt6779 support. > _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek 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=-5.5 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,UNWANTED_LANGUAGE_BODY, USER_AGENT_SANE_2 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 77B57C43603 for ; Mon, 16 Dec 2019 12:09:21 +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 38EEB206D3 for ; Mon, 16 Dec 2019 12:09:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="rnOuxxxU"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="LNpfJ6i+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 38EEB206D3 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-arm-kernel-bounces+infradead-linux-arm-kernel=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: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BmK4JqsA7hn6JK52cTDZ5jiouV6VjPpN/rL+K76hX/s=; b=rnOuxxxUOW5h2c enW2oh7UfRPFPmR51VkU7X5OpRyZYkqRvf/JjdC91MfqAjVbJ0TGOXV3PpiJ9Gfzxr08phMpjmUYV y11m9oe1XO4LSLN1F878ZheufCWs7IhUhbsemMODKCNWt4w/cG3YAvjUVJ8qxhCjbxCbMHQvdGhpT XlPlfIeNPw+7bZzOnaETVPof5XotIEIVx/Z9G8hURTddgi3i0hpMxWQTJHHSVHWQo1/2fG7alyMeY mLd9okTao76p0/7XLePytYkx0qdYL7cXLo2p8eqgpuEwT40scIlfHElmgfu7hHNeuQzUpP8KP4PB6 2gevmoOBIh5293ZRIVOA==; 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 1igpBf-0005Us-O8; Mon, 16 Dec 2019 12:09:19 +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 1igpAK-00046v-Ah; Mon, 16 Dec 2019 12:07:59 +0000 X-UUID: a89308b7c5c9462db080ffda537f6ed9-20191216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=GeJYaSSTviQGKC+jAYdPZIk4wLCbJe9Ewnhq0SJZGGQ=; b=LNpfJ6i+J53G173si6c6XVTXJqgiJk6L6F5FbdAj0oaoYUoikP0eDwpxBzraMF9NY9rtfAmkn/rnBu+M2vsQoy0LQszbF12xhlnrg3VjqeS8HNH5sKv/d/52Tvmoivf1MxNyCyi5NAiCBvDlWqziRxGmoeDVS3gVzjftr52SaLo=; X-UUID: a89308b7c5c9462db080ffda537f6ed9-20191216 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 2114147072; Mon, 16 Dec 2019 04:07:50 -0800 Received: from MTKMBS33N2.mediatek.inc (172.27.4.76) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 04:08:07 -0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS33N2.mediatek.inc (172.27.4.76) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 16 Dec 2019 20:08:05 +0800 Received: from [10.17.3.153] (172.27.4.253) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 16 Dec 2019 20:07:26 +0800 Message-ID: <1576498063.28043.74.camel@mhfsdcap03> Subject: Re: [RESEND,PATCH 02/13] iommu/mediatek: Add mt6779 IOMMU basic support From: Yong Wu To: Chao Hao Date: Mon, 16 Dec 2019 20:07:43 +0800 In-Reply-To: <20191104115238.2394-3-chao.hao@mediatek.com> References: <20191104115238.2394-1-chao.hao@mediatek.com> <20191104115238.2394-3-chao.hao@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 7791763B64BF2B57A9BC52F627E5B0DC36BFAB124FEDC002E5773B2BE4DD279C2000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191216_040756_846983_95AF3F6E X-CRM114-Status: GOOD ( 22.63 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anan Sun , devicetree@vger.kernel.org, Cui Zhang , Jun Yan , wsd_upstream@mediatek.com, Joerg Roedel , linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, Rob Herring , linux-mediatek@lists.infradead.org, Miles Chen , Matthias Brugger , linux-arm-kernel@lists.infradead.org, Guangming Cao Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, 2019-11-04 at 19:52 +0800, Chao Hao wrote: > 1. Add mt6779 registers define for iommu. > 2. Add mt6779_data define to support mt6779 iommu HW init. > 3. There are two iommus, one is mm_iommu, the other is vpu_iommu. > MM_IOMMU is connected smi_larb to support multimedia engine to > access DRAM, and VPU_IOMMU is connected to APU_bus to support > VPU,MDLA,EDMA to access DRAM. MM_IOMMU and VPU_IOMMU use the same > page table to simplify design by "mtk_iommu_get_m4u_data". > 4. For smi_larb6, it doesn't use mm_iommu, so we can distinguish > vpu_iommu by it when excutes iommu_probe. > 5. For mt6779 APU_IOMMU fault id is irregular, so it was treated > specially. > > Signed-off-by: Chao Hao > --- > drivers/iommu/mtk_iommu.c | 91 +++++++++++++++++++++++++++++++++------ > drivers/iommu/mtk_iommu.h | 10 ++++- > 2 files changed, 87 insertions(+), 14 deletions(-) > > diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c > index 8ca2e99964fe..f2847e661137 100644 > --- a/drivers/iommu/mtk_iommu.c > +++ b/drivers/iommu/mtk_iommu.c > @@ -38,12 +38,24 @@ > #define REG_MMU_INVLD_END_A 0x028 > > #define REG_MMU_INV_SEL 0x038 > +#define REG_MMU_INV_SEL_MT6779 0x02c > #define F_INVLD_EN0 BIT(0) > #define F_INVLD_EN1 BIT(1) > > #define REG_MMU_STANDARD_AXI_MODE 0x048 > + > +#define REG_MMU_MISC_CRTL_MT6779 0x048 Defining two register in the same offset look strange. see below. > +#define REG_MMU_STANDARD_AXI_MODE_MT6779 (BIT(3) | BIT(19)) > +#define REG_MMU_COHERENCE_EN (BIT(0) | BIT(16)) > +#define REG_MMU_IN_ORDER_WR_EN (BIT(1) | BIT(17)) > +#define F_MMU_HALF_ENTRY_MODE_L (BIT(5) | BIT(21)) > +#define F_MMU_BLOCKING_MODE_L (BIT(4) | BIT(20)) The last four ones are not used. Please remove. > + > #define REG_MMU_DCM_DIS 0x050 > > +#define REG_MMU_WR_LEN 0x054 > +#define F_MMU_WR_THROT_DIS (BIT(5) | BIT(21)) > + > #define REG_MMU_CTRL_REG 0x110 > #define F_MMU_TF_PROT_TO_PROGRAM_ADDR (2 << 4) > #define F_MMU_PREFETCH_RT_REPLACE_MOD BIT(4) > @@ -88,10 +100,14 @@ > #define REG_MMU1_INVLD_PA 0x148 > #define REG_MMU0_INT_ID 0x150 > #define REG_MMU1_INT_ID 0x154 > +#define F_MMU_INT_ID_COMM_ID(a) (((a) >> 9) & 0x7) > +#define F_MMU_INT_ID_SUB_COMM_ID(a) (((a) >> 7) & 0x3) > #define F_MMU_INT_ID_LARB_ID(a) (((a) >> 7) & 0x7) > #define F_MMU_INT_ID_PORT_ID(a) (((a) >> 2) & 0x1f) > +#define F_MMU_INT_ID_COMM_APU_ID(a) ((a) & 0x3) > +#define F_MMU_INT_ID_SUB_APU_ID(a) (((a) >> 2) & 0x3) > > -#define MTK_PROTECT_PA_ALIGN 128 > +#define MTK_PROTECT_PA_ALIGN 256 > > /* > * Get the local arbiter ID and the portid within the larb arbiter > @@ -165,7 +181,7 @@ static void mtk_iommu_tlb_flush_all(void *cookie) > > for_each_m4u(data) { > writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, > - data->base + REG_MMU_INV_SEL); > + data->base + data->plat_data->inv_sel_reg); > writel_relaxed(F_ALL_INVLD, data->base + REG_MMU_INVALIDATE); > wmb(); /* Make sure the tlb flush all done */ > } > @@ -182,7 +198,7 @@ static void mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size, > for_each_m4u(data) { > spin_lock_irqsave(&data->tlb_lock, flags); > writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, > - data->base + REG_MMU_INV_SEL); > + data->base + data->plat_data->inv_sel_reg); > > writel_relaxed(iova, data->base + REG_MMU_INVLD_START_A); > writel_relaxed(iova + size - 1, > @@ -226,7 +242,7 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id) > struct mtk_iommu_data *data = dev_id; > struct mtk_iommu_domain *dom = data->m4u_dom; > u32 int_state, regval, fault_iova, fault_pa; > - unsigned int fault_larb, fault_port; > + unsigned int fault_larb, fault_port, sub_comm = 0; > bool layer, write; > > /* Read error info from registers */ > @@ -242,17 +258,30 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id) > } > layer = fault_iova & F_MMU_FAULT_VA_LAYER_BIT; > write = fault_iova & F_MMU_FAULT_VA_WRITE_BIT; > - fault_larb = F_MMU_INT_ID_LARB_ID(regval); > fault_port = F_MMU_INT_ID_PORT_ID(regval); > + if (data->plat_data->has_sub_comm[data->m4u_id]) { > + /* m4u1 is VPU in mt6779.*/ > + if (data->m4u_id && data->plat_data->m4u_plat == M4U_MT6779) { > + fault_larb = F_MMU_INT_ID_COMM_APU_ID(regval); > + sub_comm = F_MMU_INT_ID_SUB_APU_ID(regval); > + fault_port = 0; /* for mt6779 APU ID is irregular */ > + } else { > + fault_larb = F_MMU_INT_ID_COMM_ID(regval); > + sub_comm = F_MMU_INT_ID_SUB_COMM_ID(regval); > + } > + } else { > + fault_larb = F_MMU_INT_ID_LARB_ID(regval); > + } > > - fault_larb = data->plat_data->larbid_remap[fault_larb]; > + fault_larb = data->plat_data->larbid_remap[data->m4u_id][fault_larb]; > > if (report_iommu_fault(&dom->domain, data->dev, fault_iova, > write ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ)) { > dev_err_ratelimited( > data->dev, > - "fault type=0x%x iova=0x%x pa=0x%x larb=%d port=%d layer=%d %s\n", > - int_state, fault_iova, fault_pa, fault_larb, fault_port, > + "fault type=0x%x iova=0x%x pa=0x%x larb=%d sub_comm=%d port=%d regval=0x%x layer=%d %s\n", > + int_state, fault_iova, fault_pa, fault_larb, > + sub_comm, fault_port, regval, > layer, write ? "write" : "read"); > } > > @@ -545,11 +574,12 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data) > return ret; > } > > + regval = readl_relaxed(data->base + REG_MMU_CTRL_REG); > if (data->plat_data->m4u_plat == M4U_MT8173) > - regval = F_MMU_PREFETCH_RT_REPLACE_MOD | > + regval |= F_MMU_PREFETCH_RT_REPLACE_MOD | > F_MMU_TF_PROT_TO_PROGRAM_ADDR_MT8173; > else > - regval = F_MMU_TF_PROT_TO_PROGRAM_ADDR; > + regval |= F_MMU_TF_PROT_TO_PROGRAM_ADDR; > writel_relaxed(regval, data->base + REG_MMU_CTRL_REG); > > regval = F_L2_MULIT_HIT_EN | > @@ -589,6 +619,20 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data) > if (data->plat_data->reset_axi) > writel_relaxed(0, data->base + REG_MMU_STANDARD_AXI_MODE); > > + if (data->plat_data->has_wr_len) { > + /* write command throttling mode */ > + regval = readl_relaxed(data->base + REG_MMU_WR_LEN); > + regval &= ~F_MMU_WR_THROT_DIS; > + writel_relaxed(regval, data->base + REG_MMU_WR_LEN); > + } > + /* special settings for mmu0 (multimedia iommu) */ > + if (data->plat_data->has_misc_ctrl[data->m4u_id]) { > + regval = readl_relaxed(data->base + REG_MMU_MISC_CRTL_MT6779); > + /* non-standard AXI mode */ > + regval &= ~REG_MMU_STANDARD_AXI_MODE_MT6779; > + writel_relaxed(regval, data->base + REG_MMU_MISC_CRTL_MT6779); > + } 0x48 are REG_MMU_STANDARD_AXI_MODE in both mt8173 and mt8183, while it is REG_MMU_MISC_CRTL in mt2712, mt6779 and the latest soc, right? I think we can use one defining, like this: #define REG_MMU_MISC_CTRL 0x48 if (!data->plat_data->has_misc_ctrl[data->m4u_id]) { /* Disable standard axi mode while it is REG_MMU_STANDARD_AXI_MODE */ writel_relaxed(0, data->base + REG_MMU_MISC_CTRL); } else if (data->m4u_id == 0) { regval = readl_relaxed(data->base + REG_MMU_MISC_CTRL); regval &= ~REG_MMU_STANDARD_AXI_MODE_MT6779; writel_relaxed(regval, data->base + REG_MMU_MISC_CTRL); } Meanwhile remove the setting for REG_MMU_STANDARD_AXI_MODE above. > + > if (devm_request_irq(data->dev, data->irq, mtk_iommu_isr, 0, > dev_name(data->dev), (void *)data)) { > writel_relaxed(0, data->base + REG_MMU_PT_BASE_ADDR); > @@ -678,6 +722,9 @@ static int mtk_iommu_probe(struct platform_device *pdev) > } > data->larb_imu[id].dev = &plarbdev->dev; > > + if (data->plat_data->m4u1_mask == (1 << id)) > + data->m4u_id = 1; > + > component_match_add_release(dev, &match, release_of, > compare_of, larbnode); > } > @@ -731,6 +778,7 @@ static int __maybe_unused mtk_iommu_suspend(struct device *dev) > struct mtk_iommu_suspend_reg *reg = &data->reg; > void __iomem *base = data->base; > > + reg->wr_len = readl_relaxed(base + REG_MMU_WR_LEN); > reg->standard_axi_mode = readl_relaxed(base + > REG_MMU_STANDARD_AXI_MODE); > reg->dcm_dis = readl_relaxed(base + REG_MMU_DCM_DIS); > @@ -756,6 +804,7 @@ static int __maybe_unused mtk_iommu_resume(struct device *dev) > dev_err(data->dev, "Failed to enable clk(%d) in resume\n", ret); > return ret; > } > + writel_relaxed(reg->wr_len, base + REG_MMU_WR_LEN); > writel_relaxed(reg->standard_axi_mode, > base + REG_MMU_STANDARD_AXI_MODE); > writel_relaxed(reg->dcm_dis, base + REG_MMU_DCM_DIS); > @@ -779,7 +828,20 @@ static const struct mtk_iommu_plat_data mt2712_data = { > .has_4gb_mode = true, > .has_bclk = true, > .has_vld_pa_rng = true, > - .larbid_remap = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, > + .larbid_remap[0] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, > + .inv_sel_reg = REG_MMU_INV_SEL, > +}; > + > +static const struct mtk_iommu_plat_data mt6779_data = { > + .m4u_plat = M4U_MT6779, > + .larbid_remap[0] = {0, 1, 2, 3, 5, 7, 10, 9}, > + /* vp6a, vp6b, mdla/core2, mdla/edmc*/ > + .larbid_remap[1] = {2, 0, 3, 1}, > + .has_sub_comm = {true, true}, > + .has_wr_len = true, > + .has_misc_ctrl = {true, false}, > + .inv_sel_reg = REG_MMU_INV_SEL_MT6779, > + .m4u1_mask = BIT(6), > }; > > static const struct mtk_iommu_plat_data mt8173_data = { > @@ -787,17 +849,20 @@ static const struct mtk_iommu_plat_data mt8173_data = { > .has_4gb_mode = true, > .has_bclk = true, > .reset_axi = true, > - .larbid_remap = {0, 1, 2, 3, 4, 5}, /* Linear mapping. */ > + .larbid_remap[0] = {0, 1, 2, 3, 4, 5}, /* Linear mapping. */ > + .inv_sel_reg = REG_MMU_INV_SEL, > }; > > static const struct mtk_iommu_plat_data mt8183_data = { > .m4u_plat = M4U_MT8183, > .reset_axi = true, > - .larbid_remap = {0, 4, 5, 6, 7, 2, 3, 1}, > + .larbid_remap[0] = {0, 4, 5, 6, 7, 2, 3, 1}, > + .inv_sel_reg = REG_MMU_INV_SEL, > }; > > static const struct of_device_id mtk_iommu_of_ids[] = { > { .compatible = "mediatek,mt2712-m4u", .data = &mt2712_data}, > + { .compatible = "mediatek,mt6779-m4u", .data = &mt6779_data}, > { .compatible = "mediatek,mt8173-m4u", .data = &mt8173_data}, > { .compatible = "mediatek,mt8183-m4u", .data = &mt8183_data}, > {} > diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h > index ea949a324e33..132dc765a40b 100644 > --- a/drivers/iommu/mtk_iommu.h > +++ b/drivers/iommu/mtk_iommu.h > @@ -25,11 +25,13 @@ struct mtk_iommu_suspend_reg { > u32 int_main_control; > u32 ivrp_paddr; > u32 vld_pa_rng; > + u32 wr_len; > }; > > enum mtk_iommu_plat { > M4U_MT2701, > M4U_MT2712, > + M4U_MT6779, > M4U_MT8173, > M4U_MT8183, > }; > @@ -42,7 +44,12 @@ struct mtk_iommu_plat_data { > bool has_bclk; > bool has_vld_pa_rng; > bool reset_axi; > - unsigned char larbid_remap[MTK_LARB_NR_MAX]; > + bool has_sub_comm[2]; > + bool has_wr_len; > + bool has_misc_ctrl[2]; > + u32 inv_sel_reg; > + u32 m4u1_mask; alphabetically for the new ones. > + unsigned char larbid_remap[2][MTK_LARB_NR_MAX]; > }; > > struct mtk_iommu_domain; > @@ -59,6 +66,7 @@ struct mtk_iommu_data { > bool enable_4GB; > spinlock_t tlb_lock; /* lock for tlb range flush */ > > + u32 m4u_id; > struct iommu_device iommu; > const struct mtk_iommu_plat_data *plat_data; Basically this patch looks ok for me. But please split it to several patches: 1) Extend larbid_remap to larbid_remap[2]. Actually mt2712 also need this. this is the mt2712 definition. larbid_remap[0] = {0, 1, 2, 3}, larbid_remap[1] = {4, 5, 7, 8, 9}, 2) Regarding the 0x48(misc_ctrl register) 3) Add m4u1_mask to distinguish the m4u_id. 4) Add REG_MMU_WR_LEN if you need. 5) Put inv_sel_reg in the plat_data for preparing add 0x2c support in mt6779. 6) Add new flow to get SUB_COMMON ID and VPU larbid in the translation fault. 7) Add mt6779 support. > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel