On Wed, 2008-08-06 at 00:02 -0600, Grant Likely wrote:
> From: Grant Likely <[EMAIL PROTECTED]>
> 
> 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 <[EMAIL PROTECTED]>
> ---

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.


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to