]> git.karo-electronics.de Git - linux-beck.git/commitdiff
sparc64 - add mem to iomem resource
authorbob picco <bpicco@meloft.net>
Mon, 3 Mar 2014 16:54:42 +0000 (11:54 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 22 Jul 2014 04:37:05 +0000 (21:37 -0700)
This patch adds sparc RAM to /proc/iomem. It also identifies the
code, data and bss regions of the kernel.

Signed-off-by: Bob Picco <bob.picco@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/mm/init_64.c

index 16b58ff11e659ed85b01bae53289f4b21000dd0d..9f4f532e2627ecca5062f4351b7c19dde30a8c12 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/kprobes.h>
 #include <linux/cache.h>
 #include <linux/sort.h>
+#include <linux/ioport.h>
 #include <linux/percpu.h>
 #include <linux/memblock.h>
 #include <linux/mmzone.h>
@@ -2699,3 +2700,67 @@ void hugetlb_setup(struct pt_regs *regs)
        }
 }
 #endif
+
+static struct resource code_resource = {
+       .name   = "Kernel code",
+       .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
+};
+
+static struct resource data_resource = {
+       .name   = "Kernel data",
+       .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
+};
+
+static struct resource bss_resource = {
+       .name   = "Kernel bss",
+       .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
+};
+
+static inline resource_size_t compute_kern_paddr(void *addr)
+{
+       return (resource_size_t) (addr - KERNBASE + kern_base);
+}
+
+static void __init kernel_lds_init(void)
+{
+       code_resource.start = compute_kern_paddr(_text);
+       code_resource.end   = compute_kern_paddr(_etext - 1);
+       data_resource.start = compute_kern_paddr(_etext);
+       data_resource.end   = compute_kern_paddr(_edata - 1);
+       bss_resource.start  = compute_kern_paddr(__bss_start);
+       bss_resource.end    = compute_kern_paddr(_end - 1);
+}
+
+static int __init report_memory(void)
+{
+       int i;
+       struct resource *res;
+
+       kernel_lds_init();
+
+       for (i = 0; i < pavail_ents; i++) {
+               res = kzalloc(sizeof(struct resource), GFP_KERNEL);
+
+               if (!res) {
+                       pr_warn("Failed to allocate source.\n");
+                       break;
+               }
+
+               res->name = "System RAM";
+               res->start = pavail[i].phys_addr;
+               res->end = pavail[i].phys_addr + pavail[i].reg_size - 1;
+               res->flags = IORESOURCE_BUSY | IORESOURCE_MEM;
+
+               if (insert_resource(&iomem_resource, res) < 0) {
+                       pr_warn("Resource insertion failed.\n");
+                       break;
+               }
+
+               insert_resource(res, &code_resource);
+               insert_resource(res, &data_resource);
+               insert_resource(res, &bss_resource);
+       }
+
+       return 0;
+}
+device_initcall(report_memory);