grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: PowerMac hack breaks Efika


From: Hollis Blanchard
Subject: Re: PowerMac hack breaks Efika
Date: Wed, 04 Jul 2007 11:10:15 -0500

On Mon, 2007-07-02 at 14:48 +0200, Stefan Reinauer wrote:
> * Robert Millan <address@hidden> [070702 10:17]:
> > The following lines in grub_ofconsole_init():
> > 
> >   /* The latest PowerMacs don't actually initialize the screen for us, so we
> >    * use this trick to re-open the output device.  */
> >   grub_ieee1275_interpret ("output-device output", 0);
> > 
> > break Efika (SmartFirmware) and possibly other implementations.  After this
> > command is run, all console output is supressed.
>  
> > I'm not sure why (found that via regression test), but on Efika the
> > output-device is screen (/address@hidden/address@hidden).
>  
> Can you examine the output property of the /chosen node and see what its
> original vallue is?
> 
> > I suppose the right fix would be to check for PowerMacs before running this,
> > but I'm not sure how.  Any ideas?
>  
> There's some property in the / or /cpu or /openprom noe that can be
> used. Don't have a ppc machine from Apple here right now.
> 
> Why does Apple Powerbook need this? What's their default output device?

(Note: this is about PowerMacs too, not just PowerBooks.)

The default output device is a graphics card. However, console output
doesn't actually display to the default output device (presumably to
preserve Apple's logo splash screen). Yes, this violates section 7.4.5
of IEEE1275.

To get console output, we need to open the output device. However, we
can't hardcode a particular device (e.g. the "screen" device alias),
since that could break users with serial console.

'output-device' returns a string specifying the default output device.
'output' changes console output to the specified device. In other words,
this command opens the output device that should already be open.

I believe I tested this code on briQ, which shares a code lineage with
Efika, but Efika certainly could have broken something.

It's entirely possible that a particular firmware does not correctly
implement these commands. We already have a framework for such cases,
and we already work around SmartFirmware bugs with it.
     1. define a GRUB_IEEE1275_FLAG_BROKEN_OUTPUT flag in
        include/grub/ieee1275/ieee1275.h
     2. call grub_ieee1275_set_flag() in grub_ieee1275_find_options()
     3. use grub_ieee1275_test_flag() in grub_ofconsole_init()

-Hollis





reply via email to

[Prev in Thread] Current Thread [Next in Thread]