mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: barebox@lists.infradead.org
Subject: Re: ARM, MMU and IO space mapping
Date: Tue, 29 Nov 2011 09:15:01 +0100	[thread overview]
Message-ID: <20111129081501.GF27267@pengutronix.de> (raw)
In-Reply-To: <87d3cc87o5.fsf@free.fr>

On Mon, Nov 28, 2011 at 06:43:06PM +0100, Robert Jarzmik wrote:
> Sascha Hauer <s.hauer@pengutronix.de> writes:
> 
> > That's why I had to disable this mapping. Most other SoCs do not have
> > flash on 0x0. The i.MX processors for example have their internal ROM
> > there.
> Ah, I see.
> 
> >> And as a consequence, I'm a bit afraid that my disk-on-chip, having it's memory
> >> mapped to 0x0 - 0x2000, will be difficult to convert ... I must think of a way
> >> in there.
> >
> > Your options are:
> >
> > - Add some switch to disable the 0x0 mapping.
> > - Add ioremap support.
> >
> > I think we should go for the former for now. Real ioremap support
> > requires more thinking about how we want to do it. Will all drivers have
> > to do it or only the cfi driver?
> I think that only cfi and disk-on-chips drivers will have that problem, as being
> mapped (from an memory bus address POV) to address 0 is bound to boot code,
> which relies on some kind of memory (ROM, flash, ...).
> 
> And disabling 0x0 mapping will make the MMU booting quite fragile IMHO.
> Consider the following example:
>  - a flash/ROM is mapped at address 0 for booting the ARM SoC
>  - as requested by ARM, the first words of the flash are the vectors, with the
>  first one being the reset vector into a code that is supposed to run in a
>  *non-MMU* context
>  - the ARM core starts, and IPL is loaded
>  - IPL loads SPL (barebox)
>  - barebox remaps 0x0 to vectors at malloc'd 0xa0003f00 (former solution)
>  - barebox switches into MMU on
>  - a bug happens in barebox (urgh!!!) and the exception vector is triggered
>  ===> here, the flash/ROM vector is used
>  ===> this vectors assumes running from MMU-disabled environment
>  - the code running in the IPL triggers an exception because it's in MMU
>  environment
>   => eternal cycle begins

We use high vectors at 0xfff00000, so there won't be vectors at 0x0. the
0x0 mapping is only used to catch NULL pointer derefs.
That said, being able to catch NULL pointers is a very good thing,
especially when there is flash at 0x0 which might be accidently
overwritten by some code acting on NULL pointers.

> 
> I think either :
>  - we implement ioremap
>  - or we forbid (on ARM) MMU with board requiring 0x0 iomapped device
> 
> I would prefer a simple ioremap solution of the like:
>  - a mach-XXX declares an adress-space for io-remapping (contiguous, section
>  aligned and of size multiple of 1MBytes)
>    => if not => MMU config is not possible
>              => ioremap() gives back the flat physical address
>    => if yes => MMU config is possible
>              => ioremap() gives back an entry in io-remapping address space
>  - ioremap() is embedded in dev_request_mem_region()
> 
> What do you think ?

I think this problem is not MMU related. Without MMU we can't remap and
we can't catch NULL pointer derefs anyway.
With MMU we could just remap the flash in board code and pass the
remapped address as resource to the cfi driver. While I think the
cleanest solution would be to use ioremap in all drivers (and make
this a no-op on most boards) I don't think it's worth it at the moment.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

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

  reply	other threads:[~2011-11-29  8:15 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-24 11:24 Robert Jarzmik
2011-11-24 12:04 ` Sascha Hauer
2011-11-24 14:23   ` Marc Kleine-Budde
2011-11-24 20:09   ` Robert Jarzmik
2011-11-24 20:25     ` Marc Kleine-Budde
2011-11-25  0:01     ` Sascha Hauer
2011-11-27 22:30       ` Robert Jarzmik
2011-11-28  7:43         ` Sascha Hauer
2011-11-28 17:43           ` Robert Jarzmik
2011-11-29  8:15             ` Sascha Hauer [this message]
2011-11-30 22:06               ` Robert Jarzmik
2011-12-01 14:26                 ` Sascha Hauer
2011-12-01 14:34                   ` Marc Kleine-Budde
2011-12-11 13:01                   ` Robert Jarzmik

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=20111129081501.GF27267@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=robert.jarzmik@free.fr \
    /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