powerpc/powernv: Workaround OFW issues in prom_init.c
Open Firmware on OPAL machines seems to have issues if we close stdin and/or we try to print things after calling "quiesce" so we avoid doing both. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
		
					parent
					
						
							
								cee72d5bb4
							
						
					
				
			
			
				commit
				
					
						40dfef66a9
					
				
			
		
					 1 changed files with 10 additions and 4 deletions
				
			
		| 
						 | 
					@ -2969,9 +2969,11 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * in case stdin is USB and still active on IBM machines...
 | 
						 * in case stdin is USB and still active on IBM machines...
 | 
				
			||||||
	 * Unfortunately quiesce crashes on some powermacs if we have
 | 
						 * Unfortunately quiesce crashes on some powermacs if we have
 | 
				
			||||||
	 * closed stdin already (in particular the powerbook 101).
 | 
						 * closed stdin already (in particular the powerbook 101). It
 | 
				
			||||||
 | 
						 * appears that the OPAL version of OFW doesn't like it either.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (RELOC(of_platform) != PLATFORM_POWERMAC)
 | 
						if (RELOC(of_platform) != PLATFORM_POWERMAC &&
 | 
				
			||||||
 | 
						    RELOC(of_platform) != PLATFORM_OPAL)
 | 
				
			||||||
		prom_close_stdin();
 | 
							prom_close_stdin();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -2987,8 +2989,12 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4,
 | 
				
			||||||
	 * is common to us and kexec
 | 
						 * is common to us and kexec
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	hdr = RELOC(dt_header_start);
 | 
						hdr = RELOC(dt_header_start);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Don't print anything after quiesce under OPAL, it crashes OFW */
 | 
				
			||||||
 | 
						if (RELOC(of_platform) != PLATFORM_OPAL) {
 | 
				
			||||||
		prom_printf("returning from prom_init\n");
 | 
							prom_printf("returning from prom_init\n");
 | 
				
			||||||
		prom_debug("->dt_header_start=0x%x\n", hdr);
 | 
							prom_debug("->dt_header_start=0x%x\n", hdr);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PPC32
 | 
					#ifdef CONFIG_PPC32
 | 
				
			||||||
	reloc_got2(-offset);
 | 
						reloc_got2(-offset);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue