From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jingoo Han" Subject: Re: [RESEND PATCH v6 13/27] drm/rockchip: Restore psr->state when enable/disable psr failed Date: Tue, 24 Apr 2018 09:58:50 -0400 Message-ID: <000401d3dbd4$61b507c0$251f1740$@gmail.com> References: <20180423105003.9004-1-enric.balletbo@collabora.com> <20180423105003.9004-14-enric.balletbo@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180423105003.9004-14-enric.balletbo@collabora.com> Content-Language: en-us List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: 'Enric Balletbo i Serra' , architt@codeaurora.org, inki.dae@samsung.com, thierry.reding@gmail.com, hjc@rock-chips.com, seanpaul@chromium.org, airlied@linux.ie, tfiga@chromium.org, heiko@sntech.de Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Laurent.pinchart@ideasonboard.com, kernel@collabora.com, m.szyprowski@samsung.com, linux-samsung-soc@vger.kernel.org, rydberg@bitmath.org, krzk@kernel.org, linux-rockchip@lists.infradead.org, kgene@kernel.org, orjan.eide@arm.com, wxt@rock-chips.com, jeffy.chen@rock-chips.com, linux-arm-kernel@lists.infradead.org, wzz@rock-chips.com, hl@rock-chips.com, sw0312.kim@samsung.com, dianders@chromium.org, kyungmin.park@samsung.com, kuankuan.y@gmail.com, hshi@chromium.org List-Id: linux-rockchip.vger.kernel.org T24gTW9uZGF5LCBBcHJpbCAyMywgMjAxOCA2OjUwIEFNLCBFbnJpYyBCYWxsZXRibyBpIFNlcnJh IHdyb3RlOgo+IAo+IEZyb206IHphaW4gd2FuZyA8d3p6QHJvY2stY2hpcHMuY29tPgo+IAo+IElm IHdlIGZhaWxlZCBkaXNhYmxlIHBzciwgaXQgd291bGQgaGFuZyB0aGUgZGlzcGxheSB1bnRpbCBu ZXh0IHBzcgo+IGN5Y2xlIGNvbWluZy4gU28gd2Ugc2hvdWxkIHJlc3RvcmUgcHNyLT5zdGF0ZSB3 aGVuIGl0IGZhaWxlZC4KPiAKPiBDYzogVG9tYXN6IEZpZ2EgPHRmaWdhQGNocm9taXVtLm9yZz4K PiBTaWduZWQtb2ZmLWJ5OiB6YWluIHdhbmcgPHd6ekByb2NrLWNoaXBzLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBEb3VnbGFzIEFuZGVyc29uIDxkaWFuZGVyc0BjaHJvbWl1bS5vcmc+Cj4gU2lnbmVk LW9mZi1ieTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+Cj4gU2lnbmVkLW9mZi1i eTogVGhpZXJyeSBFc2NhbmRlIDx0aGllcnJ5LmVzY2FuZGVAY29sbGFib3JhLmNvbT4KPiBTaWdu ZWQtb2ZmLWJ5OiBFbnJpYyBCYWxsZXRibyBpIFNlcnJhIDxlbnJpYy5iYWxsZXRib0Bjb2xsYWJv cmEuY29tPgo+IFRlc3RlZC1ieTogTWFyZWsgU3p5cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1 bmcuY29tPgo+IFJldmlld2VkLWJ5OiBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPgo+ IFJldmlld2VkLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgoKQWNr ZWQtYnk6IEppbmdvbyBIYW4gPGppbmdvb2hhbjFAZ21haWwuY29tPgoKQmVzdCByZWdhcmRzLApK aW5nb28gSGFuCgo+IC0tLQo+IAo+ICAuLi4vZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9k cF9jb3JlLmMgICAgfCAgNCArKystCj4gIC4uLi9ncHUvZHJtL3JvY2tjaGlwL2FuYWxvZ2l4X2Rw LXJvY2tjaGlwLmMgICB8IDEwICsrKysrLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX2RybV9wc3IuYyAgIHwgMjAgKysrKysrKysrKysrLS0tLS0tLQo+ICBkcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Bzci5oICAgfCAgMiArLQo+ICA0IGZpbGVz IGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYwo+ IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmMKPiBp bmRleCA3NWU2MWViZjY3MjIuLjU1NDBlMmRmYzJlYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5jCj4gQEAgLTE1Myw4ICsx NTMsMTAgQEAgaW50IGFuYWxvZ2l4X2RwX2Rpc2FibGVfcHNyKHN0cnVjdCBhbmFsb2dpeF9kcF9k ZXZpY2UKPiAqZHApCj4gIAlwc3JfdnNjLkRCMSA9IDA7Cj4gCj4gIAlyZXQgPSBkcm1fZHBfZHBj ZF93cml0ZWIoJmRwLT5hdXgsIERQX1NFVF9QT1dFUiwgRFBfU0VUX1BPV0VSX0QwKTsKPiAtCWlm IChyZXQgIT0gMSkKPiArCWlmIChyZXQgIT0gMSkgewo+ICAJCWRldl9lcnIoZHAtPmRldiwgIkZh aWxlZCB0byBzZXQgRFAgUG93ZXIwICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gCj4gIAlyZXR1cm4gYW5hbG9naXhfZHBfc2VuZF9wc3Jfc3BkKGRwLCAmcHNyX3ZzYywgZmFs c2UpOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9hbmFsb2dp eF9kcC1yb2NrY2hpcC5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvYW5hbG9naXhfZHAt cm9ja2NoaXAuYwo+IGluZGV4IDNlOGJmNzliZWE1OC4uOGM4ODRmOWNlNzEzIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9hbmFsb2dpeF9kcC1yb2NrY2hpcC5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2FuYWxvZ2l4X2RwLXJvY2tjaGlwLmMKPiBAQCAt NzcsMTMgKzc3LDEzIEBAIHN0cnVjdCByb2NrY2hpcF9kcF9kZXZpY2Ugewo+ICAJc3RydWN0IGFu YWxvZ2l4X2RwX3BsYXRfZGF0YSBwbGF0X2RhdGE7Cj4gIH07Cj4gCj4gLXN0YXRpYyB2b2lkIGFu YWxvZ2l4X2RwX3Bzcl9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sCmVuYWJs ZWQpCj4gK3N0YXRpYyBpbnQgYW5hbG9naXhfZHBfcHNyX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsIGJvb2wgZW5hYmxlZCkKPiAgewo+ICAJc3RydWN0IHJvY2tjaGlwX2RwX2Rldmlj ZSAqZHAgPSB0b19kcChlbmNvZGVyKTsKPiAgCWludCByZXQ7Cj4gCj4gIAlpZiAoIWFuYWxvZ2l4 X2RwX3Bzcl9lbmFibGVkKGRwLT5hZHApKQo+IC0JCXJldHVybjsKPiArCQlyZXR1cm4gMDsKPiAK PiAgCURSTV9ERVZfREVCVUcoZHAtPmRldiwgIiVzIFBTUi4uLlxuIiwgZW5hYmxlZCA/ICJFbnRy eSIgOiAiRXhpdCIpOwo+IAo+IEBAIC05MSwxMyArOTEsMTMgQEAgc3RhdGljIHZvaWQgYW5hbG9n aXhfZHBfcHNyX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIKPiAqZW5jb2RlciwgYm9vbCBlbmFibGVk KQo+ICAJCQkJCSBQU1JfV0FJVF9MSU5FX0ZMQUdfVElNRU9VVF9NUyk7Cj4gIAlpZiAocmV0KSB7 Cj4gIAkJRFJNX0RFVl9FUlJPUihkcC0+ZGV2LCAibGluZSBmbGFnIGludGVycnVwdCBkaWQgbm90 Cj4gYXJyaXZlXG4iKTsKPiAtCQlyZXR1cm47Cj4gKwkJcmV0dXJuIC1FVElNRURPVVQ7Cj4gIAl9 Cj4gCj4gIAlpZiAoZW5hYmxlZCkKPiAtCQlhbmFsb2dpeF9kcF9lbmFibGVfcHNyKGRwLT5hZHAp Owo+ICsJCXJldHVybiBhbmFsb2dpeF9kcF9lbmFibGVfcHNyKGRwLT5hZHApOwo+ICAJZWxzZQo+ IC0JCWFuYWxvZ2l4X2RwX2Rpc2FibGVfcHNyKGRwLT5hZHApOwo+ICsJCXJldHVybiBhbmFsb2dp eF9kcF9kaXNhYmxlX3BzcihkcC0+YWRwKTsKPiAgfQo+IAo+ICBzdGF0aWMgaW50IHJvY2tjaGlw X2RwX3ByZV9pbml0KHN0cnVjdCByb2NrY2hpcF9kcF9kZXZpY2UgKmRwKQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Bzci5jCj4gYi9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Bzci5jCj4gaW5kZXggYjMzOWNhOTQzMTM5 Li45Mzc2ZjQzOTZiNmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX2RybV9wc3IuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hp cF9kcm1fcHNyLmMKPiBAQCAtMzYsNyArMzYsNyBAQCBzdHJ1Y3QgcHNyX2RydiB7Cj4gCj4gIAlz dHJ1Y3QgZGVsYXllZF93b3JrCWZsdXNoX3dvcms7Cj4gCj4gLQl2b2lkICgqc2V0KShzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIsIGJvb2wgZW5hYmxlKTsKPiArCWludCAoKnNldCkoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIGVuYWJsZSk7Cj4gIH07Cj4gCj4gIHN0YXRpYyBz dHJ1Y3QgcHNyX2RydiAqZmluZF9wc3JfYnlfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g QEAgLTkzLDE5ICs5MywyNSBAQCBzdGF0aWMgdm9pZCBwc3Jfc2V0X3N0YXRlX2xvY2tlZChzdHJ1 Y3QgcHNyX2RydiAqcHNyLAo+IGVudW0gcHNyX3N0YXRlIHN0YXRlKQo+ICAJCXJldHVybjsKPiAg CX0KPiAKPiAtCXBzci0+c3RhdGUgPSBzdGF0ZTsKPiAtCj4gIAkvKiBBY3R1YWxseSBjb21taXQg dGhlIHN0YXRlIGNoYW5nZSB0byBoYXJkd2FyZSAqLwo+IC0Jc3dpdGNoIChwc3ItPnN0YXRlKSB7 Cj4gKwlzd2l0Y2ggKHN0YXRlKSB7Cj4gIAljYXNlIFBTUl9FTkFCTEU6Cj4gLQkJcHNyLT5zZXQo cHNyLT5lbmNvZGVyLCB0cnVlKTsKPiArCQlpZiAocHNyLT5zZXQocHNyLT5lbmNvZGVyLCB0cnVl KSkKPiArCQkJcmV0dXJuOwo+ICAJCWJyZWFrOwo+IAo+ICAJY2FzZSBQU1JfRElTQUJMRToKPiAg CWNhc2UgUFNSX0ZMVVNIOgo+IC0JCXBzci0+c2V0KHBzci0+ZW5jb2RlciwgZmFsc2UpOwo+ICsJ CWlmIChwc3ItPnNldChwc3ItPmVuY29kZXIsIGZhbHNlKSkKPiArCQkJcmV0dXJuOwo+ICAJCWJy ZWFrOwo+ICsKPiArCWRlZmF1bHQ6Cj4gKwkJcHJfZXJyKCIlczogVW5rbm93biBzdGF0ZSAlZFxu IiwgX19mdW5jX18sIHN0YXRlKTsKPiArCQlyZXR1cm47Cj4gIAl9Cj4gKwo+ICsJcHNyLT5zdGF0 ZSA9IHN0YXRlOwo+ICB9Cj4gCj4gIHN0YXRpYyB2b2lkIHBzcl9zZXRfc3RhdGUoc3RydWN0IHBz cl9kcnYgKnBzciwgZW51bSBwc3Jfc3RhdGUgc3RhdGUpCj4gQEAgLTIyOSw3ICsyMzUsNyBAQCBF WFBPUlRfU1lNQk9MKHJvY2tjaGlwX2RybV9wc3JfZmx1c2hfYWxsKTsKPiAgICogWmVybyBvbiBz dWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+ICAgKi8KPiAgaW50IHJvY2tjaGlw X2RybV9wc3JfcmVnaXN0ZXIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+IC0JCQl2b2lk ICgqcHNyX3NldCkoc3RydWN0IGRybV9lbmNvZGVyICosIGJvb2wgZW5hYmxlKSkKPiArCQkJaW50 ICgqcHNyX3NldCkoc3RydWN0IGRybV9lbmNvZGVyICosIGJvb2wgZW5hYmxlKSkKPiAgewo+ICAJ c3RydWN0IHJvY2tjaGlwX2RybV9wcml2YXRlICpkcm1fZHJ2ID0gZW5jb2Rlci0+ZGV2LT5kZXZf cHJpdmF0ZTsKPiAgCXN0cnVjdCBwc3JfZHJ2ICpwc3I7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fcHNyLmgKPiBiL2RyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF9kcm1fcHNyLmgKPiBpbmRleCBiMWVhMDE1NWU1N2MuLjA2NTM3ZWUy NzU2NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJt X3Bzci5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9wc3Iu aAo+IEBAIC0yMiw3ICsyMiw3IEBAIGludCByb2NrY2hpcF9kcm1fcHNyX2FjdGl2YXRlKHN0cnVj dCBkcm1fZW5jb2Rlcgo+ICplbmNvZGVyKTsKPiAgaW50IHJvY2tjaGlwX2RybV9wc3JfZGVhY3Rp dmF0ZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwo+IAo+ICBpbnQgcm9ja2NoaXBfZHJt X3Bzcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4gLQkJCXZvaWQgKCpw c3Jfc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKiwgYm9vbCBlbmFibGUpKTsKPiArCQkJaW50ICgq cHNyX3NldCkoc3RydWN0IGRybV9lbmNvZGVyICosIGJvb2wgZW5hYmxlKSk7Cj4gIHZvaWQgcm9j a2NoaXBfZHJtX3Bzcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Cj4g Cj4gICNlbmRpZiAvKiBfX1JPQ0tDSElQX0RSTV9QU1JfXyAqLwo+IC0tCj4gMi4xNy4wCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: jingoohan1@gmail.com (Jingoo Han) Date: Tue, 24 Apr 2018 09:58:50 -0400 Subject: [RESEND PATCH v6 13/27] drm/rockchip: Restore psr->state when enable/disable psr failed In-Reply-To: <20180423105003.9004-14-enric.balletbo@collabora.com> References: <20180423105003.9004-1-enric.balletbo@collabora.com> <20180423105003.9004-14-enric.balletbo@collabora.com> Message-ID: <000401d3dbd4$61b507c0$251f1740$@gmail.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Monday, April 23, 2018 6:50 AM, Enric Balletbo i Serra wrote: > > From: zain wang > > If we failed disable psr, it would hang the display until next psr > cycle coming. So we should restore psr->state when it failed. > > Cc: Tomasz Figa > Signed-off-by: zain wang > Signed-off-by: Douglas Anderson > Signed-off-by: Sean Paul > Signed-off-by: Thierry Escande > Signed-off-by: Enric Balletbo i Serra > Tested-by: Marek Szyprowski > Reviewed-by: Heiko Stuebner > Reviewed-by: Archit Taneja Acked-by: Jingoo Han Best regards, Jingoo Han > --- > > .../drm/bridge/analogix/analogix_dp_core.c | 4 +++- > .../gpu/drm/rockchip/analogix_dp-rockchip.c | 10 +++++----- > drivers/gpu/drm/rockchip/rockchip_drm_psr.c | 20 ++++++++++++------- > drivers/gpu/drm/rockchip/rockchip_drm_psr.h | 2 +- > 4 files changed, 22 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > index 75e61ebf6722..5540e2dfc2ec 100644 > --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > @@ -153,8 +153,10 @@ int analogix_dp_disable_psr(struct analogix_dp_device > *dp) > psr_vsc.DB1 = 0; > > ret = drm_dp_dpcd_writeb(&dp->aux, DP_SET_POWER, DP_SET_POWER_D0); > - if (ret != 1) > + if (ret != 1) { > dev_err(dp->dev, "Failed to set DP Power0 %d\n", ret); > + return ret; > + } > > return analogix_dp_send_psr_spd(dp, &psr_vsc, false); > } > diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > index 3e8bf79bea58..8c884f9ce713 100644 > --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > @@ -77,13 +77,13 @@ struct rockchip_dp_device { > struct analogix_dp_plat_data plat_data; > }; > > -static void analogix_dp_psr_set(struct drm_encoder *encoder, bool enabled) > +static int analogix_dp_psr_set(struct drm_encoder *encoder, bool enabled) > { > struct rockchip_dp_device *dp = to_dp(encoder); > int ret; > > if (!analogix_dp_psr_enabled(dp->adp)) > - return; > + return 0; > > DRM_DEV_DEBUG(dp->dev, "%s PSR...\n", enabled ? "Entry" : "Exit"); > > @@ -91,13 +91,13 @@ static void analogix_dp_psr_set(struct drm_encoder > *encoder, bool enabled) > PSR_WAIT_LINE_FLAG_TIMEOUT_MS); > if (ret) { > DRM_DEV_ERROR(dp->dev, "line flag interrupt did not > arrive\n"); > - return; > + return -ETIMEDOUT; > } > > if (enabled) > - analogix_dp_enable_psr(dp->adp); > + return analogix_dp_enable_psr(dp->adp); > else > - analogix_dp_disable_psr(dp->adp); > + return analogix_dp_disable_psr(dp->adp); > } > > static int rockchip_dp_pre_init(struct rockchip_dp_device *dp) > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c > b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c > index b339ca943139..9376f4396b6b 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c > @@ -36,7 +36,7 @@ struct psr_drv { > > struct delayed_work flush_work; > > - void (*set)(struct drm_encoder *encoder, bool enable); > + int (*set)(struct drm_encoder *encoder, bool enable); > }; > > static struct psr_drv *find_psr_by_crtc(struct drm_crtc *crtc) > @@ -93,19 +93,25 @@ static void psr_set_state_locked(struct psr_drv *psr, > enum psr_state state) > return; > } > > - psr->state = state; > - > /* Actually commit the state change to hardware */ > - switch (psr->state) { > + switch (state) { > case PSR_ENABLE: > - psr->set(psr->encoder, true); > + if (psr->set(psr->encoder, true)) > + return; > break; > > case PSR_DISABLE: > case PSR_FLUSH: > - psr->set(psr->encoder, false); > + if (psr->set(psr->encoder, false)) > + return; > break; > + > + default: > + pr_err("%s: Unknown state %d\n", __func__, state); > + return; > } > + > + psr->state = state; > } > > static void psr_set_state(struct psr_drv *psr, enum psr_state state) > @@ -229,7 +235,7 @@ EXPORT_SYMBOL(rockchip_drm_psr_flush_all); > * Zero on success, negative errno on failure. > */ > int rockchip_drm_psr_register(struct drm_encoder *encoder, > - void (*psr_set)(struct drm_encoder *, bool enable)) > + int (*psr_set)(struct drm_encoder *, bool enable)) > { > struct rockchip_drm_private *drm_drv = encoder->dev->dev_private; > struct psr_drv *psr; > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.h > b/drivers/gpu/drm/rockchip/rockchip_drm_psr.h > index b1ea0155e57c..06537ee27565 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_psr.h > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.h > @@ -22,7 +22,7 @@ int rockchip_drm_psr_activate(struct drm_encoder > *encoder); > int rockchip_drm_psr_deactivate(struct drm_encoder *encoder); > > int rockchip_drm_psr_register(struct drm_encoder *encoder, > - void (*psr_set)(struct drm_encoder *, bool enable)); > + int (*psr_set)(struct drm_encoder *, bool enable)); > void rockchip_drm_psr_unregister(struct drm_encoder *encoder); > > #endif /* __ROCKCHIP_DRM_PSR__ */ > -- > 2.17.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933492AbeDXN7H (ORCPT ); Tue, 24 Apr 2018 09:59:07 -0400 Received: from mail-qk0-f194.google.com ([209.85.220.194]:39808 "EHLO mail-qk0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933467AbeDXN64 (ORCPT ); Tue, 24 Apr 2018 09:58:56 -0400 X-Google-Smtp-Source: AB8JxZqvoIbjx5sM8ah9MkPOuXsxKbkjQGUTLjpYtLbAo0VJr1yYh2sGH9TVig4FUVu6F+AJxLTaFg== From: "Jingoo Han" To: "'Enric Balletbo i Serra'" , , , , , , , , Cc: , , , , , , , , , , , , , , , , , , , , , , References: <20180423105003.9004-1-enric.balletbo@collabora.com> <20180423105003.9004-14-enric.balletbo@collabora.com> In-Reply-To: <20180423105003.9004-14-enric.balletbo@collabora.com> Subject: Re: [RESEND PATCH v6 13/27] drm/rockchip: Restore psr->state when enable/disable psr failed Date: Tue, 24 Apr 2018 09:58:50 -0400 Message-ID: <000401d3dbd4$61b507c0$251f1740$@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 16.0 Content-Language: en-us Thread-Index: AQJsKqzGdLQ3B8H319FIYPcigFOt/AGVO47IotKpTfA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Monday, April 23, 2018 6:50 AM, Enric Balletbo i Serra wrote: > > From: zain wang > > If we failed disable psr, it would hang the display until next psr > cycle coming. So we should restore psr->state when it failed. > > Cc: Tomasz Figa > Signed-off-by: zain wang > Signed-off-by: Douglas Anderson > Signed-off-by: Sean Paul > Signed-off-by: Thierry Escande > Signed-off-by: Enric Balletbo i Serra > Tested-by: Marek Szyprowski > Reviewed-by: Heiko Stuebner > Reviewed-by: Archit Taneja Acked-by: Jingoo Han Best regards, Jingoo Han > --- > > .../drm/bridge/analogix/analogix_dp_core.c | 4 +++- > .../gpu/drm/rockchip/analogix_dp-rockchip.c | 10 +++++----- > drivers/gpu/drm/rockchip/rockchip_drm_psr.c | 20 ++++++++++++------- > drivers/gpu/drm/rockchip/rockchip_drm_psr.h | 2 +- > 4 files changed, 22 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > index 75e61ebf6722..5540e2dfc2ec 100644 > --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > @@ -153,8 +153,10 @@ int analogix_dp_disable_psr(struct analogix_dp_device > *dp) > psr_vsc.DB1 = 0; > > ret = drm_dp_dpcd_writeb(&dp->aux, DP_SET_POWER, DP_SET_POWER_D0); > - if (ret != 1) > + if (ret != 1) { > dev_err(dp->dev, "Failed to set DP Power0 %d\n", ret); > + return ret; > + } > > return analogix_dp_send_psr_spd(dp, &psr_vsc, false); > } > diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > index 3e8bf79bea58..8c884f9ce713 100644 > --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > @@ -77,13 +77,13 @@ struct rockchip_dp_device { > struct analogix_dp_plat_data plat_data; > }; > > -static void analogix_dp_psr_set(struct drm_encoder *encoder, bool enabled) > +static int analogix_dp_psr_set(struct drm_encoder *encoder, bool enabled) > { > struct rockchip_dp_device *dp = to_dp(encoder); > int ret; > > if (!analogix_dp_psr_enabled(dp->adp)) > - return; > + return 0; > > DRM_DEV_DEBUG(dp->dev, "%s PSR...\n", enabled ? "Entry" : "Exit"); > > @@ -91,13 +91,13 @@ static void analogix_dp_psr_set(struct drm_encoder > *encoder, bool enabled) > PSR_WAIT_LINE_FLAG_TIMEOUT_MS); > if (ret) { > DRM_DEV_ERROR(dp->dev, "line flag interrupt did not > arrive\n"); > - return; > + return -ETIMEDOUT; > } > > if (enabled) > - analogix_dp_enable_psr(dp->adp); > + return analogix_dp_enable_psr(dp->adp); > else > - analogix_dp_disable_psr(dp->adp); > + return analogix_dp_disable_psr(dp->adp); > } > > static int rockchip_dp_pre_init(struct rockchip_dp_device *dp) > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c > b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c > index b339ca943139..9376f4396b6b 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c > @@ -36,7 +36,7 @@ struct psr_drv { > > struct delayed_work flush_work; > > - void (*set)(struct drm_encoder *encoder, bool enable); > + int (*set)(struct drm_encoder *encoder, bool enable); > }; > > static struct psr_drv *find_psr_by_crtc(struct drm_crtc *crtc) > @@ -93,19 +93,25 @@ static void psr_set_state_locked(struct psr_drv *psr, > enum psr_state state) > return; > } > > - psr->state = state; > - > /* Actually commit the state change to hardware */ > - switch (psr->state) { > + switch (state) { > case PSR_ENABLE: > - psr->set(psr->encoder, true); > + if (psr->set(psr->encoder, true)) > + return; > break; > > case PSR_DISABLE: > case PSR_FLUSH: > - psr->set(psr->encoder, false); > + if (psr->set(psr->encoder, false)) > + return; > break; > + > + default: > + pr_err("%s: Unknown state %d\n", __func__, state); > + return; > } > + > + psr->state = state; > } > > static void psr_set_state(struct psr_drv *psr, enum psr_state state) > @@ -229,7 +235,7 @@ EXPORT_SYMBOL(rockchip_drm_psr_flush_all); > * Zero on success, negative errno on failure. > */ > int rockchip_drm_psr_register(struct drm_encoder *encoder, > - void (*psr_set)(struct drm_encoder *, bool enable)) > + int (*psr_set)(struct drm_encoder *, bool enable)) > { > struct rockchip_drm_private *drm_drv = encoder->dev->dev_private; > struct psr_drv *psr; > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.h > b/drivers/gpu/drm/rockchip/rockchip_drm_psr.h > index b1ea0155e57c..06537ee27565 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_psr.h > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.h > @@ -22,7 +22,7 @@ int rockchip_drm_psr_activate(struct drm_encoder > *encoder); > int rockchip_drm_psr_deactivate(struct drm_encoder *encoder); > > int rockchip_drm_psr_register(struct drm_encoder *encoder, > - void (*psr_set)(struct drm_encoder *, bool enable)); > + int (*psr_set)(struct drm_encoder *, bool enable)); > void rockchip_drm_psr_unregister(struct drm_encoder *encoder); > > #endif /* __ROCKCHIP_DRM_PSR__ */ > -- > 2.17.0