From mboxrd@z Thu Jan 1 00:00:00 1970 From: CK Hu Subject: Re: [PATCH v3 01/12] drm/mediatek: add refcount for DPI power on/off Date: Fri, 21 Sep 2018 14:18:48 +0800 Message-ID: <1537510728.26673.9.camel@mtksdaap41> References: <20180921032822.30771-1-bibby.hsieh@mediatek.com> <20180921032822.30771-2-bibby.hsieh@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180921032822.30771-2-bibby.hsieh@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Bibby Hsieh Cc: linux-kernel@vger.kernel.org, Sascha Hauer , chunhui dai , David Airlie , Daniel Vetter , Cawa Cheng , dri-devel@lists.freedesktop.org, Mao Huang , Thierry Reding , linux-mediatek@lists.infradead.org, Matthias Brugger , Yingjoe Chen , linux-arm-kernel@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org SGksIEJpYmJ5OgoKT24gRnJpLCAyMDE4LTA5LTIxIGF0IDExOjI4ICswODAwLCBCaWJieSBIc2ll aCB3cm90ZToKPiBGcm9tOiBjaHVuaHVpIGRhaSA8Y2h1bmh1aS5kYWlAbWVkaWF0ZWsuY29tPgo+ IAo+IEFmdGVyIHRoZSBrZXJuZWwgNC40LCB0aGUgRFJNIGRpc2FibGUgZmxvdyB3YXMgY2hhbmdl ZCwgaWYgRFBJIHdhcwo+IGRpc2FibGVlZCBiZWZvcmUgQ1JUQywgaXQgd2lsbCBjYXVzZSB3YXJu aW5nIG1lc3NhZ2UgYXMgZm9sbG93aW5nOgo+IAo+IC0tLS0tLS0tLS0tLVsgY3V0IGhlcmUgXS0t LS0tLS0tLS0tLQo+IFdBUk5JTkc6IENQVTogMCBQSUQ6IDEzMzkgYXQgLi4vLi4vbGludXgvbGlu dXgtNC40LjI0LW10ay9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jOjEzMjYgZHJtX3dhaXRfb25l X3ZibGFuaysweDE4OC8weDE4YygpCj4gdmJsYW5rIHdhaXQgdGltZWQgb3V0IG9uIGNydGMgMAo+ IE1vZHVsZXMgbGlua2VkIGluOiBicmlkZ2UgbXQ4NTIxcF9pcl9zaGltKE8pIGkyY19lZXByb20o TykgbXRrX200KE8pIGZ1c2VfY3RybChPKSB2aXJ0dWFsX2Jsb2NrKE8pIGNhYW1rZXlzKFBPKSBj aGsoUE8pIGFtcGVyY3RsKE8pIGxlZGN0bChPKSBhcHBsZV9hdXRoKFBPKSBtaWNjdGwoTykgc2Vu c29ycyhQTykgbGxhKE8pIHNkZChQTykgaWNlNDBfZnBnYShPKSBwc21vbihPKSBldmVudF9xdWV1 ZShQTykgdXRpbHMoTykgYmxhY2tib3goTykKPiBDUFU6IDAgUElEOiAxMzM5IENvbW06IGt3b3Jr ZXIvMDoxIFRhaW50ZWQ6IFAgICAgICAgIFcgIE8gICAgNC40LjI0ICMxCj4gSGFyZHdhcmUgbmFt ZTogTWVkaWF0ZWsgQ29ydGV4LUE3IChEZXZpY2UgVHJlZSkKPiBXb3JrcXVldWU6IGV2ZW50cyBk cm1fbW9kZV9ybWZiX3dvcmtfZm4KPiBbPGMwMDFhNzEwPl0gKHVud2luZF9iYWNrdHJhY2UpIGZy b20gWzxjMDAxNTFlND5dIChzaG93X3N0YWNrKzB4MjAvMHgyNCkKPiBbPGMwMDE1MWU0Pl0gKHNo b3dfc3RhY2spIGZyb20gWzxjMDI3OTYxYz5dIChkdW1wX3N0YWNrKzB4OTgvMHhhYykKPiBbPGMw Mjc5NjFjPl0gKGR1bXBfc3RhY2spIGZyb20gWzxjMDAyYWM1ND5dICh3YXJuX3Nsb3dwYXRoX2Nv bW1vbisweDk0LzB4YzQpCj4gWzxjMDAyYWM1ND5dICh3YXJuX3Nsb3dwYXRoX2NvbW1vbikgZnJv bSBbPGMwMDJhY2M0Pl0gKHdhcm5fc2xvd3BhdGhfZm10KzB4NDAvMHg0OCkKPiBbPGMwMDJhY2M0 Pl0gKHdhcm5fc2xvd3BhdGhfZm10KSBmcm9tIFs8YzAzMzA3YWM+XSAoZHJtX3dhaXRfb25lX3Zi bGFuaysweDE4OC8weDE4YykKPiBbPGMwMzMwN2FjPl0gKGRybV93YWl0X29uZV92YmxhbmspIGZy b20gWzxjMDMzMDdkOD5dIChkcm1fY3J0Y193YWl0X29uZV92YmxhbmsrMHgyOC8weDJjKQo+IFs8 YzAzMzA3ZDg+XSAoZHJtX2NydGNfd2FpdF9vbmVfdmJsYW5rKSBmcm9tIFs8YzAzNGY0OGM+XSAo bXRrX2RybV9jcnRjX2Rpc2FibGUrMHg3OC8weDI0MCkKPiBbPGMwMzRmNDhjPl0gKG10a19kcm1f Y3J0Y19kaXNhYmxlKSBmcm9tIFs8YzAzMjQwZDQ+XSAoZHJtX2F0b21pY19oZWxwZXJfY29tbWl0 X21vZGVzZXRfZGlzYWJsZXMrMHgxMjgvMHgzYjgpCj4gWzxjMDMyNDBkND5dIChkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcykgZnJvbSBbPGMwMzUwYTdjPl0gKG10a19h dG9taWNfY29tcGxldGUrMHg3NC8weGI0KQo+IFs8YzAzNTBhN2M+XSAobXRrX2F0b21pY19jb21w bGV0ZSkgZnJvbSBbPGMwMzUwYjI0Pl0gKG10a19hdG9taWNfY29tbWl0KzB4NjgvMHg5OCkKPiBb PGMwMzUwYjI0Pl0gKG10a19hdG9taWNfY29tbWl0KSBmcm9tIFs8YzAzNGFiNDg+XSAoZHJtX2F0 b21pY19jb21taXQrMHg1NC8weDc0KQo+IFs8YzAzNGFiNDg+XSAoZHJtX2F0b21pY19jb21taXQp IGZyb20gWzxjMDMyNWM0Yz5dIChkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnKzB4N2MvMHhh MCkKPiBbPGMwMzI1YzRjPl0gKGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcpIGZyb20gWzxj MDMzODU5ND5dIChkcm1fbW9kZV9zZXRfY29uZmlnX2ludGVybmFsKzB4NjgvMHhlNCkKPiBbPGMw MzM4NTk0Pl0gKGRybV9tb2RlX3NldF9jb25maWdfaW50ZXJuYWwpIGZyb20gWzxjMDMzOTY3Yz5d IChkcm1fZnJhbWVidWZmZXJfcmVtb3ZlKzB4ZTQvMHgxMjApCj4gWzxjMDMzOTY3Yz5dIChkcm1f ZnJhbWVidWZmZXJfcmVtb3ZlKSBmcm9tIFs8YzAzMzk3MDA+XSAoZHJtX21vZGVfcm1mYl93b3Jr X2ZuKzB4NDgvMHg1OCkKPiBbPGMwMzM5NzAwPl0gKGRybV9tb2RlX3JtZmJfd29ya19mbikgZnJv bSBbPGMwMDQzYTM4Pl0gKHByb2Nlc3Nfb25lX3dvcmsrMHgxNTQvMHg1MGMpCj4gWzxjMDA0M2Ez OD5dIChwcm9jZXNzX29uZV93b3JrKSBmcm9tIFs8YzAwNDQwNzQ+XSAod29ya2VyX3RocmVhZCsw eDI4NC8weDU2OCkKPiBbPGMwMDQ0MDc0Pl0gKHdvcmtlcl90aHJlYWQpIGZyb20gWzxjMDA0OWRj ND5dIChrdGhyZWFkKzB4ZWMvMHgxMDQpCj4gWzxjMDA0OWRjND5dIChrdGhyZWFkKSBmcm9tIFs8 YzAwMTA2Nzg+XSAocmV0X2Zyb21fZm9yaysweDE0LzB4M2MpCj4gLS0tWyBlbmQgdHJhY2UgMTJh ZTUzNThlOTkyYWJkNSBdLS0tCj4gCj4gc28sIHdlIGFkZCByZWZjb3VudCBmb3IgRFBJIHBvd2Vy IG9uL29mZiB0byBwcm90ZWN0IHRoZSBmbG93Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhz aWVoIDxiaWJieS5oc2llaEBtZWRpYXRlay5jb20+Cj4gU2lnbmVkLW9mZi1ieTogY2h1bmh1aSBk YWkgPGNodW5odWkuZGFpQG1lZGlhdGVrLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcGkuYyB8IDE2ICsrKysrKysrKysrKysrLS0KPiAgMSBmaWxlIGNoYW5nZWQs IDE0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RwaS5jCj4gaW5kZXggNmMwZWEzOWQ1NzM5Li5kOTM3M2U2N2QzMjggMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHBpLmMKPiBAQCAtNzcsNiArNzcsNyBAQCBzdHJ1Y3QgbXRrX2Rw aSB7Cj4gIAllbnVtIG10a19kcGlfb3V0X2JpdF9udW0gYml0X251bTsKPiAgCWVudW0gbXRrX2Rw aV9vdXRfY2hhbm5lbF9zd2FwIGNoYW5uZWxfc3dhcDsKPiAgCWJvb2wgcG93ZXJfc3RhOwo+ICsJ aW50IHJlZmNvdW50Owo+ICAJdTggcG93ZXJfY3RsOwo+ICB9Owo+ICAKPiBAQCAtMzY5LDYgKzM3 MCwxMiBAQCBzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19jb2xvcl9mb3JtYXQoc3RydWN0IG10 a19kcGkgKmRwaSwKPiAgCj4gIHN0YXRpYyB2b2lkIG10a19kcGlfcG93ZXJfb2ZmKHN0cnVjdCBt dGtfZHBpICpkcGksIGVudW0gbXRrX2RwaV9wb3dlcl9jdGwgcGN0bCkKPiAgewo+ICsJaWYgKFdB Uk5fT04oZHBpLT5yZWZjb3VudCA9PSAwKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKC0tZHBp LT5yZWZjb3VudCAhPSAwKQo+ICsJCXJldHVybjsKPiArCj4gIAlkcGktPnBvd2VyX2N0bCAmPSB+ cGN0bDsKPiAgCj4gIAlpZiAoKGRwaS0+cG93ZXJfY3RsICYgRFBJX1BPV0VSX1NUQVJUKSB8fAo+ IEBAIC0zODgsMTQgKzM5NSwxNyBAQCBzdGF0aWMgaW50IG10a19kcGlfcG93ZXJfb24oc3RydWN0 IG10a19kcGkgKmRwaSwgZW51bSBtdGtfZHBpX3Bvd2VyX2N0bCBwY3RsKQo+ICB7Cj4gIAlpbnQg cmV0Owo+ICAKPiArCWlmICgrK2RwaS0+cmVmY291bnQgIT0gMSkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gIAlkcGktPnBvd2VyX2N0bCB8PSBwY3RsOwo+ICAKPiAgCWlmICghKGRwaS0+cG93ZXJfY3Rs ICYgRFBJX1BPV0VSX1NUQVJUKSAmJgo+ICAJICAgICEoZHBpLT5wb3dlcl9jdGwgJiBEUElfUE9X RVJfRU5BQkxFKSkKPiAtCQlyZXR1cm4gMDsKPiArCQlnb3RvIGVycl9yZWZjb3VudDsKPiAgCj4g IAlpZiAoZHBpLT5wb3dlcl9zdGEpCj4gLQkJcmV0dXJuIDA7Cj4gKwkJZ290byBlcnJfcmVmY291 bnQ7CgpJIHRoaW5rIGRwaS0+cG93ZXJfY3RsIGFuZCBkcGktPnBvd2VyX3N0YSBpcyBzb21ldGhp bmcgbGlrZSByZWZlcmVuY2UKY291bnQuIG10a19kcGlfc3RhcnQoKSBhbmQgbXRrX2RwaV9zdG9w KCkgaXMgY2FsbGVkIGJ5IGNydGMuIElmIHRoZQplcnJvciBtZXNzYWdlIGhhcHBlbiB3aXRob3V0 IHRoaXMgcGF0Y2gsIEkgdGhpbmsgdGhlcmUgaXMgYSBidWcgaW4KZHBpLT5wb3dlcl9jdGwgYW5k IGRwaS0+cG93ZXJfc3RhLiBJIHRoaW5rIHlvdSBzaG91bGQgZml4IHRoZSBidWcgb2YKZHBpLT5w b3dlcl9jdGwgYW5kIGRwaS0+cG93ZXJfc3RhLCBvciBqdXN0IHJlcGxhY2UgaXQgd2l0aCB5b3Vy CnJlZmVyZW5jZSBjb3VudCBtZWNoYW5pc20uCgpSZWdhcmRzLApDSwoKPiAgCj4gIAlyZXQgPSBj bGtfcHJlcGFyZV9lbmFibGUoZHBpLT5lbmdpbmVfY2xrKTsKPiAgCWlmIChyZXQpIHsKPiBAQCAt NDE3LDYgKzQyNyw4IEBAIHN0YXRpYyBpbnQgbXRrX2RwaV9wb3dlcl9vbihzdHJ1Y3QgbXRrX2Rw aSAqZHBpLCBlbnVtIG10a19kcGlfcG93ZXJfY3RsIHBjdGwpCj4gIAljbGtfZGlzYWJsZV91bnBy ZXBhcmUoZHBpLT5lbmdpbmVfY2xrKTsKPiAgZXJyX2VuZzoKPiAgCWRwaS0+cG93ZXJfY3RsICY9 IH5wY3RsOwo+ICtlcnJfcmVmY291bnQ6Cj4gKwlkcGktPnJlZmNvdW50LS07Cj4gIAlyZXR1cm4g cmV0Owo+ICB9Cj4gIAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: ck.hu@mediatek.com (CK Hu) Date: Fri, 21 Sep 2018 14:18:48 +0800 Subject: [PATCH v3 01/12] drm/mediatek: add refcount for DPI power on/off In-Reply-To: <20180921032822.30771-2-bibby.hsieh@mediatek.com> References: <20180921032822.30771-1-bibby.hsieh@mediatek.com> <20180921032822.30771-2-bibby.hsieh@mediatek.com> Message-ID: <1537510728.26673.9.camel@mtksdaap41> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi, Bibby: On Fri, 2018-09-21 at 11:28 +0800, Bibby Hsieh wrote: > From: chunhui dai > > After the kernel 4.4, the DRM disable flow was changed, if DPI was > disableed before CRTC, it will cause warning message as following: > > ------------[ cut here ]------------ > WARNING: CPU: 0 PID: 1339 at ../../linux/linux-4.4.24-mtk/drivers/gpu/drm/drm_irq.c:1326 drm_wait_one_vblank+0x188/0x18c() > vblank wait timed out on crtc 0 > Modules linked in: bridge mt8521p_ir_shim(O) i2c_eeprom(O) mtk_m4(O) fuse_ctrl(O) virtual_block(O) caamkeys(PO) chk(PO) amperctl(O) ledctl(O) apple_auth(PO) micctl(O) sensors(PO) lla(O) sdd(PO) ice40_fpga(O) psmon(O) event_queue(PO) utils(O) blackbox(O) > CPU: 0 PID: 1339 Comm: kworker/0:1 Tainted: P W O 4.4.24 #1 > Hardware name: Mediatek Cortex-A7 (Device Tree) > Workqueue: events drm_mode_rmfb_work_fn > [] (unwind_backtrace) from [] (show_stack+0x20/0x24) > [] (show_stack) from [] (dump_stack+0x98/0xac) > [] (dump_stack) from [] (warn_slowpath_common+0x94/0xc4) > [] (warn_slowpath_common) from [] (warn_slowpath_fmt+0x40/0x48) > [] (warn_slowpath_fmt) from [] (drm_wait_one_vblank+0x188/0x18c) > [] (drm_wait_one_vblank) from [] (drm_crtc_wait_one_vblank+0x28/0x2c) > [] (drm_crtc_wait_one_vblank) from [] (mtk_drm_crtc_disable+0x78/0x240) > [] (mtk_drm_crtc_disable) from [] (drm_atomic_helper_commit_modeset_disables+0x128/0x3b8) > [] (drm_atomic_helper_commit_modeset_disables) from [] (mtk_atomic_complete+0x74/0xb4) > [] (mtk_atomic_complete) from [] (mtk_atomic_commit+0x68/0x98) > [] (mtk_atomic_commit) from [] (drm_atomic_commit+0x54/0x74) > [] (drm_atomic_commit) from [] (drm_atomic_helper_set_config+0x7c/0xa0) > [] (drm_atomic_helper_set_config) from [] (drm_mode_set_config_internal+0x68/0xe4) > [] (drm_mode_set_config_internal) from [] (drm_framebuffer_remove+0xe4/0x120) > [] (drm_framebuffer_remove) from [] (drm_mode_rmfb_work_fn+0x48/0x58) > [] (drm_mode_rmfb_work_fn) from [] (process_one_work+0x154/0x50c) > [] (process_one_work) from [] (worker_thread+0x284/0x568) > [] (worker_thread) from [] (kthread+0xec/0x104) > [] (kthread) from [] (ret_from_fork+0x14/0x3c) > ---[ end trace 12ae5358e992abd5 ]--- > > so, we add refcount for DPI power on/off to protect the flow. > > Signed-off-by: Bibby Hsieh > Signed-off-by: chunhui dai > --- > drivers/gpu/drm/mediatek/mtk_dpi.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c > index 6c0ea39d5739..d9373e67d328 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dpi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c > @@ -77,6 +77,7 @@ struct mtk_dpi { > enum mtk_dpi_out_bit_num bit_num; > enum mtk_dpi_out_channel_swap channel_swap; > bool power_sta; > + int refcount; > u8 power_ctl; > }; > > @@ -369,6 +370,12 @@ static void mtk_dpi_config_color_format(struct mtk_dpi *dpi, > > static void mtk_dpi_power_off(struct mtk_dpi *dpi, enum mtk_dpi_power_ctl pctl) > { > + if (WARN_ON(dpi->refcount == 0)) > + return; > + > + if (--dpi->refcount != 0) > + return; > + > dpi->power_ctl &= ~pctl; > > if ((dpi->power_ctl & DPI_POWER_START) || > @@ -388,14 +395,17 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi, enum mtk_dpi_power_ctl pctl) > { > int ret; > > + if (++dpi->refcount != 1) > + return 0; > + > dpi->power_ctl |= pctl; > > if (!(dpi->power_ctl & DPI_POWER_START) && > !(dpi->power_ctl & DPI_POWER_ENABLE)) > - return 0; > + goto err_refcount; > > if (dpi->power_sta) > - return 0; > + goto err_refcount; I think dpi->power_ctl and dpi->power_sta is something like reference count. mtk_dpi_start() and mtk_dpi_stop() is called by crtc. If the error message happen without this patch, I think there is a bug in dpi->power_ctl and dpi->power_sta. I think you should fix the bug of dpi->power_ctl and dpi->power_sta, or just replace it with your reference count mechanism. Regards, CK > > ret = clk_prepare_enable(dpi->engine_clk); > if (ret) { > @@ -417,6 +427,8 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi, enum mtk_dpi_power_ctl pctl) > clk_disable_unprepare(dpi->engine_clk); > err_eng: > dpi->power_ctl &= ~pctl; > +err_refcount: > + dpi->refcount--; > return ret; > } > 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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED 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 69C79C433F4 for ; Fri, 21 Sep 2018 06:18:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BEEEE21547 for ; Fri, 21 Sep 2018 06:18:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BEEEE21547 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-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389262AbeIUMGR (ORCPT ); Fri, 21 Sep 2018 08:06:17 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:30051 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725887AbeIUMGR (ORCPT ); Fri, 21 Sep 2018 08:06:17 -0400 X-UUID: d80275ffd28e4a97ac72b753b8b867ca-20180921 Received: from mtkexhb02.mediatek.inc [(172.21.101.103)] by mailgw01.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 1695643849; Fri, 21 Sep 2018 14:18:49 +0800 Received: from mtkcas09.mediatek.inc (172.21.101.178) by mtkmbs01n1.mediatek.inc (172.21.101.68) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Fri, 21 Sep 2018 14:18:48 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas09.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1210.3 via Frontend Transport; Fri, 21 Sep 2018 14:18:48 +0800 Message-ID: <1537510728.26673.9.camel@mtksdaap41> Subject: Re: [PATCH v3 01/12] drm/mediatek: add refcount for DPI power on/off From: CK Hu To: Bibby Hsieh CC: David Airlie , Matthias Brugger , Daniel Vetter , , , Yingjoe Chen , Cawa Cheng , Daniel Kurtz , "Philipp Zabel" , YT Shen , "Thierry Reding" , Mao Huang , , , "Sascha Hauer" , chunhui dai Date: Fri, 21 Sep 2018 14:18:48 +0800 In-Reply-To: <20180921032822.30771-2-bibby.hsieh@mediatek.com> References: <20180921032822.30771-1-bibby.hsieh@mediatek.com> <20180921032822.30771-2-bibby.hsieh@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, Bibby: On Fri, 2018-09-21 at 11:28 +0800, Bibby Hsieh wrote: > From: chunhui dai > > After the kernel 4.4, the DRM disable flow was changed, if DPI was > disableed before CRTC, it will cause warning message as following: > > ------------[ cut here ]------------ > WARNING: CPU: 0 PID: 1339 at ../../linux/linux-4.4.24-mtk/drivers/gpu/drm/drm_irq.c:1326 drm_wait_one_vblank+0x188/0x18c() > vblank wait timed out on crtc 0 > Modules linked in: bridge mt8521p_ir_shim(O) i2c_eeprom(O) mtk_m4(O) fuse_ctrl(O) virtual_block(O) caamkeys(PO) chk(PO) amperctl(O) ledctl(O) apple_auth(PO) micctl(O) sensors(PO) lla(O) sdd(PO) ice40_fpga(O) psmon(O) event_queue(PO) utils(O) blackbox(O) > CPU: 0 PID: 1339 Comm: kworker/0:1 Tainted: P W O 4.4.24 #1 > Hardware name: Mediatek Cortex-A7 (Device Tree) > Workqueue: events drm_mode_rmfb_work_fn > [] (unwind_backtrace) from [] (show_stack+0x20/0x24) > [] (show_stack) from [] (dump_stack+0x98/0xac) > [] (dump_stack) from [] (warn_slowpath_common+0x94/0xc4) > [] (warn_slowpath_common) from [] (warn_slowpath_fmt+0x40/0x48) > [] (warn_slowpath_fmt) from [] (drm_wait_one_vblank+0x188/0x18c) > [] (drm_wait_one_vblank) from [] (drm_crtc_wait_one_vblank+0x28/0x2c) > [] (drm_crtc_wait_one_vblank) from [] (mtk_drm_crtc_disable+0x78/0x240) > [] (mtk_drm_crtc_disable) from [] (drm_atomic_helper_commit_modeset_disables+0x128/0x3b8) > [] (drm_atomic_helper_commit_modeset_disables) from [] (mtk_atomic_complete+0x74/0xb4) > [] (mtk_atomic_complete) from [] (mtk_atomic_commit+0x68/0x98) > [] (mtk_atomic_commit) from [] (drm_atomic_commit+0x54/0x74) > [] (drm_atomic_commit) from [] (drm_atomic_helper_set_config+0x7c/0xa0) > [] (drm_atomic_helper_set_config) from [] (drm_mode_set_config_internal+0x68/0xe4) > [] (drm_mode_set_config_internal) from [] (drm_framebuffer_remove+0xe4/0x120) > [] (drm_framebuffer_remove) from [] (drm_mode_rmfb_work_fn+0x48/0x58) > [] (drm_mode_rmfb_work_fn) from [] (process_one_work+0x154/0x50c) > [] (process_one_work) from [] (worker_thread+0x284/0x568) > [] (worker_thread) from [] (kthread+0xec/0x104) > [] (kthread) from [] (ret_from_fork+0x14/0x3c) > ---[ end trace 12ae5358e992abd5 ]--- > > so, we add refcount for DPI power on/off to protect the flow. > > Signed-off-by: Bibby Hsieh > Signed-off-by: chunhui dai > --- > drivers/gpu/drm/mediatek/mtk_dpi.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c > index 6c0ea39d5739..d9373e67d328 100644 > --- a/drivers/gpu/drm/mediatek/mtk_dpi.c > +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c > @@ -77,6 +77,7 @@ struct mtk_dpi { > enum mtk_dpi_out_bit_num bit_num; > enum mtk_dpi_out_channel_swap channel_swap; > bool power_sta; > + int refcount; > u8 power_ctl; > }; > > @@ -369,6 +370,12 @@ static void mtk_dpi_config_color_format(struct mtk_dpi *dpi, > > static void mtk_dpi_power_off(struct mtk_dpi *dpi, enum mtk_dpi_power_ctl pctl) > { > + if (WARN_ON(dpi->refcount == 0)) > + return; > + > + if (--dpi->refcount != 0) > + return; > + > dpi->power_ctl &= ~pctl; > > if ((dpi->power_ctl & DPI_POWER_START) || > @@ -388,14 +395,17 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi, enum mtk_dpi_power_ctl pctl) > { > int ret; > > + if (++dpi->refcount != 1) > + return 0; > + > dpi->power_ctl |= pctl; > > if (!(dpi->power_ctl & DPI_POWER_START) && > !(dpi->power_ctl & DPI_POWER_ENABLE)) > - return 0; > + goto err_refcount; > > if (dpi->power_sta) > - return 0; > + goto err_refcount; I think dpi->power_ctl and dpi->power_sta is something like reference count. mtk_dpi_start() and mtk_dpi_stop() is called by crtc. If the error message happen without this patch, I think there is a bug in dpi->power_ctl and dpi->power_sta. I think you should fix the bug of dpi->power_ctl and dpi->power_sta, or just replace it with your reference count mechanism. Regards, CK > > ret = clk_prepare_enable(dpi->engine_clk); > if (ret) { > @@ -417,6 +427,8 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi, enum mtk_dpi_power_ctl pctl) > clk_disable_unprepare(dpi->engine_clk); > err_eng: > dpi->power_ctl &= ~pctl; > +err_refcount: > + dpi->refcount--; > return ret; > } >