drop extra whitespace at end of line for i945 + ICH7 (trivial)
Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4538 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
committed by
Stefan Reinauer
parent
fd4519b5ef
commit
109ab317e7
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the coreboot project.
|
* This file is part of the coreboot project.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007-2009 coresystems GmbH
|
* Copyright (C) 2007-2009 coresystems GmbH
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
|
@@ -29,7 +29,7 @@ Device (PDRC)
|
|||||||
|
|
||||||
// This does not seem to work correctly yet - set values statically for
|
// This does not seem to work correctly yet - set values statically for
|
||||||
// now.
|
// now.
|
||||||
|
|
||||||
//Name (PDRS, ResourceTemplate() {
|
//Name (PDRS, ResourceTemplate() {
|
||||||
// Memory32Fixed(ReadWrite, 0x00000000, 0x00004000, RCRB) // RCBA
|
// Memory32Fixed(ReadWrite, 0x00000000, 0x00004000, RCRB) // RCBA
|
||||||
// Memory32Fixed(ReadWrite, 0x00000000, 0x00004000, MCHB) // MCHBAR
|
// Memory32Fixed(ReadWrite, 0x00000000, 0x00004000, MCHB) // MCHBAR
|
||||||
|
@@ -26,7 +26,7 @@ Name(_CID,EISAID("PNP0A03")) // PCI
|
|||||||
Device (MCHC)
|
Device (MCHC)
|
||||||
{
|
{
|
||||||
Name(_ADR, 0x00000000) // 0:0.0
|
Name(_ADR, 0x00000000) // 0:0.0
|
||||||
|
|
||||||
OperationRegion(MCHP, PCI_Config, 0x00, 0x100)
|
OperationRegion(MCHP, PCI_Config, 0x00, 0x100)
|
||||||
Field (MCHP, DWordAcc, NoLock, Preserve)
|
Field (MCHP, DWordAcc, NoLock, Preserve)
|
||||||
{
|
{
|
||||||
|
@@ -101,7 +101,7 @@ Device (GFX0)
|
|||||||
/* Some error happened, but we have to return something */
|
/* Some error happened, but we have to return something */
|
||||||
Return (Package() {0x00000400})
|
Return (Package() {0x00000400})
|
||||||
}
|
}
|
||||||
|
|
||||||
Device(DD01)
|
Device(DD01)
|
||||||
{
|
{
|
||||||
/* Device Unique ID */
|
/* Device Unique ID */
|
||||||
@@ -136,7 +136,7 @@ Device (GFX0)
|
|||||||
/* Device Set State */
|
/* Device Set State */
|
||||||
Method(_DSS, 1)
|
Method(_DSS, 1)
|
||||||
{
|
{
|
||||||
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
||||||
* display switch was completed
|
* display switch was completed
|
||||||
*/
|
*/
|
||||||
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
||||||
@@ -179,7 +179,7 @@ Device (GFX0)
|
|||||||
/* Device Set State */
|
/* Device Set State */
|
||||||
Method(_DSS, 1)
|
Method(_DSS, 1)
|
||||||
{
|
{
|
||||||
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
||||||
* display switch was completed
|
* display switch was completed
|
||||||
*/
|
*/
|
||||||
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
||||||
@@ -223,7 +223,7 @@ Device (GFX0)
|
|||||||
/* Device Set State */
|
/* Device Set State */
|
||||||
Method(_DSS, 1)
|
Method(_DSS, 1)
|
||||||
{
|
{
|
||||||
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
||||||
* display switch was completed
|
* display switch was completed
|
||||||
*/
|
*/
|
||||||
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
||||||
@@ -267,7 +267,7 @@ Device (GFX0)
|
|||||||
/* Device Set State */
|
/* Device Set State */
|
||||||
Method(_DSS, 1)
|
Method(_DSS, 1)
|
||||||
{
|
{
|
||||||
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
||||||
* display switch was completed
|
* display switch was completed
|
||||||
*/
|
*/
|
||||||
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
||||||
@@ -311,7 +311,7 @@ Device (GFX0)
|
|||||||
/* Device Set State */
|
/* Device Set State */
|
||||||
Method(_DSS, 1)
|
Method(_DSS, 1)
|
||||||
{
|
{
|
||||||
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
/* If Parameter Arg0 is (1 << 31) | (1 << 30), the
|
||||||
* display switch was completed
|
* display switch was completed
|
||||||
*/
|
*/
|
||||||
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
If (LEqual(And(Arg0, 0xc0000000), 0xc0000000)) {
|
||||||
|
@@ -39,7 +39,7 @@ static void gma_func1_init(struct device *dev)
|
|||||||
|
|
||||||
/* IGD needs to be Bus Master, also enable IO accesss */
|
/* IGD needs to be Bus Master, also enable IO accesss */
|
||||||
reg32 = pci_read_config32(dev, PCI_COMMAND);
|
reg32 = pci_read_config32(dev, PCI_COMMAND);
|
||||||
pci_write_config32(dev, PCI_COMMAND, reg32 |
|
pci_write_config32(dev, PCI_COMMAND, reg32 |
|
||||||
PCI_COMMAND_MASTER | PCI_COMMAND_IO);
|
PCI_COMMAND_MASTER | PCI_COMMAND_IO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -290,7 +290,7 @@
|
|||||||
|
|
||||||
#define PORTARB 0x100 /* 256bit */
|
#define PORTARB 0x100 /* 256bit */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DMIBAR
|
* DMIBAR
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -43,7 +43,7 @@ int get_pcie_bar(u32 *base, u32 *len)
|
|||||||
dev = dev_find_slot(0, PCI_DEVFN(0, 0));
|
dev = dev_find_slot(0, PCI_DEVFN(0, 0));
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
pciexbar_reg = pci_read_config32(dev, 0x48);
|
pciexbar_reg = pci_read_config32(dev, 0x48);
|
||||||
|
|
||||||
if (!(pciexbar_reg & (1 << 0)))
|
if (!(pciexbar_reg & (1 << 0)))
|
||||||
@@ -78,12 +78,12 @@ int add_northbridge_resources(struct lb_memory *mem)
|
|||||||
u32 pcie_config_base, pcie_config_size;
|
u32 pcie_config_base, pcie_config_size;
|
||||||
|
|
||||||
printk_debug("Adding UMA memory area\n");
|
printk_debug("Adding UMA memory area\n");
|
||||||
lb_add_memory_range(mem, LB_MEM_RESERVED,
|
lb_add_memory_range(mem, LB_MEM_RESERVED,
|
||||||
uma_memory_base, uma_memory_size);
|
uma_memory_base, uma_memory_size);
|
||||||
|
|
||||||
printk_debug("Adding PCIe config bar\n");
|
printk_debug("Adding PCIe config bar\n");
|
||||||
get_pcie_bar(&pcie_config_base, &pcie_config_size);
|
get_pcie_bar(&pcie_config_base, &pcie_config_size);
|
||||||
lb_add_memory_range(mem, LB_MEM_RESERVED,
|
lb_add_memory_range(mem, LB_MEM_RESERVED,
|
||||||
pcie_config_base, pcie_config_size);
|
pcie_config_base, pcie_config_size);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
static int bios_reset_detected(void)
|
static int bios_reset_detected(void)
|
||||||
{
|
{
|
||||||
/* For now ...
|
/* For now ...
|
||||||
* DO NOT, I repeat, DO NOT remove this. If you don't like the
|
* DO NOT, I repeat, DO NOT remove this. If you don't like the
|
||||||
* situation, implement this instead.
|
* situation, implement this instead.
|
||||||
*/
|
*/
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
Name(\PICM, 0) // IOAPIC/8259
|
Name(\PICM, 0) // IOAPIC/8259
|
||||||
Name(\DSEN, 1) // Display Output Switching Enable
|
Name(\DSEN, 1) // Display Output Switching Enable
|
||||||
|
|
||||||
/* Global ACPI memory region. This region is used for passing information
|
/* Global ACPI memory region. This region is used for passing information
|
||||||
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
* between coreboot (aka "the system bios"), ACPI, and the SMI handler.
|
||||||
* Since we don't know where this will end up in memory at ACPI compile time,
|
* Since we don't know where this will end up in memory at ACPI compile time,
|
||||||
* we have to fix it up in coreboot's ACPI creation phase.
|
* we have to fix it up in coreboot's ACPI creation phase.
|
||||||
|
@@ -108,7 +108,7 @@ Scope(\)
|
|||||||
Offset(0x1000), // Chipset
|
Offset(0x1000), // Chipset
|
||||||
Offset(0x3000), // Legacy Configuration Registers
|
Offset(0x3000), // Legacy Configuration Registers
|
||||||
Offset(0x3404), // High Performance Timer Configuration
|
Offset(0x3404), // High Performance Timer Configuration
|
||||||
HPAS, 2, // Address Select
|
HPAS, 2, // Address Select
|
||||||
, 5,
|
, 5,
|
||||||
HPTE, 1, // Address Enable
|
HPTE, 1, // Address Enable
|
||||||
Offset(0x3418), // FD (Function Disable)
|
Offset(0x3418), // FD (Function Disable)
|
||||||
@@ -135,7 +135,7 @@ Scope(\)
|
|||||||
RP5D, 1, // Root Port 5 disable
|
RP5D, 1, // Root Port 5 disable
|
||||||
RP6D, 1 // Root Port 6 disable
|
RP6D, 1 // Root Port 6 disable
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0:1b.0 High Definition Audio (Azalia)
|
// 0:1b.0 High Definition Audio (Azalia)
|
||||||
|
@@ -33,7 +33,7 @@ Device (AUD0)
|
|||||||
Device (MODM)
|
Device (MODM)
|
||||||
{
|
{
|
||||||
Name (_ADR, 0x001e0003)
|
Name (_ADR, 0x001e0003)
|
||||||
|
|
||||||
Name (_PRW, Package(){ 5, 4 })
|
Name (_PRW, Package(){ 5, 4 })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ Device (HDEF)
|
|||||||
Name (_ADR, 0x001b0000)
|
Name (_ADR, 0x001b0000)
|
||||||
|
|
||||||
// Power Resources for Wake
|
// Power Resources for Wake
|
||||||
Name (_PRW, Package(){
|
Name (_PRW, Package(){
|
||||||
5, // Bit 5 of GPE
|
5, // Bit 5 of GPE
|
||||||
4 // Can wake from S4 state.
|
4 // Can wake from S4 state.
|
||||||
})
|
})
|
||||||
|
@@ -36,7 +36,7 @@ Device (LNKA)
|
|||||||
IRQ(Level, ActiveLow, Shared)
|
IRQ(Level, ActiveLow, Shared)
|
||||||
{ 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 }
|
{ 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Current Resource Settings for this link
|
// Current Resource Settings for this link
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
@@ -95,7 +95,7 @@ Device (LNKB)
|
|||||||
IRQ(Level, ActiveLow, Shared)
|
IRQ(Level, ActiveLow, Shared)
|
||||||
{ 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 }
|
{ 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Current Resource Settings for this link
|
// Current Resource Settings for this link
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
@@ -154,7 +154,7 @@ Device (LNKC)
|
|||||||
IRQ(Level, ActiveLow, Shared)
|
IRQ(Level, ActiveLow, Shared)
|
||||||
{ 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 }
|
{ 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Current Resource Settings for this link
|
// Current Resource Settings for this link
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
@@ -213,7 +213,7 @@ Device (LNKD)
|
|||||||
IRQ(Level, ActiveLow, Shared)
|
IRQ(Level, ActiveLow, Shared)
|
||||||
{ 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 }
|
{ 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Current Resource Settings for this link
|
// Current Resource Settings for this link
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
@@ -272,7 +272,7 @@ Device (LNKE)
|
|||||||
IRQ(Level, ActiveLow, Shared)
|
IRQ(Level, ActiveLow, Shared)
|
||||||
{ 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 }
|
{ 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Current Resource Settings for this link
|
// Current Resource Settings for this link
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
@@ -331,7 +331,7 @@ Device (LNKF)
|
|||||||
IRQ(Level, ActiveLow, Shared)
|
IRQ(Level, ActiveLow, Shared)
|
||||||
{ 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 }
|
{ 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Current Resource Settings for this link
|
// Current Resource Settings for this link
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
@@ -390,7 +390,7 @@ Device (LNKG)
|
|||||||
IRQ(Level, ActiveLow, Shared)
|
IRQ(Level, ActiveLow, Shared)
|
||||||
{ 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 }
|
{ 1, 3, 4, 5, 6, 7, 10, 12, 14, 15 }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Current Resource Settings for this link
|
// Current Resource Settings for this link
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
@@ -449,7 +449,7 @@ Device (LNKH)
|
|||||||
IRQ(Level, ActiveLow, Shared)
|
IRQ(Level, ActiveLow, Shared)
|
||||||
{ 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 }
|
{ 1, 3, 4, 5, 6, 7, 11, 12, 14, 15 }
|
||||||
})
|
})
|
||||||
|
|
||||||
// Current Resource Settings for this link
|
// Current Resource Settings for this link
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
Device (LPCB)
|
Device (LPCB)
|
||||||
{
|
{
|
||||||
Name(_ADR, 0x001f0000)
|
Name(_ADR, 0x001f0000)
|
||||||
|
|
||||||
OperationRegion(LPC0, PCI_Config, 0x00, 0x100)
|
OperationRegion(LPC0, PCI_Config, 0x00, 0x100)
|
||||||
Field (LPC0, AnyAcc, NoLock, Preserve)
|
Field (LPC0, AnyAcc, NoLock, Preserve)
|
||||||
{
|
{
|
||||||
@@ -52,7 +52,7 @@ Device (LPCB)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Include ("../../../southbridge/intel/i82801gx/acpi/ich7_irqlinks.asl")
|
Include ("../../../southbridge/intel/i82801gx/acpi/ich7_irqlinks.asl")
|
||||||
|
|
||||||
Include ("acpi/ec.asl")
|
Include ("acpi/ec.asl")
|
||||||
|
|
||||||
Device (DMAC) // DMA Controller
|
Device (DMAC) // DMA Controller
|
||||||
|
@@ -41,7 +41,7 @@ Device (PATA)
|
|||||||
CreateDwordField (PBUF, 4, DMA0)
|
CreateDwordField (PBUF, 4, DMA0)
|
||||||
CreateDwordField (PBUF, 8, PIO1)
|
CreateDwordField (PBUF, 8, PIO1)
|
||||||
CreateDwordField (PBUF, 12, DMA1)
|
CreateDwordField (PBUF, 12, DMA1)
|
||||||
CreateDwordField (PBUF, 16, FLAG)
|
CreateDwordField (PBUF, 16, FLAG)
|
||||||
|
|
||||||
// TODO fill return structure
|
// TODO fill return structure
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ Device (PATA)
|
|||||||
CreateDwordField (Arg0, 4, DMA0)
|
CreateDwordField (Arg0, 4, DMA0)
|
||||||
CreateDwordField (Arg0, 8, PIO1)
|
CreateDwordField (Arg0, 8, PIO1)
|
||||||
CreateDwordField (Arg0, 12, DMA1)
|
CreateDwordField (Arg0, 12, DMA1)
|
||||||
CreateDwordField (Arg0, 16, FLAG)
|
CreateDwordField (Arg0, 16, FLAG)
|
||||||
|
|
||||||
// TODO: Do the deed
|
// TODO: Do the deed
|
||||||
}
|
}
|
||||||
|
@@ -64,7 +64,7 @@ Device (PCIB)
|
|||||||
// TODO: How many slots, where?
|
// TODO: How many slots, where?
|
||||||
|
|
||||||
// PCI Interrupt Routing.
|
// PCI Interrupt Routing.
|
||||||
// If PICM is set, interrupts are routed over the i8259, otherwise
|
// If PICM is set, interrupts are routed over the i8259, otherwise
|
||||||
// over the IOAPIC. (Really? If they're above 15 they need to be routed
|
// over the IOAPIC. (Really? If they're above 15 they need to be routed
|
||||||
// fixed over the IOAPIC?)
|
// fixed over the IOAPIC?)
|
||||||
|
|
||||||
|
@@ -44,7 +44,7 @@ Device (SATA)
|
|||||||
CreateDwordField (PBUF, 4, DMA0)
|
CreateDwordField (PBUF, 4, DMA0)
|
||||||
CreateDwordField (PBUF, 8, PIO1)
|
CreateDwordField (PBUF, 8, PIO1)
|
||||||
CreateDwordField (PBUF, 12, DMA1)
|
CreateDwordField (PBUF, 12, DMA1)
|
||||||
CreateDwordField (PBUF, 16, FLAG)
|
CreateDwordField (PBUF, 16, FLAG)
|
||||||
|
|
||||||
// TODO fill return structure
|
// TODO fill return structure
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ Device (SATA)
|
|||||||
CreateDwordField (Arg0, 4, DMA0)
|
CreateDwordField (Arg0, 4, DMA0)
|
||||||
CreateDwordField (Arg0, 8, PIO1)
|
CreateDwordField (Arg0, 8, PIO1)
|
||||||
CreateDwordField (Arg0, 12, DMA1)
|
CreateDwordField (Arg0, 12, DMA1)
|
||||||
CreateDwordField (Arg0, 16, FLAG)
|
CreateDwordField (Arg0, 16, FLAG)
|
||||||
|
|
||||||
// TODO: Do the deed
|
// TODO: Do the deed
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
Device (SBUS)
|
Device (SBUS)
|
||||||
{
|
{
|
||||||
Name (_ADR, 0x001f0003)
|
Name (_ADR, 0x001f0003)
|
||||||
|
|
||||||
OperationRegion (SMBP, PCI_Config, 0x00, 0x100)
|
OperationRegion (SMBP, PCI_Config, 0x00, 0x100)
|
||||||
Field(SMBP, DWordAcc, NoLock, Preserve)
|
Field(SMBP, DWordAcc, NoLock, Preserve)
|
||||||
{
|
{
|
||||||
@@ -102,7 +102,7 @@ Device (SBUS)
|
|||||||
Store (0, Local0) // We're ready
|
Store (0, Local0) // We're ready
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Store (4000, Local0) // Timeout 200ms (50us * 4000)
|
Store (4000, Local0) // Timeout 200ms (50us * 4000)
|
||||||
While (Local0) {
|
While (Local0) {
|
||||||
If (And (HSTS, 0x01)) { // Host Busy?
|
If (And (HSTS, 0x01)) { // Host Busy?
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
Device (USB1)
|
Device (USB1)
|
||||||
{
|
{
|
||||||
Name(_ADR, 0x001d0000)
|
Name(_ADR, 0x001d0000)
|
||||||
|
|
||||||
OperationRegion(U01P, PCI_Config, 0, 256)
|
OperationRegion(U01P, PCI_Config, 0, 256)
|
||||||
Field(U01P, DWordAcc, NoLock, Preserve)
|
Field(U01P, DWordAcc, NoLock, Preserve)
|
||||||
{
|
{
|
||||||
@@ -35,7 +35,7 @@ Device (USB1)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Name (_PRW, Package(){ 3, 4 }) // Power Resources for Wake
|
Name (_PRW, Package(){ 3, 4 }) // Power Resources for Wake
|
||||||
|
|
||||||
Method (_PSW, 1) // Power State Wake method
|
Method (_PSW, 1) // Power State Wake method
|
||||||
{
|
{
|
||||||
// USB Controller can wake OS from Sleep State
|
// USB Controller can wake OS from Sleep State
|
||||||
@@ -65,7 +65,7 @@ Device (USB1)
|
|||||||
Device (USB2)
|
Device (USB2)
|
||||||
{
|
{
|
||||||
Name(_ADR, 0x001d0001)
|
Name(_ADR, 0x001d0001)
|
||||||
|
|
||||||
OperationRegion(U02P, PCI_Config, 0, 256)
|
OperationRegion(U02P, PCI_Config, 0, 256)
|
||||||
Field(U02P, DWordAcc, NoLock, Preserve)
|
Field(U02P, DWordAcc, NoLock, Preserve)
|
||||||
{
|
{
|
||||||
@@ -74,7 +74,7 @@ Device (USB2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Name (_PRW, Package(){ 3, 4 }) // Power Resources for Wake
|
Name (_PRW, Package(){ 3, 4 }) // Power Resources for Wake
|
||||||
|
|
||||||
Method (_PSW, 1) // Power State Wake method
|
Method (_PSW, 1) // Power State Wake method
|
||||||
{
|
{
|
||||||
// USB Controller can wake OS from Sleep State
|
// USB Controller can wake OS from Sleep State
|
||||||
@@ -105,7 +105,7 @@ Device (USB2)
|
|||||||
Device (USB3)
|
Device (USB3)
|
||||||
{
|
{
|
||||||
Name(_ADR, 0x001d0002)
|
Name(_ADR, 0x001d0002)
|
||||||
|
|
||||||
OperationRegion(U03P, PCI_Config, 0, 256)
|
OperationRegion(U03P, PCI_Config, 0, 256)
|
||||||
Field(U03P, DWordAcc, NoLock, Preserve)
|
Field(U03P, DWordAcc, NoLock, Preserve)
|
||||||
{
|
{
|
||||||
@@ -114,7 +114,7 @@ Device (USB3)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Name (_PRW, Package(){ 3, 4 }) // Power Resources for Wake
|
Name (_PRW, Package(){ 3, 4 }) // Power Resources for Wake
|
||||||
|
|
||||||
Method (_PSW, 1) // Power State Wake method
|
Method (_PSW, 1) // Power State Wake method
|
||||||
{
|
{
|
||||||
// USB Controller can wake OS from Sleep State
|
// USB Controller can wake OS from Sleep State
|
||||||
@@ -145,7 +145,7 @@ Device (USB3)
|
|||||||
Device (USB4)
|
Device (USB4)
|
||||||
{
|
{
|
||||||
Name(_ADR, 0x001d0003)
|
Name(_ADR, 0x001d0003)
|
||||||
|
|
||||||
OperationRegion(U04P, PCI_Config, 0, 256)
|
OperationRegion(U04P, PCI_Config, 0, 256)
|
||||||
Field(U04P, DWordAcc, NoLock, Preserve)
|
Field(U04P, DWordAcc, NoLock, Preserve)
|
||||||
{
|
{
|
||||||
@@ -154,7 +154,7 @@ Device (USB4)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Name (_PRW, Package(){ 3, 4 }) // Power Resources for Wake
|
Name (_PRW, Package(){ 3, 4 }) // Power Resources for Wake
|
||||||
|
|
||||||
Method (_PSW, 1) // Power State Wake method
|
Method (_PSW, 1) // Power State Wake method
|
||||||
{
|
{
|
||||||
// USB Controller can wake OS from Sleep State
|
// USB Controller can wake OS from Sleep State
|
||||||
@@ -185,9 +185,9 @@ Device (USB4)
|
|||||||
Device (EHC1)
|
Device (EHC1)
|
||||||
{
|
{
|
||||||
Name(_ADR, 0x001d0007)
|
Name(_ADR, 0x001d0007)
|
||||||
|
|
||||||
Name (_PRW, Package(){ 13, 4 }) // Power Resources for Wake
|
Name (_PRW, Package(){ 13, 4 }) // Power Resources for Wake
|
||||||
|
|
||||||
// Leave USB ports on for to allow Wake from USB
|
// Leave USB ports on for to allow Wake from USB
|
||||||
|
|
||||||
Method(_S3D,0) // Highest D State in S3 State
|
Method(_S3D,0) // Highest D State in S3 State
|
||||||
|
@@ -109,11 +109,11 @@ extern void i82801gx_enable(device_t dev);
|
|||||||
#define HST_EN (1 << 0)
|
#define HST_EN (1 << 0)
|
||||||
|
|
||||||
/* SMBus I/O bits.
|
/* SMBus I/O bits.
|
||||||
* It does not matter where we put the SMBus I/O base, as long as we
|
* It does not matter where we put the SMBus I/O base, as long as we
|
||||||
* keep it consistent and don't interfere with other devices. Stage2
|
* keep it consistent and don't interfere with other devices. Stage2
|
||||||
* will relocate this anyways.
|
* will relocate this anyways.
|
||||||
* Our solution is to have SMB initialization move the I/O to SMBUS_IO_BASE
|
* Our solution is to have SMB initialization move the I/O to SMBUS_IO_BASE
|
||||||
* again. But handling static BARs is a generic problem that should be
|
* again. But handling static BARs is a generic problem that should be
|
||||||
* solved in the device allocator.
|
* solved in the device allocator.
|
||||||
*/
|
*/
|
||||||
#define SMBUS_IO_BASE 0x0400
|
#define SMBUS_IO_BASE 0x0400
|
||||||
|
@@ -145,7 +145,7 @@ static void ac97_audio_init(struct device *dev)
|
|||||||
printk_debug("No primary codec. Disabling AC'97 Audio.\n");
|
printk_debug("No primary codec. Disabling AC'97 Audio.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ac97_semaphore();
|
ac97_semaphore();
|
||||||
|
|
||||||
/* Detect if codec is programmable */
|
/* Detect if codec is programmable */
|
||||||
|
@@ -45,8 +45,8 @@ static int set_bits(u8 * port, u32 mask, u32 val)
|
|||||||
reg32 |= val;
|
reg32 |= val;
|
||||||
writel(reg32, port);
|
writel(reg32, port);
|
||||||
|
|
||||||
/* Wait for readback of register to
|
/* Wait for readback of register to
|
||||||
* match what was just written to it
|
* match what was just written to it
|
||||||
*/
|
*/
|
||||||
count = 50;
|
count = 50;
|
||||||
do {
|
do {
|
||||||
@@ -67,11 +67,11 @@ static int codec_detect(u8 * base)
|
|||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
/* Set Bit0 to 0 to enter reset state (BAR + 0x8)[0] */
|
/* Set Bit0 to 0 to enter reset state (BAR + 0x8)[0] */
|
||||||
if (set_bits(base + 0x08, 1, 0) == -1)
|
if (set_bits(base + 0x08, 1, 0) == -1)
|
||||||
goto no_codec;
|
goto no_codec;
|
||||||
|
|
||||||
/* Set Bit 0 to 1 to exit reset state (BAR + 0x8)[0] */
|
/* Set Bit 0 to 1 to exit reset state (BAR + 0x8)[0] */
|
||||||
if (set_bits(base + 0x08, 1, 1) == -1)
|
if (set_bits(base + 0x08, 1, 1) == -1)
|
||||||
goto no_codec;
|
goto no_codec;
|
||||||
|
|
||||||
/* Read in Codec location (BAR + 0xe)[2..0]*/
|
/* Read in Codec location (BAR + 0xe)[2..0]*/
|
||||||
@@ -79,7 +79,7 @@ static int codec_detect(u8 * base)
|
|||||||
reg32 &= 0x0f;
|
reg32 &= 0x0f;
|
||||||
if (!reg32)
|
if (!reg32)
|
||||||
goto no_codec;
|
goto no_codec;
|
||||||
|
|
||||||
return reg32;
|
return reg32;
|
||||||
|
|
||||||
no_codec:
|
no_codec:
|
||||||
@@ -161,7 +161,7 @@ static u32 cim_verb_data[] = {
|
|||||||
static unsigned find_verb(struct device *dev, u32 viddid, u32 ** verb)
|
static unsigned find_verb(struct device *dev, u32 viddid, u32 ** verb)
|
||||||
{
|
{
|
||||||
config_t *config = dev->chip_info;
|
config_t *config = dev->chip_info;
|
||||||
|
|
||||||
if (config == NULL) {
|
if (config == NULL) {
|
||||||
printk_err("\ni82801gx_azalia: Not mentioned in mainboard's Config.lb!\n");
|
printk_err("\ni82801gx_azalia: Not mentioned in mainboard's Config.lb!\n");
|
||||||
return 0;
|
return 0;
|
||||||
@@ -309,7 +309,7 @@ static void azalia_init(struct device *dev)
|
|||||||
|
|
||||||
// VCi Resource Control
|
// VCi Resource Control
|
||||||
reg32 = pci_mmio_read_config32(dev, 0x120);
|
reg32 = pci_mmio_read_config32(dev, 0x120);
|
||||||
reg32 |= (1 << 31);
|
reg32 |= (1 << 31);
|
||||||
reg32 |= (1 << 24); // VCi ID
|
reg32 |= (1 << 24); // VCi ID
|
||||||
reg32 |= (0x80 << 0); // VCi map
|
reg32 |= (0x80 << 0); // VCi map
|
||||||
pci_mmio_write_config32(dev, 0x120, reg32);
|
pci_mmio_write_config32(dev, 0x120, reg32);
|
||||||
|
@@ -73,7 +73,7 @@ static void i82801gx_enable_apic(struct device *dev)
|
|||||||
volatile u32 *ioapic_index = (volatile u32 *)0xfec00000;
|
volatile u32 *ioapic_index = (volatile u32 *)0xfec00000;
|
||||||
volatile u32 *ioapic_data = (volatile u32 *)0xfec00010;
|
volatile u32 *ioapic_data = (volatile u32 *)0xfec00010;
|
||||||
|
|
||||||
/* Enable ACPI I/O and power management.
|
/* Enable ACPI I/O and power management.
|
||||||
* Set SCI IRQ to IRQ9
|
* Set SCI IRQ to IRQ9
|
||||||
*/
|
*/
|
||||||
pci_write_config8(dev, ACPI_CNTL, 0x80);
|
pci_write_config8(dev, ACPI_CNTL, 0x80);
|
||||||
@@ -275,7 +275,7 @@ static void i82801gx_power_options(device_t dev)
|
|||||||
reg32 = inl(pmbase + 0x04); // PM1_CNT
|
reg32 = inl(pmbase + 0x04); // PM1_CNT
|
||||||
#if CONFIG_HAVE_ACPI_RESUME
|
#if CONFIG_HAVE_ACPI_RESUME
|
||||||
acpi_slp_type = (((reg32 >> 10) & 7) == 5) ? 3 : 0;
|
acpi_slp_type = (((reg32 >> 10) & 7) == 5) ? 3 : 0;
|
||||||
printk_debug("PM1_CNT: 0x%08x --> acpi_sleep_type: %x\n",
|
printk_debug("PM1_CNT: 0x%08x --> acpi_sleep_type: %x\n",
|
||||||
reg32, acpi_slp_type);
|
reg32, acpi_slp_type);
|
||||||
#endif
|
#endif
|
||||||
reg32 |= (1 << 1); // enable C3->C0 transition on bus master
|
reg32 |= (1 << 1); // enable C3->C0 transition on bus master
|
||||||
@@ -286,7 +286,7 @@ static void i82801gx_power_options(device_t dev)
|
|||||||
static void i82801gx_configure_cstates(device_t dev)
|
static void i82801gx_configure_cstates(device_t dev)
|
||||||
{
|
{
|
||||||
u8 reg8;
|
u8 reg8;
|
||||||
|
|
||||||
reg8 = pci_read_config8(dev, 0xa9); // Cx state configuration
|
reg8 = pci_read_config8(dev, 0xa9); // Cx state configuration
|
||||||
reg8 |= (1 << 4) | (1 << 3) | (1 << 2); // Enable Popup & Popdown
|
reg8 |= (1 << 4) | (1 << 3) | (1 << 2); // Enable Popup & Popdown
|
||||||
pci_write_config8(dev, 0xa9, reg8);
|
pci_write_config8(dev, 0xa9, reg8);
|
||||||
@@ -318,7 +318,7 @@ static void i82801gx_rtc_init(struct device *dev)
|
|||||||
static void enable_hpet(void)
|
static void enable_hpet(void)
|
||||||
{
|
{
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
/* Move HPET to default address 0xfed00000 and enable it */
|
/* Move HPET to default address 0xfed00000 and enable it */
|
||||||
reg32 = RCBA32(0x3404);
|
reg32 = RCBA32(0x3404);
|
||||||
reg32 |= (1 << 7); // HPET Address Enable
|
reg32 |= (1 << 7); // HPET Address Enable
|
||||||
@@ -329,7 +329,7 @@ static void enable_hpet(void)
|
|||||||
static void enable_clock_gating(void)
|
static void enable_clock_gating(void)
|
||||||
{
|
{
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
/* Enable Clock Gating for most devices */
|
/* Enable Clock Gating for most devices */
|
||||||
reg32 = RCBA32(0x341c);
|
reg32 = RCBA32(0x341c);
|
||||||
reg32 |= (1 << 31); // LPC clock gating
|
reg32 |= (1 << 31); // LPC clock gating
|
||||||
@@ -360,7 +360,7 @@ static void i82801gx_lock_smm(struct device *dev)
|
|||||||
outb(0x1e, 0xb2); // Disable ACPI mode
|
outb(0x1e, 0xb2); // Disable ACPI mode
|
||||||
printk_debug("done.\n");
|
printk_debug("done.\n");
|
||||||
#endif
|
#endif
|
||||||
/* Don't allow evil boot loaders, kernels, or
|
/* Don't allow evil boot loaders, kernels, or
|
||||||
* userspace applications to deceive us:
|
* userspace applications to deceive us:
|
||||||
*/
|
*/
|
||||||
smm_lock();
|
smm_lock();
|
||||||
|
@@ -71,10 +71,10 @@ static void ich_pci_dev_enable_resources(struct device *dev)
|
|||||||
ops = ops_pci(dev);
|
ops = ops_pci(dev);
|
||||||
if (dev->on_mainboard && ops && ops->set_subsystem) {
|
if (dev->on_mainboard && ops && ops->set_subsystem) {
|
||||||
printk_debug("%s subsystem <- %02x/%02x\n",
|
printk_debug("%s subsystem <- %02x/%02x\n",
|
||||||
dev_path(dev),
|
dev_path(dev),
|
||||||
CONFIG_MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID,
|
CONFIG_MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID,
|
||||||
CONFIG_MAINBOARD_PCI_SUBSYSTEM_DEVICE_ID);
|
CONFIG_MAINBOARD_PCI_SUBSYSTEM_DEVICE_ID);
|
||||||
ops->set_subsystem(dev,
|
ops->set_subsystem(dev,
|
||||||
CONFIG_MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID,
|
CONFIG_MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID,
|
||||||
CONFIG_MAINBOARD_PCI_SUBSYSTEM_DEVICE_ID);
|
CONFIG_MAINBOARD_PCI_SUBSYSTEM_DEVICE_ID);
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ static void ich_pci_dev_enable_resources(struct device *dev)
|
|||||||
command = pci_read_config16(dev, PCI_COMMAND);
|
command = pci_read_config16(dev, PCI_COMMAND);
|
||||||
command |= dev->command;
|
command |= dev->command;
|
||||||
#ifdef PCI_BRIDGE_UPDATE_COMMAND
|
#ifdef PCI_BRIDGE_UPDATE_COMMAND
|
||||||
/* If we write to PCI_COMMAND, on some systems
|
/* If we write to PCI_COMMAND, on some systems
|
||||||
* this will cause the ROM and APICs not being visible
|
* this will cause the ROM and APICs not being visible
|
||||||
* anymore.
|
* anymore.
|
||||||
*/
|
*/
|
||||||
|
@@ -29,7 +29,7 @@ static void pci_init(struct device *dev)
|
|||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
printk_debug("Initializing ICH7 PCIe bridge.\n");
|
printk_debug("Initializing ICH7 PCIe bridge.\n");
|
||||||
|
|
||||||
/* Enable Bus Master */
|
/* Enable Bus Master */
|
||||||
reg32 = pci_read_config32(dev, PCI_COMMAND);
|
reg32 = pci_read_config32(dev, PCI_COMMAND);
|
||||||
reg32 |= PCI_COMMAND_MASTER;
|
reg32 |= PCI_COMMAND_MASTER;
|
||||||
|
@@ -132,26 +132,26 @@ static void sata_init(struct device *dev)
|
|||||||
/* Set Interrupt Line */
|
/* Set Interrupt Line */
|
||||||
/* Interrupt Pin is set by D31IP.PIP */
|
/* Interrupt Pin is set by D31IP.PIP */
|
||||||
pci_write_config8(dev, INTR_LN, 0xff);
|
pci_write_config8(dev, INTR_LN, 0xff);
|
||||||
|
|
||||||
/* Set timings */
|
/* Set timings */
|
||||||
pci_write_config16(dev, IDE_TIM_PRI, IDE_DECODE_ENABLE |
|
pci_write_config16(dev, IDE_TIM_PRI, IDE_DECODE_ENABLE |
|
||||||
IDE_ISP_3_CLOCKS | IDE_RCT_1_CLOCKS |
|
IDE_ISP_3_CLOCKS | IDE_RCT_1_CLOCKS |
|
||||||
IDE_PPE0 | IDE_IE0 | IDE_TIME0);
|
IDE_PPE0 | IDE_IE0 | IDE_TIME0);
|
||||||
pci_write_config16(dev, IDE_TIM_SEC, IDE_DECODE_ENABLE |
|
pci_write_config16(dev, IDE_TIM_SEC, IDE_DECODE_ENABLE |
|
||||||
IDE_SITRE | IDE_ISP_3_CLOCKS |
|
IDE_SITRE | IDE_ISP_3_CLOCKS |
|
||||||
IDE_RCT_1_CLOCKS | IDE_IE0 | IDE_TIME0);
|
IDE_RCT_1_CLOCKS | IDE_IE0 | IDE_TIME0);
|
||||||
|
|
||||||
/* Sync DMA */
|
/* Sync DMA */
|
||||||
pci_write_config16(dev, IDE_SDMA_CNT, IDE_SSDE0 | IDE_PSDE0);
|
pci_write_config16(dev, IDE_SDMA_CNT, IDE_SSDE0 | IDE_PSDE0);
|
||||||
pci_write_config16(dev, IDE_SDMA_TIM, 0x0201);
|
pci_write_config16(dev, IDE_SDMA_TIM, 0x0201);
|
||||||
|
|
||||||
/* Set IDE I/O Configuration */
|
/* Set IDE I/O Configuration */
|
||||||
reg32 = SIG_MODE_NORMAL | FAST_PCB1 | FAST_PCB0 | PCB1 | PCB0;
|
reg32 = SIG_MODE_NORMAL | FAST_PCB1 | FAST_PCB0 | PCB1 | PCB0;
|
||||||
pci_write_config32(dev, IDE_CONFIG, reg32);
|
pci_write_config32(dev, IDE_CONFIG, reg32);
|
||||||
|
|
||||||
/* Port 0 & 1 enable XXX */
|
/* Port 0 & 1 enable XXX */
|
||||||
pci_write_config8(dev, 0x92, 0x15);
|
pci_write_config8(dev, 0x92, 0x15);
|
||||||
|
|
||||||
/* SATA Initialization register */
|
/* SATA Initialization register */
|
||||||
pci_write_config32(dev, 0x94, 0x1a000180);
|
pci_write_config32(dev, 0x94, 0x1a000180);
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
#include "i82801gx.h"
|
#include "i82801gx.h"
|
||||||
#include "i82801gx_smbus.h"
|
#include "i82801gx_smbus.h"
|
||||||
|
|
||||||
#define SMB_BASE 0x20
|
#define SMB_BASE 0x20
|
||||||
static void smbus_init(struct device *dev)
|
static void smbus_init(struct device *dev)
|
||||||
{
|
{
|
||||||
|
@@ -81,17 +81,17 @@ extern unsigned int smm_len;
|
|||||||
static u16 pmbase = DEFAULT_PMBASE;
|
static u16 pmbase = DEFAULT_PMBASE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief read and clear PM1_STS
|
* @brief read and clear PM1_STS
|
||||||
* @return PM1_STS register
|
* @return PM1_STS register
|
||||||
*/
|
*/
|
||||||
static u16 reset_pm1_status(void)
|
static u16 reset_pm1_status(void)
|
||||||
{
|
{
|
||||||
u16 reg16;
|
u16 reg16;
|
||||||
|
|
||||||
reg16 = inw(pmbase + PM1_STS);
|
reg16 = inw(pmbase + PM1_STS);
|
||||||
/* set status bits are cleared by writing 1 to them */
|
/* set status bits are cleared by writing 1 to them */
|
||||||
outw(reg16, pmbase + PM1_STS);
|
outw(reg16, pmbase + PM1_STS);
|
||||||
|
|
||||||
return reg16;
|
return reg16;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,17 +110,17 @@ static void dump_pm1_status(u16 pm1_sts)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief read and clear SMI_STS
|
* @brief read and clear SMI_STS
|
||||||
* @return SMI_STS register
|
* @return SMI_STS register
|
||||||
*/
|
*/
|
||||||
static u32 reset_smi_status(void)
|
static u32 reset_smi_status(void)
|
||||||
{
|
{
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
reg32 = inl(pmbase + SMI_STS);
|
reg32 = inl(pmbase + SMI_STS);
|
||||||
/* set status bits are cleared by writing 1 to them */
|
/* set status bits are cleared by writing 1 to them */
|
||||||
outl(reg32, pmbase + SMI_STS);
|
outl(reg32, pmbase + SMI_STS);
|
||||||
|
|
||||||
return reg32;
|
return reg32;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,11 +158,11 @@ static void dump_smi_status(u32 smi_sts)
|
|||||||
static u32 reset_gpe0_status(void)
|
static u32 reset_gpe0_status(void)
|
||||||
{
|
{
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
reg32 = inl(pmbase + GPE0_STS);
|
reg32 = inl(pmbase + GPE0_STS);
|
||||||
/* set status bits are cleared by writing 1 to them */
|
/* set status bits are cleared by writing 1 to them */
|
||||||
outl(reg32, pmbase + GPE0_STS);
|
outl(reg32, pmbase + GPE0_STS);
|
||||||
|
|
||||||
return reg32;
|
return reg32;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,20 +191,20 @@ static void dump_gpe0_status(u32 gpe0_sts)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief read and clear TCOx_STS
|
* @brief read and clear TCOx_STS
|
||||||
* @return TCOx_STS registers
|
* @return TCOx_STS registers
|
||||||
*/
|
*/
|
||||||
static u32 reset_tco_status(void)
|
static u32 reset_tco_status(void)
|
||||||
{
|
{
|
||||||
u32 tcobase = pmbase + 0x60;
|
u32 tcobase = pmbase + 0x60;
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
reg32 = inl(tcobase + 0x04);
|
reg32 = inl(tcobase + 0x04);
|
||||||
/* set status bits are cleared by writing 1 to them */
|
/* set status bits are cleared by writing 1 to them */
|
||||||
outl(reg32 & ~(1<<18), tcobase + 0x04); // Don't clear BOOT_STS before SECOND_TO_STS
|
outl(reg32 & ~(1<<18), tcobase + 0x04); // Don't clear BOOT_STS before SECOND_TO_STS
|
||||||
if (reg32 & (1 << 18))
|
if (reg32 & (1 << 18))
|
||||||
outl(reg32 & (1<<18), tcobase + 0x04); // clear BOOT_STS
|
outl(reg32 & (1<<18), tcobase + 0x04); // clear BOOT_STS
|
||||||
|
|
||||||
return reg32;
|
return reg32;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ static void dump_tco_status(u32 tco_sts)
|
|||||||
static void smi_set_eos(void)
|
static void smi_set_eos(void)
|
||||||
{
|
{
|
||||||
u8 reg8;
|
u8 reg8;
|
||||||
|
|
||||||
reg8 = inb(pmbase + SMI_EN);
|
reg8 = inb(pmbase + SMI_EN);
|
||||||
reg8 |= EOS;
|
reg8 |= EOS;
|
||||||
outb(reg8, pmbase + SMI_EN);
|
outb(reg8, pmbase + SMI_EN);
|
||||||
@@ -286,8 +286,8 @@ void smm_relocate(void)
|
|||||||
* - Writes to io 0xb2 (APMC)
|
* - Writes to io 0xb2 (APMC)
|
||||||
* - Writes to the Local Apic ICR with Delivery mode SMI.
|
* - Writes to the Local Apic ICR with Delivery mode SMI.
|
||||||
*
|
*
|
||||||
* Using the local apic is a bit more tricky. According to
|
* Using the local apic is a bit more tricky. According to
|
||||||
* AMD Family 11 Processor BKDG no destination shorthand must be
|
* AMD Family 11 Processor BKDG no destination shorthand must be
|
||||||
* used.
|
* used.
|
||||||
* The whole SMM initialization is quite a bit hardware specific, so
|
* The whole SMM initialization is quite a bit hardware specific, so
|
||||||
* I'm not too worried about the better of the methods at the moment
|
* I'm not too worried about the better of the methods at the moment
|
||||||
|
@@ -102,17 +102,17 @@ void *tcg = (void *)0x0;
|
|||||||
void *smi1 = (void *)0x0;
|
void *smi1 = (void *)0x0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief read and clear PM1_STS
|
* @brief read and clear PM1_STS
|
||||||
* @return PM1_STS register
|
* @return PM1_STS register
|
||||||
*/
|
*/
|
||||||
static u16 reset_pm1_status(void)
|
static u16 reset_pm1_status(void)
|
||||||
{
|
{
|
||||||
u16 reg16;
|
u16 reg16;
|
||||||
|
|
||||||
reg16 = inw(pmbase + PM1_STS);
|
reg16 = inw(pmbase + PM1_STS);
|
||||||
/* set status bits are cleared by writing 1 to them */
|
/* set status bits are cleared by writing 1 to them */
|
||||||
outw(reg16, pmbase + PM1_STS);
|
outw(reg16, pmbase + PM1_STS);
|
||||||
|
|
||||||
return reg16;
|
return reg16;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,17 +131,17 @@ static void dump_pm1_status(u16 pm1_sts)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief read and clear SMI_STS
|
* @brief read and clear SMI_STS
|
||||||
* @return SMI_STS register
|
* @return SMI_STS register
|
||||||
*/
|
*/
|
||||||
static u32 reset_smi_status(void)
|
static u32 reset_smi_status(void)
|
||||||
{
|
{
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
reg32 = inl(pmbase + SMI_STS);
|
reg32 = inl(pmbase + SMI_STS);
|
||||||
/* set status bits are cleared by writing 1 to them */
|
/* set status bits are cleared by writing 1 to them */
|
||||||
outl(reg32, pmbase + SMI_STS);
|
outl(reg32, pmbase + SMI_STS);
|
||||||
|
|
||||||
return reg32;
|
return reg32;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,11 +179,11 @@ static void dump_smi_status(u32 smi_sts)
|
|||||||
static u32 reset_gpe0_status(void)
|
static u32 reset_gpe0_status(void)
|
||||||
{
|
{
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
reg32 = inl(pmbase + GPE0_STS);
|
reg32 = inl(pmbase + GPE0_STS);
|
||||||
/* set status bits are cleared by writing 1 to them */
|
/* set status bits are cleared by writing 1 to them */
|
||||||
outl(reg32, pmbase + GPE0_STS);
|
outl(reg32, pmbase + GPE0_STS);
|
||||||
|
|
||||||
return reg32;
|
return reg32;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,20 +213,20 @@ static void dump_gpe0_status(u32 gpe0_sts)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief read and clear TCOx_STS
|
* @brief read and clear TCOx_STS
|
||||||
* @return TCOx_STS registers
|
* @return TCOx_STS registers
|
||||||
*/
|
*/
|
||||||
static u32 reset_tco_status(void)
|
static u32 reset_tco_status(void)
|
||||||
{
|
{
|
||||||
u32 tcobase = pmbase + 0x60;
|
u32 tcobase = pmbase + 0x60;
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
|
|
||||||
reg32 = inl(tcobase + 0x04);
|
reg32 = inl(tcobase + 0x04);
|
||||||
/* set status bits are cleared by writing 1 to them */
|
/* set status bits are cleared by writing 1 to them */
|
||||||
outl(reg32 & ~(1<<18), tcobase + 0x04); // Don't clear BOOT_STS before SECOND_TO_STS
|
outl(reg32 & ~(1<<18), tcobase + 0x04); // Don't clear BOOT_STS before SECOND_TO_STS
|
||||||
if (reg32 & (1 << 18))
|
if (reg32 & (1 << 18))
|
||||||
outl(reg32 & (1<<18), tcobase + 0x04); // clear BOOT_STS
|
outl(reg32 & (1<<18), tcobase + 0x04); // clear BOOT_STS
|
||||||
|
|
||||||
return reg32;
|
return reg32;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,7 +296,7 @@ static void southbridge_smi_sleep(unsigned int node, smm_state_save_area_t *stat
|
|||||||
u8 reg8;
|
u8 reg8;
|
||||||
u32 reg32;
|
u32 reg32;
|
||||||
u8 slp_typ;
|
u8 slp_typ;
|
||||||
/* FIXME: the power state on boot should be read from
|
/* FIXME: the power state on boot should be read from
|
||||||
* CMOS or even better from GNVS. Right now it's hard
|
* CMOS or even better from GNVS. Right now it's hard
|
||||||
* coded at compile time.
|
* coded at compile time.
|
||||||
*/
|
*/
|
||||||
@@ -347,7 +347,7 @@ static void southbridge_smi_sleep(unsigned int node, smm_state_save_area_t *stat
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Write back to the SLP register to cause the originally intended
|
/* Write back to the SLP register to cause the originally intended
|
||||||
* event again. We need to set BIT13 (SLP_EN) though to make the
|
* event again. We need to set BIT13 (SLP_EN) though to make the
|
||||||
* sleep happen.
|
* sleep happen.
|
||||||
*/
|
*/
|
||||||
outl(reg32 | SLP_EN, pmbase + PM1_CNT);
|
outl(reg32 | SLP_EN, pmbase + PM1_CNT);
|
||||||
@@ -545,7 +545,7 @@ static void southbridge_smi_monitor(unsigned int node, smm_state_save_area_t *st
|
|||||||
#undef IOTRAP
|
#undef IOTRAP
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void (*smi_handler)(unsigned int node,
|
typedef void (*smi_handler)(unsigned int node,
|
||||||
smm_state_save_area_t *state_save);
|
smm_state_save_area_t *state_save);
|
||||||
|
|
||||||
smi_handler southbridge_smi[32] = {
|
smi_handler southbridge_smi[32] = {
|
||||||
@@ -580,7 +580,7 @@ smi_handler southbridge_smi[32] = {
|
|||||||
NULL, // [28] reserved
|
NULL, // [28] reserved
|
||||||
NULL, // [29] reserved
|
NULL, // [29] reserved
|
||||||
NULL, // [30] reserved
|
NULL, // [30] reserved
|
||||||
NULL // [31] reserved
|
NULL // [31] reserved
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -601,14 +601,14 @@ void southbridge_smi_handler(unsigned int node, smm_state_save_area_t *state_sav
|
|||||||
* happening in the following calls.
|
* happening in the following calls.
|
||||||
*/
|
*/
|
||||||
smi_sts = reset_smi_status();
|
smi_sts = reset_smi_status();
|
||||||
|
|
||||||
/* Filter all non-enabled SMI events */
|
/* Filter all non-enabled SMI events */
|
||||||
// FIXME Double check, this clears MONITOR
|
// FIXME Double check, this clears MONITOR
|
||||||
// smi_sts &= inl(pmbase + SMI_EN);
|
// smi_sts &= inl(pmbase + SMI_EN);
|
||||||
|
|
||||||
/* Call SMI sub handler for each of the status bits */
|
/* Call SMI sub handler for each of the status bits */
|
||||||
for (i = 0; i < 31; i++) {
|
for (i = 0; i < 31; i++) {
|
||||||
if (smi_sts & (1 << i)) {
|
if (smi_sts & (1 << i)) {
|
||||||
if (southbridge_smi[i])
|
if (southbridge_smi[i])
|
||||||
southbridge_smi[i](node, state_save);
|
southbridge_smi[i](node, state_save);
|
||||||
else {
|
else {
|
||||||
|
Reference in New Issue
Block a user