[PATCH 01/37] ARM: prepare for removal of a bunch of <mach/memory.h> files

Barry Song 21cnbao at gmail.com
Wed Jul 6 02:38:35 EDT 2011


2011/7/6 Nicolas Pitre <nicolas.pitre at linaro.org>:
> When the CONFIG_NO_MACH_MEMORY_H symbol is selected by a particular
> machine class, the machine specific memory.h include file is no longer
> used and can be removed.  In that case the equivalent information can
> be obtained dynamically at runtime by enabling CONFIG_ARM_PATCH_PHYS_VIRT
> or by specifying the physical memory address at kernel configuration time.
>
> If/when all instances of mach/memory.h are removed then this symbol could
> be removed.

guess the main reason for this is that physical memory address should
not be hard-coded in kernel. and it will cause issues while crossing
platforms/boards.
i noticed PLAT_PHYS_OFFSET is referred much early in head.S with
CONFIG_XIP_KERNEL.

#ifndef CONFIG_XIP_KERNEL
        adr     r3, 2f
        ldmia   r3, {r4, r8}
        sub     r4, r3, r4                      @ (PHYS_OFFSET - PAGE_OFFSET)
        add     r8, r8, r4                      @ PHYS_OFFSET
#else
        ldr     r8, =PLAT_PHYS_OFFSET
#endif


>
> Signed-off-by: Nicolas Pitre <nicolas.pitre at linaro.org>
> ---
>  arch/arm/Kconfig              |   15 ++++++++++++++-
>  arch/arm/include/asm/memory.h |    6 +++++-
>  2 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 9adc278..9fc052c 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -191,11 +191,17 @@ config VECTORS_BASE
>        help
>          The base address of exception vectors.
>
> +config NO_MACH_MEMORY_H
> +       bool
> +       help
> +         Select this when mach/memory.h is removed.
> +
>  config ARM_PATCH_PHYS_VIRT
>        bool "Patch physical to virtual translations at runtime (EXPERIMENTAL)"
> -       depends on EXPERIMENTAL
> +       depends on EXPERIMENTAL || NO_MACH_MEMORY_H
>        depends on !XIP_KERNEL && MMU
>        depends on !ARCH_REALVIEW || !SPARSEMEM
> +       default y if NO_MACH_MEMORY_H
>        help
>          Patch phys-to-virt and virt-to-phys translation functions at
>          boot and module load time according to the position of the
> @@ -213,6 +219,13 @@ config ARM_PATCH_PHYS_VIRT_16BIT
>          to allow physical memory down to a theoretical minimum of 64K
>          boundaries.
>
> +config PHYS_OFFSET
> +       hex "Physical address of main memory"
> +       depends on !ARM_PATCH_PHYS_VIRT && NO_MACH_MEMORY_H
> +       help
> +         Please provide the physical address corresponding to the
> +         location of main memory in your system.
> +
>  source "init/Kconfig"
>
>  source "kernel/Kconfig.freezer"
> diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
> index deb2eaa..2d21414 100644
> --- a/arch/arm/include/asm/memory.h
> +++ b/arch/arm/include/asm/memory.h
> @@ -16,7 +16,6 @@
>  #include <linux/compiler.h>
>  #include <linux/const.h>
>  #include <linux/types.h>
> -#include <mach/memory.h>
>  #include <asm/sizes.h>
>
>  /*
> @@ -200,8 +199,13 @@ static inline unsigned long __phys_to_virt(unsigned long x)
>  #endif
>
>  #ifndef PHYS_OFFSET
> +#ifdef CONFIG_NO_MACH_MEMORY_H
> +#define PHYS_OFFSET    UL(CONFIG_PHYS_OFFSET)
> +#else
> +#include <mach/memory.h>
>  #define PHYS_OFFSET    PLAT_PHYS_OFFSET
>  #endif
> +#endif
>
>  /*
>  * The DMA mask corresponding to the maximum bus address allocatable
> --
> 1.7.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>



More information about the linux-arm-kernel mailing list