[coreboot] Share my code of running vgabios(in CBFS) in seabios when rusume from s3.
JasonZhao at viatech.com.cn
JasonZhao at viatech.com.cn
Fri Jul 3 09:53:58 CEST 2009
Hi Rudolf ,
I work out some code to make seabios run vgabios when resuming from S3
(follow your advice on IRC, again :) ). And it is unbelievable easy,
only 2 step:
Setp 1: In acpi.c
void acpi_jump_to_wakeup(void *vector)
{
/* just restore the SMP trampoline and continue with wakeup on
assembly level */
memcpy(lowmem_backup_ptr, lowmem_backup, lowmem_backup_size);
-// acpi_jmp_to_realm_wakeup((u32) vector);
// seabios at entry_post:(in romlayout.S) will check cmos[0x8f] it
as a S3 resuming flag.
+ outb(0x0f, RTC_BASE_PORT + 0);
+ outb(0xfe, RTC_BASE_PORT + 1);
+ //these two lines has same effect with the above two lines, and
I don know 8f or 0f which is better. cmos_read/write in coreboot do not
set bit 7.
+// outb(0x8f, RTC_BASE_PORT + 0);
+// outb(0xfe, RTC_BASE_PORT + 1);
+ acpi_jmp_to_realm_wakeup(0xffff0);
}
Step 2: in seabios->resume.c->s3_resume()
smm_init();
+ vga_setup();
make_bios_readonly();
u32 s3_resume_vector = find_resume_vector();
And my suggest is to rename acpi_jmp_to_realm_wakeup() to
jmp_to_realm_and_back(), and change wakeup.S to be more general by
supporting realmode code that running at >1M address.
-jasonzhao
More information about the coreboot
mailing list