[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] rombios: S3 resume fixes.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1212419107 -3600 # Node ID fe60bf79d96f285c0f88346ff7ffd0eb2ab19f8e # Parent 7155d82576a40b0eef141fc522150b8a870e81fa rombios: S3 resume fixes. On AMD cpus, HVM S3 resume was hanging in the bios when trying to load the x_firmware_waking_vector from absolute address 0xEA01C (that is, a segment offset greater than 64kB). This change also now uses 20-bits (instead of 16) from the FACS standard firmware_waking_vector. Signed-off-by: Juergen Keil <jk@xxxxxxxx> --- tools/firmware/rombios/rombios.c | 45 +++++++++++++++++++++++---------------- 1 files changed, 27 insertions(+), 18 deletions(-) diff -r 7155d82576a4 -r fe60bf79d96f tools/firmware/rombios/rombios.c --- a/tools/firmware/rombios/rombios.c Mon Jun 02 16:00:45 2008 +0100 +++ b/tools/firmware/rombios/rombios.c Mon Jun 02 16:05:07 2008 +0100 @@ -2311,10 +2311,31 @@ debugger_off() #define ACPI_FACS_OFFSET 0x10 /* S3 resume status in CMOS 0Fh shutdown status byte*/ +Bit32u facs_get32(offs) +Bit16u offs; +{ +ASM_START + push bp + mov bp, sp + + push ds + mov ax, #(ACPI_FACS_ADDRESS >> 4) + mov ds, ax + + mov bx, 4[bp] + mov ax, [bx] + mov dx, 2[bx] + pop ds + + pop bp +ASM_END +} + + void s3_resume() { - Bit16u s3_wakeup_vector; + Bit32u s3_wakeup_vector; extern Bit16u s3_wakeup_ip; extern Bit16u s3_wakeup_cs; extern Bit8u s3_resume_flag; @@ -2330,19 +2351,14 @@ ASM_END } s3_resume_flag = 0; -ASM_START - mov ax, #0x0 - mov ds, ax -ASM_END - /* get x_firmware_waking_vector */ - s3_wakeup_vector = *((Bit16u*)(ACPI_FACS_ADDRESS+ACPI_FACS_OFFSET+24)); - if (s3_wakeup_vector == 0){ + s3_wakeup_vector = facs_get32(ACPI_FACS_OFFSET+24); + if (!s3_wakeup_vector) { /* get firmware_waking_vector */ - s3_wakeup_vector = *((Bit16u*)(ACPI_FACS_ADDRESS+ACPI_FACS_OFFSET+12)); - if (s3_wakeup_vector == 0){ + s3_wakeup_vector = facs_get32(ACPI_FACS_OFFSET+12); + if (!s3_wakeup_vector) { goto s3_out; - } + } } /* setup wakeup vector */ @@ -2350,13 +2366,6 @@ ASM_END s3_wakeup_cs = s3_wakeup_vector >> 4; ASM_START - mov bx, [_s3_wakeup_cs] - mov dx, [_s3_wakeup_ip] - - mov ax, #0xF000 - mov ds, ax - mov [_s3_wakeup_cs], bx - mov [_s3_wakeup_ip], dx jmpf [_s3_wakeup_ip] ; S3 data _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |