]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ARM: LPAE: add support for ATAG_MEM64
authorWill Deacon <will.deacon@arm.com>
Mon, 31 Jan 2011 13:50:46 +0000 (13:50 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Tue, 20 Sep 2011 13:17:42 +0000 (14:17 +0100)
LPAE provides support for memory banks with physical addresses of up
to 40 bits.

This patch adds a new atag, ATAG_MEM64, so that the Kernel can be
informed about memory that exists above the 4GB boundary.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm/include/asm/setup.h
arch/arm/kernel/setup.c

index 915696dd9c7c32d4d9702d54c933d50bbc4ca1e0..a3ca303a08011eae1d54788a5bbca888bb63974c 100644 (file)
@@ -43,6 +43,13 @@ struct tag_mem32 {
        __u32   start;  /* physical start address */
 };
 
+#define ATAG_MEM64     0x54420002
+
+struct tag_mem64 {
+       __u64   size;
+       __u64   start;  /* physical start address */
+};
+
 /* VGA text type displays */
 #define ATAG_VIDEOTEXT 0x54410003
 
@@ -148,6 +155,7 @@ struct tag {
        union {
                struct tag_core         core;
                struct tag_mem32        mem;
+               struct tag_mem64        mem64;
                struct tag_videotext    videotext;
                struct tag_ramdisk      ramdisk;
                struct tag_initrd       initrd;
index e514c76043b4d2f5af4638f44b889bb2737dc5ad..e476394b06d60751369c91968c2684dfb25f9e0c 100644 (file)
@@ -609,6 +609,16 @@ static int __init parse_tag_mem32(const struct tag *tag)
 
 __tagtable(ATAG_MEM, parse_tag_mem32);
 
+#ifdef CONFIG_PHYS_ADDR_T_64BIT
+static int __init parse_tag_mem64(const struct tag *tag)
+{
+       /* We only use 32-bits for the size. */
+       return arm_add_memory(tag->u.mem64.start, (unsigned long)tag->u.mem64.size);
+}
+
+__tagtable(ATAG_MEM64, parse_tag_mem64);
+#endif /* CONFIG_PHYS_ADDR_T_64BIT */
+
 #if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE)
 struct screen_info screen_info = {
  .orig_video_lines     = 30,