Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[POWERPC] bootwrapper: cuboot for 83xx

This adds cuboot support for MPC83xx platforms.

A device tree used with this must have linux,stdout-path in /chosen and
linux,network-index in any network device nodes that need mac addresses
assigned.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>

authored by

Scott Wood and committed by
Paul Mackerras
5cc5133a 9b1c59e2

+70 -1
+2 -1
arch/powerpc/boot/Makefile
··· 43 43 src-wlib := string.S crt0.S stdio.c main.c flatdevtree.c flatdevtree_misc.c \ 44 44 ns16550.c serial.c simple_alloc.c div64.S util.S \ 45 45 gunzip_util.c elf_util.c $(zlib) devtree.c 46 - src-plat := of.c 46 + src-plat := of.c cuboot-83xx.c 47 47 src-boot := $(src-wlib) $(src-plat) empty.c 48 48 49 49 src-boot := $(addprefix $(obj)/, $(src-boot)) ··· 162 162 $(obj)/uImage: vmlinux $(wrapperbits) 163 163 $(call if_changed,wrap,uboot) 164 164 165 + cuboot-plat-$(CONFIG_83xx) += 83xx 165 166 cuboot-plat-y += unknown-platform 166 167 167 168 dts = $(if $(shell echo $(CONFIG_) | grep '^/'),\
+68
arch/powerpc/boot/cuboot-83xx.c
··· 1 + /* 2 + * Old U-boot compatibility for 83xx 3 + * 4 + * Author: Scott Wood <scottwood@freescale.com> 5 + * 6 + * Copyright (c) 2007 Freescale Semiconductor, Inc. 7 + * 8 + * This program is free software; you can redistribute it and/or modify it 9 + * under the terms of the GNU General Public License version 2 as published 10 + * by the Free Software Foundation. 11 + */ 12 + 13 + #include "ops.h" 14 + #include "stdio.h" 15 + 16 + #define TARGET_83xx 17 + #include "ppcboot.h" 18 + 19 + static bd_t bd; 20 + extern char _end[]; 21 + extern char _dtb_start[], _dtb_end[]; 22 + 23 + static void platform_fixups(void) 24 + { 25 + void *soc; 26 + 27 + dt_fixup_memory(bd.bi_memstart, bd.bi_memsize); 28 + dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr); 29 + dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq); 30 + 31 + /* Unfortunately, the specific model number is encoded in the 32 + * soc node name in existing dts files -- once that is fixed, 33 + * this can do a simple path lookup. 34 + */ 35 + soc = find_node_by_devtype(NULL, "soc"); 36 + if (soc) { 37 + void *serial = NULL; 38 + 39 + setprop(soc, "bus-frequency", &bd.bi_busfreq, 40 + sizeof(bd.bi_busfreq)); 41 + 42 + while ((serial = find_node_by_devtype(serial, "serial"))) { 43 + if (get_parent(serial) != soc) 44 + continue; 45 + 46 + setprop(serial, "clock-frequency", &bd.bi_busfreq, 47 + sizeof(bd.bi_busfreq)); 48 + } 49 + } 50 + } 51 + 52 + void platform_init(unsigned long r3, unsigned long r4, unsigned long r5, 53 + unsigned long r6, unsigned long r7) 54 + { 55 + unsigned long end_of_ram = bd.bi_memstart + bd.bi_memsize; 56 + unsigned long avail_ram = end_of_ram - (unsigned long)_end; 57 + 58 + memcpy(&bd, (bd_t *)r3, sizeof(bd)); 59 + loader_info.initrd_addr = r4; 60 + loader_info.initrd_size = r4 ? r5 : 0; 61 + loader_info.cmdline = (char *)r6; 62 + loader_info.cmdline_len = r7 - r6; 63 + 64 + simple_alloc_init(_end, avail_ram, 32, 64); 65 + ft_init(_dtb_start, _dtb_end - _dtb_start, 32); 66 + serial_console_init(); 67 + platform_ops.fixups = platform_fixups; 68 + }