* [PATCH][help?] Radeonfb acpi resume
@ 2005-07-10 22:19 Micheal Marineau
2005-07-10 22:23 ` Micheal Marineau
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Micheal Marineau @ 2005-07-10 22:19 UTC (permalink / raw)
To: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 5215 bytes --]
I've been forward porting this patch for a while now and need
some input on it. You can see the last time someone posted it
to the list here:
http://www.ussg.iu.edu/hypermail/linux/kernel/0410.0/0600.html
The big issue mentioned in that thread, that it reqires a key
press during the resume process to keep going still exists and
I have been unable to understand why. The issue is in radeon_pm.c
in this block that follows the last hunk of the diff:
if (rinfo->no_schedule) {
if (try_acquire_console_sem())
return 0;
} else
acquire_console_sem();
Specificly it's acquire_console_sem(); where the resume stops waiting
for a key press. What could be stopping things?
btw, I also have a suspend2 friendly version of the patch:
http://dev.gentoo.org/~marineam/files/patch-radeonfb-2.6.12-suspend2
diff -ru linux-2.6.12.orig/arch/i386/kernel/acpi/sleep.c
linux-2.6.12/arch/i386/kernel/acpi/sleep.c
--- linux-2.6.12.orig/arch/i386/kernel/acpi/sleep.c 2005-06-17
12:48:29.000000000 -0700
+++ linux-2.6.12/arch/i386/kernel/acpi/sleep.c 2005-07-03
18:01:34.000000000 -0700
@@ -5,6 +5,7 @@
* Copyright (C) 2001-2003 Pavel Machek <pavel@suse.cz>
*/
+#include <linux/module.h>
#include <linux/acpi.h>
#include <linux/bootmem.h>
#include <asm/smp.h>
@@ -55,6 +56,31 @@
zap_low_mappings();
}
+/*
+ * acpi_vgapost
+ */
+
+extern void do_vgapost_lowlevel (unsigned long);
+
+void acpi_vgapost (unsigned long slot)
+{
+ unsigned long flags, saved_video_flags = acpi_video_flags;
+ acpi_video_flags = (slot & 0xffff) << 16 | 1;
+ /* Map low memory and copy information */
+ init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD);
+ memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end -
&wakeup_start);
+ acpi_copy_wakeup_routine(acpi_wakeup_address);
+ /* Tunnel thru real mode */
+ local_irq_save(flags);
+ do_vgapost_lowlevel(acpi_wakeup_address);
+ local_irq_restore(flags);
+ /* Restore mapping etc */
+ zap_low_mappings();
+ acpi_video_flags = saved_video_flags;
+}
+
+EXPORT_SYMBOL (acpi_vgapost);
+
/**
* acpi_reserve_bootmem - do _very_ early ACPI initialisation
*
diff -ru linux-2.6.12.orig/arch/i386/kernel/acpi/wakeup.S
linux-2.6.12/arch/i386/kernel/acpi/wakeup.S
--- linux-2.6.12.orig/arch/i386/kernel/acpi/wakeup.S 2005-06-17
12:48:29.000000000 -0700
+++ linux-2.6.12/arch/i386/kernel/acpi/wakeup.S 2005-07-03
18:01:34.000000000 -0700
@@ -170,6 +170,32 @@
_setbad: jmp setbad
+#
+# Real mode switch - verbatim from reboot.c
+#
+go_real:
+ movl %cr0, %eax
+ andl $0x00000011, %eax
+ orl $0x60000000, %eax
+ movl %eax, %cr0
+ movl %eax, %cr3
+ movl %cr0, %ebx
+ andl $0x60000000, %ebx
+ jz 1f
+ wbinvd
+1: andb $0x10, %al
+ movl %eax, %cr0
+go_real_jmp: .byte 0xea
+go_real_jmp_off: .word 0x0000
+go_real_jmp_seg: .word 0x0000
+#
+# Real mode descriptor table
+#
+ .align 8
+go_real_desc: .quad 0x0000000000000000
+go_real_cseg: .quad 0x00009a000000ffff
+go_real_dseg: .quad 0x000092000000ffff
+
.code32
ALIGN
@@ -309,6 +335,59 @@
call acpi_enter_sleep_state_s4bios
ret
+ENTRY(do_vgapost_lowlevel)
+ # Convert target offset to physical address
+ movl %eax, %ecx
+ subl $__PAGE_OFFSET, %ecx
+ # Fixup GDT pointer
+ movl %ecx, %edx
+ addl $go_real_desc - wakeup_start, %edx
+ movl %edx, go_real_gdt + 2
+ # Fixup 16-bit CS descriptor
+ movl %ecx, %edx
+ movw %dx, go_real_cseg - wakeup_start + 2 (%eax)
+ shrl $16, %edx
+ movb %dl, go_real_cseg - wakeup_start + 4 (%eax)
+ movb %dh, go_real_cseg - wakeup_start + 7 (%eax)
+ # Fixup 16-bit jump
+ movl %ecx, %edx
+ shrl $4, %edx
+ movw %dx, go_real_jmp_seg - wakeup_start (%eax)
+ # Save state and registers
+ call save_processor_state
+ call save_registers
+ # Reload page table with low mapping
+ movl $swapper_pg_dir-__PAGE_OFFSET, %eax
+ movl %eax, %cr3
+ # Load IDTR and GDTR for real mode
+ lidt go_real_idt
+ lgdt go_real_gdt
+ # Load DS & al
+ movl $0x0010, %eax
+ movl %eax, %ss
+ movl %eax, %ds
+ movl %eax, %es
+ movl %eax, %fs
+ movl %eax, %gs
+ # Load CS
+ call $0x0008, $(go_real - wakeup_start)
+ # Phony return code
+ call restore_registers
+ call restore_processor_state
+ ret
+
+ .align 4
+ .word 0
+go_real_idt:
+ .word 0x3ff
+ .long 0
+
+ .align 4
+ .word 0
+go_real_gdt:
+ .word 3*8-1
+ .long 0
+
ALIGN
# saved registers
saved_gdt: .long 0,0
diff -ru linux-2.6.12.orig/drivers/video/aty/radeon_pm.c
linux-2.6.12/drivers/video/aty/radeon_pm.c
--- linux-2.6.12.orig/drivers/video/aty/radeon_pm.c 2005-06-17
12:48:29.000000000 -0700
+++ linux-2.6.12/drivers/video/aty/radeon_pm.c 2005-07-03
19:55:36.000000000 -0700
@@ -2606,10 +2606,13 @@
done:
pdev->dev.power.power_state = state;
+ pci_save_state (pdev);
return 0;
}
+extern void acpi_vgapost (unsigned long slot);
+
int radeonfb_pci_resume(struct pci_dev *pdev)
{
struct fb_info *info = pci_get_drvdata(pdev);
@@ -2619,6 +2622,12 @@
if (pdev->dev.power.power_state == 0)
return 0;
+ if (pdev->dev.power.power_state != 4)
+ {
+ pci_restore_state (pdev);
+ acpi_vgapost (pdev->devfn);
+ }
+
if (rinfo->no_schedule) {
if (try_acquire_console_sem())
return 0;
--
Michael Marineau
marineam@engr.orst.edu
Oregon State University
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH][help?] Radeonfb acpi resume 2005-07-10 22:19 [PATCH][help?] Radeonfb acpi resume Micheal Marineau @ 2005-07-10 22:23 ` Micheal Marineau 2005-07-11 15:11 ` Pavel Machek [not found] ` <E1DsHSJ-0006kr-00@chiark.greenend.org.uk> 2005-07-13 0:32 ` Benjamin Herrenschmidt 2 siblings, 1 reply; 9+ messages in thread From: Micheal Marineau @ 2005-07-10 22:23 UTC (permalink / raw) To: linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 4909 bytes --] Aww crap, thunderbird screwed up the white space... A usable version of the patch is attached, or here is a link: http://dev.gentoo.org/~marineam/files/patch-radeonfb-2.6.12 Micheal Marineau wrote: > > > diff -ru linux-2.6.12.orig/arch/i386/kernel/acpi/sleep.c > linux-2.6.12/arch/i386/kernel/acpi/sleep.c > --- linux-2.6.12.orig/arch/i386/kernel/acpi/sleep.c 2005-06-17 > 12:48:29.000000000 -0700 > +++ linux-2.6.12/arch/i386/kernel/acpi/sleep.c 2005-07-03 > 18:01:34.000000000 -0700 > @@ -5,6 +5,7 @@ > * Copyright (C) 2001-2003 Pavel Machek <pavel@suse.cz> > */ > > +#include <linux/module.h> > #include <linux/acpi.h> > #include <linux/bootmem.h> > #include <asm/smp.h> > @@ -55,6 +56,31 @@ > zap_low_mappings(); > } > > +/* > + * acpi_vgapost > + */ > + > +extern void do_vgapost_lowlevel (unsigned long); > + > +void acpi_vgapost (unsigned long slot) > +{ > + unsigned long flags, saved_video_flags = acpi_video_flags; > + acpi_video_flags = (slot & 0xffff) << 16 | 1; > + /* Map low memory and copy information */ > + init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD); > + memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end - > &wakeup_start); > + acpi_copy_wakeup_routine(acpi_wakeup_address); > + /* Tunnel thru real mode */ > + local_irq_save(flags); > + do_vgapost_lowlevel(acpi_wakeup_address); > + local_irq_restore(flags); > + /* Restore mapping etc */ > + zap_low_mappings(); > + acpi_video_flags = saved_video_flags; > +} > + > +EXPORT_SYMBOL (acpi_vgapost); > + > /** > * acpi_reserve_bootmem - do _very_ early ACPI initialisation > * > diff -ru linux-2.6.12.orig/arch/i386/kernel/acpi/wakeup.S > linux-2.6.12/arch/i386/kernel/acpi/wakeup.S > --- linux-2.6.12.orig/arch/i386/kernel/acpi/wakeup.S 2005-06-17 > 12:48:29.000000000 -0700 > +++ linux-2.6.12/arch/i386/kernel/acpi/wakeup.S 2005-07-03 > 18:01:34.000000000 -0700 > @@ -170,6 +170,32 @@ > > _setbad: jmp setbad > > +# > +# Real mode switch - verbatim from reboot.c > +# > +go_real: > + movl %cr0, %eax > + andl $0x00000011, %eax > + orl $0x60000000, %eax > + movl %eax, %cr0 > + movl %eax, %cr3 > + movl %cr0, %ebx > + andl $0x60000000, %ebx > + jz 1f > + wbinvd > +1: andb $0x10, %al > + movl %eax, %cr0 > +go_real_jmp: .byte 0xea > +go_real_jmp_off: .word 0x0000 > +go_real_jmp_seg: .word 0x0000 > +# > +# Real mode descriptor table > +# > + .align 8 > +go_real_desc: .quad 0x0000000000000000 > +go_real_cseg: .quad 0x00009a000000ffff > +go_real_dseg: .quad 0x000092000000ffff > + > .code32 > ALIGN > > @@ -309,6 +335,59 @@ > call acpi_enter_sleep_state_s4bios > ret > > +ENTRY(do_vgapost_lowlevel) > + # Convert target offset to physical address > + movl %eax, %ecx > + subl $__PAGE_OFFSET, %ecx > + # Fixup GDT pointer > + movl %ecx, %edx > + addl $go_real_desc - wakeup_start, %edx > + movl %edx, go_real_gdt + 2 > + # Fixup 16-bit CS descriptor > + movl %ecx, %edx > + movw %dx, go_real_cseg - wakeup_start + 2 (%eax) > + shrl $16, %edx > + movb %dl, go_real_cseg - wakeup_start + 4 (%eax) > + movb %dh, go_real_cseg - wakeup_start + 7 (%eax) > + # Fixup 16-bit jump > + movl %ecx, %edx > + shrl $4, %edx > + movw %dx, go_real_jmp_seg - wakeup_start (%eax) > + # Save state and registers > + call save_processor_state > + call save_registers > + # Reload page table with low mapping > + movl $swapper_pg_dir-__PAGE_OFFSET, %eax > + movl %eax, %cr3 > + # Load IDTR and GDTR for real mode > + lidt go_real_idt > + lgdt go_real_gdt > + # Load DS & al > + movl $0x0010, %eax > + movl %eax, %ss > + movl %eax, %ds > + movl %eax, %es > + movl %eax, %fs > + movl %eax, %gs > + # Load CS > + call $0x0008, $(go_real - wakeup_start) > + # Phony return code > + call restore_registers > + call restore_processor_state > + ret > + > + .align 4 > + .word 0 > +go_real_idt: > + .word 0x3ff > + .long 0 > + > + .align 4 > + .word 0 > +go_real_gdt: > + .word 3*8-1 > + .long 0 > + > ALIGN > # saved registers > saved_gdt: .long 0,0 > diff -ru linux-2.6.12.orig/drivers/video/aty/radeon_pm.c > linux-2.6.12/drivers/video/aty/radeon_pm.c > --- linux-2.6.12.orig/drivers/video/aty/radeon_pm.c 2005-06-17 > 12:48:29.000000000 -0700 > +++ linux-2.6.12/drivers/video/aty/radeon_pm.c 2005-07-03 > 19:55:36.000000000 -0700 > @@ -2606,10 +2606,13 @@ > > done: > pdev->dev.power.power_state = state; > + pci_save_state (pdev); > > return 0; > } > > +extern void acpi_vgapost (unsigned long slot); > + > int radeonfb_pci_resume(struct pci_dev *pdev) > { > struct fb_info *info = pci_get_drvdata(pdev); > @@ -2619,6 +2622,12 @@ > if (pdev->dev.power.power_state == 0) > return 0; > > + if (pdev->dev.power.power_state != 4) > + { > + pci_restore_state (pdev); > + acpi_vgapost (pdev->devfn); > + } > + > if (rinfo->no_schedule) { > if (try_acquire_console_sem()) > return 0; -- Michael Marineau marineam@engr.orst.edu Oregon State University [-- Attachment #1.2: patch-radeonfb-2.6.12 --] [-- Type: text/plain, Size: 4286 bytes --] diff -ru linux-2.6.12.orig/arch/i386/kernel/acpi/sleep.c linux-2.6.12/arch/i386/kernel/acpi/sleep.c --- linux-2.6.12.orig/arch/i386/kernel/acpi/sleep.c 2005-06-17 12:48:29.000000000 -0700 +++ linux-2.6.12/arch/i386/kernel/acpi/sleep.c 2005-07-03 18:01:34.000000000 -0700 @@ -5,6 +5,7 @@ * Copyright (C) 2001-2003 Pavel Machek <pavel@suse.cz> */ +#include <linux/module.h> #include <linux/acpi.h> #include <linux/bootmem.h> #include <asm/smp.h> @@ -55,6 +56,31 @@ zap_low_mappings(); } +/* + * acpi_vgapost + */ + +extern void do_vgapost_lowlevel (unsigned long); + +void acpi_vgapost (unsigned long slot) +{ + unsigned long flags, saved_video_flags = acpi_video_flags; + acpi_video_flags = (slot & 0xffff) << 16 | 1; + /* Map low memory and copy information */ + init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD); + memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end - &wakeup_start); + acpi_copy_wakeup_routine(acpi_wakeup_address); + /* Tunnel thru real mode */ + local_irq_save(flags); + do_vgapost_lowlevel(acpi_wakeup_address); + local_irq_restore(flags); + /* Restore mapping etc */ + zap_low_mappings(); + acpi_video_flags = saved_video_flags; +} + +EXPORT_SYMBOL (acpi_vgapost); + /** * acpi_reserve_bootmem - do _very_ early ACPI initialisation * diff -ru linux-2.6.12.orig/arch/i386/kernel/acpi/wakeup.S linux-2.6.12/arch/i386/kernel/acpi/wakeup.S --- linux-2.6.12.orig/arch/i386/kernel/acpi/wakeup.S 2005-06-17 12:48:29.000000000 -0700 +++ linux-2.6.12/arch/i386/kernel/acpi/wakeup.S 2005-07-03 18:01:34.000000000 -0700 @@ -170,6 +170,32 @@ _setbad: jmp setbad +# +# Real mode switch - verbatim from reboot.c +# +go_real: + movl %cr0, %eax + andl $0x00000011, %eax + orl $0x60000000, %eax + movl %eax, %cr0 + movl %eax, %cr3 + movl %cr0, %ebx + andl $0x60000000, %ebx + jz 1f + wbinvd +1: andb $0x10, %al + movl %eax, %cr0 +go_real_jmp: .byte 0xea +go_real_jmp_off: .word 0x0000 +go_real_jmp_seg: .word 0x0000 +# +# Real mode descriptor table +# + .align 8 +go_real_desc: .quad 0x0000000000000000 +go_real_cseg: .quad 0x00009a000000ffff +go_real_dseg: .quad 0x000092000000ffff + .code32 ALIGN @@ -309,6 +335,59 @@ call acpi_enter_sleep_state_s4bios ret +ENTRY(do_vgapost_lowlevel) + # Convert target offset to physical address + movl %eax, %ecx + subl $__PAGE_OFFSET, %ecx + # Fixup GDT pointer + movl %ecx, %edx + addl $go_real_desc - wakeup_start, %edx + movl %edx, go_real_gdt + 2 + # Fixup 16-bit CS descriptor + movl %ecx, %edx + movw %dx, go_real_cseg - wakeup_start + 2 (%eax) + shrl $16, %edx + movb %dl, go_real_cseg - wakeup_start + 4 (%eax) + movb %dh, go_real_cseg - wakeup_start + 7 (%eax) + # Fixup 16-bit jump + movl %ecx, %edx + shrl $4, %edx + movw %dx, go_real_jmp_seg - wakeup_start (%eax) + # Save state and registers + call save_processor_state + call save_registers + # Reload page table with low mapping + movl $swapper_pg_dir-__PAGE_OFFSET, %eax + movl %eax, %cr3 + # Load IDTR and GDTR for real mode + lidt go_real_idt + lgdt go_real_gdt + # Load DS & al + movl $0x0010, %eax + movl %eax, %ss + movl %eax, %ds + movl %eax, %es + movl %eax, %fs + movl %eax, %gs + # Load CS + call $0x0008, $(go_real - wakeup_start) + # Phony return code + call restore_registers + call restore_processor_state + ret + + .align 4 + .word 0 +go_real_idt: + .word 0x3ff + .long 0 + + .align 4 + .word 0 +go_real_gdt: + .word 3*8-1 + .long 0 + ALIGN # saved registers saved_gdt: .long 0,0 diff -ru linux-2.6.12.orig/drivers/video/aty/radeon_pm.c linux-2.6.12/drivers/video/aty/radeon_pm.c --- linux-2.6.12.orig/drivers/video/aty/radeon_pm.c 2005-06-17 12:48:29.000000000 -0700 +++ linux-2.6.12/drivers/video/aty/radeon_pm.c 2005-07-03 19:55:36.000000000 -0700 @@ -2606,10 +2606,13 @@ done: pdev->dev.power.power_state = state; + pci_save_state (pdev); return 0; } +extern void acpi_vgapost (unsigned long slot); + int radeonfb_pci_resume(struct pci_dev *pdev) { struct fb_info *info = pci_get_drvdata(pdev); @@ -2619,6 +2622,12 @@ if (pdev->dev.power.power_state == 0) return 0; + if (pdev->dev.power.power_state != 4) + { + pci_restore_state (pdev); + acpi_vgapost (pdev->devfn); + } + if (rinfo->no_schedule) { if (try_acquire_console_sem()) return 0; [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH][help?] Radeonfb acpi resume 2005-07-10 22:23 ` Micheal Marineau @ 2005-07-11 15:11 ` Pavel Machek 2005-07-11 18:50 ` Micheal Marineau 0 siblings, 1 reply; 9+ messages in thread From: Pavel Machek @ 2005-07-11 15:11 UTC (permalink / raw) To: Micheal Marineau; +Cc: linux-kernel Hi! > Aww crap, thunderbird screwed up the white space... > > A usable version of the patch is attached, or here is a link: > http://dev.gentoo.org/~marineam/files/patch-radeonfb-2.6.12 Wrong indentation in acpi_vgapost; I remember there was better patch to fix this out there. Anyway, are you sure machine you have can't be fixed by any methods listed in Doc*/power/video.txt? I guess they are preferable to acpi_vgapost... If not... indent it acording to the coding style and drop "phony return code" (it is unneeded, anyway, right?) and try again. (Oh and Cc me ;-). Pavel -- teflon -- maybe it is a trademark, but it should not be. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH][help?] Radeonfb acpi resume 2005-07-11 15:11 ` Pavel Machek @ 2005-07-11 18:50 ` Micheal Marineau 2005-07-11 18:56 ` Pavel Machek 0 siblings, 1 reply; 9+ messages in thread From: Micheal Marineau @ 2005-07-11 18:50 UTC (permalink / raw) To: Pavel Machek; +Cc: linux-kernel [-- Attachment #1: Type: text/plain, Size: 1466 bytes --] Thanks for the reply, Pavel Machek wrote: > Hi! > > >>Aww crap, thunderbird screwed up the white space... >> >>A usable version of the patch is attached, or here is a link: >>http://dev.gentoo.org/~marineam/files/patch-radeonfb-2.6.12 > > > Wrong indentation in acpi_vgapost; I remember there was better patch > to fix this out there. Ok, I'll go through and fix any coding style problems. I've only seen older versions of this same patch, but if there is a better way I'd love to hear it. I'll google around a little more just in case. > > Anyway, are you sure machine you have can't be fixed by any methods > listed in Doc*/power/video.txt? I guess they are preferable to > acpi_vgapost... Actually, this is one of the metholds listed in video.txt. Take a look at #7 ;-). I just tried acpi_sleep=s3_bios to see what that does, but just caused an instant reboot on resume. The only other solutions that works is to disable the frame buffer and use X or some other app to do the job as listed in #5 and #6, but something in kernel like this patch is required to be able to use the framebuffer. > > If not... indent it acording to the coding style and drop "phony > return code" (it is unneeded, anyway, right?) and try again. (Oh and > Cc me ;-). > Pavel Ok, I'll try it without. I don't know if it's needed or not, that code is untouched from Ole Rohne's origional version. -- Michael Marineau marineam@engr.orst.edu Oregon State University [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH][help?] Radeonfb acpi resume 2005-07-11 18:50 ` Micheal Marineau @ 2005-07-11 18:56 ` Pavel Machek 2005-07-12 4:32 ` Micheal Marineau 0 siblings, 1 reply; 9+ messages in thread From: Pavel Machek @ 2005-07-11 18:56 UTC (permalink / raw) To: Micheal Marineau; +Cc: linux-kernel Hi! > >>Aww crap, thunderbird screwed up the white space... > >> > >>A usable version of the patch is attached, or here is a link: > >>http://dev.gentoo.org/~marineam/files/patch-radeonfb-2.6.12 > > > > > > Wrong indentation in acpi_vgapost; I remember there was better patch > > to fix this out there. > Ok, I'll go through and fix any coding style problems. I've only seen > older versions of this same patch, but if there is a better way I'd love > to hear it. I'll google around a little more just in case. It *was* version of the same patch, but it had codingstyle fixed, IIRC. > > Anyway, are you sure machine you have can't be fixed by any methods > > listed in Doc*/power/video.txt? I guess they are preferable to > > acpi_vgapost... > Actually, this is one of the metholds listed in video.txt. Take a look > at #7 ;-). I just tried acpi_sleep=s3_bios to see what that does, but > just caused an instant reboot on resume. The only other solutions that > works is to disable the frame buffer and use X or some other app to do > the job as listed in #5 and #6, but something in kernel like this patch > is required to be able to use the framebuffer. I'd say that disabling framebuffer and going #5 or #6 is still prefered, but given nice patch, I'll probably accept it. Oh, and do note that (7) is listed near just one notebook. Pavel -- teflon -- maybe it is a trademark, but it should not be. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH][help?] Radeonfb acpi resume 2005-07-11 18:56 ` Pavel Machek @ 2005-07-12 4:32 ` Micheal Marineau 0 siblings, 0 replies; 9+ messages in thread From: Micheal Marineau @ 2005-07-12 4:32 UTC (permalink / raw) To: Pavel Machek; +Cc: linux-kernel [-- Attachment #1: Type: text/plain, Size: 1818 bytes --] Pavel Machek wrote: > Hi! > > >>>>Aww crap, thunderbird screwed up the white space... >>>> >>>>A usable version of the patch is attached, or here is a link: >>>>http://dev.gentoo.org/~marineam/files/patch-radeonfb-2.6.12 >>> >>> >>>Wrong indentation in acpi_vgapost; I remember there was better patch >>>to fix this out there. >> >>Ok, I'll go through and fix any coding style problems. I've only seen >>older versions of this same patch, but if there is a better way I'd love >>to hear it. I'll google around a little more just in case. > > > It *was* version of the same patch, but it had codingstyle fixed, IIRC. Ok, thats an easy fix then :-) > > >>>Anyway, are you sure machine you have can't be fixed by any methods >>>listed in Doc*/power/video.txt? I guess they are preferable to >>>acpi_vgapost... >> >>Actually, this is one of the metholds listed in video.txt. Take a look >>at #7 ;-). I just tried acpi_sleep=s3_bios to see what that does, but >>just caused an instant reboot on resume. The only other solutions that >>works is to disable the frame buffer and use X or some other app to do >>the job as listed in #5 and #6, but something in kernel like this patch >>is required to be able to use the framebuffer. > > > I'd say that disabling framebuffer and going #5 or #6 is still > prefered, but given nice patch, I'll probably accept it. Oh, and do > note that (7) is listed near just one notebook. > > Pavel Well, before the patch is ever concidered for the mainline I think the issue with acquire_console_sem() causing the resume process to stop and wait for a key press would have to be addressed. This option could be listed for more notebooks with radeon cards, for example mine is an Dell Inspiron 8500. -- Michael Marineau marineam@engr.orst.edu Oregon State University [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <E1DsHSJ-0006kr-00@chiark.greenend.org.uk>]
* Re: [PATCH][help?] Radeonfb acpi resume [not found] ` <E1DsHSJ-0006kr-00@chiark.greenend.org.uk> @ 2005-07-12 13:39 ` Micheal Marineau 0 siblings, 0 replies; 9+ messages in thread From: Micheal Marineau @ 2005-07-12 13:39 UTC (permalink / raw) To: Matthew Garrett; +Cc: linux-kernel [-- Attachment #1: Type: text/plain, Size: 770 bytes --] Matthew Garrett wrote: > Micheal Marineau <marineam@engr.orst.edu> wrote: > > >>+ if (pdev->dev.power.power_state != 4) >>+ { >>+ pci_restore_state (pdev); >>+ acpi_vgapost (pdev->devfn); >>+ } > > > Please *don't* make this unconditional. There's no guarantee that the > video BIOS is postable after initial system boot. A boot-time parameter > to enable it seems reasonable, but in general we're likely to stand a > much better chance getting it working in userspace. A kernel parameter seems reasonable, I assume that pci_restore_state shoule remain unconditional right? Userspace works just fine if the frame buffer is not used, but it has to be done in kernel when using a frame buffer. -- Michael Marineau marineam@engr.orst.edu Oregon State University [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH][help?] Radeonfb acpi resume 2005-07-10 22:19 [PATCH][help?] Radeonfb acpi resume Micheal Marineau 2005-07-10 22:23 ` Micheal Marineau [not found] ` <E1DsHSJ-0006kr-00@chiark.greenend.org.uk> @ 2005-07-13 0:32 ` Benjamin Herrenschmidt 2005-07-13 5:31 ` Micheal Marineau 2 siblings, 1 reply; 9+ messages in thread From: Benjamin Herrenschmidt @ 2005-07-13 0:32 UTC (permalink / raw) To: Micheal Marineau; +Cc: linux-kernel On Sun, 2005-07-10 at 15:19 -0700, Micheal Marineau wrote: > I've been forward porting this patch for a while now and need > some input on it. You can see the last time someone posted it > to the list here: > http://www.ussg.iu.edu/hypermail/linux/kernel/0410.0/0600.html > > The big issue mentioned in that thread, that it reqires a key > press during the resume process to keep going still exists and > I have been unable to understand why. The issue is in radeon_pm.c > in this block that follows the last hunk of the diff: > > if (rinfo->no_schedule) { > if (try_acquire_console_sem()) > return 0; > } else > acquire_console_sem(); > > Specificly it's acquire_console_sem(); where the resume stops waiting > for a key press. What could be stopping things? I don't see any reason for that. That definitely shouldn't happen. .../... > diff -ru linux-2.6.12.orig/drivers/video/aty/radeon_pm.c > linux-2.6.12/drivers/video/aty/radeon_pm.c > --- linux-2.6.12.orig/drivers/video/aty/radeon_pm.c 2005-06-17 > 12:48:29.000000000 -0700 > +++ linux-2.6.12/drivers/video/aty/radeon_pm.c 2005-07-03 > 19:55:36.000000000 -0700 > @@ -2606,10 +2606,13 @@ > > done: > pdev->dev.power.power_state = state; > + pci_save_state (pdev); > > return 0; > } Hrm... radeonfb already saves the config space elsewhere. Note that it could maybe be converted to pci_save_state() / pci_restore_state() but currently, I do my own as I use that for "testing" if the card is still in it's previous state or was shut down. (I could probably use the content of a register instead, like CLK_PIN_CNTL) > +extern void acpi_vgapost (unsigned long slot); > + > int radeonfb_pci_resume(struct pci_dev *pdev) > { > struct fb_info *info = pci_get_drvdata(pdev); > @@ -2619,6 +2622,12 @@ > if (pdev->dev.power.power_state == 0) > return 0; > > + if (pdev->dev.power.power_state != 4) > + { > + pci_restore_state (pdev); > + acpi_vgapost (pdev->devfn); > + } > + > if (rinfo->no_schedule) { > if (try_acquire_console_sem()) > return 0; The above will probably blow up anything that is not an x86 with ACPI. Besides there is already a mecanism in that file for calling functions for re-posting cards (since I have code to explicitely re-post rv280 and rv350 mobility on macs), you should hook into that existing mecanism when you detect ACPI. Ben. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH][help?] Radeonfb acpi resume 2005-07-13 0:32 ` Benjamin Herrenschmidt @ 2005-07-13 5:31 ` Micheal Marineau 0 siblings, 0 replies; 9+ messages in thread From: Micheal Marineau @ 2005-07-13 5:31 UTC (permalink / raw) To: Benjamin Herrenschmidt; +Cc: linux-kernel [-- Attachment #1: Type: text/plain, Size: 2989 bytes --] Thanks for the input, Benjamin Herrenschmidt wrote: > On Sun, 2005-07-10 at 15:19 -0700, Micheal Marineau wrote: > >>I've been forward porting this patch for a while now and need >>some input on it. You can see the last time someone posted it >>to the list here: >>http://www.ussg.iu.edu/hypermail/linux/kernel/0410.0/0600.html >> >>The big issue mentioned in that thread, that it reqires a key >>press during the resume process to keep going still exists and >>I have been unable to understand why. The issue is in radeon_pm.c >>in this block that follows the last hunk of the diff: >> >> if (rinfo->no_schedule) { >> if (try_acquire_console_sem()) >> return 0; >> } else >> acquire_console_sem(); >> >>Specificly it's acquire_console_sem(); where the resume stops waiting >>for a key press. What could be stopping things? > > > I don't see any reason for that. That definitely shouldn't happen. > > .../... Yea, so it would seem. Hopefully that'll get fixed magicly once I clean up the rest a little bit. > > >>diff -ru linux-2.6.12.orig/drivers/video/aty/radeon_pm.c >>linux-2.6.12/drivers/video/aty/radeon_pm.c >>--- linux-2.6.12.orig/drivers/video/aty/radeon_pm.c 2005-06-17 >>12:48:29.000000000 -0700 >>+++ linux-2.6.12/drivers/video/aty/radeon_pm.c 2005-07-03 >>19:55:36.000000000 -0700 >>@@ -2606,10 +2606,13 @@ >> >> done: >> pdev->dev.power.power_state = state; >>+ pci_save_state (pdev); >> >> return 0; >> } > > > Hrm... radeonfb already saves the config space elsewhere. Note that it > could maybe be converted to pci_save_state() / pci_restore_state() but > currently, I do my own as I use that for "testing" if the card is still > in it's previous state or was shut down. (I could probably use the > content of a register instead, like CLK_PIN_CNTL) Hrm, maybe it works now, but a few kernel versions back something broke and I added that in as an easy fix. I'll try taking pci_save/restore out again, hopefully all is well again. > > >>+extern void acpi_vgapost (unsigned long slot); >>+ >> int radeonfb_pci_resume(struct pci_dev *pdev) >> { >> struct fb_info *info = pci_get_drvdata(pdev); >>@@ -2619,6 +2622,12 @@ >> if (pdev->dev.power.power_state == 0) >> return 0; >> >>+ if (pdev->dev.power.power_state != 4) >>+ { >>+ pci_restore_state (pdev); >>+ acpi_vgapost (pdev->devfn); >>+ } >>+ >> if (rinfo->no_schedule) { >> if (try_acquire_console_sem()) >> return 0; > > > The above will probably blow up anything that is not an x86 with ACPI. > Besides there is already a mecanism in that file for calling functions > for re-posting cards (since I have code to explicitely re-post rv280 and > rv350 mobility on macs), you should hook into that existing mecanism > when you detect ACPI. > > Ben. > ok, I haven't looked at the existing code very extensivly, I should check it out :-) -- Michael Marineau marineam@engr.orst.edu Oregon State University [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2005-07-13 5:31 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-10 22:19 [PATCH][help?] Radeonfb acpi resume Micheal Marineau
2005-07-10 22:23 ` Micheal Marineau
2005-07-11 15:11 ` Pavel Machek
2005-07-11 18:50 ` Micheal Marineau
2005-07-11 18:56 ` Pavel Machek
2005-07-12 4:32 ` Micheal Marineau
[not found] ` <E1DsHSJ-0006kr-00@chiark.greenend.org.uk>
2005-07-12 13:39 ` Micheal Marineau
2005-07-13 0:32 ` Benjamin Herrenschmidt
2005-07-13 5:31 ` Micheal Marineau
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox