summaryrefslogtreecommitdiffstats
path: root/arch/ppc/chrpboot
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ppc/chrpboot')
-rw-r--r--arch/ppc/chrpboot/Makefile5
-rw-r--r--arch/ppc/chrpboot/main.c13
2 files changed, 14 insertions, 4 deletions
diff --git a/arch/ppc/chrpboot/Makefile b/arch/ppc/chrpboot/Makefile
index 70ae95eb8..5a7f063fc 100644
--- a/arch/ppc/chrpboot/Makefile
+++ b/arch/ppc/chrpboot/Makefile
@@ -20,7 +20,7 @@ CFLAGS = $(CPPFLAGS) -O -fno-builtin -DSTDC_HEADERS
LD_ARGS = -Ttext 0x00400000
OBJCOPY = $(CROSS_COMPILE)objcopy
-OBJS = crt0.o start.o main.o misc.o ../coffboot/string.o ../coffboot/zlib.o image.o # initrd.o
+OBJS = crt0.o start.o main.o misc.o ../coffboot/string.o ../coffboot/zlib.o image.o sysmap.o
LIBS = $(TOPDIR)/lib/lib.a
ifeq ($(CONFIG_PPC64),y)
@@ -65,6 +65,9 @@ mknote: mknote.c
image.o: piggyback ../coffboot/vmlinux.gz
./piggyback image < ../coffboot/vmlinux.gz | $(AS) -o image.o
+sysmap.o: piggyback ../../../System.map
+ ./piggyback sysmap < ../../../System.map | $(AS) -o sysmap.o
+
initrd.o: ramdisk.image.gz piggyback
./piggyback initrd < ramdisk.image.gz | $(AS) -o initrd.o
diff --git a/arch/ppc/chrpboot/main.c b/arch/ppc/chrpboot/main.c
index bf506552a..d54a429a9 100644
--- a/arch/ppc/chrpboot/main.c
+++ b/arch/ppc/chrpboot/main.c
@@ -34,6 +34,8 @@ extern char image_data[];
extern int image_len;
extern char initrd_data[];
extern int initrd_len;
+extern char sysmap_data[];
+extern int sysmap_len;
chrpboot(int a1, int a2, void *prom)
@@ -78,12 +80,12 @@ chrpboot(int a1, int a2, void *prom)
{
struct bi_record *rec;
- rec = (struct bi_record *)PAGE_ALIGN((unsigned long)dst+len);
-
+ rec = (struct bi_record *)_ALIGN((unsigned long)dst+len+(1<<20)-1,(1<<20));
+
rec->tag = BI_FIRST;
rec->size = sizeof(struct bi_record);
rec = (struct bi_record *)((unsigned long)rec + rec->size);
-
+
rec->tag = BI_BOOTLOADER_ID;
sprintf( (char *)rec->data, "chrpboot");
rec->size = sizeof(struct bi_record) + strlen("chrpboot") + 1;
@@ -95,6 +97,11 @@ chrpboot(int a1, int a2, void *prom)
rec->size = sizeof(struct bi_record) + sizeof(unsigned long);
rec = (struct bi_record *)((unsigned long)rec + rec->size);
+ rec->tag = BI_SYSMAP;
+ rec->data[0] = sysmap_data;
+ rec->data[1] = sysmap_len;
+ rec->size = sizeof(struct bi_record) + sizeof(unsigned long);
+ rec = (struct bi_record *)((unsigned long)rec + rec->size);
rec->tag = BI_LAST;
rec->size = sizeof(struct bi_record);
rec = (struct bi_record *)((unsigned long)rec + rec->size);