Getting rid of static IO mapping

Linh Dang linhd at
Thu Jul 8 09:41:28 EST 2004

On 7 Jul 2004, tnt at wrote:

> Hi
> I'll try to re-explain my problem more clearly. Maybe some one will
> see a solution.
> I'm trying to avoid any static io mapping. So no use of
> setup_io_mapping. I also setup a handler for ppc_md.progress to have
> early debug.
> This progress function makes use of the UART, so at every call the
> uart must be mapped and I have to know where.

I'm NOT sure what are you trying to avoid. a typical setup_io_mapping
function is:

static void __init
    io_block_mapping(MY_IO_VIRT_ADDR_1, MY_IO_PHYS_ADDR_1,
                     MY_IO_1_SIZE, PAGE_XXX);

    io_block_mapping(MY_IO_VIRT_ADDR_2, MY_IO_PHYS_ADDR_2,
                     MY_IO_2_SIZE, PAGE_XXX);


1. you HAVE TO provide the virt address and the phys
   address. io_block_mapping will not do it for you.

2. io_block_mapping will try to use available bats. if none avail, it
   will use pages. So you're NOT hardcoding the BAT values.

3. By CONVENTION, in your platform_init(), you should use bat3 to map
   the io space needed for your uart. Also by convention, you should
   reuse that same addresses in your setup_io_mapping(). So your UART
   is located at the SAME address BEFORE (via BAT3) and AFTER (using
   whatever io_block_mapping can use) the call to load_up_mmu().

I think you should probably explain what are you trying to achieve
before we can give you better suggestions.

Linh Dang

** Sent via the linuxppc-embedded mail list. See

More information about the Linuxppc-embedded mailing list