From: linux@armlinux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [BUG] hdlcd gets confused about base address
Date: Fri, 18 Nov 2016 23:37:33 +0000 [thread overview]
Message-ID: <20161118233733.GP1041@n2100.armlinux.org.uk> (raw)
Hi,
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.
Using devmem2 to disable and re-enable the HDLCD resolves the issue,
and repeated disable/enable cycles do not make the issue re-appear.
So, I patched the HDLCD to do this, and testing it with Xorg after
several repetitions seems to work.
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
---
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. 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.
With this patch, a patch to TDA998x to avoid the i2c-designware issue,
and xf86-video-armada, I have LXDE running on the Juno.
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_*.
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?
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);
}
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.
next reply other threads:[~2016-11-18 23:37 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-18 23:37 Russell King - ARM Linux [this message]
2016-11-21 9:44 ` [BUG] hdlcd gets confused about base address Daniel Vetter
2016-11-21 11:06 ` Liviu Dudau
2016-11-21 11:20 ` Russell King - ARM Linux
2016-11-21 11:32 ` Liviu Dudau
2016-11-21 12:25 ` Russell King - ARM Linux
2016-11-21 12:56 ` Liviu Dudau
2016-11-21 13:24 ` Russell King - ARM Linux
2016-11-21 13:50 ` Liviu Dudau
2016-11-21 14:03 ` Russell King - ARM Linux
2016-11-21 17:32 ` Liviu Dudau
2016-11-21 17:56 ` Russell King - ARM Linux
2016-11-21 18:16 ` Russell King - ARM Linux
2016-11-21 18:25 ` Liviu Dudau
2016-11-21 18:23 ` Liviu Dudau
2016-11-21 18:43 ` Russell King - ARM Linux
2016-11-21 14:30 ` Russell King - ARM Linux
2016-11-21 14:55 ` Russell King - ARM Linux
2016-11-22 7:02 ` Daniel Vetter
2017-02-20 12:16 ` Russell King - ARM Linux
2017-02-20 17:53 ` Liviu Dudau
2017-02-20 17:57 ` Russell King - ARM Linux
2017-02-20 18:05 ` Ville Syrjälä
2017-02-20 18:59 ` Russell King - ARM Linux
2017-02-22 15:42 ` Ville Syrjälä
2017-02-26 19:31 ` Daniel Vetter
2017-02-22 15:15 ` Liviu Dudau
2017-02-22 15:30 ` Ville Syrjälä
2017-03-08 16:30 ` [PATCH v2] drm: hdlcd: Fix the calculation of the scanout start address Liviu Dudau
2017-03-31 9:49 ` Russell King - ARM Linux
2017-03-31 9:51 ` [PATCH 1/3] drm/arm: hdlcd: properly validate plane state Russell King
2017-03-31 10:18 ` Liviu Dudau
2017-03-31 10:20 ` Russell King - ARM Linux
2017-03-31 10:23 ` Liviu Dudau
2017-03-31 10:27 ` Russell King - ARM Linux
2017-03-31 11:41 ` Liviu Dudau
2017-03-31 12:21 ` Russell King - ARM Linux
2017-03-31 9:51 ` [PATCH 2/3] drm/arm: hdlcd: fix plane base address calculation Russell King
2017-03-31 13:13 ` Liviu Dudau
2017-03-31 9:51 ` [PATCH 3/3] drm/arm: hdlcd: check for rotation Russell King
2017-03-31 10:11 ` Ville Syrjälä
2017-03-31 10:21 ` Liviu Dudau
2017-03-31 13:18 ` [PATCH v2] drm: hdlcd: Fix the calculation of the scanout start address Liviu Dudau
2017-03-31 13:48 ` Russell King - ARM Linux
2017-04-03 10:31 ` Liviu Dudau
2017-04-03 13:13 ` Russell King - ARM Linux
2017-04-03 14:07 ` Liviu Dudau
2017-04-06 11:07 ` Jani Nikula
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161118233733.GP1041@n2100.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).