* [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug @ 2015-04-24 18:39 Hans de Goede 2015-05-02 13:21 ` Ian Campbell 0 siblings, 1 reply; 7+ messages in thread From: Hans de Goede @ 2015-04-24 18:39 UTC (permalink / raw) To: u-boot Linux-4.0 as shipped has a bug causing it to not boot if the end of memory is not aligned to a multiple of 2 MiB. For details see the linux-arm mailing list post titled: "Memory size unaligned to section boundary" http://www.spinics.net/lists/arm-kernel/msg413811.html This is something which specifically hits the sunxi display driver because we carve out the exact needed framebuffer size at the top of mem, this commit works around this issue by aligning the carve out. Cc: Stefan Agner <stefan@agner.ch> Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/video/sunxi_display.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c index 95cfe94..4607269 100644 --- a/drivers/video/sunxi_display.c +++ b/drivers/video/sunxi_display.c @@ -1278,6 +1278,19 @@ int sunxi_simplefb_setup(void *blob) */ start = gd->bd->bi_dram[0].start; size = gd->bd->bi_dram[0].size - sunxi_display.fb_size; + + /* + * Linux-4.0 as shipped has a bug causing it not boot if the end + * of memory is not aligned to a multiple of 2 MiB. For details + * see the linux-arm mailing list post titled: + * "Memory size unaligned to section boundary" + * http://www.spinics.net/lists/arm-kernel/msg413811.html + * + * This workaround should be removed once the bug has been fixed + * and we no longer care about the Linux versions with the bug. + */ + size &= ~(2 * 1024 * 1024 - 1); + ret = fdt_fixup_memory_banks(blob, &start, &size, 1); if (ret) { eprintf("Cannot setup simplefb: Error reserving memory\n"); -- 2.3.5 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug 2015-04-24 18:39 [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug Hans de Goede @ 2015-05-02 13:21 ` Ian Campbell 2015-05-04 8:51 ` Hans de Goede 0 siblings, 1 reply; 7+ messages in thread From: Ian Campbell @ 2015-05-02 13:21 UTC (permalink / raw) To: u-boot On Fri, 2015-04-24 at 20:39 +0200, Hans de Goede wrote: > Linux-4.0 as shipped has a bug causing it to not boot if the end of memory > is not aligned to a multiple of 2 MiB. For details see the linux-arm > mailing list post titled: > "Memory size unaligned to section boundary" > http://www.spinics.net/lists/arm-kernel/msg413811.html > > This is something which specifically hits the sunxi display driver because > we carve out the exact needed framebuffer size at the top of mem, this > commit works around this issue by aligning the carve out. I'm afraid I don't like this, we shouldn't be working around Linux bugs in the firmware, especially when both are Free software. Lets just fix Linux and get the fix into the appropriate stable trees and in the meantime tell people to avoid this buggy kernel. The problem with this sort of thing is that it is very hard to get rid of these workarounds, even once the underlying issue is fixed and we no longer care about the versions with the bug OS authors (including non-Linux OSes) can inadvertently come to rely on the quirky behaviour, (i.e. the work around masks other bugs). Hence we end up in a quirks-race as everyone works around the other parties last workaround. If there is to be a workaround instead of a fix then it should be for Linux to align memory to 2MB boundaries if that is what it requires. > Cc: Stefan Agner <stefan@agner.ch> > Signed-off-by: Hans de Goede <hdegoede@redhat.com> > --- > drivers/video/sunxi_display.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c > index 95cfe94..4607269 100644 > --- a/drivers/video/sunxi_display.c > +++ b/drivers/video/sunxi_display.c > @@ -1278,6 +1278,19 @@ int sunxi_simplefb_setup(void *blob) > */ > start = gd->bd->bi_dram[0].start; > size = gd->bd->bi_dram[0].size - sunxi_display.fb_size; > + > + /* > + * Linux-4.0 as shipped has a bug causing it not boot if the end > + * of memory is not aligned to a multiple of 2 MiB. For details > + * see the linux-arm mailing list post titled: > + * "Memory size unaligned to section boundary" > + * http://www.spinics.net/lists/arm-kernel/msg413811.html > + * > + * This workaround should be removed once the bug has been fixed > + * and we no longer care about the Linux versions with the bug. > + */ > + size &= ~(2 * 1024 * 1024 - 1); > + > ret = fdt_fixup_memory_banks(blob, &start, &size, 1); > if (ret) { > eprintf("Cannot setup simplefb: Error reserving memory\n"); ^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug 2015-05-02 13:21 ` Ian Campbell @ 2015-05-04 8:51 ` Hans de Goede 2015-05-04 9:36 ` Ian Campbell 0 siblings, 1 reply; 7+ messages in thread From: Hans de Goede @ 2015-05-04 8:51 UTC (permalink / raw) To: u-boot Hi, On 02-05-15 15:21, Ian Campbell wrote: > On Fri, 2015-04-24 at 20:39 +0200, Hans de Goede wrote: >> Linux-4.0 as shipped has a bug causing it to not boot if the end of memory >> is not aligned to a multiple of 2 MiB. For details see the linux-arm >> mailing list post titled: >> "Memory size unaligned to section boundary" >> http://www.spinics.net/lists/arm-kernel/msg413811.html >> >> This is something which specifically hits the sunxi display driver because >> we carve out the exact needed framebuffer size at the top of mem, this >> commit works around this issue by aligning the carve out. > > I'm afraid I don't like this, we shouldn't be working around Linux bugs > in the firmware, especially when both are Free software. Lets just fix > Linux and get the fix into the appropriate stable trees and in the > meantime tell people to avoid this buggy kernel. > > The problem with this sort of thing is that it is very hard to get rid > of these workarounds, even once the underlying issue is fixed and we no > longer care about the versions with the bug OS authors (including > non-Linux OSes) can inadvertently come to rely on the quirky behaviour, > (i.e. the work around masks other bugs). Hence we end up in a > quirks-race as everyone works around the other parties last workaround. > > If there is to be a workaround instead of a fix then it should be for > Linux to align memory to 2MB boundaries if that is what it requires. I can understand where you're coming from, the problem is that despite various mails to the arm kernel mailing list no one from the upstream kernel seems to be looking into this, and I've no clue where to even begun looking. In the mean time any sunxi boards users using a 1024x600 framebuffer (and likely other resulutions, 1024x600 is just one known way to trigger the problem), trying to boot using the latest upstream kernel end up with a non working system, without any clue as to why the kernel dies (as it dies really early). This also means that people trying to bring up new boards will not succeed, costing us potential contributors. All in all I really believe that this is something which we should workaround, also keep in mind that what we're doing is quite special (clearly otherwise the bug would hit more users), we are not just curving out X MB of RAM at the top, but exactly the amount we need, and no more, lots of boards likely just carve out 8 / 16 MiB and thus are fine. Regards, Hans > >> Cc: Stefan Agner <stefan@agner.ch> >> Signed-off-by: Hans de Goede <hdegoede@redhat.com> >> --- >> drivers/video/sunxi_display.c | 13 +++++++++++++ >> 1 file changed, 13 insertions(+) >> >> diff --git a/drivers/video/sunxi_display.c b/drivers/video/sunxi_display.c >> index 95cfe94..4607269 100644 >> --- a/drivers/video/sunxi_display.c >> +++ b/drivers/video/sunxi_display.c >> @@ -1278,6 +1278,19 @@ int sunxi_simplefb_setup(void *blob) >> */ >> start = gd->bd->bi_dram[0].start; >> size = gd->bd->bi_dram[0].size - sunxi_display.fb_size; >> + >> + /* >> + * Linux-4.0 as shipped has a bug causing it not boot if the end >> + * of memory is not aligned to a multiple of 2 MiB. For details >> + * see the linux-arm mailing list post titled: >> + * "Memory size unaligned to section boundary" >> + * http://www.spinics.net/lists/arm-kernel/msg413811.html >> + * >> + * This workaround should be removed once the bug has been fixed >> + * and we no longer care about the Linux versions with the bug. >> + */ >> + size &= ~(2 * 1024 * 1024 - 1); >> + >> ret = fdt_fixup_memory_banks(blob, &start, &size, 1); >> if (ret) { >> eprintf("Cannot setup simplefb: Error reserving memory\n"); > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug 2015-05-04 8:51 ` Hans de Goede @ 2015-05-04 9:36 ` Ian Campbell 2015-05-05 9:39 ` Mark Rutland 0 siblings, 1 reply; 7+ messages in thread From: Ian Campbell @ 2015-05-04 9:36 UTC (permalink / raw) To: u-boot On Mon, 2015-05-04 at 10:51 +0200, Hans de Goede wrote: > Hi, > > On 02-05-15 15:21, Ian Campbell wrote: > > On Fri, 2015-04-24 at 20:39 +0200, Hans de Goede wrote: > >> Linux-4.0 as shipped has a bug causing it to not boot if the end of memory > >> is not aligned to a multiple of 2 MiB. For details see the linux-arm > >> mailing list post titled: > >> "Memory size unaligned to section boundary" > >> http://www.spinics.net/lists/arm-kernel/msg413811.html > >> > >> This is something which specifically hits the sunxi display driver because > >> we carve out the exact needed framebuffer size at the top of mem, this > >> commit works around this issue by aligning the carve out. > > > > I'm afraid I don't like this, we shouldn't be working around Linux bugs > > in the firmware, especially when both are Free software. Lets just fix > > Linux and get the fix into the appropriate stable trees and in the > > meantime tell people to avoid this buggy kernel. > > > > The problem with this sort of thing is that it is very hard to get rid > > of these workarounds, even once the underlying issue is fixed and we no > > longer care about the versions with the bug OS authors (including > > non-Linux OSes) can inadvertently come to rely on the quirky behaviour, > > (i.e. the work around masks other bugs). Hence we end up in a > > quirks-race as everyone works around the other parties last workaround. > > > > If there is to be a workaround instead of a fix then it should be for > > Linux to align memory to 2MB boundaries if that is what it requires. > > I can understand where you're coming from, the problem is that despite > various mails to the arm kernel mailing list no one from the upstream > kernel seems to be looking into this, Mark, do you think you could find some cycles (not necessarily your own) to look at this, or perhaps you know the appropriate maintainers to ping? I'd really like to avoid having to hack around kernel bugs in the firmware. > and I've no clue where to even > begun looking. > > In the mean time any sunxi boards users using a 1024x600 framebuffer (and > likely other resulutions, 1024x600 is just one known way to trigger the > problem), trying to boot using the latest upstream kernel end up with > a non working system, without any clue as to why the kernel dies > (as it dies really early). This also means that people trying to bring > up new boards will not succeed, costing us potential contributors. I see where you are coming from here, but really this should just be a short term problem, one which can be solved by a) making plenty of noise on the right lists and b) appropriate docs for new comers pointing out this pitfall. Adding the workaround just makes this into a long term problem. > All in all I really believe that this is something which we should > workaround, also keep in mind that what we're doing is quite special > (clearly otherwise the bug would hit more users), we are not just curving > out X MB of RAM at the top, but exactly the amount we need, and no more, > lots of boards likely just carve out 8 / 16 MiB and thus are fine. I could see an argument for us doing similarly, just not the argument for doing it as a temporary workaround (since in reality it likely won't be). Ian. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug 2015-05-04 9:36 ` Ian Campbell @ 2015-05-05 9:39 ` Mark Rutland 2015-05-12 13:53 ` Mark Rutland 0 siblings, 1 reply; 7+ messages in thread From: Mark Rutland @ 2015-05-05 9:39 UTC (permalink / raw) To: u-boot On Mon, May 04, 2015 at 10:36:43AM +0100, Ian Campbell wrote: > On Mon, 2015-05-04 at 10:51 +0200, Hans de Goede wrote: > > Hi, > > > > On 02-05-15 15:21, Ian Campbell wrote: > > > On Fri, 2015-04-24 at 20:39 +0200, Hans de Goede wrote: > > >> Linux-4.0 as shipped has a bug causing it to not boot if the end of memory > > >> is not aligned to a multiple of 2 MiB. For details see the linux-arm > > >> mailing list post titled: > > >> "Memory size unaligned to section boundary" > > >> http://www.spinics.net/lists/arm-kernel/msg413811.html > > >> > > >> This is something which specifically hits the sunxi display driver because > > >> we carve out the exact needed framebuffer size at the top of mem, this > > >> commit works around this issue by aligning the carve out. > > > > > > I'm afraid I don't like this, we shouldn't be working around Linux bugs > > > in the firmware, especially when both are Free software. Lets just fix > > > Linux and get the fix into the appropriate stable trees and in the > > > meantime tell people to avoid this buggy kernel. > > > > > > The problem with this sort of thing is that it is very hard to get rid > > > of these workarounds, even once the underlying issue is fixed and we no > > > longer care about the versions with the bug OS authors (including > > > non-Linux OSes) can inadvertently come to rely on the quirky behaviour, > > > (i.e. the work around masks other bugs). Hence we end up in a > > > quirks-race as everyone works around the other parties last workaround. > > > > > > If there is to be a workaround instead of a fix then it should be for > > > Linux to align memory to 2MB boundaries if that is what it requires. > > > > I can understand where you're coming from, the problem is that despite > > various mails to the arm kernel mailing list no one from the upstream > > kernel seems to be looking into this, > > Mark, do you think you could find some cycles (not necessarily your own) > to look at this, or perhaps you know the appropriate maintainers to > ping? I'll have another look and see if I can come up with a kernel patch. Perhaps proposing something (even if slightly wrong) will provoke people to respond. > I'd really like to avoid having to hack around kernel bugs in the > firmware. Likewise. Mark. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug 2015-05-05 9:39 ` Mark Rutland @ 2015-05-12 13:53 ` Mark Rutland 2015-05-12 14:31 ` Ian Campbell 0 siblings, 1 reply; 7+ messages in thread From: Mark Rutland @ 2015-05-12 13:53 UTC (permalink / raw) To: u-boot On Tue, May 05, 2015 at 10:39:14AM +0100, Mark Rutland wrote: > On Mon, May 04, 2015 at 10:36:43AM +0100, Ian Campbell wrote: > > On Mon, 2015-05-04 at 10:51 +0200, Hans de Goede wrote: > > > Hi, > > > > > > On 02-05-15 15:21, Ian Campbell wrote: > > > > On Fri, 2015-04-24 at 20:39 +0200, Hans de Goede wrote: > > > >> Linux-4.0 as shipped has a bug causing it to not boot if the end of memory > > > >> is not aligned to a multiple of 2 MiB. For details see the linux-arm > > > >> mailing list post titled: > > > >> "Memory size unaligned to section boundary" > > > >> http://www.spinics.net/lists/arm-kernel/msg413811.html > > > >> > > > >> This is something which specifically hits the sunxi display driver because > > > >> we carve out the exact needed framebuffer size at the top of mem, this > > > >> commit works around this issue by aligning the carve out. > > > > > > > > I'm afraid I don't like this, we shouldn't be working around Linux bugs > > > > in the firmware, especially when both are Free software. Lets just fix > > > > Linux and get the fix into the appropriate stable trees and in the > > > > meantime tell people to avoid this buggy kernel. > > > > > > > > The problem with this sort of thing is that it is very hard to get rid > > > > of these workarounds, even once the underlying issue is fixed and we no > > > > longer care about the versions with the bug OS authors (including > > > > non-Linux OSes) can inadvertently come to rely on the quirky behaviour, > > > > (i.e. the work around masks other bugs). Hence we end up in a > > > > quirks-race as everyone works around the other parties last workaround. > > > > > > > > If there is to be a workaround instead of a fix then it should be for > > > > Linux to align memory to 2MB boundaries if that is what it requires. > > > > > > I can understand where you're coming from, the problem is that despite > > > various mails to the arm kernel mailing list no one from the upstream > > > kernel seems to be looking into this, > > > > Mark, do you think you could find some cycles (not necessarily your own) > > to look at this, or perhaps you know the appropriate maintainers to > > ping? > > I'll have another look and see if I can come up with a kernel patch. > Perhaps proposing something (even if slightly wrong) will provoke people > to respond. For the benefit of anyone not on the Linux ARM kernel list there's now a patch addressing the issue [1]. Mark. [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-May/342210.html ^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug 2015-05-12 13:53 ` Mark Rutland @ 2015-05-12 14:31 ` Ian Campbell 0 siblings, 0 replies; 7+ messages in thread From: Ian Campbell @ 2015-05-12 14:31 UTC (permalink / raw) To: u-boot On Tue, 2015-05-12 at 14:53 +0100, Mark Rutland wrote: > > I'll have another look and see if I can come up with a kernel patch. > > Perhaps proposing something (even if slightly wrong) will provoke people > > to respond. > > For the benefit of anyone not on the Linux ARM kernel list there's now a > patch addressing the issue [1]. Thanks! ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-05-12 14:31 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-04-24 18:39 [U-Boot] [PATCH] sunxi: display: Align end of memory to work around a linux-4.0 bug Hans de Goede 2015-05-02 13:21 ` Ian Campbell 2015-05-04 8:51 ` Hans de Goede 2015-05-04 9:36 ` Ian Campbell 2015-05-05 9:39 ` Mark Rutland 2015-05-12 13:53 ` Mark Rutland 2015-05-12 14:31 ` Ian Campbell
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox