Powerbook shuts down hard when hot, patch found
benh at kernel.crashing.org
Sat Sep 29 09:04:13 EST 2007
On Fri, 2007-09-28 at 23:32 +0200, Michael Buesch wrote:
> some time ago I already mailed you about this problem.
> I will quickly describe what's going on, again:
> My powerbook boots fine when it's cold. You can work with
> it and you can also run it hot (compile something, etc...).
> But when you try to boot it while it is hot, it will
> automatically shutdown hard inside of the boot process.
> Some part of the hardware is shutting it down.
> This does not happen when it's getting hot _after_ boot.
> Only while boot when it's hot.
> I bisected the problem and found out that the following patch
> is responsible for this. Yeah, this sounds a little bit
> crazy, as this patch does not seem to be related to
> this at all. But I confirmed it by booting kernel
> That kernel triggered the bug. Then I patch -R the patch below
> and it booted properly, even when hot. I also rechecked
> that it really was hot enough to trigger the event by
> immediately rebooting into a known bad kernel, that immediately
> shut down the pbook, as expected.
> So I'm pretty sure it's the patch below causing this weird
> behaviour. Any idea why?
This is very strange... Can you try also clearing VGA_DDC_CLK_OUT_EN and
VGA_DDC_DATA_OUT_EN and the same time and see if that helps ?
> commit 4f71c5de19c27f2198105d3b26b398494d5c353b
> Author: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> Date: Fri Nov 17 15:35:00 2006 +1100
> [PATCH] Fix radeon DDC regression
> When radeonfb was changed to use the new "generic" ddc, a bit of
> code initializing the GPIO lines was lost, causing it to not work
> if the firmware didn't configure them properly, which seems to
> happen on some cards.
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> Signed-off-by: Linus Torvalds <torvalds at osdl.org>
> diff --git a/drivers/video/aty/radeon_i2c.c b/drivers/video/aty/radeon_i2c.c
> index 6767545..869725a 100644
> --- a/drivers/video/aty/radeon_i2c.c
> +++ b/drivers/video/aty/radeon_i2c.c
> @@ -139,7 +139,13 @@ void radeon_delete_i2c_busses(struct rad
> int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn,
> u8 **out_edid)
> - u8 *edid = fb_ddc_read(&rinfo->i2c[conn-1].adapter);
> + u32 reg = rinfo->i2c[conn-1].ddc_reg;
> + u8 *edid;
> + OUTREG(reg, INREG(reg) &
> + ~(VGA_DDC_DATA_OUTPUT | VGA_DDC_CLK_OUTPUT));
> + edid = fb_ddc_read(&rinfo->i2c[conn-1].adapter);
> if (out_edid)
> *out_edid = edid;
More information about the Linuxppc-dev