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>
This commit is contained in:
Christoph Grenz 2013-07-04 03:06:26 +02:00 committed by Patrick Georgi
parent bbf096911d
commit 7037840ece
1 changed files with 25 additions and 34 deletions

View File

@ -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