[RFC/PATCH 1/3] powerpc: add ioremap_bat() function for setting up BAT translated IO regions.
Benjamin Herrenschmidt
benh at kernel.crashing.org
Thu Aug 7 08:26:25 EST 2008
On Wed, 2008-08-06 at 00:02 -0600, Grant Likely wrote:
> From: Grant Likely <grant.likely at secretlab.ca>
>
> ioremap_bat() is useful for things like mapping SoC internally memory mapped
> register and early text because it allows mappings to devices to be setup
> early in the boot process where they are needed, and the mappings persist
> after the MMU is configured.
>
> Without ioremap_bat(), setting up the MMU would cause the early text
> mappings to get lost and mostly likely result in a kernel panic on the next
> attempt at output.
>
> Signed-off-by: Grant Likely <grant.likely at secretlab.ca>
> ---
First comment, make the name more generic. This facility could be
implemented on processors without BATs using different techniques.
Maybe ioremap_block() or ioremap_early() or something like that.
> diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
> index 066e65c..7b25b57 100644
> --- a/arch/powerpc/kernel/setup_32.c
> +++ b/arch/powerpc/kernel/setup_32.c
> @@ -113,6 +113,15 @@ notrace unsigned long __init early_init(unsigned long dt_ptr)
> */
> notrace void __init machine_init(unsigned long dt_ptr, unsigned long phys)
> {
> + /* Do the bare minimum to start allocting from the IO region so
> + * that ioremap_bat() works */
> +#ifdef CONFIG_HIGHMEM
> + ioremap_base = PKMAP_BASE;
> +#else
> + ioremap_base = 0xfe000000UL; /* for now, could be 0xfffff000 */
> +#endif /* CONFIG_HIGHMEM */
> + ioremap_bot = ioremap_base;
> +
Can't these be statically initialized ? If not, then do a function call
to mm/ please. Something like mm_init_early().
> + /* BAT mappings must be 128k aligned */
> + if (addr != _ALIGN_DOWN(addr, 128 << 10))
> + return NULL;
Mustn't they be naturally aligned on their size ?
Cheers,
Ben.
More information about the Linuxppc-dev
mailing list