]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: unknown@suse.de |
2 | Subject: some crazy ppc patch | |
3 | ||
4 | add prom=nodisplay | |
5 | avoid crash in firmware on IBM B50 when OF stdout is on serial. | |
6 | ||
7 | 0 > boot scsi/sd@4:1,yaboot | | |
8 | yaboot starting: loaded at 00200000 00222530 (0/0/00c1a078; sp: 00efffd0) | |
9 | brokenfirmware did not claim executable memory, fixed it myself | |
10 | Config file 'yaboot.cnf' read, 213 bytes | |
11 | ||
12 | Welcome to yaboot version 10.1.22-r945.SuSE | |
13 | booted from '/pci@80000000/scsi@10/sd@4:1,yaboot' | |
14 | Enter "help" to get some basic usage information | |
15 | boot: | |
16 | * linux | |
17 | boot: linux 3 | |
18 | Please wait, loading kernel... | |
19 | Allocated 00600000 bytes for executable @ 02000000 | |
20 | Elf32 kernel loaded... | |
21 | Loading ramdisk... | |
22 | ramdisk loaded 0030e057 @ 04100000 | |
23 | OF stdout device is: /pci@80000000/isa@b/serial@i3f8 | |
24 | command line: root=/dev/system/root xmon=on sysrq=1 quiet panic=12 3 | |
25 | memory layout at init: | |
26 | memory_limit : 00000000 (16 MB aligned) | |
27 | alloc_bottom : 0440f000 | |
28 | alloc_top : 30000000 | |
29 | alloc_top_hi : 40000000 | |
30 | rmo_top : 30000000 | |
31 | ram_top : 40000000 | |
32 | Looking for displays | |
33 | found display : /pci@80000000/display@16, opening ... | |
34 | Unexpected Firmware Error: | |
35 | DEFAULT CATCH!, code=fff00300 at %SRR0: 00c18ccc %SRR1: 00003030 | |
36 | ok | |
37 | 0 > reset-all | |
38 | ||
39 | ||
40 | --- | |
41 | arch/powerpc/kernel/prom_init.c | 12 ++++++++++-- | |
42 | 1 file changed, 10 insertions(+), 2 deletions(-) | |
43 | ||
44 | --- a/arch/powerpc/kernel/prom_init.c | |
45 | +++ b/arch/powerpc/kernel/prom_init.c | |
46 | @@ -172,6 +172,7 @@ static unsigned long __initdata dt_strin | |
47 | ||
48 | static unsigned long __initdata prom_initrd_start, prom_initrd_end; | |
49 | ||
50 | +static int __initdata prom_no_display; | |
51 | #ifdef CONFIG_PPC64 | |
52 | static int __initdata prom_iommu_force_on; | |
53 | static int __initdata prom_iommu_off; | |
54 | @@ -555,9 +556,7 @@ unsigned long prom_memparse(const char * | |
55 | static void __init early_cmdline_parse(void) | |
56 | { | |
57 | struct prom_t *_prom = &RELOC(prom); | |
58 | -#ifdef CONFIG_PPC64 | |
59 | const char *opt; | |
60 | -#endif | |
61 | char *p; | |
62 | int l = 0; | |
63 | ||
64 | @@ -572,6 +571,14 @@ static void __init early_cmdline_parse(v | |
65 | #endif /* CONFIG_CMDLINE */ | |
66 | prom_printf("command line: %s\n", RELOC(prom_cmd_line)); | |
67 | ||
68 | + opt = strstr(RELOC(prom_cmd_line), RELOC("prom=")); | |
69 | + if (opt) { | |
70 | + opt += 5; | |
71 | + while (*opt && *opt == ' ') | |
72 | + opt++; | |
73 | + if (!strncmp(opt, RELOC("nodisplay"), 9)) | |
74 | + RELOC(prom_no_display) = 1; | |
75 | + } | |
76 | #ifdef CONFIG_PPC64 | |
77 | opt = strstr(RELOC(prom_cmd_line), RELOC("iommu=")); | |
78 | if (opt) { | |
79 | @@ -2400,6 +2407,7 @@ unsigned long __init prom_init(unsigned | |
80 | /* | |
81 | * Initialize display devices | |
82 | */ | |
83 | + if (RELOC(prom_no_display) == 0) | |
84 | prom_check_displays(); | |
85 | ||
86 | #ifdef CONFIG_PPC64 |