Thanks,

applied and pushed.

Regards,

Hans


On 04/27/2014 08:50 PM, Siarhei Siamashka wrote:
> When driving a 1920x1080-32@60Hz monitor, framebuffer scanout for
> screen refresh becomes more bandwidth intensive and challening.
> There used to be an old problem, which manifested itself as a
> screen shaking effect when CPU or GPU are doing something memory
> intensive and competing for the memory bandwidth with the display
> controller. A possible explanation for it is that the display
> controller just sends the previous scanline over HDMI in the case
> if it can't read the current one in time.
> 
> Framebuffer scanout can be done either by DEBE or by DEFE. It seems
> like DEBE is broken beyond repair. Apparently it is doing isolated
> 32 byte burst reads at regular intervals to scan out the framebuffer
> and send this data over HDMI. The size of this burst is too small.
> And if something else (CPU or GPU) is accessing memory at the same
> time, we easily get bank conflicts with huge penalties. As these
> penalties happen per 32 bytes of data, most of the memory bandwidth
> is wasted. The end result is the screen shaking effect and a
> significant performance loss for the CPU/GPU. This all is happening
> because DEBE is configured to have higher priority than CPU and GPU.
> So it can do these tiny bursts and nobody can do anything about it.
> If we reduce the priority of DEBE, then the screen shaking effect
> becomes much worse.
> 
> DEFE is somewhat similar to DEBE. But the key difference is that
> it seems to implement some buffering of data and this buffer does
> not underrun so easily. So it is possible to drop the priority
> of DEFE port and make it the same as CPU/GPU. However in order to
> get really perfect results, we need to also increase the "host port
> command number" parameter. It is currently set to 0x10 by default
> (the same as for CPU and GPU) and from what it looks, it affects
> the bandwidth distribution between the ports with equal priority.
> To experiment with this, I took A10-OLinuXino-LIME board (which
> has a slow 16-bit memory interface) and downclocked DRAM to 408MHz.
> Then used lima-memtester and glmark2-es2 programs to reproduce the
> screen shaking effect. Increasing the "host port command number"
> parameter resulted in a gradual reduction of the image glitches.
> And at 0x50, the shaking effect disappeared completely.
> 
> So all that we need to do is a simple change "0x1035 -> 0x5031"
> for the DEFE host port setup. And even A10-OLinuXino-LIME becomes
> able to drive a FullHD monitor at 60Hz and 32bpp without issues
> if "fb0_scaler_mode_enable" is set to 1 in the fex file.
> 
> Additionally, for A10-OLinuXino-LIME with DRAM clocked at 480MHz
> and driving a 1920x1080-32@60Hz monitor in "scaler" mode, the
> memset performance improves from 559.3 MB/s to 807.3 MB/s and
> the memcpy performance improves from 299.3 MB/s to 317.9 MB/s
> after this patch. So the memory bandwidth drain becomes smaller
> the the overall system performance improves.
> 
> This has been also discussed at:
> https://www.mail-archive.com/[email protected]/msg04085.html
> 
> Signed-off-by: Siarhei Siamashka <[email protected]>
> ---
>  arch/arm/cpu/armv7/sunxi/dram.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm/cpu/armv7/sunxi/dram.c b/arch/arm/cpu/armv7/sunxi/dram.c
> index caf94e9..09bde09 100644
> --- a/arch/arm/cpu/armv7/sunxi/dram.c
> +++ b/arch/arm/cpu/armv7/sunxi/dram.c
> @@ -157,7 +157,7 @@ static u32 hpcr_value[32] = {
>       0x0301, 0x0301, 0, 0,
>       0, 0, 0, 0,
>       0, 0, 0, 0,
> -     0x1031, 0x1031, 0x0735, 0x1035,
> +     0x1031, 0x1031, 0x0735, 0x5031,
>       0x1035, 0x0731, 0x1031, 0x0735,
>       0x1035, 0x1031, 0x0731, 0x1035,
>       0x1031, 0x0301, 0x0301, 0x0731
> 

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to