[U-Boot] U-Boot Sunxi breaks LCD output on Olimex Lime A10

Siarhei Siamashka siarhei.siamashka at gmail.com
Thu Oct 16 11:22:36 CEST 2014


On Fri, 03 Oct 2014 11:19:47 +0200
Hans de Goede <hdegoede at redhat.com> wrote:

> Hi,
> 
> On 10/03/2014 10:49 AM, Siarhei Siamashka wrote:
> > On Fri, 03 Oct 2014 10:04:29 +0200
> > Hans de Goede <hdegoede at redhat.com> wrote:
> > 
> >> Hi,
> >>
> >> On 10/01/2014 07:43 PM, Hendrik wrote:
> >>> I have always been using the sunxi u-boot from 'https://github.com/linux-sunxi/u-boot-sunxi' and that works fine, but now I want to boot the kernel from USB. That is not possible in that u-boot branch. Therefore I switched to the latest U-Boot 'git://git.denx.de/u-boot.git' for the Olimex Allwinner A10 Lime as this one does have a working USB mass storage implementation.
> >>>
> >>> But when the kernel and root filesystem is booted and my application (using DirectFB) starts, the LCD screen is flickering between a correct image and an incorrect image as if sometimes random image data is displayed to the screen. Although it looks more like a clock or timing issue because the colors of the faulty screen resemble the colors of the correct screen. Also: when the cpu is inactive the screen is more or less ok but when doing a lot of work the screen starts to flicker. Then it is stable for a while and after some time it starts flickering again.
> >>>
> >>> I am using the exact same kernel, root filesystem, U-boot environment, SD-card and 'script.bin' (which defines the hardware layout, I am not using a device tree file). The only difference is the version (and origin) of U-boot.
> >>>
> >>> Can anybody shine some light on this? Maybe Hans de Goede? I have seen his name pop-up a lot of times with the Sunxi branch.
> >>
> >> Hmm, the only thing I can think of which may have caused this are the
> >> recent DRAM controller code cleanups which are in upstream u-boot and
> >> not in https://github.com/linux-sunxi/u-boot-sunxi
> >>
> >> Can you try copying these 2 files:
> >>
> >> arch/arm/cpu/armv7/sunxi/dram.c
> >> arch/arm/include/asm/arch-sunxi/dram.h
> >>
> >> From https://github.com/linux-sunxi/u-boot-sunxi over into upstream
> >> u-boot, essentially reverting the DRAM cleanup patches, and see if that
> >> fixes things ?
> > 
> > It is most definitely the PLL5P clock speed problem and it can be
> > resolved by either reverting the following patch in u-boot
> >     http://git.denx.de/?p=u-boot.git;a=commit;h=013f2d746955147439215a4939655c9ed6bdd866
> > or by fixing a bunch of hardcoded divisors in the sunxi-3.4
> > kernel (for which I'll send a patch to the linux-sunxi mailing list
> > later today).
> 
> Thanks, that is good to know. I'm tempted to revert that patch then for
> now. I say tempted, as I'm not 100% sure on this. I do want mainline
> u-boot to work eventually with the sunxi-3.4, so that we can stop
> maintaining https://github.com/linux-sunxi/u-boot-sunxi

There is no real need to maintain u-boot in this repository since a
long time ago.

Just please don't fix something that is not broken. And also don't
break it unnecessarily by pushing there some unreviewed submarine
patches and doing reckless merges.

> But this will requires some sunxi-3.4 kernel changes for A20 anyways,
> so if you've a sunxi-3.4 patch fixing things, then maybe
> 
> > Please note that you can't use the sunxi-3.4 kernel with the unmodified
> > mainline u-boot anyway because of the missing machine id definitions and
> > the new PSCI code (but this is a problem only on Allwinner A20
> > hardware). A few minor patches are needed here and there.
> 
> Right, I plan to fix the missing machine ids ASAP, we did not add them
> because we thought they were not properly registered, but I've checked
> and they actually are properly registered. I welcome a patch adding them,
> and unless someone beats me to it I hope to write one myself real soon.
> 
> With the machine ids added upstream u-boot will work fine for sun4i and
> sun5i with existing sunxi-3.4 kernels, which is why I'm tempted to
> revert the commit you mention above if that breaks that (in some scenarios).

The (missing) machine id acts as a safety guard and prevents loading
incompatible kernel. But as soon as you add the machine id, the
users will assume that any old kernel is supposed to be supported the
u-boot will effectively have to be compatible with old bugs.

This is not a very nice situation, but there are a few possible
scenarios:

1) A bureaucratic way. Try to register a new set of machine identifiers,
something like "sun4i_v2", "sun5i_v2", "sun7i_v2". Then patch the
sunxi-3.4 kernel to support both old and new machine identifiers, so
that both old u-boot-sunxi and the mainline u-boot can be used with the
updated kernels. But the old kernels will refuse to load from the
mainline u-boot. There is already a garbage (?) entry in the machine id
database, a few more would not hurt too much:
    3931 AllWinner A1x Developer Board lichee_sun4i_devbd

2) A hackish way. Similar to 1), but don't register anything. Just treat
a few high bits of the machine id as some kind of a version number. So
the current machine ids have version "0", the next set can have version
"1" and so on. The sunxi-3.4 kernel can be patched to fix bugs and the
supported "version" can be increased. Because real machine id numbers
are assigned sequentially, no clash is likely.

3) Just do the revert of the PLL5P patch, add the legacy machine id and
hope that the old kernels will die off eventually. The problem here is
that we don't know how long to wait. We are taking the burden of
promise to be be compatible with the legacy kernel and respect all of
its restrictions. And it's not just a single patch. Trying to increase
the DRAM clock speed is potentially dangerous. For example, ACE is
documented to have a 200MHz clock speed limit, but it is using /2
divisor. Which means that with the 480MHz DRAM clock speed, we are
clocking ACE beyond normal operational limit. There are also voltage
regulators, controlled from FEX. We can't safely increase the VDD-DLL
voltage in u-boot, because the sunxi-3.4 kernel will change it to the
lower value.

> > A feature complete u-boot branch with extra patches on top of u-boot
> > v2014.10 (for example, with HDMI video driver support) 
> 
> Hmm, I assume that you're working on this and are going to maintain this?
> 
> So this is going to be some patches on top of v2014.10, or do you plan to
> merge v2014.10 and https://github.com/linux-sunxi/u-boot-sunxi ?

Just a minimal set of important patches on to of v2014.10, so that the
delta is clearly visible and kept minimal. There is no point doing
anything with https://github.com/linux-sunxi/u-boot-sunxi

> If this is going to be some patches on top of v2014.10, please consider
> pushing for getting these merged. I'm definitely interested in getting
> upstream u-boot to work with the sunxi-3.4 kernels, and I say this with my
> sunxi u-boot custodian hat firmly on.
> 
> As for the hdmi support, please note that I maintain a branch with that,
> (*) which includes several fixes here:
> 
> https://github.com/jwrdegoede/u-boot-sunxi/commits/sunxi-wip
> 
> And I plan to get this merged into u-boot master post the v2014.10 release,
> the big blocker is the simplefb clocks binding thingie, and I hope that
> that will be resolved soon.
> 
> Regards,
> 
> Hans
> 
> 
> *) other pending stuff I'm working on



-- 
Best regards,
Siarhei Siamashka


More information about the U-Boot mailing list