2010-06-25 03:45:34

by Kyle Moffett

[permalink] [raw]
Subject: of-flash: Unable to ioremap() both 128MB NOR flashes on 32-bit system with 2GB+ RAM

Hello,

I've got a new P2020 (32bit mpc85xx family) board I'm working on a
port for that includes 2 NOR flashes (128MB each) and a removable
SO-RDIMM of 2GB or 4GB. Unfortunately when I configure both flashes
in the device-tree off my elbc, Linux is completely unable to access
the second one because it attempts to ioremap() the entire virtual
address space of both FLASH chips.

Even with only one flash chip enabled, there's a bit of a noticeable
performance degradation because the mapping consumes almost all of my
available vmalloc space and forces bounce-buffering for all my
HIGHMEM.

It looks like the "of-flash" driver currently requires that the whole
chip be mapped in the kernel at once. I would much rather have a 50%
performance penalty on flash accesses (which are already very slow)
and regain most of the vmap space.

So the question is, is there a way to convince the MTD layer to
iomap() only what it needs to access to do reads and writes? If not,
what changes would need to be made to MTD and/or "of-flash" to create
such functionality?

Cheers,
Kyle Moffett


2010-06-25 04:02:25

by Kyle Moffett

[permalink] [raw]
Subject: Re: of-flash: Unable to ioremap() both 128MB NOR flashes on 32-bit system with 2GB+ RAM

Oops... put the old linuxppc list on the CC, sorry!

On Thu, Jun 24, 2010 at 23:45, Kyle Moffett <[email protected]> wrote:
> Hello,
>
> I've got a new P2020 (32bit mpc85xx family) board I'm working on a
> port for that includes 2 NOR flashes (128MB each) and a removable
> SO-RDIMM of 2GB or 4GB.  Unfortunately when I configure both flashes
> in the device-tree off my elbc, Linux is completely unable to access
> the second one because it attempts to ioremap() the entire virtual
> address space of both FLASH chips.
>
> Even with only one flash chip enabled, there's a bit of a noticeable
> performance degradation because the mapping consumes almost all of my
> available vmalloc space and forces bounce-buffering for all my
> HIGHMEM.
>
> It looks like the "of-flash" driver currently requires that the whole
> chip be mapped in the kernel at once.  I would much rather have a 50%
> performance penalty on flash accesses (which are already very slow)
> and regain most of the vmap space.
>
> So the question is, is there a way to convince the MTD layer to
> iomap() only what it needs to access to do reads and writes?  If not,
> what changes would need to be made to MTD and/or "of-flash" to create
> such functionality?
>
> Cheers,
> Kyle Moffett
>