From mboxrd@z Thu Jan 1 00:00:00 1970 From: CK Hu Subject: Re: [PATCH v3, 11/27] drm/mediatek: add mmsys private data for ddp path config Date: Fri, 14 Jun 2019 11:28:34 +0800 Message-ID: <1560482914.16718.10.camel@mtksdaap41> References: <1559734986-7379-1-git-send-email-yongqiang.niu@mediatek.com> <1559734986-7379-12-git-send-email-yongqiang.niu@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1559734986-7379-12-git-send-email-yongqiang.niu@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: yongqiang.niu@mediatek.com Cc: Mark Rutland , devicetree@vger.kernel.org, David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , linux-arm-kernel@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org SGksIFlvbmdxaWFuZzoKCk9uIFdlZCwgMjAxOS0wNi0wNSBhdCAxOTo0MiArMDgwMCwgeW9uZ3Fp YW5nLm5pdUBtZWRpYXRlay5jb20gd3JvdGU6Cj4gRnJvbTogWW9uZ3FpYW5nIE5pdSA8eW9uZ3Fp YW5nLm5pdUBtZWRpYXRlay5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGQgbW1zeXMgcHJpdmF0ZSBk YXRhIGZvciBkZHAgcGF0aCBjb25maWcKPiBhbGwgdGhlc2UgcmVnaXN0ZXIgb2Zmc2V0IGFuZCB2 YWx1ZSB3aWxsIGJlIGRpZmZlcmVudCBpbiBmdXR1cmUgU09DCj4gYWRkIHRoZXNlIGRlZmluZSBp bnRvIG1tc3lzIHByaXZhdGUgZGF0YQo+IAl1MzIgb3ZsMF9tb3V0X2VuOwo+IAl1MzIgcmRtYTBf c291dF9zZWxfaW47Cj4gCXUzMiByZG1hMF9zb3V0X2NvbG9yMDsKPiAJdTMyIHJkbWExX3NvdXRf c2VsX2luOwo+IAl1MzIgcmRtYTFfc291dF9kcGkwOwo+IAl1MzIgcmRtYTFfc291dF9kc2kwOwo+ IAl1MzIgZHBpMF9zZWxfaW47Cj4gCXUzMiBkcGkwX3NlbF9pbl9yZG1hMTsKPiAJdTMyIGRzaTBf c2VsX2luOwo+IAl1MzIgZHNpMF9zZWxfaW5fcmRtYTE7Cj4gCj4gU2lnbmVkLW9mZi1ieTogWW9u Z3FpYW5nIE5pdSA8eW9uZ3FpYW5nLm5pdUBtZWRpYXRlay5jb20+Cj4gLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYyB8ICAgNCArKwo+ICBkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYyAgfCAxMDAgKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmggIHwgICA1 ICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jICB8ICAgNSArKwo+ ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCAgfCAgIDQgKysKPiAgNSBm aWxlcyBjaGFuZ2VkLCA5MyBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCj4gaW5kZXggYWNhZDA4OC4uMTFlMzQw NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKPiBAQCAtNTAs NiArNTAsNyBAQCBzdHJ1Y3QgbXRrX2RybV9jcnRjIHsKPiAgCWJvb2wJCQkJcGVuZGluZ19wbGFu ZXM7Cj4gIAo+ICAJdm9pZCBfX2lvbWVtCQkJKmNvbmZpZ19yZWdzOwo+ICsJY29uc3Qgc3RydWN0 IG10a19tbXN5c19yZWdfZGF0YSAqbW1zeXNfcmVnX2RhdGE7Cj4gIAlzdHJ1Y3QgbXRrX2Rpc3Bf bXV0ZXgJCSptdXRleDsKPiAgCXVuc2lnbmVkIGludAkJCWRkcF9jb21wX25yOwo+ICAJc3RydWN0 IG10a19kZHBfY29tcAkJKipkZHBfY29tcDsKPiBAQCAtMjcxLDYgKzI3Miw3IEBAIHN0YXRpYyBp bnQgbXRrX2NydGNfZGRwX2h3X2luaXQoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCj4g IAlEUk1fREVCVUdfRFJJVkVSKCJtZWRpYXRla19kZHBfZGRwX3BhdGhfc2V0dXBcbiIpOwo+ICAJ Zm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgewo+ICAJCW10 a19kZHBfYWRkX2NvbXBfdG9fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCj4gKwkJCQkJIG10 a19jcnRjLT5tbXN5c19yZWdfZGF0YSwKPiAgCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5p ZCwKPiAgCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOwo+ICAJCW10a19kaXNw X211dGV4X2FkZF9jb21wKG10a19jcnRjLT5tdXRleCwKPiBAQCAtMzE5LDYgKzMyMSw3IEBAIHN0 YXRpYyB2b2lkIG10a19jcnRjX2RkcF9od19maW5pKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j cnRjKQo+ICAJbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShtdGtfY3J0Yy0+bXV0ZXgpOwo+ICAJZm9y IChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgewo+ICAJCW10a19k ZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKG10a19jcnRjLT5jb25maWdfcmVncywKPiArCQkJCQkg ICAgICBtdGtfY3J0Yy0+bW1zeXNfcmVnX2RhdGEsCj4gIAkJCQkJICAgICAgbXRrX2NydGMtPmRk cF9jb21wW2ldLT5pZCwKPiAgCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5p ZCk7Cj4gIAkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LAo+IEBA IC01NjEsNiArNTY0LDcgQEAgaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRybV9kZXYsCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ICAJbXRrX2NydGMtPmNvbmZp Z19yZWdzID0gcHJpdi0+Y29uZmlnX3JlZ3M7Cj4gKwltdGtfY3J0Yy0+bW1zeXNfcmVnX2RhdGEg PSBwcml2LT5yZWdfZGF0YTsKPiAgCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVuOwo+ ICAJbXRrX2NydGMtPmRkcF9jb21wID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgbXRrX2NydGMt PmRkcF9jb21wX25yLAo+ICAJCQkJCQlzaXplb2YoKm10a19jcnRjLT5kZHBfY29tcCksCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKPiBpbmRleCAxYmJhYmU2Li5jOGFjODky IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKPiBAQCAtMTQ1LDYg KzE0NSwxNyBAQAo+ICAjZGVmaW5lIERQSV9TRUxfSU5fQkxTCQkJMHgwCj4gICNkZWZpbmUgRFNJ X1NFTF9JTl9SRE1BCQkJMHgxCj4gIAo+ICsjZGVmaW5lIERJU1BfUkVHX09WTDBfTU9VVF9FTihk YXRhKQkJKChkYXRhKS0+b3ZsMF9tb3V0X2VuKQo+ICsjZGVmaW5lIERJU1BfUkVHX0RQSTBfU0VM X0lOKGRhdGEpCQkoKGRhdGEpLT5kcGkwX3NlbF9pbikKPiArI2RlZmluZSBESVNQX1JFR19EUEkw X1NFTF9JTl9SRE1BMShkYXRhKQkoKGRhdGEpLT5kcGkwX3NlbF9pbl9yZG1hMSkKPiArI2RlZmlu ZSBESVNQX1JFR19EU0kwX1NFTF9JTihkYXRhKQkJKChkYXRhKS0+ZHNpMF9zZWxfaW4pCj4gKyNk ZWZpbmUgRElTUF9SRUdfRFNJMF9TRUxfSU5fUkRNQTEoZGF0YSkJKChkYXRhKS0+ZHNpMF9zZWxf aW5fcmRtYTEpCj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQTBfU09VVF9TRUxfSU4oZGF0YSkJKChk YXRhKS0+cmRtYTBfc291dF9zZWxfaW4pCj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQTBfU09VVF9D T0xPUjAoZGF0YSkJKChkYXRhKS0+cmRtYTBfc291dF9jb2xvcjApCj4gKyNkZWZpbmUgRElTUF9S RUdfUkRNQTFfU09VVF9TRUxfSU4oZGF0YSkJKChkYXRhKS0+cmRtYTFfc291dF9zZWxfaW4pCj4g KyNkZWZpbmUgRElTUF9SRUdfUkRNQTFfU09VVF9EUEkwKGRhdGEpCQkoKGRhdGEpLT5yZG1hMV9z b3V0X2RwaTApCj4gKyNkZWZpbmUgRElTUF9SRUdfUkRNQTFfU09VVF9EU0kwKGRhdGEpCQkoKGRh dGEpLT5yZG1hMV9zb3V0X2RzaTApCgpJIGRvZXMgbm90IHNlZSBhbnkgYmVuZWZpdCB0byBpbnZl bnQgdGhlc2UgbWFjcm8sIGNhbGxlciBjb3VsZCBkaXJlY3RseQp1c2UgZGF0YS0+eHh4LgoKcmRt YTBfc291dF9zZWxfaW4sIHJkbWEwX3NvdXRfY29sb3IwLCBhbmQgcmRtYTFfc291dF9kc2kwIGFy ZSBub3QgdXNlZAppbiB0aGlzIHBhdGNoLCBzbyByZW1vdmUgZnJvbSB0aGlzIHBhdGNoLgoKPiAr Cj4gIHN0cnVjdCBtdGtfZGlzcF9tdXRleCB7Cj4gIAlpbnQgaWQ7Cj4gIAlib29sIGNsYWltZWQ7 Cj4gQEAgLTE3Niw2ICsxODcsMTkgQEAgc3RydWN0IG10a19kZHAgewo+ICAJY29uc3Qgc3RydWN0 IG10a19kZHBfZGF0YQkqZGF0YTsKPiAgfTsKPiAgCj4gK3N0cnVjdCBtdGtfbW1zeXNfcmVnX2Rh dGEgewo+ICsJdTMyIG92bDBfbW91dF9lbjsKPiArCXUzMiByZG1hMF9zb3V0X3NlbF9pbjsKPiAr CXUzMiByZG1hMF9zb3V0X2NvbG9yMDsKPiArCXUzMiByZG1hMV9zb3V0X3NlbF9pbjsKPiArCXUz MiByZG1hMV9zb3V0X2RwaTA7Cj4gKwl1MzIgcmRtYTFfc291dF9kc2kwOwo+ICsJdTMyIGRwaTBf c2VsX2luOwo+ICsJdTMyIGRwaTBfc2VsX2luX3JkbWExOwo+ICsJdTMyIGRzaTBfc2VsX2luOwo+ ICsJdTMyIGRzaTBfc2VsX2luX3JkbWExOwo+ICt9Owo+ICsKPiAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGludCBtdDI3MDFfbXV0ZXhfbW9kW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKPiAgCVtE RFBfQ09NUE9ORU5UX0JMU10gPSBNVDI3MDFfTVVURVhfTU9EX0RJU1BfQkxTLAo+ICAJW0REUF9D T01QT05FTlRfQ09MT1IwXSA9IE1UMjcwMV9NVVRFWF9NT0RfRElTUF9DT0xPUiwKPiBAQCAtMjU0 LDE3ICsyNzgsMzQgQEAgc3RydWN0IG10a19kZHAgewo+ICAJLm11dGV4X3NvZl9yZWcgPSBNVDI3 MDFfRElTUF9NVVRFWDBfU09GMCwKPiAgfTsKPiAgCj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXRr X2RkcF9tb3V0X2VuKGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKPiArY29uc3Qgc3RydWN0IG10 a19tbXN5c19yZWdfZGF0YSBtdDI3MDFfbW1zeXNfcmVnX2RhdGEgPSB7Cj4gKwkub3ZsMF9tb3V0 X2VuID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMX01PVVRfRU4sCj4gKwkuZHNpMF9zZWxfaW4g PSBESVNQX1JFR19DT05GSUdfRFNJX1NFTCwKPiArCS5kc2kwX3NlbF9pbl9yZG1hMSA9IERTSV9T RUxfSU5fUkRNQSwKPiArfTsKPiArCj4gK2NvbnN0IHN0cnVjdCBtdGtfbW1zeXNfcmVnX2RhdGEg bXQ4MTczX21tc3lzX3JlZ19kYXRhID0gewo+ICsJLm92bDBfbW91dF9lbiA9IERJU1BfUkVHX0NP TkZJR19ESVNQX09WTDBfTU9VVF9FTiwKPiArCS5yZG1hMV9zb3V0X3NlbF9pbiA9IERJU1BfUkVH X0NPTkZJR19ESVNQX1JETUExX1NPVVRfRU4sCj4gKwkucmRtYTFfc291dF9kcGkwID0gUkRNQTFf U09VVF9EUEkwLAo+ICsJLmRwaTBfc2VsX2luID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU4s Cj4gKwkuZHBpMF9zZWxfaW5fcmRtYTEgPSBEUEkwX1NFTF9JTl9SRE1BMSwKPiArCS5kc2kwX3Nl bF9pbiA9IERJU1BfUkVHX0NPTkZJR19EU0lFX1NFTF9JTiwKPiArCS5kc2kwX3NlbF9pbl9yZG1h MSA9IERTSTBfU0VMX0lOX1JETUExLAo+ICt9Owo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBt dGtfZGRwX21vdXRfZW4oY29uc3Qgc3RydWN0IG10a19tbXN5c19yZWdfZGF0YSAqZGF0YSwKPiAr CQkJCSAgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCj4gIAkJCQkgICAgZW51bSBtdGtfZGRw X2NvbXBfaWQgbmV4dCwKPiAgCQkJCSAgICB1bnNpZ25lZCBpbnQgKmFkZHIpCj4gIHsKPiAgCXVu c2lnbmVkIGludCB2YWx1ZTsKPiAgCj4gIAlpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMCAm JiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7Cj4gLQkJKmFkZHIgPSBESVNQX1JFR19D T05GSUdfRElTUF9PVkwwX01PVVRfRU47Cj4gKwkJKmFkZHIgPSBESVNQX1JFR19PVkwwX01PVVRf RU4oZGF0YSk7Cj4gIAkJdmFsdWUgPSBPVkwwX01PVVRfRU5fQ09MT1IwOwo+ICAJfSBlbHNlIGlm IChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9SRE1B MCkgewo+IC0JCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMX01PVVRfRU47Cj4gKwkJ KmFkZHIgPSBESVNQX1JFR19PVkwwX01PVVRfRU4oZGF0YSk7Cj4gIAkJdmFsdWUgPSBPVkxfTU9V VF9FTl9SRE1BOwo+ICAJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PRDAgJiYgbmV4 dCA9PSBERFBfQ09NUE9ORU5UX1JETUEwKSB7Cj4gIAkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdf RElTUF9PRF9NT1VUX0VOOwo+IEBAIC0zMDYsOCArMzQ3LDggQEAgc3RhdGljIHVuc2lnbmVkIGlu dCBtdGtfZGRwX21vdXRfZW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAo+ICAJCSphZGRyID0g RElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfU09VVF9FTjsKPiAgCQl2YWx1ZSA9IFJETUExX1NP VVRfRFNJMzsKPiAgCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfUkRNQTEgJiYgbmV4 dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKPiAtCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19E SVNQX1JETUExX1NPVVRfRU47Cj4gLQkJdmFsdWUgPSBSRE1BMV9TT1VUX0RQSTA7Cj4gKwkJKmFk ZHIgPSBESVNQX1JFR19SRE1BMV9TT1VUX1NFTF9JTihkYXRhKTsKPiArCQl2YWx1ZSA9IERJU1Bf UkVHX1JETUExX1NPVVRfRFBJMChkYXRhKTsKPiAgCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01Q T05FTlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTEpIHsKPiAgCQkqYWRkciA9 IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX1NPVVRfRU47Cj4gIAkJdmFsdWUgPSBSRE1BMV9T T1VUX0RQSTE7Cj4gQEAgLTMzMyw3ICszNzQsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG10a19k ZHBfbW91dF9lbihlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCj4gIAlyZXR1cm4gdmFsdWU7Cj4g IH0KPiAgCj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4oZW51bSBtdGtfZGRw X2NvbXBfaWQgY3VyLAo+ICtzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfc2VsX2luKGNvbnN0 IHN0cnVjdCBtdGtfbW1zeXNfcmVnX2RhdGEgKmRhdGEsCj4gKwkJCQkgICBlbnVtIG10a19kZHBf Y29tcF9pZCBjdXIsCj4gIAkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0LAo+ICAJCQkJ ICAgdW5zaWduZWQgaW50ICphZGRyKQo+ICB7Cj4gQEAgLTM0MywxNCArMzg1LDE0IEBAIHN0YXRp YyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4oZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAo+ ICAJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IwX1NFTF9JTjsKPiAgCQl2YWx1 ZSA9IENPTE9SMF9TRUxfSU5fT1ZMMDsKPiAgCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05F TlRfUkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RQSTApIHsKPiAtCQkqYWRkciA9IERJ U1BfUkVHX0NPTkZJR19EUElfU0VMX0lOOwo+IC0JCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRNQTE7 Cj4gKwkJKmFkZHIgPSBESVNQX1JFR19EUEkwX1NFTF9JTihkYXRhKTsKPiArCQl2YWx1ZSA9IERJ U1BfUkVHX0RQSTBfU0VMX0lOX1JETUExKGRhdGEpOwo+ICAJfSBlbHNlIGlmIChjdXIgPT0gRERQ X0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMSkgewo+ICAJCSph ZGRyID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU47Cj4gIAkJdmFsdWUgPSBEUEkxX1NFTF9J Tl9SRE1BMTsKPiAgCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfUkRNQTEgJiYgbmV4 dCA9PSBERFBfQ09NUE9ORU5UX0RTSTApIHsKPiAtCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19E U0lFX1NFTF9JTjsKPiAtCQl2YWx1ZSA9IERTSTBfU0VMX0lOX1JETUExOwo+ICsJCSphZGRyID0g RElTUF9SRUdfRFNJMF9TRUxfSU4oZGF0YSk7Cj4gKwkJdmFsdWUgPSBESVNQX1JFR19EU0kwX1NF TF9JTl9SRE1BMShkYXRhKTsKPiAgCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfUkRN QTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RTSTEpIHsKPiAgCQkqYWRkciA9IERJU1BfUkVH X0NPTkZJR19EU0lPX1NFTF9JTjsKPiAgCQl2YWx1ZSA9IERTSTFfU0VMX0lOX1JETUExOwo+IEBA IC0zOTEsMzcgKzQzMyw0NCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfc2VsX2luKGVu dW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKPiAgCXJldHVybiB2YWx1ZTsKPiAgfQo+ICAKPiAtc3Rh dGljIHZvaWQgbXRrX2RkcF9zb3V0X3NlbCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAo+IC0J CQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKPiAtCQkJICAgICBlbnVtIG10a19kZHBf Y29tcF9pZCBuZXh0KQo+ICtzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfc291dF9zZWwoY29u c3Qgc3RydWN0IG10a19tbXN5c19yZWdfZGF0YSAqZGF0YSwKPiArCQkJCSAgICAgZW51bSBtdGtf ZGRwX2NvbXBfaWQgY3VyLAo+ICsJCQkJICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0LAo+ ICsJCQkJICAgICB1bnNpZ25lZCBpbnQgKmFkZHIpCj4gIHsKPiArCXVuc2lnbmVkIGludCB2YWx1 ZTsKPiArCj4gIAlpZiAoY3VyID09IEREUF9DT01QT05FTlRfQkxTICYmIG5leHQgPT0gRERQX0NP TVBPTkVOVF9EU0kwKSB7Cj4gLQkJd3JpdGVsX3JlbGF4ZWQoQkxTX1RPX0RTSV9SRE1BMV9UT19E UEkxLAo+IC0JCQkgICAgICAgY29uZmlnX3JlZ3MgKyBESVNQX1JFR19DT05GSUdfT1VUX1NFTCk7 Cj4gKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfT1VUX1NFTDsKPiArCQl2YWx1ZSA9IEJMU19U T19EU0lfUkRNQTFfVE9fRFBJMTsKPiAgCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRf QkxTICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7Cj4gLQkJd3JpdGVsX3JlbGF4ZWQo QkxTX1RPX0RQSV9SRE1BMV9UT19EU0ksCj4gLQkJCSAgICAgICBjb25maWdfcmVncyArIERJU1Bf UkVHX0NPTkZJR19PVVRfU0VMKTsKPiAtCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRf UkRNQTEgJiYgbmV4dCA9PSBERFBfQ09NUE9ORU5UX0RTSTApIHsKPiAtCQl3cml0ZWxfcmVsYXhl ZChEU0lfU0VMX0lOX1JETUEsCj4gLQkJCSAgICAgICBjb25maWdfcmVncyArIERJU1BfUkVHX0NP TkZJR19EU0lfU0VMKTsKPiArCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19PVVRfU0VMOwo+ICsJ CXZhbHVlID0gQkxTX1RPX0RQSV9SRE1BMV9UT19EU0k7Cj4gKwl9IGVsc2Ugewo+ICsJCXZhbHVl ID0gMDsKPiAgCX0KPiArCj4gKwlyZXR1cm4gdmFsdWU7Cj4gIH0KPiAgCj4gIHZvaWQgbXRrX2Rk cF9hZGRfY29tcF90b19wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCj4gKwkJCSAgICAg IGNvbnN0IHN0cnVjdCBtdGtfbW1zeXNfcmVnX2RhdGEgKnJlZ19kYXRhLAo+ICAJCQkgICAgICBl bnVtIG10a19kZHBfY29tcF9pZCBjdXIsCj4gIAkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lk IG5leHQpCj4gIHsKPiAgCXVuc2lnbmVkIGludCBhZGRyLCB2YWx1ZSwgcmVnOwo+ICAKPiAtCXZh bHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFkZHIpOwo+ICsJdmFsdWUgPSBtdGtf ZGRwX21vdXRfZW4ocmVnX2RhdGEsIGN1ciwgbmV4dCwgJmFkZHIpOwo+ICAJaWYgKHZhbHVlKSB7 Cj4gIAkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpIHwgdmFsdWU7Cj4g IAkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIpOwo+ICAJfQo+ICAKPiAt CW10a19kZHBfc291dF9zZWwoY29uZmlnX3JlZ3MsIGN1ciwgbmV4dCk7Cj4gKwl2YWx1ZSA9IG10 a19kZHBfc291dF9zZWwocmVnX2RhdGEsIGN1ciwgbmV4dCwgJmFkZHIpOwo+ICsJaWYgKHZhbHVl KQo+ICsJCXdyaXRlbF9yZWxheGVkKHZhbHVlLCBjb25maWdfcmVncyArIGFkZHIpOwoKSSB0aGlu ayB0aGUgcmVnaXN0ZXIgY291bGQgYmUgd3JpdHRlbiBpbnNpZGUgbXRrX2RkcF9zb3V0X3NlbCgp LCB3aHkgZG8KeW91IG1vdmUgb3V0IG9mIHRoYXQgZnVuY3Rpb24/Cgo+ICAKPiAtCXZhbHVlID0g bXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7Cj4gKwl2YWx1ZSA9IG10a19kZHBfc2Vs X2luKHJlZ19kYXRhLCBjdXIsIG5leHQsICZhZGRyKTsKPiAgCWlmICh2YWx1ZSkgewo+ICAJCXJl ZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZhbHVlOwo+ICAJCXdyaXRl bF9yZWxheGVkKHJlZywgY29uZmlnX3JlZ3MgKyBhZGRyKTsKPiBAQCAtNDI5LDE4ICs0NzgsMTkg QEAgdm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9pZCBfX2lvbWVtICpjb25maWdfcmVn cywKPiAgfQo+ICAKPiAgdm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zyb21fcGF0aCh2b2lkIF9f aW9tZW0gKmNvbmZpZ19yZWdzLAo+ICsJCQkJICAgY29uc3Qgc3RydWN0IG10a19tbXN5c19yZWdf ZGF0YSAqcmVnX2RhdGEsCj4gIAkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCj4gIAkJ CQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KQo+ICB7Cj4gIAl1bnNpZ25lZCBpbnQgYWRk ciwgdmFsdWUsIHJlZzsKPiAgCj4gLQl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5leHQs ICZhZGRyKTsKPiArCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKHJlZ19kYXRhLCBjdXIsIG5leHQs ICZhZGRyKTsKPiAgCWlmICh2YWx1ZSkgewo+ICAJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmln X3JlZ3MgKyBhZGRyKSAmIH52YWx1ZTsKPiAgCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19y ZWdzICsgYWRkcik7Cj4gIAl9Cj4gIAo+IC0JdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5l eHQsICZhZGRyKTsKPiArCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4ocmVnX2RhdGEsIGN1ciwgbmV4 dCwgJmFkZHIpOwo+ICAJaWYgKHZhbHVlKSB7Cj4gIAkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25m aWdfcmVncyArIGFkZHIpICYgfnZhbHVlOwo+ICAJCXdyaXRlbF9yZWxheGVkKHJlZywgY29uZmln X3JlZ3MgKyBhZGRyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaAo+IGlu ZGV4IGY5YTc5OTEuLjQzZGFiYjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fZGRwLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9kZHAuaAo+IEBAIC0xOSwxMSArMTksMTYgQEAKPiAgc3RydWN0IHJlZ21hcDsKPiAgc3RydWN0 IGRldmljZTsKPiAgc3RydWN0IG10a19kaXNwX211dGV4Owo+ICtzdHJ1Y3QgbXRrX21tc3lzX3Jl Z19kYXRhOwo+ICAKPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdGtfbW1zeXNfcmVnX2RhdGEgbXQy NzAxX21tc3lzX3JlZ19kYXRhOwo+ICtleHRlcm4gY29uc3Qgc3RydWN0IG10a19tbXN5c19yZWdf ZGF0YSBtdDgxNzNfbW1zeXNfcmVnX2RhdGE7Cj4gIHZvaWQgbXRrX2RkcF9hZGRfY29tcF90b19w YXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBt dGtfbW1zeXNfcmVnX2RhdGEgKnJlZ19kYXRhLAo+ICAJCQkgICAgICBlbnVtIG10a19kZHBfY29t cF9pZCBjdXIsCj4gIAkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwo+ICB2b2lk IG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3Ms Cj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgbXRrX21tc3lzX3JlZ19kYXRhICpyZWdfZGF0YSwKPiAg CQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKPiAgCQkJCSAgIGVudW0gbXRrX2RkcF9j b21wX2lkIG5leHQpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwo+ IGluZGV4IDU3Y2U0NzAuLmYyNjBhYTcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kcnYuYwo+IEBAIC0xOTcsNiArMTk3LDcgQEAgc3RhdGljIGludCBtdGtfYXRvbWljX2Nv bW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ICAJLm1haW5fbGVuID0gQVJSQVlfU0laRSht dDI3MDFfbXRrX2RkcF9tYWluKSwKPiAgCS5leHRfcGF0aCA9IG10MjcwMV9tdGtfZGRwX2V4dCwK PiAgCS5leHRfbGVuID0gQVJSQVlfU0laRShtdDI3MDFfbXRrX2RkcF9leHQpLAo+ICsJLnJlZ19k YXRhID0gJm10MjcwMV9tbXN5c19yZWdfZGF0YSwKPiAgCS5zaGFkb3dfcmVnaXN0ZXIgPSB0cnVl LAo+ICB9Owo+ICAKPiBAQCAtMjA3LDYgKzIwOCw3IEBAIHN0YXRpYyBpbnQgbXRrX2F0b21pY19j b21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiAgCS5leHRfbGVuID0gQVJSQVlfU0laRSht dDI3MTJfbXRrX2RkcF9leHQpLAo+ICAJLnRoaXJkX3BhdGggPSBtdDI3MTJfbXRrX2RkcF90aGly ZCwKPiAgCS50aGlyZF9sZW4gPSBBUlJBWV9TSVpFKG10MjcxMl9tdGtfZGRwX3RoaXJkKSwKPiAr CS5yZWdfZGF0YSA9ICZtdDgxNzNfbW1zeXNfcmVnX2RhdGEsCj4gIH07Cj4gIAo+ICBzdGF0aWMg Y29uc3Qgc3RydWN0IG10a19tbXN5c19kcml2ZXJfZGF0YSBtdDgxNzNfbW1zeXNfZHJpdmVyX2Rh dGEgPSB7Cj4gQEAgLTIxNCw2ICsyMTYsNyBAQCBzdGF0aWMgaW50IG10a19hdG9taWNfY29tbWl0 KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gIAkubWFpbl9sZW4gPSBBUlJBWV9TSVpFKG10ODE3 M19tdGtfZGRwX21haW4pLAo+ICAJLmV4dF9wYXRoID0gbXQ4MTczX210a19kZHBfZXh0LAo+ICAJ LmV4dF9sZW4gPSBBUlJBWV9TSVpFKG10ODE3M19tdGtfZGRwX2V4dCksCj4gKwkucmVnX2RhdGEg PSAmbXQ4MTczX21tc3lzX3JlZ19kYXRhLAo+ICB9Owo+ICAKPiAgc3RhdGljIGludCBtdGtfZHJt X2ttc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gQEAgLTQ2OCw2ICs0NzEsOCBAQCBz dGF0aWMgaW50IG10a19kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAg CUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0LndvcmssIG10a19hdG9taWNfd29yayk7Cj4gIAlw cml2YXRlLT5kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Cj4gIAo+ICsJcHJp dmF0ZS0+cmVnX2RhdGEgPSBwcml2YXRlLT5kYXRhLT5yZWdfZGF0YTsKPiArCj4gIAltZW0gPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICAJcHJpdmF0 ZS0+Y29uZmlnX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOwo+ICAJaWYg KElTX0VSUihwcml2YXRlLT5jb25maWdfcmVncykpIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuaAo+IGluZGV4IGVjYzAwY2EuLmI2NTQ0YTIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaAo+IEBAIC0xNSw2ICsxNSw3IEBACj4gICNkZWZpbmUg TVRLX0RSTV9EUlZfSAo+ICAKPiAgI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRlICJt dGtfZHJtX2RkcC5oIgo+ICAjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgo+ICAKPiAgI2Rl ZmluZSBNQVhfQ1JUQwkzCj4gQEAgLTM2LDYgKzM3LDggQEAgc3RydWN0IG10a19tbXN5c19kcml2 ZXJfZGF0YSB7Cj4gIAljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqdGhpcmRfcGF0aDsKPiAg CXVuc2lnbmVkIGludCB0aGlyZF9sZW47Cj4gIAo+ICsJY29uc3Qgc3RydWN0IG10a19tbXN5c19y ZWdfZGF0YSAqcmVnX2RhdGE7Cj4gKwo+ICAJYm9vbCBzaGFkb3dfcmVnaXN0ZXI7Cj4gIH07Cj4g IAo+IEBAIC00OCw2ICs1MSw3IEBAIHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgewo+ICAJc3RydWN0 IGRldmljZV9ub2RlICptdXRleF9ub2RlOwo+ICAJc3RydWN0IGRldmljZSAqbXV0ZXhfZGV2Owo+ ICAJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKPiArCWNvbnN0IHN0cnVjdCBtdGtfbW1zeXNf cmVnX2RhdGEgKnJlZ19kYXRhOwoKVGhpcyBpcyBpZGVudGljYWwgdG8gdGhlIHNhbWUgb25lIGlu IHN0cnVjdCBtdGtfbW1zeXNfZHJpdmVyX2RhdGEsIHNvCnlvdSBuZWVkIG5vdCB0byBjcmVhdGUg dGhpcyBvbmUuCgpSZWdhcmRzLApDSwoKPiAgCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2Rl W0REUF9DT01QT05FTlRfSURfTUFYXTsKPiAgCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmRkcF9jb21w W0REUF9DT01QT05FTlRfSURfTUFYXTsKPiAgCWNvbnN0IHN0cnVjdCBtdGtfbW1zeXNfZHJpdmVy X2RhdGEgKmRhdGE7CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVs 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=-3.9 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, URIBL_BLOCKED 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 E70FDC31E44 for ; Fri, 14 Jun 2019 03:32:54 +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 B9184208CA for ; Fri, 14 Jun 2019 03:32:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hfJIb5Ut" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B9184208CA Authentication-Results: mail.kernel.org; dmarc=none (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=jd0WldNfVn1LbwPV5pK+wfrxiow2vYegRYFjb5zqkQE=; b=hfJIb5UtRDl4df 0faFgdzY1HUNZnkuRTWsXpd62P/4IX37WNhQffobjpEYyOnTudwxWU8j7OiFXRHNqQb+yO/EZpjcV 1+WPuXXbLnQBuKri5Cgps0yc8sCjIHJoS0aNoPTn1QOZFgA+VLNGXP8JLRj642U3KA0Hysha+CYpp 0/jMh2dJHzQdmBUhB81UjiVPsj9W3NelrI4WyMiKoIuNyQab2TE+jfssJ4grw9Qcroey8ZjCG71jj LVUsHcyWZ4V7kp7IGIWysiv3kyTPXCoes3/qY/oHtNjk+qT7Qh/vsYMLLaBT6JgcPKFRMt2LV48xp N55nuY12MWDqTRSNrGIw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hbcxS-0005Of-8U; Fri, 14 Jun 2019 03:32:54 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hbctR-0000bs-NY; Fri, 14 Jun 2019 03:28:49 +0000 X-UUID: dcd5d5c10a7147b0b5c2ac75ece1bb16-20190613 X-UUID: dcd5d5c10a7147b0b5c2ac75ece1bb16-20190613 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 864161393; Thu, 13 Jun 2019 19:28:38 -0800 Received: from MTKMBS31N1.mediatek.inc (172.27.4.69) by MTKMBS62N2.mediatek.inc (172.29.193.42) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 13 Jun 2019 20:28:37 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 14 Jun 2019 11:28:34 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Fri, 14 Jun 2019 11:28:34 +0800 Message-ID: <1560482914.16718.10.camel@mtksdaap41> Subject: Re: [PATCH v3, 11/27] drm/mediatek: add mmsys private data for ddp path config From: CK Hu To: Date: Fri, 14 Jun 2019 11:28:34 +0800 In-Reply-To: <1559734986-7379-12-git-send-email-yongqiang.niu@mediatek.com> References: <1559734986-7379-1-git-send-email-yongqiang.niu@mediatek.com> <1559734986-7379-12-git-send-email-yongqiang.niu@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190613_202845_915730_C169781D X-CRM114-Status: GOOD ( 18.94 ) 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: Mark Rutland , devicetree@vger.kernel.org, Philipp Zabel , David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring , linux-mediatek@lists.infradead.org, Daniel Vetter , Matthias Brugger , linux-arm-kernel@lists.infradead.org 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 Hi, Yongqiang: On Wed, 2019-06-05 at 19:42 +0800, yongqiang.niu@mediatek.com wrote: > From: Yongqiang Niu > > This patch add mmsys private data for ddp path config > all these register offset and value will be different in future SOC > add these define into mmsys private data > u32 ovl0_mout_en; > u32 rdma0_sout_sel_in; > u32 rdma0_sout_color0; > u32 rdma1_sout_sel_in; > u32 rdma1_sout_dpi0; > u32 rdma1_sout_dsi0; > u32 dpi0_sel_in; > u32 dpi0_sel_in_rdma1; > u32 dsi0_sel_in; > u32 dsi0_sel_in_rdma1; > > Signed-off-by: Yongqiang Niu > --- > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 4 ++ > drivers/gpu/drm/mediatek/mtk_drm_ddp.c | 100 ++++++++++++++++++++++++-------- > drivers/gpu/drm/mediatek/mtk_drm_ddp.h | 5 ++ > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 5 ++ > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 4 ++ > 5 files changed, 93 insertions(+), 25 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > index acad088..11e3404 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > @@ -50,6 +50,7 @@ struct mtk_drm_crtc { > bool pending_planes; > > void __iomem *config_regs; > + const struct mtk_mmsys_reg_data *mmsys_reg_data; > struct mtk_disp_mutex *mutex; > unsigned int ddp_comp_nr; > struct mtk_ddp_comp **ddp_comp; > @@ -271,6 +272,7 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc) > DRM_DEBUG_DRIVER("mediatek_ddp_ddp_path_setup\n"); > for (i = 0; i < mtk_crtc->ddp_comp_nr - 1; i++) { > mtk_ddp_add_comp_to_path(mtk_crtc->config_regs, > + mtk_crtc->mmsys_reg_data, > mtk_crtc->ddp_comp[i]->id, > mtk_crtc->ddp_comp[i + 1]->id); > mtk_disp_mutex_add_comp(mtk_crtc->mutex, > @@ -319,6 +321,7 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc) > mtk_disp_mutex_disable(mtk_crtc->mutex); > for (i = 0; i < mtk_crtc->ddp_comp_nr - 1; i++) { > mtk_ddp_remove_comp_from_path(mtk_crtc->config_regs, > + mtk_crtc->mmsys_reg_data, > mtk_crtc->ddp_comp[i]->id, > mtk_crtc->ddp_comp[i + 1]->id); > mtk_disp_mutex_remove_comp(mtk_crtc->mutex, > @@ -561,6 +564,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, > return -ENOMEM; > > mtk_crtc->config_regs = priv->config_regs; > + mtk_crtc->mmsys_reg_data = priv->reg_data; > mtk_crtc->ddp_comp_nr = path_len; > mtk_crtc->ddp_comp = devm_kmalloc_array(dev, mtk_crtc->ddp_comp_nr, > sizeof(*mtk_crtc->ddp_comp), > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp.c b/drivers/gpu/drm/mediatek/mtk_drm_ddp.c > index 1bbabe6..c8ac892 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp.c > @@ -145,6 +145,17 @@ > #define DPI_SEL_IN_BLS 0x0 > #define DSI_SEL_IN_RDMA 0x1 > > +#define DISP_REG_OVL0_MOUT_EN(data) ((data)->ovl0_mout_en) > +#define DISP_REG_DPI0_SEL_IN(data) ((data)->dpi0_sel_in) > +#define DISP_REG_DPI0_SEL_IN_RDMA1(data) ((data)->dpi0_sel_in_rdma1) > +#define DISP_REG_DSI0_SEL_IN(data) ((data)->dsi0_sel_in) > +#define DISP_REG_DSI0_SEL_IN_RDMA1(data) ((data)->dsi0_sel_in_rdma1) > +#define DISP_REG_RDMA0_SOUT_SEL_IN(data) ((data)->rdma0_sout_sel_in) > +#define DISP_REG_RDMA0_SOUT_COLOR0(data) ((data)->rdma0_sout_color0) > +#define DISP_REG_RDMA1_SOUT_SEL_IN(data) ((data)->rdma1_sout_sel_in) > +#define DISP_REG_RDMA1_SOUT_DPI0(data) ((data)->rdma1_sout_dpi0) > +#define DISP_REG_RDMA1_SOUT_DSI0(data) ((data)->rdma1_sout_dsi0) I does not see any benefit to invent these macro, caller could directly use data->xxx. rdma0_sout_sel_in, rdma0_sout_color0, and rdma1_sout_dsi0 are not used in this patch, so remove from this patch. > + > struct mtk_disp_mutex { > int id; > bool claimed; > @@ -176,6 +187,19 @@ struct mtk_ddp { > const struct mtk_ddp_data *data; > }; > > +struct mtk_mmsys_reg_data { > + u32 ovl0_mout_en; > + u32 rdma0_sout_sel_in; > + u32 rdma0_sout_color0; > + u32 rdma1_sout_sel_in; > + u32 rdma1_sout_dpi0; > + u32 rdma1_sout_dsi0; > + u32 dpi0_sel_in; > + u32 dpi0_sel_in_rdma1; > + u32 dsi0_sel_in; > + u32 dsi0_sel_in_rdma1; > +}; > + > static const unsigned int mt2701_mutex_mod[DDP_COMPONENT_ID_MAX] = { > [DDP_COMPONENT_BLS] = MT2701_MUTEX_MOD_DISP_BLS, > [DDP_COMPONENT_COLOR0] = MT2701_MUTEX_MOD_DISP_COLOR, > @@ -254,17 +278,34 @@ struct mtk_ddp { > .mutex_sof_reg = MT2701_DISP_MUTEX0_SOF0, > }; > > -static unsigned int mtk_ddp_mout_en(enum mtk_ddp_comp_id cur, > +const struct mtk_mmsys_reg_data mt2701_mmsys_reg_data = { > + .ovl0_mout_en = DISP_REG_CONFIG_DISP_OVL_MOUT_EN, > + .dsi0_sel_in = DISP_REG_CONFIG_DSI_SEL, > + .dsi0_sel_in_rdma1 = DSI_SEL_IN_RDMA, > +}; > + > +const struct mtk_mmsys_reg_data mt8173_mmsys_reg_data = { > + .ovl0_mout_en = DISP_REG_CONFIG_DISP_OVL0_MOUT_EN, > + .rdma1_sout_sel_in = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, > + .rdma1_sout_dpi0 = RDMA1_SOUT_DPI0, > + .dpi0_sel_in = DISP_REG_CONFIG_DPI_SEL_IN, > + .dpi0_sel_in_rdma1 = DPI0_SEL_IN_RDMA1, > + .dsi0_sel_in = DISP_REG_CONFIG_DSIE_SEL_IN, > + .dsi0_sel_in_rdma1 = DSI0_SEL_IN_RDMA1, > +}; > + > +static unsigned int mtk_ddp_mout_en(const struct mtk_mmsys_reg_data *data, > + enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next, > unsigned int *addr) > { > unsigned int value; > > if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_COLOR0) { > - *addr = DISP_REG_CONFIG_DISP_OVL0_MOUT_EN; > + *addr = DISP_REG_OVL0_MOUT_EN(data); > value = OVL0_MOUT_EN_COLOR0; > } else if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_RDMA0) { > - *addr = DISP_REG_CONFIG_DISP_OVL_MOUT_EN; > + *addr = DISP_REG_OVL0_MOUT_EN(data); > value = OVL_MOUT_EN_RDMA; > } else if (cur == DDP_COMPONENT_OD0 && next == DDP_COMPONENT_RDMA0) { > *addr = DISP_REG_CONFIG_DISP_OD_MOUT_EN; > @@ -306,8 +347,8 @@ static unsigned int mtk_ddp_mout_en(enum mtk_ddp_comp_id cur, > *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN; > value = RDMA1_SOUT_DSI3; > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI0) { > - *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN; > - value = RDMA1_SOUT_DPI0; > + *addr = DISP_REG_RDMA1_SOUT_SEL_IN(data); > + value = DISP_REG_RDMA1_SOUT_DPI0(data); > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI1) { > *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN; > value = RDMA1_SOUT_DPI1; > @@ -333,7 +374,8 @@ static unsigned int mtk_ddp_mout_en(enum mtk_ddp_comp_id cur, > return value; > } > > -static unsigned int mtk_ddp_sel_in(enum mtk_ddp_comp_id cur, > +static unsigned int mtk_ddp_sel_in(const struct mtk_mmsys_reg_data *data, > + enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next, > unsigned int *addr) > { > @@ -343,14 +385,14 @@ static unsigned int mtk_ddp_sel_in(enum mtk_ddp_comp_id cur, > *addr = DISP_REG_CONFIG_DISP_COLOR0_SEL_IN; > value = COLOR0_SEL_IN_OVL0; > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI0) { > - *addr = DISP_REG_CONFIG_DPI_SEL_IN; > - value = DPI0_SEL_IN_RDMA1; > + *addr = DISP_REG_DPI0_SEL_IN(data); > + value = DISP_REG_DPI0_SEL_IN_RDMA1(data); > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI1) { > *addr = DISP_REG_CONFIG_DPI_SEL_IN; > value = DPI1_SEL_IN_RDMA1; > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI0) { > - *addr = DISP_REG_CONFIG_DSIE_SEL_IN; > - value = DSI0_SEL_IN_RDMA1; > + *addr = DISP_REG_DSI0_SEL_IN(data); > + value = DISP_REG_DSI0_SEL_IN_RDMA1(data); > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI1) { > *addr = DISP_REG_CONFIG_DSIO_SEL_IN; > value = DSI1_SEL_IN_RDMA1; > @@ -391,37 +433,44 @@ static unsigned int mtk_ddp_sel_in(enum mtk_ddp_comp_id cur, > return value; > } > > -static void mtk_ddp_sout_sel(void __iomem *config_regs, > - enum mtk_ddp_comp_id cur, > - enum mtk_ddp_comp_id next) > +static unsigned int mtk_ddp_sout_sel(const struct mtk_mmsys_reg_data *data, > + enum mtk_ddp_comp_id cur, > + enum mtk_ddp_comp_id next, > + unsigned int *addr) > { > + unsigned int value; > + > if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DSI0) { > - writel_relaxed(BLS_TO_DSI_RDMA1_TO_DPI1, > - config_regs + DISP_REG_CONFIG_OUT_SEL); > + *addr = DISP_REG_CONFIG_OUT_SEL; > + value = BLS_TO_DSI_RDMA1_TO_DPI1; > } else if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DPI0) { > - writel_relaxed(BLS_TO_DPI_RDMA1_TO_DSI, > - config_regs + DISP_REG_CONFIG_OUT_SEL); > - } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI0) { > - writel_relaxed(DSI_SEL_IN_RDMA, > - config_regs + DISP_REG_CONFIG_DSI_SEL); > + *addr = DISP_REG_CONFIG_OUT_SEL; > + value = BLS_TO_DPI_RDMA1_TO_DSI; > + } else { > + value = 0; > } > + > + return value; > } > > void mtk_ddp_add_comp_to_path(void __iomem *config_regs, > + const struct mtk_mmsys_reg_data *reg_data, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next) > { > unsigned int addr, value, reg; > > - value = mtk_ddp_mout_en(cur, next, &addr); > + value = mtk_ddp_mout_en(reg_data, cur, next, &addr); > if (value) { > reg = readl_relaxed(config_regs + addr) | value; > writel_relaxed(reg, config_regs + addr); > } > > - mtk_ddp_sout_sel(config_regs, cur, next); > + value = mtk_ddp_sout_sel(reg_data, cur, next, &addr); > + if (value) > + writel_relaxed(value, config_regs + addr); I think the register could be written inside mtk_ddp_sout_sel(), why do you move out of that function? > > - value = mtk_ddp_sel_in(cur, next, &addr); > + value = mtk_ddp_sel_in(reg_data, cur, next, &addr); > if (value) { > reg = readl_relaxed(config_regs + addr) | value; > writel_relaxed(reg, config_regs + addr); > @@ -429,18 +478,19 @@ void mtk_ddp_add_comp_to_path(void __iomem *config_regs, > } > > void mtk_ddp_remove_comp_from_path(void __iomem *config_regs, > + const struct mtk_mmsys_reg_data *reg_data, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next) > { > unsigned int addr, value, reg; > > - value = mtk_ddp_mout_en(cur, next, &addr); > + value = mtk_ddp_mout_en(reg_data, cur, next, &addr); > if (value) { > reg = readl_relaxed(config_regs + addr) & ~value; > writel_relaxed(reg, config_regs + addr); > } > > - value = mtk_ddp_sel_in(cur, next, &addr); > + value = mtk_ddp_sel_in(reg_data, cur, next, &addr); > if (value) { > reg = readl_relaxed(config_regs + addr) & ~value; > writel_relaxed(reg, config_regs + addr); > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp.h b/drivers/gpu/drm/mediatek/mtk_drm_ddp.h > index f9a7991..43dabb6 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp.h > @@ -19,11 +19,16 @@ > struct regmap; > struct device; > struct mtk_disp_mutex; > +struct mtk_mmsys_reg_data; > > +extern const struct mtk_mmsys_reg_data mt2701_mmsys_reg_data; > +extern const struct mtk_mmsys_reg_data mt8173_mmsys_reg_data; > void mtk_ddp_add_comp_to_path(void __iomem *config_regs, > + const struct mtk_mmsys_reg_data *reg_data, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next); > void mtk_ddp_remove_comp_from_path(void __iomem *config_regs, > + const struct mtk_mmsys_reg_data *reg_data, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next); > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > index 57ce470..f260aa7 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > @@ -197,6 +197,7 @@ static int mtk_atomic_commit(struct drm_device *drm, > .main_len = ARRAY_SIZE(mt2701_mtk_ddp_main), > .ext_path = mt2701_mtk_ddp_ext, > .ext_len = ARRAY_SIZE(mt2701_mtk_ddp_ext), > + .reg_data = &mt2701_mmsys_reg_data, > .shadow_register = true, > }; > > @@ -207,6 +208,7 @@ static int mtk_atomic_commit(struct drm_device *drm, > .ext_len = ARRAY_SIZE(mt2712_mtk_ddp_ext), > .third_path = mt2712_mtk_ddp_third, > .third_len = ARRAY_SIZE(mt2712_mtk_ddp_third), > + .reg_data = &mt8173_mmsys_reg_data, > }; > > static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = { > @@ -214,6 +216,7 @@ static int mtk_atomic_commit(struct drm_device *drm, > .main_len = ARRAY_SIZE(mt8173_mtk_ddp_main), > .ext_path = mt8173_mtk_ddp_ext, > .ext_len = ARRAY_SIZE(mt8173_mtk_ddp_ext), > + .reg_data = &mt8173_mmsys_reg_data, > }; > > static int mtk_drm_kms_init(struct drm_device *drm) > @@ -468,6 +471,8 @@ static int mtk_drm_probe(struct platform_device *pdev) > INIT_WORK(&private->commit.work, mtk_atomic_work); > private->data = of_device_get_match_data(dev); > > + private->reg_data = private->data->reg_data; > + > mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > private->config_regs = devm_ioremap_resource(dev, mem); > if (IS_ERR(private->config_regs)) { > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > index ecc00ca..b6544a2 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > @@ -15,6 +15,7 @@ > #define MTK_DRM_DRV_H > > #include > +#include "mtk_drm_ddp.h" > #include "mtk_drm_ddp_comp.h" > > #define MAX_CRTC 3 > @@ -36,6 +37,8 @@ struct mtk_mmsys_driver_data { > const enum mtk_ddp_comp_id *third_path; > unsigned int third_len; > > + const struct mtk_mmsys_reg_data *reg_data; > + > bool shadow_register; > }; > > @@ -48,6 +51,7 @@ struct mtk_drm_private { > struct device_node *mutex_node; > struct device *mutex_dev; > void __iomem *config_regs; > + const struct mtk_mmsys_reg_data *reg_data; This is identical to the same one in struct mtk_mmsys_driver_data, so you need not to create this one. Regards, CK > struct device_node *comp_node[DDP_COMPONENT_ID_MAX]; > struct mtk_ddp_comp *ddp_comp[DDP_COMPONENT_ID_MAX]; > const struct mtk_mmsys_driver_data *data; _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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=-3.9 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,UNWANTED_LANGUAGE_BODY 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 71D93C31E49 for ; Fri, 14 Jun 2019 03:28:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 36C23208CA for ; Fri, 14 Jun 2019 03:28:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725972AbfFND2q (ORCPT ); Thu, 13 Jun 2019 23:28:46 -0400 Received: from Mailgw01.mediatek.com ([1.203.163.78]:44900 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725616AbfFND2q (ORCPT ); Thu, 13 Jun 2019 23:28:46 -0400 X-UUID: f5442dd0405841f38aa3be646fd1d638-20190614 X-UUID: f5442dd0405841f38aa3be646fd1d638-20190614 Received: from mtkcas32.mediatek.inc [(172.27.4.253)] by mailgw01.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 1372137683; Fri, 14 Jun 2019 11:28:36 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 14 Jun 2019 11:28:34 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Fri, 14 Jun 2019 11:28:34 +0800 Message-ID: <1560482914.16718.10.camel@mtksdaap41> Subject: Re: [PATCH v3, 11/27] drm/mediatek: add mmsys private data for ddp path config From: CK Hu To: CC: Philipp Zabel , Rob Herring , Matthias Brugger , "David Airlie" , Daniel Vetter , Mark Rutland , , , , , Date: Fri, 14 Jun 2019 11:28:34 +0800 In-Reply-To: <1559734986-7379-12-git-send-email-yongqiang.niu@mediatek.com> References: <1559734986-7379-1-git-send-email-yongqiang.niu@mediatek.com> <1559734986-7379-12-git-send-email-yongqiang.niu@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Yongqiang: On Wed, 2019-06-05 at 19:42 +0800, yongqiang.niu@mediatek.com wrote: > From: Yongqiang Niu > > This patch add mmsys private data for ddp path config > all these register offset and value will be different in future SOC > add these define into mmsys private data > u32 ovl0_mout_en; > u32 rdma0_sout_sel_in; > u32 rdma0_sout_color0; > u32 rdma1_sout_sel_in; > u32 rdma1_sout_dpi0; > u32 rdma1_sout_dsi0; > u32 dpi0_sel_in; > u32 dpi0_sel_in_rdma1; > u32 dsi0_sel_in; > u32 dsi0_sel_in_rdma1; > > Signed-off-by: Yongqiang Niu > --- > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 4 ++ > drivers/gpu/drm/mediatek/mtk_drm_ddp.c | 100 ++++++++++++++++++++++++-------- > drivers/gpu/drm/mediatek/mtk_drm_ddp.h | 5 ++ > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 5 ++ > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 4 ++ > 5 files changed, 93 insertions(+), 25 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > index acad088..11e3404 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > @@ -50,6 +50,7 @@ struct mtk_drm_crtc { > bool pending_planes; > > void __iomem *config_regs; > + const struct mtk_mmsys_reg_data *mmsys_reg_data; > struct mtk_disp_mutex *mutex; > unsigned int ddp_comp_nr; > struct mtk_ddp_comp **ddp_comp; > @@ -271,6 +272,7 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc) > DRM_DEBUG_DRIVER("mediatek_ddp_ddp_path_setup\n"); > for (i = 0; i < mtk_crtc->ddp_comp_nr - 1; i++) { > mtk_ddp_add_comp_to_path(mtk_crtc->config_regs, > + mtk_crtc->mmsys_reg_data, > mtk_crtc->ddp_comp[i]->id, > mtk_crtc->ddp_comp[i + 1]->id); > mtk_disp_mutex_add_comp(mtk_crtc->mutex, > @@ -319,6 +321,7 @@ static void mtk_crtc_ddp_hw_fini(struct mtk_drm_crtc *mtk_crtc) > mtk_disp_mutex_disable(mtk_crtc->mutex); > for (i = 0; i < mtk_crtc->ddp_comp_nr - 1; i++) { > mtk_ddp_remove_comp_from_path(mtk_crtc->config_regs, > + mtk_crtc->mmsys_reg_data, > mtk_crtc->ddp_comp[i]->id, > mtk_crtc->ddp_comp[i + 1]->id); > mtk_disp_mutex_remove_comp(mtk_crtc->mutex, > @@ -561,6 +564,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, > return -ENOMEM; > > mtk_crtc->config_regs = priv->config_regs; > + mtk_crtc->mmsys_reg_data = priv->reg_data; > mtk_crtc->ddp_comp_nr = path_len; > mtk_crtc->ddp_comp = devm_kmalloc_array(dev, mtk_crtc->ddp_comp_nr, > sizeof(*mtk_crtc->ddp_comp), > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp.c b/drivers/gpu/drm/mediatek/mtk_drm_ddp.c > index 1bbabe6..c8ac892 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp.c > @@ -145,6 +145,17 @@ > #define DPI_SEL_IN_BLS 0x0 > #define DSI_SEL_IN_RDMA 0x1 > > +#define DISP_REG_OVL0_MOUT_EN(data) ((data)->ovl0_mout_en) > +#define DISP_REG_DPI0_SEL_IN(data) ((data)->dpi0_sel_in) > +#define DISP_REG_DPI0_SEL_IN_RDMA1(data) ((data)->dpi0_sel_in_rdma1) > +#define DISP_REG_DSI0_SEL_IN(data) ((data)->dsi0_sel_in) > +#define DISP_REG_DSI0_SEL_IN_RDMA1(data) ((data)->dsi0_sel_in_rdma1) > +#define DISP_REG_RDMA0_SOUT_SEL_IN(data) ((data)->rdma0_sout_sel_in) > +#define DISP_REG_RDMA0_SOUT_COLOR0(data) ((data)->rdma0_sout_color0) > +#define DISP_REG_RDMA1_SOUT_SEL_IN(data) ((data)->rdma1_sout_sel_in) > +#define DISP_REG_RDMA1_SOUT_DPI0(data) ((data)->rdma1_sout_dpi0) > +#define DISP_REG_RDMA1_SOUT_DSI0(data) ((data)->rdma1_sout_dsi0) I does not see any benefit to invent these macro, caller could directly use data->xxx. rdma0_sout_sel_in, rdma0_sout_color0, and rdma1_sout_dsi0 are not used in this patch, so remove from this patch. > + > struct mtk_disp_mutex { > int id; > bool claimed; > @@ -176,6 +187,19 @@ struct mtk_ddp { > const struct mtk_ddp_data *data; > }; > > +struct mtk_mmsys_reg_data { > + u32 ovl0_mout_en; > + u32 rdma0_sout_sel_in; > + u32 rdma0_sout_color0; > + u32 rdma1_sout_sel_in; > + u32 rdma1_sout_dpi0; > + u32 rdma1_sout_dsi0; > + u32 dpi0_sel_in; > + u32 dpi0_sel_in_rdma1; > + u32 dsi0_sel_in; > + u32 dsi0_sel_in_rdma1; > +}; > + > static const unsigned int mt2701_mutex_mod[DDP_COMPONENT_ID_MAX] = { > [DDP_COMPONENT_BLS] = MT2701_MUTEX_MOD_DISP_BLS, > [DDP_COMPONENT_COLOR0] = MT2701_MUTEX_MOD_DISP_COLOR, > @@ -254,17 +278,34 @@ struct mtk_ddp { > .mutex_sof_reg = MT2701_DISP_MUTEX0_SOF0, > }; > > -static unsigned int mtk_ddp_mout_en(enum mtk_ddp_comp_id cur, > +const struct mtk_mmsys_reg_data mt2701_mmsys_reg_data = { > + .ovl0_mout_en = DISP_REG_CONFIG_DISP_OVL_MOUT_EN, > + .dsi0_sel_in = DISP_REG_CONFIG_DSI_SEL, > + .dsi0_sel_in_rdma1 = DSI_SEL_IN_RDMA, > +}; > + > +const struct mtk_mmsys_reg_data mt8173_mmsys_reg_data = { > + .ovl0_mout_en = DISP_REG_CONFIG_DISP_OVL0_MOUT_EN, > + .rdma1_sout_sel_in = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, > + .rdma1_sout_dpi0 = RDMA1_SOUT_DPI0, > + .dpi0_sel_in = DISP_REG_CONFIG_DPI_SEL_IN, > + .dpi0_sel_in_rdma1 = DPI0_SEL_IN_RDMA1, > + .dsi0_sel_in = DISP_REG_CONFIG_DSIE_SEL_IN, > + .dsi0_sel_in_rdma1 = DSI0_SEL_IN_RDMA1, > +}; > + > +static unsigned int mtk_ddp_mout_en(const struct mtk_mmsys_reg_data *data, > + enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next, > unsigned int *addr) > { > unsigned int value; > > if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_COLOR0) { > - *addr = DISP_REG_CONFIG_DISP_OVL0_MOUT_EN; > + *addr = DISP_REG_OVL0_MOUT_EN(data); > value = OVL0_MOUT_EN_COLOR0; > } else if (cur == DDP_COMPONENT_OVL0 && next == DDP_COMPONENT_RDMA0) { > - *addr = DISP_REG_CONFIG_DISP_OVL_MOUT_EN; > + *addr = DISP_REG_OVL0_MOUT_EN(data); > value = OVL_MOUT_EN_RDMA; > } else if (cur == DDP_COMPONENT_OD0 && next == DDP_COMPONENT_RDMA0) { > *addr = DISP_REG_CONFIG_DISP_OD_MOUT_EN; > @@ -306,8 +347,8 @@ static unsigned int mtk_ddp_mout_en(enum mtk_ddp_comp_id cur, > *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN; > value = RDMA1_SOUT_DSI3; > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI0) { > - *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN; > - value = RDMA1_SOUT_DPI0; > + *addr = DISP_REG_RDMA1_SOUT_SEL_IN(data); > + value = DISP_REG_RDMA1_SOUT_DPI0(data); > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI1) { > *addr = DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN; > value = RDMA1_SOUT_DPI1; > @@ -333,7 +374,8 @@ static unsigned int mtk_ddp_mout_en(enum mtk_ddp_comp_id cur, > return value; > } > > -static unsigned int mtk_ddp_sel_in(enum mtk_ddp_comp_id cur, > +static unsigned int mtk_ddp_sel_in(const struct mtk_mmsys_reg_data *data, > + enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next, > unsigned int *addr) > { > @@ -343,14 +385,14 @@ static unsigned int mtk_ddp_sel_in(enum mtk_ddp_comp_id cur, > *addr = DISP_REG_CONFIG_DISP_COLOR0_SEL_IN; > value = COLOR0_SEL_IN_OVL0; > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI0) { > - *addr = DISP_REG_CONFIG_DPI_SEL_IN; > - value = DPI0_SEL_IN_RDMA1; > + *addr = DISP_REG_DPI0_SEL_IN(data); > + value = DISP_REG_DPI0_SEL_IN_RDMA1(data); > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DPI1) { > *addr = DISP_REG_CONFIG_DPI_SEL_IN; > value = DPI1_SEL_IN_RDMA1; > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI0) { > - *addr = DISP_REG_CONFIG_DSIE_SEL_IN; > - value = DSI0_SEL_IN_RDMA1; > + *addr = DISP_REG_DSI0_SEL_IN(data); > + value = DISP_REG_DSI0_SEL_IN_RDMA1(data); > } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI1) { > *addr = DISP_REG_CONFIG_DSIO_SEL_IN; > value = DSI1_SEL_IN_RDMA1; > @@ -391,37 +433,44 @@ static unsigned int mtk_ddp_sel_in(enum mtk_ddp_comp_id cur, > return value; > } > > -static void mtk_ddp_sout_sel(void __iomem *config_regs, > - enum mtk_ddp_comp_id cur, > - enum mtk_ddp_comp_id next) > +static unsigned int mtk_ddp_sout_sel(const struct mtk_mmsys_reg_data *data, > + enum mtk_ddp_comp_id cur, > + enum mtk_ddp_comp_id next, > + unsigned int *addr) > { > + unsigned int value; > + > if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DSI0) { > - writel_relaxed(BLS_TO_DSI_RDMA1_TO_DPI1, > - config_regs + DISP_REG_CONFIG_OUT_SEL); > + *addr = DISP_REG_CONFIG_OUT_SEL; > + value = BLS_TO_DSI_RDMA1_TO_DPI1; > } else if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DPI0) { > - writel_relaxed(BLS_TO_DPI_RDMA1_TO_DSI, > - config_regs + DISP_REG_CONFIG_OUT_SEL); > - } else if (cur == DDP_COMPONENT_RDMA1 && next == DDP_COMPONENT_DSI0) { > - writel_relaxed(DSI_SEL_IN_RDMA, > - config_regs + DISP_REG_CONFIG_DSI_SEL); > + *addr = DISP_REG_CONFIG_OUT_SEL; > + value = BLS_TO_DPI_RDMA1_TO_DSI; > + } else { > + value = 0; > } > + > + return value; > } > > void mtk_ddp_add_comp_to_path(void __iomem *config_regs, > + const struct mtk_mmsys_reg_data *reg_data, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next) > { > unsigned int addr, value, reg; > > - value = mtk_ddp_mout_en(cur, next, &addr); > + value = mtk_ddp_mout_en(reg_data, cur, next, &addr); > if (value) { > reg = readl_relaxed(config_regs + addr) | value; > writel_relaxed(reg, config_regs + addr); > } > > - mtk_ddp_sout_sel(config_regs, cur, next); > + value = mtk_ddp_sout_sel(reg_data, cur, next, &addr); > + if (value) > + writel_relaxed(value, config_regs + addr); I think the register could be written inside mtk_ddp_sout_sel(), why do you move out of that function? > > - value = mtk_ddp_sel_in(cur, next, &addr); > + value = mtk_ddp_sel_in(reg_data, cur, next, &addr); > if (value) { > reg = readl_relaxed(config_regs + addr) | value; > writel_relaxed(reg, config_regs + addr); > @@ -429,18 +478,19 @@ void mtk_ddp_add_comp_to_path(void __iomem *config_regs, > } > > void mtk_ddp_remove_comp_from_path(void __iomem *config_regs, > + const struct mtk_mmsys_reg_data *reg_data, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next) > { > unsigned int addr, value, reg; > > - value = mtk_ddp_mout_en(cur, next, &addr); > + value = mtk_ddp_mout_en(reg_data, cur, next, &addr); > if (value) { > reg = readl_relaxed(config_regs + addr) & ~value; > writel_relaxed(reg, config_regs + addr); > } > > - value = mtk_ddp_sel_in(cur, next, &addr); > + value = mtk_ddp_sel_in(reg_data, cur, next, &addr); > if (value) { > reg = readl_relaxed(config_regs + addr) & ~value; > writel_relaxed(reg, config_regs + addr); > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp.h b/drivers/gpu/drm/mediatek/mtk_drm_ddp.h > index f9a7991..43dabb6 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp.h > @@ -19,11 +19,16 @@ > struct regmap; > struct device; > struct mtk_disp_mutex; > +struct mtk_mmsys_reg_data; > > +extern const struct mtk_mmsys_reg_data mt2701_mmsys_reg_data; > +extern const struct mtk_mmsys_reg_data mt8173_mmsys_reg_data; > void mtk_ddp_add_comp_to_path(void __iomem *config_regs, > + const struct mtk_mmsys_reg_data *reg_data, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next); > void mtk_ddp_remove_comp_from_path(void __iomem *config_regs, > + const struct mtk_mmsys_reg_data *reg_data, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next); > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > index 57ce470..f260aa7 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > @@ -197,6 +197,7 @@ static int mtk_atomic_commit(struct drm_device *drm, > .main_len = ARRAY_SIZE(mt2701_mtk_ddp_main), > .ext_path = mt2701_mtk_ddp_ext, > .ext_len = ARRAY_SIZE(mt2701_mtk_ddp_ext), > + .reg_data = &mt2701_mmsys_reg_data, > .shadow_register = true, > }; > > @@ -207,6 +208,7 @@ static int mtk_atomic_commit(struct drm_device *drm, > .ext_len = ARRAY_SIZE(mt2712_mtk_ddp_ext), > .third_path = mt2712_mtk_ddp_third, > .third_len = ARRAY_SIZE(mt2712_mtk_ddp_third), > + .reg_data = &mt8173_mmsys_reg_data, > }; > > static const struct mtk_mmsys_driver_data mt8173_mmsys_driver_data = { > @@ -214,6 +216,7 @@ static int mtk_atomic_commit(struct drm_device *drm, > .main_len = ARRAY_SIZE(mt8173_mtk_ddp_main), > .ext_path = mt8173_mtk_ddp_ext, > .ext_len = ARRAY_SIZE(mt8173_mtk_ddp_ext), > + .reg_data = &mt8173_mmsys_reg_data, > }; > > static int mtk_drm_kms_init(struct drm_device *drm) > @@ -468,6 +471,8 @@ static int mtk_drm_probe(struct platform_device *pdev) > INIT_WORK(&private->commit.work, mtk_atomic_work); > private->data = of_device_get_match_data(dev); > > + private->reg_data = private->data->reg_data; > + > mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > private->config_regs = devm_ioremap_resource(dev, mem); > if (IS_ERR(private->config_regs)) { > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > index ecc00ca..b6544a2 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > @@ -15,6 +15,7 @@ > #define MTK_DRM_DRV_H > > #include > +#include "mtk_drm_ddp.h" > #include "mtk_drm_ddp_comp.h" > > #define MAX_CRTC 3 > @@ -36,6 +37,8 @@ struct mtk_mmsys_driver_data { > const enum mtk_ddp_comp_id *third_path; > unsigned int third_len; > > + const struct mtk_mmsys_reg_data *reg_data; > + > bool shadow_register; > }; > > @@ -48,6 +51,7 @@ struct mtk_drm_private { > struct device_node *mutex_node; > struct device *mutex_dev; > void __iomem *config_regs; > + const struct mtk_mmsys_reg_data *reg_data; This is identical to the same one in struct mtk_mmsys_driver_data, so you need not to create this one. Regards, CK > struct device_node *comp_node[DDP_COMPONENT_ID_MAX]; > struct mtk_ddp_comp *ddp_comp[DDP_COMPONENT_ID_MAX]; > const struct mtk_mmsys_driver_data *data;