From mboxrd@z Thu Jan 1 00:00:00 1970 From: liviu.dudau@arm.com (Liviu Dudau) Date: Mon, 21 Nov 2016 11:06:04 +0000 Subject: [BUG] hdlcd gets confused about base address In-Reply-To: <20161118233733.GP1041@n2100.armlinux.org.uk> References: <20161118233733.GP1041@n2100.armlinux.org.uk> Message-ID: <20161121110604.GC1005@e106497-lin.cambridge.arm.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Fri, Nov 18, 2016 at 11:37:33PM +0000, Russell King - ARM Linux wrote: > Hi, Hi Russell, > > While testing HDMI with Xorg on the Juno board, I find that when Xorg > starts up or shuts down, the display is shifted significantly to the > right and wrapped in the active region. (No sync bars are visible.) > The timings are correct, it behaves as if the start address has been > shifted many pixels _into_ the framebuffer. > > This occurs whenever the display mode size is changed - using xrandr > in Xorg shows that changing the resolution triggers the problem > almost every time, but changing the refresh rate does not. Thanks for reporting this. To double check your issue, you are booting with HDLCD using the native monitor resolution as detected via EDID and then using xrandr to change the display mode. When you do that you are seeing the image being shifted to the right. Is that a correct description? (I'm trying to reproduce it here and want to make sure I've got the details right). > > Using devmem2 to disable and re-enable the HDLCD resolves the issue, > and repeated disable/enable cycles do not make the issue re-appear. Do you resize the display mode as well afer re-enabling HDLCD? > > So, I patched the HDLCD to do this, and testing it with Xorg after > several repetitions seems to work. > > Signed-off-by: Russell King > --- > What I think is going on is that the FIFO or address generator for > reading data from the AXI bus is not properly reset when changing the > resolution, and the enable-disable-enable cycle causes the HDLCD > hardware to sort itself out. That is likely what is happening. According to the datasheet, changing the resolution should be done while the HDLCD command mode is disabled, which is what writing 0 into HDLCD_REG_COMMAND does. > It's (eg) significantly out - for example, > to properly align the display, I have to program an address of > 0xf4ff0200 into the hardware rather than 0xf5000000 - that's 896 pixels > before the real start of the frame buffer. What is the resolution you are using? > > With this patch, a patch to TDA998x to avoid the i2c-designware issue, > and xf86-video-armada, I have LXDE running on the Juno. Can you tell me more about the TDA998x and i2c-designware issue? Also, I don't think you need to use xf86-video-armada, the mode-setting driver built into Xorg should be working fine (that is what I've used in my testing). > > Something I also noticed is this: > > scanout_start = gem->paddr + plane->state->fb->offsets[0] + > plane->state->crtc_y * plane->state->fb->pitches[0] + > plane->state->crtc_x * bpp / 8; > > Surely this should be using src_[xy] (which are the position in the > source - iow, memory, and not crtc_[xy] which is the position on the > CRTC displayed window. To put it another way, the src_* define the > region of the source material that is mapped onto a rectangular area > on the display defined by crtc_*. Yes, that is a bug and most likely the source of the issue that you are seeing if my understanding of your testing is correct. > > Another note is that since the CRTC can't place the plane in arbitary > positions and sizes within the active area, should the atomic_check > ensure that crtc_x = crtc_y = 0, and the crtc width/height are the > size of the active area? That should be the case, indeed. I'm going prepare a patch to do that. > > drivers/gpu/drm/arm/hdlcd_crtc.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c > index 48019ae22ddb..3e97acf6e2a7 100644 > --- a/drivers/gpu/drm/arm/hdlcd_crtc.c > +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c > @@ -150,6 +150,8 @@ static void hdlcd_crtc_enable(struct drm_crtc *crtc) > clk_prepare_enable(hdlcd->clk); > hdlcd_crtc_mode_set_nofb(crtc); > hdlcd_write(hdlcd, HDLCD_REG_COMMAND, 1); > + hdlcd_write(hdlcd, HDLCD_REG_COMMAND, 0); > + hdlcd_write(hdlcd, HDLCD_REG_COMMAND, 1); I am not convinced that this is the right fix. If anything, I would put a hdlcd_write(hdlcd, HDLCD_REG_COMMAND, 0); line before hdlcd_crtc_mode_set_nofs(crtc); line to make sure the command mode is disabled before setting the mode, but again, I need to understand your use case to make sure that this indeed fixes it. Best regards, Liviu > } > > static void hdlcd_crtc_disable(struct drm_crtc *crtc) > > > -- > RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ > FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up > according to speedtest.net. -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ?\_(?)_/? From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: Re: [BUG] hdlcd gets confused about base address Date: Mon, 21 Nov 2016 11:06:04 +0000 Message-ID: <20161121110604.GC1005@e106497-lin.cambridge.arm.com> References: <20161118233733.GP1041@n2100.armlinux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from foss.arm.com (foss.arm.com [217.140.101.70]) by gabe.freedesktop.org (Postfix) with ESMTP id A321E6E3E9 for ; Mon, 21 Nov 2016 11:06:06 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20161118233733.GP1041@n2100.armlinux.org.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Russell King - ARM Linux Cc: Mali DP Maintainers , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBOb3YgMTgsIDIwMTYgYXQgMTE6Mzc6MzNQTSArMDAwMCwgUnVzc2VsbCBLaW5nIC0g QVJNIExpbnV4IHdyb3RlOgo+IEhpLAoKSGkgUnVzc2VsbCwKCj4gCj4gV2hpbGUgdGVzdGluZyBI RE1JIHdpdGggWG9yZyBvbiB0aGUgSnVubyBib2FyZCwgSSBmaW5kIHRoYXQgd2hlbiBYb3JnCj4g c3RhcnRzIHVwIG9yIHNodXRzIGRvd24sIHRoZSBkaXNwbGF5IGlzIHNoaWZ0ZWQgc2lnbmlmaWNh bnRseSB0byB0aGUKPiByaWdodCBhbmQgd3JhcHBlZCBpbiB0aGUgYWN0aXZlIHJlZ2lvbi4gIChO byBzeW5jIGJhcnMgYXJlIHZpc2libGUuKQo+IFRoZSB0aW1pbmdzIGFyZSBjb3JyZWN0LCBpdCBi ZWhhdmVzIGFzIGlmIHRoZSBzdGFydCBhZGRyZXNzIGhhcyBiZWVuCj4gc2hpZnRlZCBtYW55IHBp eGVscyBfaW50b18gdGhlIGZyYW1lYnVmZmVyLgo+IAo+IFRoaXMgb2NjdXJzIHdoZW5ldmVyIHRo ZSBkaXNwbGF5IG1vZGUgc2l6ZSBpcyBjaGFuZ2VkIC0gdXNpbmcgeHJhbmRyCj4gaW4gWG9yZyBz aG93cyB0aGF0IGNoYW5naW5nIHRoZSByZXNvbHV0aW9uIHRyaWdnZXJzIHRoZSBwcm9ibGVtCj4g YWxtb3N0IGV2ZXJ5IHRpbWUsIGJ1dCBjaGFuZ2luZyB0aGUgcmVmcmVzaCByYXRlIGRvZXMgbm90 LgoKVGhhbmtzIGZvciByZXBvcnRpbmcgdGhpcy4gVG8gZG91YmxlIGNoZWNrIHlvdXIgaXNzdWUs IHlvdSBhcmUgYm9vdGluZwp3aXRoIEhETENEIHVzaW5nIHRoZSBuYXRpdmUgbW9uaXRvciByZXNv bHV0aW9uIGFzIGRldGVjdGVkIHZpYSBFRElECmFuZCB0aGVuIHVzaW5nIHhyYW5kciB0byBjaGFu Z2UgdGhlIGRpc3BsYXkgbW9kZS4gV2hlbiB5b3UgZG8gdGhhdCB5b3UKYXJlIHNlZWluZyB0aGUg aW1hZ2UgYmVpbmcgc2hpZnRlZCB0byB0aGUgcmlnaHQuIElzIHRoYXQgYSBjb3JyZWN0CmRlc2Ny aXB0aW9uPyAoSSdtIHRyeWluZyB0byByZXByb2R1Y2UgaXQgaGVyZSBhbmQgd2FudCB0byBtYWtl IHN1cmUgCkkndmUgZ290IHRoZSBkZXRhaWxzIHJpZ2h0KS4KCj4gCj4gVXNpbmcgZGV2bWVtMiB0 byBkaXNhYmxlIGFuZCByZS1lbmFibGUgdGhlIEhETENEIHJlc29sdmVzIHRoZSBpc3N1ZSwKPiBh bmQgcmVwZWF0ZWQgZGlzYWJsZS9lbmFibGUgY3ljbGVzIGRvIG5vdCBtYWtlIHRoZSBpc3N1ZSBy ZS1hcHBlYXIuCgpEbyB5b3UgcmVzaXplIHRoZSBkaXNwbGF5IG1vZGUgYXMgd2VsbCBhZmVyIHJl LWVuYWJsaW5nIEhETENEPwoKPiAKPiBTbywgSSBwYXRjaGVkIHRoZSBIRExDRCB0byBkbyB0aGlz LCBhbmQgdGVzdGluZyBpdCB3aXRoIFhvcmcgYWZ0ZXIKPiBzZXZlcmFsIHJlcGV0aXRpb25zIHNl ZW1zIHRvIHdvcmsuCj4gCj4gU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVs QGFybWxpbnV4Lm9yZy51az4KPiAtLS0KPiBXaGF0IEkgdGhpbmsgaXMgZ29pbmcgb24gaXMgdGhh dCB0aGUgRklGTyBvciBhZGRyZXNzIGdlbmVyYXRvciBmb3IKPiByZWFkaW5nIGRhdGEgZnJvbSB0 aGUgQVhJIGJ1cyBpcyBub3QgcHJvcGVybHkgcmVzZXQgd2hlbiBjaGFuZ2luZyB0aGUKPiByZXNv bHV0aW9uLCBhbmQgdGhlIGVuYWJsZS1kaXNhYmxlLWVuYWJsZSBjeWNsZSBjYXVzZXMgdGhlIEhE TENECj4gaGFyZHdhcmUgdG8gc29ydCBpdHNlbGYgb3V0LgoKVGhhdCBpcyBsaWtlbHkgd2hhdCBp cyBoYXBwZW5pbmcuIEFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0LCBjaGFuZ2luZwp0aGUgcmVz b2x1dGlvbiBzaG91bGQgYmUgZG9uZSB3aGlsZSB0aGUgSERMQ0QgY29tbWFuZCBtb2RlIGlzIGRp c2FibGVkLAp3aGljaCBpcyB3aGF0IHdyaXRpbmcgMCBpbnRvIEhETENEX1JFR19DT01NQU5EIGRv ZXMuCgoKPiBJdCdzIChlZykgc2lnbmlmaWNhbnRseSBvdXQgLSBmb3IgZXhhbXBsZSwKPiB0byBw cm9wZXJseSBhbGlnbiB0aGUgZGlzcGxheSwgSSBoYXZlIHRvIHByb2dyYW0gYW4gYWRkcmVzcyBv Zgo+IDB4ZjRmZjAyMDAgaW50byB0aGUgaGFyZHdhcmUgcmF0aGVyIHRoYW4gMHhmNTAwMDAwMCAt IHRoYXQncyA4OTYgcGl4ZWxzCj4gYmVmb3JlIHRoZSByZWFsIHN0YXJ0IG9mIHRoZSBmcmFtZSBi dWZmZXIuCgpXaGF0IGlzIHRoZSByZXNvbHV0aW9uIHlvdSBhcmUgdXNpbmc/Cgo+IAo+IFdpdGgg dGhpcyBwYXRjaCwgYSBwYXRjaCB0byBUREE5OTh4IHRvIGF2b2lkIHRoZSBpMmMtZGVzaWdud2Fy ZSBpc3N1ZSwKPiBhbmQgeGY4Ni12aWRlby1hcm1hZGEsIEkgaGF2ZSBMWERFIHJ1bm5pbmcgb24g dGhlIEp1bm8uCgpDYW4geW91IHRlbGwgbWUgbW9yZSBhYm91dCB0aGUgVERBOTk4eCBhbmQgaTJj LWRlc2lnbndhcmUgaXNzdWU/CkFsc28sIEkgZG9uJ3QgdGhpbmsgeW91IG5lZWQgdG8gdXNlIHhm ODYtdmlkZW8tYXJtYWRhLCB0aGUgbW9kZS1zZXR0aW5nCmRyaXZlciBidWlsdCBpbnRvIFhvcmcg c2hvdWxkIGJlIHdvcmtpbmcgZmluZSAodGhhdCBpcyB3aGF0IEkndmUgdXNlZAppbiBteSB0ZXN0 aW5nKS4KCj4gCj4gU29tZXRoaW5nIEkgYWxzbyBub3RpY2VkIGlzIHRoaXM6Cj4gCj4gICAgICAg ICBzY2Fub3V0X3N0YXJ0ID0gZ2VtLT5wYWRkciArIHBsYW5lLT5zdGF0ZS0+ZmItPm9mZnNldHNb MF0gKwo+ICAgICAgICAgICAgICAgICBwbGFuZS0+c3RhdGUtPmNydGNfeSAqIHBsYW5lLT5zdGF0 ZS0+ZmItPnBpdGNoZXNbMF0gKwo+ICAgICAgICAgICAgICAgICBwbGFuZS0+c3RhdGUtPmNydGNf eCAqIGJwcCAvIDg7Cj4gCj4gU3VyZWx5IHRoaXMgc2hvdWxkIGJlIHVzaW5nIHNyY19beHldICh3 aGljaCBhcmUgdGhlIHBvc2l0aW9uIGluIHRoZQo+IHNvdXJjZSAtIGlvdywgbWVtb3J5LCBhbmQg bm90IGNydGNfW3h5XSB3aGljaCBpcyB0aGUgcG9zaXRpb24gb24gdGhlCj4gQ1JUQyBkaXNwbGF5 ZWQgd2luZG93LiAgVG8gcHV0IGl0IGFub3RoZXIgd2F5LCB0aGUgc3JjXyogZGVmaW5lIHRoZQo+ IHJlZ2lvbiBvZiB0aGUgc291cmNlIG1hdGVyaWFsIHRoYXQgaXMgbWFwcGVkIG9udG8gYSByZWN0 YW5ndWxhciBhcmVhCj4gb24gdGhlIGRpc3BsYXkgZGVmaW5lZCBieSBjcnRjXyouCgpZZXMsIHRo YXQgaXMgYSBidWcgYW5kIG1vc3QgbGlrZWx5IHRoZSBzb3VyY2Ugb2YgdGhlIGlzc3VlIHRoYXQg eW91IGFyZQpzZWVpbmcgaWYgbXkgdW5kZXJzdGFuZGluZyBvZiB5b3VyIHRlc3RpbmcgaXMgY29y cmVjdC4KCj4gCj4gQW5vdGhlciBub3RlIGlzIHRoYXQgc2luY2UgdGhlIENSVEMgY2FuJ3QgcGxh Y2UgdGhlIHBsYW5lIGluIGFyYml0YXJ5Cj4gcG9zaXRpb25zIGFuZCBzaXplcyB3aXRoaW4gdGhl IGFjdGl2ZSBhcmVhLCBzaG91bGQgdGhlIGF0b21pY19jaGVjawo+IGVuc3VyZSB0aGF0IGNydGNf eCA9IGNydGNfeSA9IDAsIGFuZCB0aGUgY3J0YyB3aWR0aC9oZWlnaHQgYXJlIHRoZQo+IHNpemUg b2YgdGhlIGFjdGl2ZSBhcmVhPwoKVGhhdCBzaG91bGQgYmUgdGhlIGNhc2UsIGluZGVlZC4gSSdt IGdvaW5nIHByZXBhcmUgYSBwYXRjaCB0byBkbyB0aGF0LgoKPiAKPiAgZHJpdmVycy9ncHUvZHJt L2FybS9oZGxjZF9jcnRjLmMgfCAgICAyICsrCj4gIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlv bnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9jcnRjLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2NydGMuYwo+IGluZGV4IDQ4MDE5YWUyMmRkYi4u M2U5N2FjZjZlMmE3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfY3J0 Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9jcnRjLmMKPiBAQCAtMTUwLDYg KzE1MCw4IEBAIHN0YXRpYyB2b2lkIGhkbGNkX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKPiAgCWNsa19wcmVwYXJlX2VuYWJsZShoZGxjZC0+Y2xrKTsKPiAgCWhkbGNkX2NydGNf bW9kZV9zZXRfbm9mYihjcnRjKTsKPiAgCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfQ09N TUFORCwgMSk7Cj4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0NPTU1BTkQsIDApOwo+ ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19DT01NQU5ELCAxKTsKCkkgYW0gbm90IGNv bnZpbmNlZCB0aGF0IHRoaXMgaXMgdGhlIHJpZ2h0IGZpeC4gSWYgYW55dGhpbmcsIEkgd291bGQg cHV0IGEKaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19DT01NQU5ELCAwKTsgbGluZSBiZWZv cmUgaGRsY2RfY3J0Y19tb2RlX3NldF9ub2ZzKGNydGMpOwpsaW5lIHRvIG1ha2Ugc3VyZSB0aGUg Y29tbWFuZCBtb2RlIGlzIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHRoZSBtb2RlLCBidXQKYWdh aW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHlvdXIgdXNlIGNhc2UgdG8gbWFrZSBzdXJlIHRoYXQg dGhpcyBpbmRlZWQgZml4ZXMgaXQuCgpCZXN0IHJlZ2FyZHMsCkxpdml1Cgo+ICB9Cj4gIAo+ICBz dGF0aWMgdm9pZCBoZGxjZF9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+IAo+ IAo+IC0tIAo+IFJNSydzIFBhdGNoIHN5c3RlbTogaHR0cDovL3d3dy5hcm1saW51eC5vcmcudWsv ZGV2ZWxvcGVyL3BhdGNoZXMvCj4gRlRUQyBicm9hZGJhbmQgZm9yIDAuOG1pbGUgbGluZTogY3Vy cmVudGx5IGF0IDkuNk1icHMgZG93biA0MDBrYnBzIHVwCj4gYWNjb3JkaW5nIHRvIHNwZWVkdGVz dC5uZXQuCgotLSAKPT09PT09PT09PT09PT09PT09PT0KfCBJIHdvdWxkIGxpa2UgdG8gfAp8IGZp eCB0aGUgd29ybGQsICB8CnwgYnV0IHRoZXkncmUgbm90IHwKfCBnaXZpbmcgbWUgdGhlICAgfAog XCBzb3VyY2UgY29kZSEgIC8KICAtLS0tLS0tLS0tLS0tLS0KICAgIMKvXF8o44OEKV8vwq8KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==