notebook freezes

Nate Lawson nate at root.org
Mon Mar 5 21:50:28 UTC 2007


Stefan Ehmann wrote:
> On Mon, 2007-03-05 at 15:21 +1100, Bruce Evans wrote:
>> On Sun, 4 Mar 2007, Stefan Ehmann wrote:
>>> Oops, seems I somehow screwed up Bruce's patch on first try (pmtimer was
>>> already in my config). Probably the aftermath of the lunar eclipse :)
>>>
>>> On my second try, timer_restore really gets called and it also fixes my
>>> problem.
>> Could you add some RTC accesses to determine exactly what state is
>> inconsistent?  Something like the following:
>>
>>  	cur_rtc_reg = inb(IO_RTC);	/* Sloppy locking. */
>>  	printf("cur_rtc_reg = %02x, rtc_reg = %02x\n", cur_rtc_reg, rtc_reg);
>>  	rtc_reg = -1;
>>  	cur_rtc_statusa = rtcin(RTC_STATUSA);
>>  	printf(...);
>>  	cur_rtc_statusb = rtcin(RTC_STATUSB);
>>  	printf(...);
>>
> 
> Putting this on top of rtc_resume, I get this on resume (all values are
> hexadecimal):
> 
> cur_rtc_reg = ff, rtc_reg = 0c
> cur_rtc_statusa = 29
> cur_rtc_statusb = 42

Yes, that's what I expected.  Reads from uninitialized regions of the
southbridge usually return all 1's.  PCI config registers usually show
the same thing on resume until reprogrammed.  The solution is to not
assume anything about the state of the RTC in the resume method and
always reprogram all the registers as if it was coming up from hard
power off.

-- 
Nate


More information about the freebsd-acpi mailing list