From: Jocelyn Falempe <jfalempe@redhat.com>
To: Thomas Zimmermann <tzimmermann@suse.de>,
Jacob Keller <jacob.e.keller@intel.com>,
Dave Airlie <airlied@redhat.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Simona Vetter <simona@ffwll.ch>
Cc: Pasi Vaananen <pvaanane@redhat.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH] drm/mgag200: sleep instead of busy wait for BMC
Date: Fri, 30 Jan 2026 15:22:52 +0100 [thread overview]
Message-ID: <85edc1c4-1985-48d0-9ece-50a5c70e1752@redhat.com> (raw)
In-Reply-To: <4272ae94-902e-40dc-86ce-62b642fa9656@suse.de>
On 30/01/2026 15:03, Thomas Zimmermann wrote:
> Hi,
>
> I don't understand this.
>
> Am 30.01.26 um 14:27 schrieb Jocelyn Falempe:
>> Hi,
>>
>> To take some measurement, I've put this instead of step 3a of
>> mgag200_bmc_stop_scanout()
>>
>> for (i = 0; i < 100000; i++) {
>> WREG8(DAC_INDEX, MGA1064_SPAREREG);
>> tmp = RREG8(DAC_DATA);
>> pr_info("MGA Sparereg %02x\n", tmp);
>> udelay(10);
>> }
>> return;
>
> What do you actually measure? The loop in 3a is supposed to end as soon
> as bit 0x1 signals that the hsync is active.
>
> Are you sure that the pr_info() doesn't interfere with the loop? This is
> a tight loop to catch the bit when it flips. Putting that pr_info()
> there in the loop can take plenty of time.
I just read continuously the SPAREREG register, just after step 2.
So I take 100000 measurement, every 10us, which should take 1s, but take
1,2s in practice, probably due to pr_info(), and reading MGA register,
but that's not relevant.
>
>
>
>>
>> It's called at boot at
>> [ 45.110616] MGA STOP SCANOUT
>> [ 45.110631] MGA Sparereg 84
>> it oscillates between 80, 81, 82, 83, 84 for ~4310us
>> [ 45.114941] MGA Sparereg 81
>> then stays at 81 for ~227ms
>> [ 45.342492] MGA Sparereg 81
>> [ 45.342504] MGA Sparereg 80
>> and stays at 80 for 1136ms, until the end of the loop.
>> [ 46.356152] MGA Sparereg 80
>>
>> Then it's called a few time when my display go blank and each time a
>> different behavior is seen
>>
>> [ 729.448040] MGA STOP SCANOUT
>> [ 729.448055] MGA Sparereg 80
>> it oscillates between 80, 81, 82, 83, 84 for ~39258us
>> [ 729.487313] MGA Sparereg 81
>> then stays at 81 for ~230ms
>> [ 729.717349] MGA Sparereg 81
>> [ 729.717363] MGA Sparereg 80
>> then back to 80
>>
>> This one is strange, it stays at 0x81 for 1191ms
>> [ 838.307042] MGA STOP SCANOUT
>> [ 838.307055] MGA Sparereg 81
>> [ 839.498450] MGA Sparereg 81
>>
>> And the last one, this time it stays at 0x80 for 1235ms
>>
>> [ 4318.439032] MGA STOP SCANOUT
>> [ 4318.439047] MGA Sparereg 80
>> [ 4319.674140] MGA Sparereg 80
>>
>> So my conclusion, is that the bit 2 is almost never seen when polling
>> at 10us, so there is no chance to see it if polling at 1000us like
>> it's done by the driver. So the step 3b won't work at all on my setup.
>
>
>
>>
>> But even the bit 1 can stay set or unset for more than 1s, so it looks
>> very unreliable to rely on it, at least on this hardware.
>
> Did you connect to the BMC virtual display while performing the test?
I didn't configure the remote interface on this machine. But this code
is still run and should work in this case.
>
>
>>
>> I feel like doing a msleep(300) is probably the best bet.
>> If you still trust the hardware, maybe it should wait for ~100us, then
>> check the bit 1 and wait until it goes back to 0.
>
> Here's an example calculation: with 1920x1080@60Hz, there are 1125 lines
> overall. So
>
> (1,000,000 usec/sec / 60 Hz) / 1125 lines ~= 14.8 usec / line.
>
> There are 2200 pixels on each scanline. So
>
> (1 - (1920 pixels / 2200 pixels) ) * 14.8 usec / line ~= 1.88 usec
>
> This is roughly the time that the CRTC spends in each scanline's blank
> area and likely the upper bound for the duration of a single polling
> with that display mode. Otherwise, we might miss the blank.
>
> Honestly, I'd just take the proposed patch as it is and not bother any
> further. I think this is the correct fix unless we can figure out the
> exact meaning of these bits and the BMC.
I'm fine with that too. At least on my machine, this waits for a random
amount of time, and that looks to work.
>
> If anything, we could try to reduce the polling time to 1 usec and
> reduce the number of iterations to 50. This would give us 3 scanlines to
> catch the bit.
>
>
> Best regards
> Thomas
>
>
>>
>> You can find below the raw dmesg (I just removed the lines where the
>> value is equal to the previous and next line, to make it smaller).
>>
>
next prev parent reply other threads:[~2026-01-30 14:23 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-28 20:41 Jacob Keller
2026-01-29 8:15 ` Thomas Zimmermann
2026-01-29 17:02 ` Jacob Keller
2026-01-29 17:35 ` Jacob Keller
2026-01-29 18:47 ` Jocelyn Falempe
2026-01-29 19:19 ` Jacob Keller
2026-01-30 7:15 ` Thomas Zimmermann
2026-01-30 13:27 ` Jocelyn Falempe
2026-01-30 14:03 ` Thomas Zimmermann
2026-01-30 14:22 ` Jocelyn Falempe [this message]
2026-02-02 23:49 ` Jacob Keller
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=85edc1c4-1985-48d0-9ece-50a5c70e1752@redhat.com \
--to=jfalempe@redhat.com \
--cc=airlied@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jacob.e.keller@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=pvaanane@redhat.com \
--cc=simona@ffwll.ch \
--cc=stable@vger.kernel.org \
--cc=tzimmermann@suse.de \
/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
all inboxes | Powered by JetHome®