mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Lucas Stach <l.stach@pengutronix.de>
To: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: "barebox@lists.infradead.org" <barebox@lists.infradead.org>,
	Vicenç <vicencb@gmail.com>
Subject: Re: Issue with MMU-less OMAP4
Date: Tue, 09 Aug 2016 10:37:05 +0200	[thread overview]
Message-ID: <1470731825.2243.9.camel@pengutronix.de> (raw)
In-Reply-To: <CAHQ1cqGwJRt+h=R9xp1vQY7cDZ7npdqQtuB8NuaHw30H1fkAkg@mail.gmail.com>

Am Montag, den 08.08.2016, 23:11 -0700 schrieb Andrey Smirnov:
> On Mon, Aug 8, 2016 at 8:10 AM, Vicenç <vicencb@gmail.com> wrote:
> > Hello,
> > I've updated the barebox version running on an archosG9 board since a
> > long time ago and it broke.
> > After searching for the problem found the commit causing the issue:
> > http://git.pengutronix.de/?p=barebox.git;a=commitdiff;h=dba6b4919e5b678b3b78b828b54504913577d337
> > When booting from USB is desired in an OMAP4 system, the MMU needs to
> > be disabled because the ROM code that deals with the USB
> > communications does not get on well with it.
> >
> > The issue is that it "hangs" when calling:
> > set_vbar((unsigned int)vectors);
> > I have no idea on how to fix the issue other than reverting the commit.
> >
> 
> I don't have extensive knowledge of OMAP4 since I never worked with
> that SoC. However from tidbits of information that I am gleaning from
> comments in Barebox it seems that particular version of functionality
> makes use of interrupts. This gives me a strong suspicion that what
> happens is that as soon as set_vbar() call is done (which will
> re-point CPU to a different interrupt vector table) one of the
> interrupts arrives and sends the processor into la-la land, since
> Barebox exception table doesn't have anything but basic entries.
> 
> So, if my guess is correct, what was happening prior to that commit
> was that on any hardware, in MMU-less mode, Barebox would not re-point
> the CPU to it's own exception handles and as such would not handle
> them at all(incorrect behavior), however that was a desired behavior
> on OMAP4 since this would result in ROM code doing all of the
> exception/interrupt handling work. And if that is the case fixing the
> problem for the rest of the SoCs, broke it for OMAP4 which was relying
> on control being passed to ROM for interrupt handling.
> 
> I guess the simplest fix for this problem would be just to do:
> 
>    if (IS_ENABLED(CONFIG_OMA4_USBBOOT))
>         return 0;
> 
> as a first thing in nommu_v7_vectors_init. As well as maybe making
> ARM_EXCEPTION dependent on MMU || !OMAP4_USBBOOT.
> 
> Sascha, any preferences/suggestions?

I think you are on the wrong track here. The likely issue is that on
OMAP only the ROM code runs in the secure world, the bootloader is
already started as non-secure.

The register to set the VBAR is a secure only register and will trap
with an undefined instruction exception if you try to set it from the
non-secure world.

So the correct fix would be to check if we are running non-secure and
skipping any setup code that depends on barebox running in secure mode.
This isn't really trivial, as the register to check for the current mode
is only implemented if the processor supports the V7 security extension
and will trap otherwise. This is all from the top of my head, so please
check for yourself.

Regards,
Lucas




_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2016-08-09  8:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-08 15:10 Vicenç
2016-08-09  6:11 ` Andrey Smirnov
2016-08-09  8:37   ` Lucas Stach [this message]
2016-08-09 10:26     ` Vicenç
2016-08-15  9:09     ` Sascha Hauer

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=1470731825.2243.9.camel@pengutronix.de \
    --to=l.stach@pengutronix.de \
    --cc=andrew.smirnov@gmail.com \
    --cc=barebox@lists.infradead.org \
    --cc=vicencb@gmail.com \
    /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