summaryrefslogtreecommitdiff
path: root/src/superio/winbond
diff options
context:
space:
mode:
authorChristoph Grenz <christophg+cb@grenz-bonn.de>2013-07-04 03:06:26 +0200
committerPatrick Georgi <patrick@georgi-clan.de>2013-08-15 21:30:53 +0200
commit7037840ece7ed221990a8e683293408b81a4cfd1 (patch)
treee41ba78e6a2913dcc7735eda6b1a76acaf3da905 /src/superio/winbond
parentbbf096911d8fefa86120230c97131efb8dd53244 (diff)
w83627hf/acpi: Move floppy drive enumeration from _INI into _FDE.
Move the floppy drive enumeration from _INI() and PROB(), which stored the enumeration results into _FDE into _FDE(). _INI is called by any ACPI-capable OS on boot while _FDE is rarely used. So it's better to run the enumeration when requested rather than unconditionally. Change-Id: Icf1e2a551806592faa8ba8d80fa8d02681602007 Signed-off-by: Christoph Grenz <christophg+cb@grenz-bonn.de> Reviewed-on: http://review.coreboot.org/3604 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
Diffstat (limited to 'src/superio/winbond')
-rw-r--r--src/superio/winbond/w83627hf/acpi/superio.asl59
1 files changed, 25 insertions, 34 deletions
diff --git a/src/superio/winbond/w83627hf/acpi/superio.asl b/src/superio/winbond/w83627hf/acpi/superio.asl
index 90d14ff451..85313393e8 100644
--- a/src/superio/winbond/w83627hf/acpi/superio.asl
+++ b/src/superio/winbond/w83627hf/acpi/superio.asl
@@ -212,24 +212,6 @@ Device(SIO) {
Name (_STR, Unicode ("W83627HF Floppy Disk Controller"))
Name (_UID, "w83627hf-fdc")
- #ifndef NO_W83627HF_FDC_ENUM
- /* Initialization method: Should be run once on boot
- If FDC is active, enumerate all connected devices */
- Method (_INI) {
- ENCM (0)
- Store (ACTR, Local0)
- Store (IO1H, Local1)
- Store (IO1L, Local2)
- EXCM ()
- ShiftLeft(Local1, 8, Local1)
- Or(Local1, Local2, Local1)
- If (Local0) {
- /* Try probing drives and save result in _FDE */
- PROB(Local1)
- }
- }
- #endif
-
Method (_STA)
{
Store (0x00, Local0)
@@ -317,18 +299,33 @@ Device(SIO) {
}
#ifndef NO_W83627HF_FDC_ENUM
- Name(_FDE, Buffer(){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
- #endif
-
- Method (PROB, 1) {
- #ifndef NO_W83627HF_FDC_ENUM
- /* Try probing drives and save result in _FDE
+ Method (_FDE, 0) {
+ /* Try probing drives.
Probing is done through selecting and activating a drive
and reading 0x03F7 aka the "shared IDE and floppy register"
as any value there besides zero seems to indicate a
connected drive.
*/
- OperationRegion (FIO1, SystemIO, Arg0, 0x06)
+ // Create template
+ Name(FDE, Buffer(){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
+ CreateByteField (FDE, 1, FD1)
+ CreateByteField (FDE, 4, FD2)
+ CreateByteField (FDE, 8, FD3)
+ CreateByteField (FDE, 12, FD4)
+
+ // Get resources from logical device
+ ENCM (0)
+ Store (ACTR, Local0)
+ Store (IO1H, Local1)
+ Store (IO1L, Local2)
+ EXCM ()
+ ShiftLeft(Local1, 8, Local1)
+ Or(Local1, Local2, Local1)
+ If (LNot(Local0)) {
+ Return (FDE)
+ }
+
+ OperationRegion (FIO1, SystemIO, Local1, 0x06)
Field (FIO1, ByteAcc, NoLock, Preserve)
{
Offset(0x02),
@@ -356,11 +353,6 @@ Device(SIO) {
SIFR, 8
}
- CreateByteField (_FDE, 1, FD1)
- CreateByteField (_FDE, 4, FD2)
- CreateByteField (_FDE, 8, FD3)
- CreateByteField (_FDE, 12, FD4)
-
Store(One, ACT1)
Store(0, SELE)
Sleep(0x64)
@@ -385,8 +377,10 @@ Device(SIO) {
If (SIFR) { Store (One, FD4) }
Store(Zero, ACT4)
Store(Zero, SELE)
- #endif
+
+ Return (FDE)
}
+ #endif
Method (_SRS, 1, Serialized)
@@ -407,9 +401,6 @@ Device(SIO) {
Store (Local1, IO1H)
Store (One, ACTR)
EXCM ()
-
- /* Try probing drives and save result in _FDE */
- PROB(IOA0)
}
}
#endif