diff options
26 files changed, 0 insertions, 4081 deletions
diff --git a/src/mainboard/via/Kconfig b/src/mainboard/via/Kconfig index 328d33d7d5..5d72cc1734 100644 --- a/src/mainboard/via/Kconfig +++ b/src/mainboard/via/Kconfig @@ -12,8 +12,6 @@ config BOARD_VIA_EPIA_M850 help STOP RIGHT HERE AND READ THIS!!! Read http://www.coreboot.org/VIA_EPIA-M850 before you proceed. -config BOARD_VIA_EPIA_N - bool "EPIA-N" config BOARD_VIA_PC2500E bool "pc2500e" config BOARD_VIA_VT8454C @@ -24,7 +22,6 @@ endchoice source "src/mainboard/via/epia-cn/Kconfig" source "src/mainboard/via/epia-m700/Kconfig" source "src/mainboard/via/epia-m850/Kconfig" -source "src/mainboard/via/epia-n/Kconfig" source "src/mainboard/via/pc2500e/Kconfig" source "src/mainboard/via/vt8454c/Kconfig" diff --git a/src/mainboard/via/epia-n/Kconfig b/src/mainboard/via/epia-n/Kconfig deleted file mode 100644 index 9b30bebf6e..0000000000 --- a/src/mainboard/via/epia-n/Kconfig +++ /dev/null @@ -1,30 +0,0 @@ -if BOARD_VIA_EPIA_N - -config BOARD_SPECIFIC_OPTIONS # dummy - def_bool y - select CPU_VIA_C3 - select NORTHBRIDGE_VIA_CN400 - select SOUTHBRIDGE_VIA_VT8237R - select SUPERIO_WINBOND_W83697HF - select HAVE_OPTION_TABLE - select HAVE_PIRQ_TABLE - select HAVE_MP_TABLE - select EPIA_VT8237R_INIT - select HAVE_ACPI_TABLES - select BOARD_ROMSIZE_KB_512 - select ROMCC - select PER_DEVICE_ACPI_TABLES - -config MAINBOARD_DIR - string - default via/epia-n - -config MAINBOARD_PART_NUMBER - string - default "EPIA-N" - -config IRQ_SLOT_COUNT - int - default 7 - -endif # BOARD_VIA_EPIA_N diff --git a/src/mainboard/via/epia-n/acpi/irq_links.asl b/src/mainboard/via/epia-n/acpi/irq_links.asl deleted file mode 100644 index 29b2a1bbc8..0000000000 --- a/src/mainboard/via/epia-n/acpi/irq_links.asl +++ /dev/null @@ -1,571 +0,0 @@ -/* - * Minimalist ACPI DSDT table for EPIA-N / NL - * Basic description of PCI Interrupt Assignments. - * This is expected to be included into _SB.PCI0 namespace - * (C) Copyright 2009 Jon Harrison <jon.harrison@blueyonder.co.uk> - * - */ - - /* PCI PnP Routing Links */ - - /* Define how interrupt Link A is plumbed in */ - Device (LNKA) - { - Name (_HID, EisaId ("PNP0C0F")) - Name (_UID, 0x01) - /* Status - always return ready */ - Method (_STA, 0, NotSerialized) - { - /* See if coreboot has allocated INTA# */ - And (PIRA, 0xF0, Local0) - If (LEqual (Local0, 0x00)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - - Method (_PRS, 0, NotSerialized) - { - Name (BUFA, ResourceTemplate () - { - IRQ (Level, ActiveLow, Shared, ) - {3,4,6,7,10,11,12} - }) - Return (BUFA) - } - - Method (_CRS, 0, NotSerialized) - { - Name (BUFA, ResourceTemplate () - { - IRQ (Level, ActiveLow, Shared, _Y07) - {} - }) - /* Read the Binary Encoded Field and Map this */ - /* onto the bitwise _INT field in the IRQ descriptor */ - /* See ACPI Spec for detail of _IRQ Descriptor */ - CreateByteField (BUFA, \_SB.PCI0.LNKA._CRS._Y07._INT, IRA1) - CreateByteField (BUFA, 0x02, IRA2) - Store (0x00, Local3) - Store (0x00, Local4) - And (PIRA, 0xF0, Local1) - ShiftRight (Local1, 0x04, Local1) - If (LNotEqual (Local1, 0x00)) - { - If (LGreater (Local1, 0x07)) - { - Subtract (Local1, 0x08, Local2) - ShiftLeft (One, Local2, Local4) - } - Else - { - If (LGreater (Local1, 0x00)) - { - ShiftLeft (One, Local1, Local3) - } - } - - Store (Local3, IRA1) - Store (Local4, IRA2) - } - Return (BUFA) - } - - /* Set Resources - dummy function to keep Linux ACPI happy - * Linux is more than happy not to tinker with irq - * assignments as long as the CRS and STA functions - * return good values - */ - Method (_SRS, 1, NotSerialized) {} - /* Disable - Set PnP Routing Reg to 0 */ - Method (_DIS, 0, NotSerialized ) - { - And (PIRA, 0x0F, PIRA) - } - } // End of LNKA - - Device (LNKB) - { - Name (_HID, EisaId ("PNP0C0F")) - Name (_UID, 0x02) - Method (_STA, 0, NotSerialized) - { - /* See if coreboot has allocated INTB# */ - And (PIBC, 0x0F, Local0) - If (LEqual (Local0, 0x00)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - - Method (_PRS, 0, NotSerialized) - { - Name (BUFB, ResourceTemplate () - { - IRQ (Level, ActiveLow, Shared, ) - {3,4,6,7,10,11,12} - }) - Return (BUFB) - } - - Method (_CRS, 0, NotSerialized) - { - Name (BUFB, ResourceTemplate () - { - IRQ (Level, ActiveLow, Shared, _Y08) - {} - }) - /* Read the Binary Encoded Field and Map this */ - /* onto the bitwise _INT field in the IRQ descriptor */ - /* See ACPI Spec for detail of _IRQ Descriptor */ - CreateByteField (BUFB, \_SB.PCI0.LNKB._CRS._Y08._INT, IRB1) - CreateByteField (BUFB, 0x02, IRB2) - Store (0x00, Local3) - Store (0x00, Local4) - And (PIBC, 0x0F, Local1) - If (LNotEqual (Local1, 0x00)) - { - If (LGreater (Local1, 0x07)) - { - Subtract (Local1, 0x08, Local2) - ShiftLeft (One, Local2, Local4) - } - Else - { - If (LGreater (Local1, 0x00)) - { - ShiftLeft (One, Local1, Local3) - } - } - - Store (Local3, IRB1) - Store (Local4, IRB2) - } - Return (BUFB) - } - - /* Set Resources - dummy function to keep Linux ACPI happy - * Linux is more than happy not to tinker with irq - * assignments as long as the CRS and STA functions - * return good values - */ - Method (_SRS, 1, NotSerialized) {} - /* Disable - Set PnP Routing Reg to 0 */ - Method (_DIS, 0, NotSerialized ) - { - And (PIBC, 0xF0, PIBC) - } - - } // End of LNKB - - Device (LNKC) - { - Name (_HID, EisaId ("PNP0C0F")) - Name (_UID, 0x03) - Method (_STA, 0, NotSerialized) - { - /* See if coreboot has allocated INTC# */ - And (PIBC, 0xF0, Local0) - If (LEqual (Local0, 0x00)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - - Method (_PRS, 0, NotSerialized) - { - Name (BUFC, ResourceTemplate () - { - IRQ (Level, ActiveLow, Shared, ) - {3,4,6,7,10,11,12} - }) - Return (BUFC) - } - - Method (_CRS, 0, NotSerialized) - { - Name (BUFC, ResourceTemplate () - { - IRQ (Level, ActiveLow, Shared, _Y09) - {} - }) - /* Read the Binary Encoded Field and Map this */ - /* onto the bitwise _INT field in the IRQ descriptor */ - /* See ACPI Spec for detail of _IRQ Descriptor */ - CreateByteField (BUFC, \_SB.PCI0.LNKC._CRS._Y09._INT, IRC1) - CreateByteField (BUFC, 0x02, IRC2) - Store (0x00, Local3) - Store (0x00, Local4) - And (PIBC, 0xF0, Local1) - ShiftRight (Local1, 0x04, Local1) - If (LNotEqual (Local1, 0x00)) - { - If (LGreater (Local1, 0x07)) - { - Subtract (Local1, 0x08, Local2) - ShiftLeft (One, Local2, Local4) - } - Else - { - If (LGreater (Local1, 0x00)) - { - ShiftLeft (One, Local1, Local3) - } - } - - Store (Local3, IRC1) - Store (Local4, IRC2) - } - Return (BUFC) - } - - /* Set Resources - dummy function to keep Linux ACPI happy - * Linux is more than happy not to tinker with irq - * assignments as long as the CRS and STA functions - * return good values - */ - Method (_SRS, 1, NotSerialized) {} - /* Disable - Set PnP Routing Reg to 0 */ - Method (_DIS, 0, NotSerialized ) - { - And (PIBC, 0x0F, PIBC) - } - -} // End of LNKC - -Device (LNKD) -{ - Name (_HID, EisaId ("PNP0C0F")) - Name (_UID, 0x04) - Method (_STA, 0, NotSerialized) - { - /* See if coreboot has allocated INTD# */ - And (PIRD, 0xF0, Local0) - If (LEqual (Local0, 0x00)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - - Method (_PRS, 0, NotSerialized) - { - Name (BUFD, ResourceTemplate () - { - IRQ (Level, ActiveLow, Shared, ) - {3,4,6,7,10,11,12} - }) - Return (BUFD) - } - - Method (_CRS, 0, NotSerialized) - { - Name (BUFD, ResourceTemplate () - { - IRQ (Level, ActiveLow, Shared, _Y0A) - {} - }) - /* Read the Binary Encoded Field and Map this */ - /* onto the bitwise _INT field in the IRQ descriptor */ - /* See ACPI Spec for detail of _IRQ Descriptor */ - CreateByteField (BUFD, \_SB.PCI0.LNKD._CRS._Y0A._INT, IRD1) - CreateByteField (BUFD, 0x02, IRD2) - Store (0x00, Local3) - Store (0x00, Local4) - And (PIRD, 0xF0, Local1) - ShiftRight (Local1, 0x04, Local1) - If (LNotEqual (Local1, 0x00)) - { - If (LGreater (Local1, 0x07)) - { - Subtract (Local1, 0x08, Local2) - ShiftLeft (One, Local2, Local4) - } - Else - { - If (LGreater (Local1, 0x00)) - { - ShiftLeft (One, Local1, Local3) - } - } - - Store (Local3, IRD1) - Store (Local4, IRD2) - } - Return (BUFD) - } - - /* Set Resources - dummy function to keep Linux ACPI happy - * Linux is more than happy not to tinker with irq - * assignments as long as the CRS and STA functions - * return good values - */ - Method (_SRS, 1, NotSerialized) {} - /* Disable - Set PnP Routing Reg to 0 */ - Method (_DIS, 0, NotSerialized ) - { - And (PIRD, 0x0F, PIRD) - } - -} // End of LNKD - - -/* APIC IRQ Links */ - -Device (ATAI) -{ - Name (_HID, EisaId ("PNP0C0F")) - Name (_UID, 0x05) - Method (_STA, 0, NotSerialized) - { - /* ATFL == 0x02 if SATA Enabled */ - If (LNotEqual (ATFL, 0x02)) - { - /* Double Check By Reading SATA VID */ - /* Otherwise Compatibility Mode */ - If (LNotEqual (\_SB.PCI0.SATA.VID, 0x1106)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - Else - { - /* Serial ATA Enabled Check if PATA is in */ - /* Compatibility Mode */ - If (LEqual (\_SB.PCI0.PATA.ENAT, 0x0A)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - } - - Method (_PRS, 0, NotSerialized) - { - Name (ATAN, ResourceTemplate () - { - Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, ) - { - 0x00000014, - } - }) - Return (ATAN) - } - - Method (_CRS, 0, NotSerialized) - { - Name (ATAB, ResourceTemplate () - { - Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, _Y10) - { - 0x00000000, - } - }) - CreateByteField (ATAB, \_SB.PCI0.ATAI._CRS._Y10._INT, IRAI) - Store (0x14, IRAI) - Return (ATAB) - - } - - /* Set Resources - dummy function to keep Linux ACPI happy - * Linux is more than happy not to tinker with irq - * assignments as long as the CRS and STA functions - * return good values - */ - Method (_SRS, 1, NotSerialized) {} - /* Disable - dummy function to keep Linux ACPI happy */ - Method (_DIS, 0, NotSerialized ) {} - -} // End of ATA Interface Link - - -Device (USBI) -{ - Name (_HID, EisaId ("PNP0C0F")) - Name (_UID, 0x0A) - Method (_STA, 0, NotSerialized) - { - /* Check that at least one of the USB */ - /* functions is enabled */ - And (IDEB, 0x37, Local0) - If (LEqual (Local0, 0x37)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - - Method (_PRS, 0, NotSerialized) - { - Name (USBB, ResourceTemplate () - { - Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, ) - { - 0x00000015, - } - }) - - Return(USBB) - } - - Method (_CRS, 0, NotSerialized) - { - Name (USBB, ResourceTemplate () - { - Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, _Y12) - { - 0x00000000, - } - }) - CreateByteField (USBB, \_SB.PCI0.USBI._CRS._Y12._INT, IRBI) - Store (0x15, IRBI) - Return (USBB) - } - - - /* Set Resources - dummy function to keep Linux ACPI happy - * Linux is more than happy not to tinker with irq - * assignments as long as the CRS and STA functions - * return good values - */ - Method (_SRS, 1, NotSerialized) {} - /* Disable - dummy function to keep Linux ACPI happy */ - Method (_DIS, 0, NotSerialized ) {} -} - -Device (VT8I) -{ - Name (_HID, EisaId ("PNP0C0F")) - Name (_UID, 0x0B) - Method (_STA, 0, NotSerialized) - { - /* Check Whether Sound and/or Modem are Activated */ - If (LEqual (EAMC, 0x03)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - - Method (_PRS, 0, NotSerialized) - { - Name (A97C, ResourceTemplate () - { - Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, ) - { - 0x00000016, - } - }) - Return (A97C) - } - - Method (_CRS, 0, NotSerialized) - { - Name (A97B, ResourceTemplate () - { - Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, _Y14) - { - 0x00000000, - } - }) - CreateByteField (A97B, \_SB.PCI0.VT8I._CRS._Y14._INT, IRCI) - Store (0x16, IRCI) - Return (A97B) - } - - /* Set Resources - dummy function to keep Linux ACPI happy - * Linux is more than happy not to tinker with irq - * assignments as long as the CRS and STA functions - * return good values - */ - Method (_SRS, 1, NotSerialized) {} - /* Disable - dummy function to keep Linux ACPI happy */ - Method (_DIS, 0, NotSerialized ) {} - -} - - -Device (NICI) -{ - Name (_HID, EisaId ("PNP0C0F")) - Name (_UID, 0x0C) - Method (_STA, 0, NotSerialized) - { - /* Check if LAN Function is Enabled */ - /* Note that LAN Enable Polarity is different */ - /* from other functions in VT8237R !? */ - If (LEqual (ELAN, 0x00)) - { - Return (0x09) - } - Else - { - Return (0x0B) - } - } - - Method (_PRS, 0, NotSerialized) - { - Name (NICB, ResourceTemplate () - { - Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, ) - { - 0x00000017, - } - }) - Return (NICB) - } - - Method (_CRS, 0, NotSerialized) - { - Name (NICD, ResourceTemplate () - { - Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, _Y16) - { - 0x00000000, - } - }) - CreateByteField (NICD, \_SB.PCI0.NICI._CRS._Y16._INT, IRDI) - Store (0x17, IRDI) - Return (NICD) - } - - /* Set Resources - dummy function to keep Linux ACPI happy - * Linux is more than happy not to tinker with irq - * assignments as long as the CRS and STA functions - * return good values - */ - Method (_SRS, 1, NotSerialized) {} - /* Disable - dummy function to keep Linux ACPI happy */ - Method (_DIS, 0, NotSerialized ) {} - - -} diff --git a/src/mainboard/via/epia-n/acpi/pata_methods.asl b/src/mainboard/via/epia-n/acpi/pata_methods.asl deleted file mode 100644 index 1f3e137ec2..0000000000 --- a/src/mainboard/via/epia-n/acpi/pata_methods.asl +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Minimalist ACPI DSDT table for EPIA-N / NL - * Basic description of some hardware resources to allow - * interrupt assignments to be done. This is expected to be included - * into the PATA Device definition in ab_physical.asl - * (C) Copyright 2009 Jon Harrison <jon.harrison@blueyonder.co.uk> - * - */ - -Name (TIM0, Package (0x07) -{ - Package (0x05) - { - 0x78, 0xB4, 0xF0, 0x017F, 0x0258 - }, - - Package (0x05) - { - 0x20, 0x22, 0x33, 0x47, 0x5D - }, - - Package (0x05) - { - 0x04, 0x03, 0x02, 0x01, 0x00 - }, - - Package (0x04) - { - 0x02, 0x01, 0x00, 0x00 - }, - - Package (0x07) - { - 0x78, 0x50, 0x3C, 0x2D, 0x1E, 0x14, 0x0F - }, - - Package (0x0F) - { - 0x06, 0x05, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,0x00 - }, - - Package (0x07) - { - 0x0E, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00 - } -}) - - -/* This method sets up the PATA Timing Control. - * Note that a lot of this is done in the - * coreboot VT8237R init code, but this is - * already getting very cluttered with board - * specific code. Using ACPI will allow this - * to be de-cluttered a bit (so long as we're - * running a ACPI capable OS!) - */ - -Method (PMEX, 0, Serialized) -{ - If (REGF) - { - /* Check if these regs are still at defaults */ - /* Board specific timing improvement if not */ - /* Already changed */ - If (LEqual (PMPT, 0xA8)) - { - Store (0x5D, PMPT) - } - - If (LEqual (PSPT, 0xA8)) - { - Store (0x5D, PSPT) - } - - If (LEqual (SMPT, 0xA8)) - { - Store (0x5D, SMPT) - } - - If (LEqual (SSPT, 0xA8)) - { - Store (0x5D, SSPT) - } - - } -} - -/* This Method Provides the method that is used to */ -/* Reset ATA Drives to POST reset condition */ -Method (GTF, 4, Serialized) -{ - Store (Buffer (0x07) - { - 0x03, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xEF - }, Local1) - Store (Buffer (0x07) - { - 0x03, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xEF - }, Local2) - CreateByteField (Local1, 0x01, MODE) - CreateByteField (Local2, 0x01, UMOD) - CreateByteField (Local1, 0x05, PCHA) - CreateByteField (Local2, 0x05, UCHA) - And (Arg0, 0x03, Local3) - If (LEqual (And (Local3, 0x01), 0x01)) - { - Store (0xB0, PCHA) - Store (0xB0, UCHA) - } - - If (Arg1) - { - Store (DerefOf (Index (DerefOf (Index (TIM0, 0x05)), Arg2)), - UMOD) - Or (UMOD, 0x40, UMOD) - } - Else - { - Store (Match (DerefOf (Index (TIM0, 0x01)), MEQ, Arg3, MTR, - 0x00, 0x00), Local0) - Or (0x20, DerefOf (Index (DerefOf (Index (TIM0, 0x03)), Local0 - )), UMOD) - } - - Store (Match (DerefOf (Index (TIM0, 0x01)), MEQ, Arg3, MTR, - 0x00, 0x00), Local0) - Or (0x08, DerefOf (Index (DerefOf (Index (TIM0, 0x02)), Local0 - )), MODE) - Concatenate (Local1, Local2, Local6) - Return (Local6) -} diff --git a/src/mainboard/via/epia-n/acpi/pci_init.asl b/src/mainboard/via/epia-n/acpi/pci_init.asl deleted file mode 100644 index 3169a03d50..0000000000 --- a/src/mainboard/via/epia-n/acpi/pci_init.asl +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Minimalist ACPI DSDT table for EPIA-N / NL - * Basic description of PCI Interrupt Assignments. - * This is expected to be included into _SB.PCI0 namespace - * (C) Copyright 2009 Jon Harrison <jon.harrison@blueyonder.co.uk> - * - */ - -/* This file provides a PCI Bus Initialisation Method that sets - * some flags for use in the interrupt link assignment - */ - -Method (\_SB.PCI0._INI, 0, NotSerialized) -{ - - /* Checking for ATA Interface Enabled */ - Store (0x00, ATFL) - If (LEqual (EIDE, 0x01)) - { - Store (0x02, ATFL) - } - Else - { - If (LNotEqual (\_SB.PCI0.PATA.VID, 0x1106)) - { - Store (0x01, ATFL) - } - } - -} diff --git a/src/mainboard/via/epia-n/acpi/sb_physical.asl b/src/mainboard/via/epia-n/acpi/sb_physical.asl deleted file mode 100644 index 7dd7b1d7e8..0000000000 --- a/src/mainboard/via/epia-n/acpi/sb_physical.asl +++ /dev/null @@ -1,548 +0,0 @@ -/* - * Minimalist ACPI DSDT table for EPIA-N / NL - * Basic description of some hardware resources to allow - * interrupt assignments to be done. This is expected to be included - * into _SB.PCI0 namespace - * (C) Copyright 2009 Jon Harrison <jon.harrison@blueyonder.co.uk> - * - */ - - -/* Basic description of the VT8237R LPC Interface - * PCI Configuration Space - */ - -Device (VT8R) -{ - Name (_ADR, 0x00110000) - OperationRegion (USBC, PCI_Config, 0x50, 0x02) - Scope (\) - { - Field (\_SB.PCI0.VT8R.USBC, ByteAcc, NoLock, Preserve) - { - IDEB, 8 - } - } - - OperationRegion (VTSB, PCI_Config, 0x00, 0xE8) - Scope (\) - { - Field (\_SB.PCI0.VT8R.VTSB, ByteAcc, NoLock, Preserve) - { - Offset (0x02), - DEID, 16, - Offset (0x2C), - ID2C, 8, - ID2D, 8, - ID2E, 8, - ID2F, 8, - Offset (0x44), - PIRE, 4, - PIRF, 4, - PIRG, 4, - PIRH, 4, - POLE, 1, - POLF, 1, - POLG, 1, - POLH, 1, - ENR8, 1, - Offset (0x50), - ESB4, 1, - ESB3, 1, - ESB2, 1, - EIDE, 1, - EUSB, 1, - ESB1, 1, - EAMC, 2, - EKBC, 1, - KBCC, 1, - EPS2, 1, - ERTC, 1, - ELAN, 1, - , 2, - USBD, 1, - SIRQ, 8, - Offset (0x55), - PIRA, 8, - PIBC, 8, - PIRD, 8, - Offset (0x75), - BSAT, 1, - Offset (0x94), - PWC1, 2, - GPO1, 1, - GPO2, 1, - GPO3, 1, - PLLD, 1 - } - } -} - -/* Basic Description of Serial ATA Interface */ -Device (SATA) -{ - Name (_ADR, 0x000F0000) - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.SATA.VID, 0x1106)) - { - Return (0x00) - } - Else - { - If (LEqual (\_SB.PCI0.SATA.CMDR, 0x00)) - { - Return (0x0D) - } - Else - { - Return (0x0F) - } - } - } - - OperationRegion (SAPR, PCI_Config, 0x00, 0xC2) - Field (SAPR, ByteAcc, NoLock, Preserve) - { - VID, 16, - Offset (0x04), - CMDR, 3, - Offset (0x3C), - IDEI, 8, - Offset (0x49), - , 6, - EPHY, 1 - } -} - -/* Basic Description of Parallel ATA Interface */ -/* An some initialisation of the interface */ -Device (PATA) -{ - Name (_ADR, 0x000F0001) - Name (REGF, 0x01) - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.PATA.VID, 0x1106)) - { - Return (0x00) - } - Else - { - PMEX () - /* Check if the Interface is Enabled */ - If (LEqual (\_SB.PCI0.PATA.CMDR, 0x00)) - { - Return (0x0D) - } - Else - { - Return (0x0F) - } - } - } - - /* ACPI Spec says to check that regions are accessible */ - /* before trying to access them */ - Method (_REG, 2, NotSerialized) - { - /* Arg0 = Operating Region (0x02 == PCI_Config) */ - If (LEqual (Arg0, 0x02)) - { - /* Arg1 = Handler Connection Mode (0x01 == Connect) */ - Store (Arg1, REGF) - } - } - - #include "pata_methods.asl" - - - OperationRegion (PAPR, PCI_Config, 0x00, 0xC2) - Field (PAPR, ByteAcc, NoLock, Preserve) - { - VID, 16, - Offset (0x04), - CMDR, 3, - Offset (0x09), - ENAT, 4, - Offset (0x3C), - IDEI, 8, - Offset (0x40), - ESCH, 1, - EPCH, 1, - Offset (0x48), - SSPT, 8, - SMPT, 8, - PSPT, 8, - PMPT, 8, - Offset (0x50), - SSUT, 4, - SSCT, 1, - SSUE, 3, - SMUT, 4, - SMCT, 1, - SMUE, 3, - PSUT, 4, - PSCT, 1, - PSUE, 3, - PMUT, 4, - PMCT, 1, - PMUE, 3 - } - - - Device (CHN0) - { - Name (_ADR, 0x00) - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.PATA.EPCH, 0x01)) - { - Return (0x00) - } - Else - { - Return (0x0F) - } - } - - Device (DRV0) - { - Name (_ADR, 0x00) - Method (_GTF, 0, NotSerialized) - { - Return (GTF (0x00, PMUE, PMUT, PMPT)) - } - } - - Device (DRV1) - { - Name (_ADR, 0x01) - Method (_GTF, 0, NotSerialized) - { - Return (GTF (0x01, PSUE, PSUT, PSPT)) - } - } - } - - Device (CHN1) - { - Name (_ADR, 0x01) - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (ATFL, 0x02)) - { - If (LEqual (\_SB.PCI0.SATA.EPHY, 0x01)) - { - Return (0x00) - } - Else - { - If (LNotEqual (\_SB.PCI0.PATA.ESCH, 0x01)) - { - Return (0x00) - } - Else - { - Return (0x0F) - } - } - } - Else - { - If (LEqual (ATFL, 0x02)) - { - If (LNotEqual (\_SB.PCI0.PATA.ESCH, 0x01)) - { - Return (0x00) - } - Else - { - Return (0x0F) - } - } - Else - { - Return(0x00) - } - } - } - - Device (DRV0) - { - Name (_ADR, 0x00) - Method (_GTF, 0, NotSerialized) - { - Return (GTF (0x02, SMUE, SMUT, SMPT)) - } - } - - Device (DRV1) - { - Name (_ADR, 0x01) - Method (_GTF, 0, NotSerialized) - { - Return (GTF (0x03, SSUE, SSUT, SSPT)) - } - } - } -} // End of PATA Device - - -/* Implement Basic USB Presence detect and */ -/* Power Management Event mask */ -Device (USB0) -{ - Name (_ADR, 0x00100000) - Name (_PRW, Package (0x02) - { - 0x0E, - 0x03 - }) - - OperationRegion (U2F0, PCI_Config, 0x00, 0xC2) - Field (U2F0, ByteAcc, NoLock, Preserve) - { - VID, 16, - Offset (0x04), - CMDR, 3, - Offset (0x3C), - U0IR, 4, - Offset (0x84), - ECDX, 2 - } - - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.USB0.VID, 0x1106)) - { - Return (0x00) - } - Else - { - If (LEqual (\_SB.PCI0.USB0.CMDR, 0x00)) - { - Return (0x0D) - } - Else - { - Return (0x0F) - } - } - } -} - -Device (USB1) -{ - Name (_ADR, 0x00100001) - Name (_PRW, Package (0x02) - { - 0x0E, - 0x03 - }) - - OperationRegion (U2F1, PCI_Config, 0x00, 0xC2) - Field (U2F1, ByteAcc, NoLock, Preserve) - { - VID, 16, - Offset (0x04), - CMDR, 3, - Offset (0x3C), - U1IR, 4, - Offset (0x84), - ECDX, 2 - } - - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.USB1.VID, 0x1106)) - { - Return (0x00) - } - Else - { - If (LEqual (\_SB.PCI0.USB1.CMDR, 0x00)) - { - Return (0x0D) - } - Else - { - Return (0x0F) - } - } - } -} - -Device (USB2) -{ - Name (_ADR, 0x00100002) - Name (_PRW, Package (0x02) - { - 0x0E, - 0x03 - }) - - OperationRegion (U2F2, PCI_Config, 0x00, 0xC2) - Field (U2F2, ByteAcc, NoLock, Preserve) - { - VID, 16, - Offset (0x04), - CMDR, 3, - Offset (0x3C), - U2IR, 4, - Offset (0x84), - ECDX, 2 - } - - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.USB2.VID, 0x1106)) - { - Return (0x00) - } - Else - { - If (LEqual (\_SB.PCI0.USB2.CMDR, 0x00)) - { - Return (0x0D) - } - Else - { - Return (0x0F) - } - } - } -} - -Device (USB3) -{ - Name (_ADR, 0x00100003) - Name (_PRW, Package (0x02) - { - 0x0E, - 0x03 - }) - - OperationRegion (U2F3, PCI_Config, 0x00, 0xC2) - Field (U2F3, ByteAcc, NoLock, Preserve) - { - VID, 16, - Offset (0x04), - CMDR, 3, - Offset (0x3C), - U3IR, 4, - Offset (0x84), - ECDX, 2 - } - - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.USB3.VID, 0x1106)) - { - Return (0x00) - } - Else - { - If (LEqual (\_SB.PCI0.USB3.CMDR, 0x00)) - { - Return (0x0D) - } - Else - { - Return (0x0F) - } - } - } -} - -Device (USB4) -{ - Name (_ADR, 0x00100004) - Name (_PRW, Package (0x02) - { - 0x0E, - 0x03 - }) - - OperationRegion (U2F4, PCI_Config, 0x00, 0xC2) - Field (U2F4, ByteAcc, NoLock, Preserve) - { - VID, 16, - Offset (0x04), - CMDR, 3, - Offset (0x3C), - U4IR, 4, - Offset (0x84), - ECDX, 2 - } - - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.USB4.VID, 0x1106)) - { - Return (0x00) - } - Else - { - If (LEqual (\_SB.PCI0.USB4.CMDR, 0x00)) - { - Return (0x0D) - } - Else - { - Return (0x0F) - } - } - } -} - -/* Basic Definition of Ethernet Interface */ -Device (NIC0) -{ - Name (_ADR, 0x00120000) - Name (_PRW, Package (0x02) - { - 0x03, - 0x05 - }) - - OperationRegion (NIC0, PCI_Config, 0x00, 0xC2) - Field (NIC0, ByteAcc, NoLock, Preserve) - { - VID, 16, - Offset (0x04), - CMDR, 3, - Offset (0x3C), - NIIR, 4, - } - - Method (_STA, 0, NotSerialized) - { - If (LNotEqual (\_SB.PCI0.NIC0.VID, 0x1106)) - { - Return (0x00) - } - Else - { - If (LEqual (\_SB.PCI0.NIC0.CMDR, 0x00)) - { - Return (0x0D) - } - Else - { - Return (0x0F) - } - } - } -} - -/* Very Basic Definition of Sound Controller */ -Device (AC97) -{ - Name (_ADR, 0x00110005) - Name (_PRW, Package (0x02) - { - 0x0D, - 0x05 - }) -} diff --git a/src/mainboard/via/epia-n/acpi_tables.c b/src/mainboard/via/epia-n/acpi_tables.c deleted file mode 100644 index a48a438673..0000000000 --- a/src/mainboard/via/epia-n/acpi_tables.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * coreboot ACPI Table support - * written by Stefan Reinauer <stepan@openbios.org> - * ACPI FADT, FACS, and DSDT table support added by - * Nick Barker <nick.barker9@btinternet.com>, and those portions - * (C) Copyright 2004 Nick Barker - * (C) Copyright 2005 Stefan Reinauer - * (C) Copyright 2009 Jon Harrison <bothlyn@blueyonder.co.uk> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -/* - * Most parts of this file copied from via\epia-m\acpi_tables.c, - * and via\epia-m700\acpi_tables.c - */ - -#include <console/console.h> -#include <string.h> -#include <arch/acpi.h> -#include <arch/ioapic.h> -#include <device/device.h> -#include <device/pci.h> -#include <device/pci_ids.h> -#include "southbridge/via/vt8237r/vt8237r.h" - -/* - * These 8 macros are copied from <arch/smp/mpspec.h>, I have to do this - * since the "CONFIG_GENERATE_MP_TABLE = 0", and also since - * mainboard/via/... have no mptable.c (so that I can not set - * "CONFIG_GENERATE_MP_TABLE = 1" as many other mainboards. - * So I have to copy these four to here. acpi_fill_madt() needs this. - */ -#define MP_IRQ_POLARITY_DEFAULT 0x0 -#define MP_IRQ_POLARITY_HIGH 0x1 -#define MP_IRQ_POLARITY_LOW 0x3 -#define MP_IRQ_POLARITY_MASK 0x3 -#define MP_IRQ_TRIGGER_DEFAULT 0x0 -#define MP_IRQ_TRIGGER_EDGE 0x4 -#define MP_IRQ_TRIGGER_LEVEL 0xc -#define MP_IRQ_TRIGGER_MASK 0xc - -unsigned long acpi_fill_mcfg(unsigned long current) -{ - /* Nothing to do */ - return current; -} - -unsigned long acpi_fill_slit(unsigned long current) -{ - // Not implemented - return current; -} - -unsigned long acpi_create_madt_lapic_nmis(unsigned long current, u16 flags, - u8 lint) -{ - device_t cpu; - int cpu_index = 0; - - for (cpu = all_devices; cpu; cpu = cpu->next) { - if ((cpu->path.type != DEVICE_PATH_APIC) || - (cpu->bus->dev->path.type != DEVICE_PATH_CPU_CLUSTER)) { - continue; - } - if (!cpu->enabled) - continue; - current += acpi_create_madt_lapic_nmi((acpi_madt_lapic_nmi_t *) - current, cpu_index, flags, lint); - cpu_index++; - } - return current; -} - -unsigned long acpi_fill_madt(unsigned long current) -{ - unsigned int gsi_base = 0x00; - - /* Create all subtables for processors. */ - current = acpi_create_madt_lapics(current); - - /* Write SB IOAPIC. */ - current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, - VT8237R_APIC_ID, IO_APIC_ADDR, gsi_base); - - /* IRQ0 -> APIC IRQ2. */ - current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *) - current, 0, 0, 2, 0x0); - - /* IRQ9 ACPI active low. */ - current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *) - current, 0, 9, 9, MP_IRQ_TRIGGER_LEVEL | MP_IRQ_POLARITY_LOW); - - /* Create all subtables for processors. */ - current = acpi_create_madt_lapic_nmis(current, - MP_IRQ_TRIGGER_EDGE | MP_IRQ_POLARITY_HIGH, 1); - - return current; -} - -unsigned long acpi_fill_srat(unsigned long current) -{ - /* No NUMA, no SRAT */ - return current; -} diff --git a/src/mainboard/via/epia-n/board_info.txt b/src/mainboard/via/epia-n/board_info.txt deleted file mode 100644 index d7bb1d99c8..0000000000 --- a/src/mainboard/via/epia-n/board_info.txt +++ /dev/null @@ -1,2 +0,0 @@ -Category: mini -Board URL: http://www.idotpc.com/TheStore/pc/viewCategories.asp?idCategory=56 diff --git a/src/mainboard/via/epia-n/cmos.layout b/src/mainboard/via/epia-n/cmos.layout deleted file mode 100644 index 9050c3db7a..0000000000 --- a/src/mainboard/via/epia-n/cmos.layout +++ /dev/null @@ -1,72 +0,0 @@ -entries - -#start-bit length config config-ID name -#0 8 r 0 seconds -#8 8 r 0 alarm_seconds -#16 8 r 0 minutes -#24 8 r 0 alarm_minutes -#32 8 r 0 hours -#40 8 r 0 alarm_hours -#48 8 r 0 day_of_week -#56 8 r 0 day_of_month -#64 8 r 0 month -#72 8 r 0 year -#80 4 r 0 rate_select -#84 3 r 0 REF_Clock -#87 1 r 0 UIP -#88 1 r 0 auto_switch_DST -#89 1 r 0 24_hour_mode -#90 1 r 0 binary_values_enable -#91 1 r 0 square-wave_out_enable -#92 1 r 0 update_finished_enable -#93 1 r 0 alarm_interrupt_enable -#94 1 r 0 periodic_interrupt_enable -#95 1 r 0 disable_clock_updates -#96 288 r 0 temporary_filler -0 384 r 0 reserved_memory -384 1 e 4 boot_option -385 1 e 4 last_boot -386 1 e 1 ECC_memory -388 4 r 0 reboot_bits -392 3 e 5 baud_rate -400 1 e 1 power_on_after_fail -412 4 e 6 debug_level -416 4 e 7 boot_first -420 4 e 7 boot_second -424 4 e 7 boot_third -428 4 h 0 boot_index -432 8 h 0 boot_countdown -1008 16 h 0 check_sum - -enumerations - -#ID value text -1 0 Disable -1 1 Enable -2 0 Enable -2 1 Disable -4 0 Fallback -4 1 Normal -5 0 115200 -5 1 57600 -5 2 38400 -5 3 19200 -5 4 9600 -5 5 4800 -5 6 2400 -5 7 1200 -6 6 Notice -6 7 Info -6 8 Debug -6 9 Spew -7 0 Network -7 1 HDD -7 2 Floppy -7 8 Fallback_Network -7 9 Fallback_HDD -7 10 Fallback_Floppy -#7 3 ROM - -checksums - -checksum 392 1007 1008 diff --git a/src/mainboard/via/epia-n/devicetree.cb b/src/mainboard/via/epia-n/devicetree.cb deleted file mode 100644 index d17b96d58f..0000000000 --- a/src/mainboard/via/epia-n/devicetree.cb +++ /dev/null @@ -1,101 +0,0 @@ -## -## This file is part of the coreboot project. -## -## Copyright (C) 2008 VIA Technologies, Inc. -## (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA) -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -## - -chip northbridge/via/cn400 # Northbridge - - device cpu_cluster 0 on # APIC cluster - chip cpu/via/c3 # VIA C3 - device lapic 0 on end # APIC - end - end - - device domain 0 on # PCI domain - device pci 0.0 on end # AGP Bridge - device pci 0.1 on end # Error Reporting - device pci 0.2 on end # Host Bus Control - device pci 0.3 on end # Memory Controller - device pci 0.4 on end # Power Management - device pci 0.7 on end # V-Link Controller - device pci 1.0 on end # PCI Bridge - chip southbridge/via/vt8237r # Southbridge - # Enable both IDE channels. - register "ide0_enable" = "1" - register "ide1_enable" = "1" - # Both cables are 40pin. - register "ide0_80pin_cable" = "0" - register "ide1_80pin_cable" = "0" - device pci f.0 on end # IDE/SATA - device pci f.1 on end # IDE - register "fn_ctrl_lo" = "0xC0" # Disable AC/MC97 - register "fn_ctrl_hi" = "0x9d" # Disable USB Direct & LAN Gating - device pci 10.0 on end # OHCI - device pci 10.1 on end # OHCI - device pci 10.2 on end # OHCI - device pci 10.3 on end # OHCI - device pci 10.4 on end # EHCI - device pci 10.5 off end # USB Direct - device pci 11.0 on # Southbridge LPC - chip superio/winbond/w83697hf # Super I/O - device pnp 2e.0 off # Floppy - io 0x60 = 0x3f0 - irq 0x70 = 6 - drq 0x74 = 2 - end - device pnp 2e.1 off # Parallel Port - io 0x60 = 0x378 - irq 0x70 = 7 - drq 0x74 = 3 - end - device pnp 2e.2 on # COM1 - io 0x60 = 0x3f8 - irq 0x70 = 4 - end - device pnp 2e.3 off # COM2 - io 0x60 = 0x2f8 - irq 0x70 = 3 - end - device pnp 2e.6 off # IR Port - io 0x60 = 0x000 - end - device pnp 2e.7 off # GPIO 1 - io 0x60 = 0x201 # 0x201 - end - device pnp 2e.8 off # GPIO 5 - io 0x60 = 0x330 # 0x330 - end - device pnp 2e.9 off # GPIO 2, 3,and 4 - io 0x60 = 0x000 # - end - device pnp 2e.a off # ACPI - io 0x60 = 0x000 # - end - device pnp 2e.b on # HWM - io 0x60 = 0x290 - irq 0x70 = 0 - end - end - end - device pci 11.5 off end # AC'97 audio - device pci 11.6 off end # AC'97 Modem - device pci 12.0 on end # Ethernet - end - end -end diff --git a/src/mainboard/via/epia-n/dsdt.asl b/src/mainboard/via/epia-n/dsdt.asl deleted file mode 100644 index f8d47ce16d..0000000000 --- a/src/mainboard/via/epia-n/dsdt.asl +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Minimalist ACPI DSDT table for EPIA-N / NL - * (C) Copyright 2009 Jon Harrison <jon.harrison@blueyonder.co.uk> - * Heavily based on EPIA-M dstd.asl - * (C) Copyright 2004 Nick Barker <Nick.Barker9@btinternet.com> - * - */ -DefinitionBlock ("dsdt.aml", "DSDT", 1, "CBT-V2", "CBT-DSDT", 1) -{ - Scope (\_PR) - { - Processor (\_PR.CPU0, 0x00, 0x00000000, 0x00) {} - } - - /* For now only define 2 power states: - * - S0 which is fully on - * - S5 which is soft off - * any others would involve declaring the wake up methods - */ - Name (\_S0, Package (0x04) - { - 0x00, - 0x00, - 0x00, - 0x00 - }) - Name (\_S5, Package (0x04) - { - 0x02, - 0x02, - 0x02, - 0x02 - }) - - /* Global Flag Used to Indicate State of */ - /* ATA Interface */ - Name (ATFL, 0x00) - - /* Root of the bus hierarchy */ - Scope (\_SB) - { - - Device (PCI0) - { - Name (_HID, EisaId ("PNP0A03")) - Name (_ADR, 0x00) - Name (_UID, 0x01) - Name (_BBN, 0x00) - - /* PCI Routing Table */ - Name (_PRT, Package () { - - Package (0x04) {0x000FFFFF, 0x00, ATAI, 0x00}, // SATA Link A - Package (0x04) {0x000FFFFF, 0x01, ATAI, 0x00}, // SATA Link B - Package (0x04) {0x000FFFFF, 0x02, ATAI, 0x00}, // SATA Link C - Package (0x04) {0x000FFFFF, 0x03, ATAI, 0x00}, // SATA Link D - - Package (0x04) {0x0010FFFF, 0x00, USBI, 0x00}, // USB Link A - Package (0x04) {0x0010FFFF, 0x01, USBI, 0x00}, // USB Link B - Package (0x04) {0x0010FFFF, 0x02, USBI, 0x00}, // USB Link C - Package (0x04) {0x0010FFFF, 0x03, USBI, 0x00}, // USB Link D - - Package (0x04) {0x0011FFFF, 0x00, VT8I, 0x00}, // VT8237 Link A - Package (0x04) {0x0011FFFF, 0x01, VT8I, 0x00}, // VT8237 Link B - Package (0x04) {0x0011FFFF, 0x02, VT8I, 0x00}, // VT8237 Link C - Package (0x04) {0x0011FFFF, 0x03, VT8I, 0x00}, // VT8237 Link D - - Package (0x04) {0x0012FFFF, 0x00, NICI, 0x00}, // LAN Link A - Package (0x04) {0x0012FFFF, 0x01, NICI, 0x00}, // LAN Link B - Package (0x04) {0x0012FFFF, 0x02, NICI, 0x00}, // LAN Link C - Package (0x04) {0x0012FFFF, 0x03, NICI, 0x00}, // LAN Link D - - Package (0x04) {0x0001FFFF, 0x00, 0, 0x10}, // VGA Link A (GSI) - Package (0x04) {0x0001FFFF, 0x01, 0, 0x11}, // VGA Link B (GSI) - Package (0x04) {0x0001FFFF, 0x02, 0, 0x12}, // VGA Link C (GSI) - Package (0x04) {0x0001FFFF, 0x03, 0, 0x13}, // VGA Link D (GSI) - - Package (0x04) {0x0014FFFF, 0x00, 0, 0x12}, // Slot 1 Link C (GSI) - Package (0x04) {0x0014FFFF, 0x01, 0, 0x13}, // Slot 1 Link D (GSI) - Package (0x04) {0x0014FFFF, 0x02, 0, 0x10}, // Slot 1 Link A (GSI) - Package (0x04) {0x0014FFFF, 0x03, 0, 0x11}, // Slot 1 Link B (GSI) - - Package (0x04) {0x0013FFFF, 0x00, 0, 0x13}, // Riser Slot Link D (GSI) - Package (0x04) {0x0013FFFF, 0x01, 0, 0x12}, // Riser Slot Link C (GSI) - Package (0x04) {0x0013FFFF, 0x02, 0, 0x11}, // Riser Slot Link B (GSI) - Package (0x04) {0x0013FFFF, 0x03, 0, 0x10} // Riser Slot Link A (GSI) - - }) - - /* PCI Devices Included Here */ - #include "acpi/sb_physical.asl" - - /* Legacy PNP Devices Defined Here */ - - /* Disable PS2 Mouse Support */ - Device (PS2M) - { - Name (_HID, EisaId ("PNP0F13")) - Method (_STA, 0, NotSerialized) - { - Return (0x09) - } - - Method (_CRS, 0, NotSerialized) - { - Name (BUF1, ResourceTemplate () - { - IRQNoFlags () - {12} - }) - Return (BUF1) - } - } - - /* Disable Legacy PS2 Keyboard Support */ - Device (PS2K) - { - Name (_HID, EisaId ("PNP0303")) - Name (_CID, 0x0B03D041) - Method (_STA, 0, NotSerialized) - { - Return (0x09) - } - - Name (_CRS, ResourceTemplate () - { - IO (Decode16, - 0x0060, // Range Minimum - 0x0060, // Range Maximum - 0x01, // Alignment - 0x01, // Length - ) - IO (Decode16, - 0x0064, // Range Minimum - 0x0064, // Range Maximum - 0x01, // Alignment - 0x01, // Length - ) - IRQNoFlags () - {1} - }) - } - - /* Legacy PIC Description */ - Device (PIC) - { - Name (_HID, EisaId ("PNP0000")) - Name (_CRS, ResourceTemplate () - { - IO (Decode16, - 0x0020, // Range Minimum - 0x0020, // Range Maximum - 0x01, // Alignment - 0x02, // Length - ) - IO (Decode16, - 0x00A0, // Range Minimum - 0x00A0, // Range Maximum - 0x01, // Alignment - 0x02, // Length - ) - IRQNoFlags () - {2} - }) - } - - /* Legacy DMA Description */ - Device (DMA1) - { - Name (_HID, EisaId ("PNP0200")) - Name (_CRS, ResourceTemplate () - { - DMA (Compatibility, BusMaster, Transfer8, ) - {4} - IO (Decode16, - 0x0000, // Range Minimum - 0x0000, // Range Maximum - 0x01, // Alignment - 0x10, // Length - ) - IO (Decode16, - 0x0080, // Range Minimum - 0x0080, // Range Maximum - 0x01, // Alignment - 0x11, // Length - ) - IO (Decode16, - 0x0094, // Range Minimum - 0x0094, // Range Maximum - 0x01, // Alignment - 0x0C, // Length - ) - IO (Decode16, - 0x00C0, // Range Minimum - 0x00C0, // Range Maximum - 0x01, // Alignment - 0x20, // Length - ) - }) - } - - /* Legacy Timer Description */ - Device (TMR) - { - Name (_HID, EisaId ("PNP0100")) - Name (_CRS, ResourceTemplate () - { - IO (Decode16, - 0x0040, // Range Minimum - 0x0040, // Range Maximum - 0x01, // Alignment - 0x04, // Length - ) - IRQNoFlags () - {0} - }) - } - - /* Legacy RTC Description */ - Device (RTC) - { - Name (_HID, EisaId ("PNP0B00")) - Name (_CRS, ResourceTemplate () - { - IO (Decode16, - 0x0070, // Range Minimum - 0x0070, // Range Maximum - 0x04, // Alignment - 0x04, // Length - ) - IRQNoFlags () - {8} - }) - } - - /* Legacy Speaker Description */ - Device (SPKR) - { - Name (_HID, EisaId ("PNP0800")) - Name (_CRS, ResourceTemplate () - { - IO (Decode16, - 0x0061, // Range Minimum - 0x0061, // Range Maximum - 0x01, // Alignment - 0x01, // Length - ) - }) - } - - /* Legacy Math Co-Processor Description */ - Device (COPR) - { - Name (_HID, EisaId ("PNP0C04")) - Name (_CRS, ResourceTemplate () - { - IO (Decode16, - 0x00F0, // Range Minimum - 0x00F0, // Range Maximum - 0x01, // Alignment - 0x10, // Length - ) - IRQNoFlags () - {13} - }) - } - - /* General Legacy IO Reservations */ - /* Covering items that are not explicitly reserved */ - /* from coreboot. */ - Device (SYSR) - { - Name (_HID, EisaId ("PNP0C02")) - Name (_UID, 0x01) - Name (_CRS, ResourceTemplate () - { - IO (Decode16, - 0x0010, // Range Minimum - 0x0010, // Range Maximum - 0x01, // Alignment - 0x10, // Length - ) - IO (Decode16, - 0x0022, // Range Minimum - 0x0022, // Range Maximum - 0x01, // Alignment - 0x1E, // Length - ) - IO (Decode16, - 0x0044, // Range Minimum - 0x0044, // Range Maximum - 0x01, // Alignment - 0x1C, // Length - ) - IO (Decode16, - 0x0062, // Range Minimum - 0x0062, // Range Maximum - 0x01, // Alignment - 0x02, // Length - ) - IO (Decode16, - 0x0065, // Range Minimum - 0x0065, // Range Maximum - 0x01, // Alignment - 0x0B, // Length - ) - IO (Decode16, - 0x0074, // Range Minimum - 0x0074, // Range Maximum - 0x01, // Alignment - 0x0C, // Length - ) - IO (Decode16, - 0x0091, // Range Minimum - 0x0091, // Range Maximum - 0x01, // Alignment - 0x03, // Length - ) - IO (Decode16, - 0x00A2, // Range Minimum - 0x00A2, // Range Maximum - 0x01, // Alignment - 0x1E, // Length - ) - IO (Decode16, - 0x00E0, // Range Minimum - 0x00E0, // Range Maximum - 0x01, // Alignment - 0x10, // Length - ) - IO (Decode16, - 0x04D0, // Range Minimum - 0x04D0, // Range Maximum - 0x01, // Alignment - 0x02, // Length - ) - IO (Decode16, - 0x0294, // Range Minimum - 0x0294, // Range Maximum - 0x01, // Alignment - 0x04, // Length - ) - }) - } - - #include "acpi/irq_links.asl" - #include "acpi/pci_init.asl" - - } //End of PCI0 - - } // End of _SB - -} // End of Definition Block diff --git a/src/mainboard/via/epia-n/irq_tables.c b/src/mainboard/via/epia-n/irq_tables.c deleted file mode 100644 index 9c1ee4e0b5..0000000000 --- a/src/mainboard/via/epia-n/irq_tables.c +++ /dev/null @@ -1,47 +0,0 @@ -/* This file was generated by getpir.c, do not modify! - * (but if you do, please run checkpir on it to verify) - * - * Contains the IRQ Routing Table dumped directly from your - * memory, which BIOS sets up. - * - * Documentation at: http://www.microsoft.com/whdc/archive/pciirq.mspx - */ - -#ifdef GETPIR -#include "pirq_routing.h" -#else -#include <arch/pirq_routing.h> -#endif - -static const struct irq_routing_table intel_irq_routing_table = { - PIRQ_SIGNATURE, /* u32 signature */ - PIRQ_VERSION, /* u16 version */ - 32+16*CONFIG_IRQ_SLOT_COUNT, /* There can be total CONFIG_IRQ_SLOT_COUNT devices on the bus */ - 0x00, /* Where the interrupt router lies (bus) */ - (0x11<<3)|0x0, /* Where the interrupt router lies (dev) */ - 0x1c00, /* IRQs devoted exclusively to PCI usage */ - 0x1106, /* Vendor */ - 0x3227, /* Device */ - 0, /* Miniport */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* u8 rfu[11] */ - 0xf, /* u8 checksum. This has to be set to some - value that would give 0 after the sum of all - bytes for this structure (including checksum) */ - { - /* bus, dev|fn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu */ - {0x00,(0x14<<3)|0x0, {{0x03, 0xdeb8}, {0x05, 0xdeb8}, {0x01, 0xdeb8}, {0x02, 0xdeb8}}, 0x1, 0x0}, - {0x00,(0x13<<3)|0x0, {{0x05, 0xdeb8}, {0x03, 0xdeb8}, {0x02, 0xdeb8}, {0x01, 0xdeb8}}, 0x2, 0x0}, - {0x00,(0x11<<3)|0x0, {{0x00, 0xdeb8}, {0x00, 0xdeb8}, {0x03, 0xdeb8}, {0x05, 0xdeb8}}, 0x0, 0x0}, - {0x00,(0x0f<<3)|0x0, {{0x01, 0xdeb8}, {0x02, 0xdeb8}, {0x03, 0xdeb8}, {0x05, 0xdeb8}}, 0x0, 0x0}, - {0x00,(0x01<<3)|0x0, {{0x01, 0xdeb8}, {0x02, 0xdeb8}, {0x03, 0xdeb8}, {0x05, 0xdeb8}}, 0x0, 0x0}, - {0x00,(0x10<<3)|0x0, {{0x01, 0xdeb8}, {0x02, 0xdeb8}, {0x03, 0xdeb8}, {0x05, 0xdeb8}}, 0x0, 0x0}, - {0x00,(0x12<<3)|0x0, {{0x01, 0xdeb8}, {0x00, 0xdeb8}, {0x00, 0xdeb8}, {0x00, 0xdeb8}}, 0x0, 0x0}, - } -}; -#ifndef GETPIR - -unsigned long write_pirq_routing_table(unsigned long addr) -{ - return copy_pirq_routing_table(addr, &intel_irq_routing_table); -} -#endif diff --git a/src/mainboard/via/epia-n/mptable.c b/src/mainboard/via/epia-n/mptable.c deleted file mode 100644 index de25d0e549..0000000000 --- a/src/mainboard/via/epia-n/mptable.c +++ /dev/null @@ -1,50 +0,0 @@ -/* generated by MPTable, version 2.0.15*/ -/* as modified by RGM for coreboot */ -#include <console/console.h> -#include <arch/smp/mpspec.h> -#include <arch/ioapic.h> -#include <device/pci.h> -#include <string.h> -#include <stdint.h> - -static void *smp_write_config_table(void *v) -{ - struct mp_config_table *mc; - int isa_bus; - - mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - - mptable_init(mc, LOCAL_APIC_ADDR); - - smp_write_processors(mc); - mptable_write_buses(mc, NULL, &isa_bus); - -/*I/O APICs: APIC ID Version State Address*/ - smp_write_ioapic(mc, 2, 0x20, IO_APIC_ADDR); - - mptable_add_isa_interrupts(mc, isa_bus, 0x2, 0); - -/*I/O Ints: Type Polarity Trigger Bus ID IRQ APIC ID PIN# */ - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x0, 0x40, 0x2, 0x15); - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x0, 0x40, 0x2, 0x15); - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x0, 0x41, 0x2, 0x15); - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x0, 0x41, 0x2, 0x15); - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x0, 0x42, 0x2, 0x15); - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x0, 0x46, 0x2, 0x16); - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x1, 0x0, 0x2, 0x10); - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x0, 0x48, 0x2, 0x17); - smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0x0, 0x3d, 0x2, 0x14); -/*Local Ints: Type Polarity Trigger Bus ID IRQ APIC ID PIN#*/ - mptable_lintsrc(mc, 0x0); - /* There is no extension information... */ - - /* Compute the checksums */ - return mptable_finalize(mc); -} - -unsigned long write_smp_table(unsigned long addr) -{ - void *v; - v = smp_write_floating_table(addr, 0); - return (unsigned long)smp_write_config_table(v); -} diff --git a/src/mainboard/via/epia-n/romstage.c b/src/mainboard/via/epia-n/romstage.c deleted file mode 100644 index 0de7556579..0000000000 --- a/src/mainboard/via/epia-n/romstage.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2008 VIA Technologies, Inc. - * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <stdint.h> -#include <device/pci_def.h> -#include <device/pci_ids.h> -#include <arch/io.h> -#include <device/pnp_def.h> -#include <console/console.h> -#include "northbridge/via/cn400/raminit.h" -#include "cpu/x86/mtrr/earlymtrr.c" -#include "cpu/x86/bist.h" -#include "drivers/pc80/udelay_io.c" -#include "lib/delay.c" -#include "cpu/x86/lapic/boot_cpu.c" -#include "southbridge/via/vt8237r/early_smbus.c" -#include "superio/winbond/w83697hf/early_serial.c" -#include <spd.h> - -#define SERIAL_DEV PNP_DEV(0x2e, W83697HF_SP1) -#define DUMMY_DEV PNP_DEV(0x2e, 0) - -static const struct mem_controller ctrl = { - .d0f0 = 0x0000, - .d0f2 = 0x2000, - .d0f3 = 0x3000, - .d0f4 = 0x4000, - .d0f7 = 0x7000, - .d1f0 = 0x8000, - .channel0 = { DIMM0 }, -}; - -static inline int spd_read_byte(unsigned device, unsigned address) -{ - return smbus_read_byte(device, address); -} - -#include "northbridge/via/cn400/raminit.c" - -static void enable_mainboard_devices(void) -{ - device_t dev; - u8 reg; - - dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, - PCI_DEVICE_ID_VIA_VT8237R_LPC), 0); - if (dev == PCI_DEV_INVALID) - die("Southbridge not found!!!\n"); - - /* bit=0 means enable function (per VT8237R datasheet) - * 7 17.6 MC97 - * 6 17.5 AC97 - * 5 16.1 USB 2 - * 4 16.0 USB 1 - * 3 15.0 SATA and PATA - * 2 16.2 USB 3 - * 1 16.4 USB EHCI - */ - pci_write_config8(dev, 0x50, 0xC0); - - /*bit=0 means enable internal function (per VT8237R datasheet) - * 7 USB Device Mode - *bit=1 means enable internal function (per VT8237R datasheet) - * 6 Reserved - * 5 LAN Controller Clock Gating - * 4 LAN Controller - * 3 Internal RTC - * 2 Internal PS2 Mouse - * 1 Internal KBC Configuration - * 0 Internal Keyboard Controller - */ - pci_write_config8(dev, 0x51, 0x9d); -} - -static void enable_shadow_ram(void) -{ - unsigned char shadowreg; - - shadowreg = pci_read_config8(ctrl.d0f3, 0x82); - /* 0xf0000-0xfffff Read/Write*/ - shadowreg |= 0x30; - pci_write_config8(ctrl.d0f3, 0x82, shadowreg); -} - -#include <cpu/intel/romstage.h> -static void main(unsigned long bist) -{ - unsigned long x; - device_t dev; - - /* Enable multifunction for northbridge. */ - pci_write_config8(ctrl.d0f0, 0x4f, 0x01); - - w83697hf_set_clksel_48(DUMMY_DEV); - w83697hf_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE); - console_init(); - - enable_smbus(); - smbus_fixup(&ctrl); - - /* Halt if there was a built-in self test failure. */ - report_bist_failure(bist); - - print_debug("Enabling mainboard devices\n"); - enable_mainboard_devices(); - - print_debug("Enable F-ROM Shadow RAM\n"); - enable_shadow_ram(); - - print_debug("Setup CPU Interface\n"); - c3_cpu_setup(ctrl.d0f2); - - ddr_ram_setup(); - - if (bist == 0) - early_mtrr_init(); -} diff --git a/src/northbridge/via/Kconfig b/src/northbridge/via/Kconfig index 9fe6e8dbba..7b9fa1da9d 100644 --- a/src/northbridge/via/Kconfig +++ b/src/northbridge/via/Kconfig @@ -1,5 +1,4 @@ source src/northbridge/via/cn700/Kconfig source src/northbridge/via/cx700/Kconfig -source src/northbridge/via/cn400/Kconfig source src/northbridge/via/vx800/Kconfig source src/northbridge/via/vx900/Kconfig diff --git a/src/northbridge/via/Makefile.inc b/src/northbridge/via/Makefile.inc index 9c0f4314fc..b3d595e9b9 100644 --- a/src/northbridge/via/Makefile.inc +++ b/src/northbridge/via/Makefile.inc @@ -1,5 +1,4 @@ subdirs-$(CONFIG_NORTHBRIDGE_VIA_CN700) += cn700 subdirs-$(CONFIG_NORTHBRIDGE_VIA_CX700) += cx700 -subdirs-$(CONFIG_NORTHBRIDGE_VIA_CN400) += cn400 subdirs-$(CONFIG_NORTHBRIDGE_VIA_VX800) += vx800 subdirs-$(CONFIG_NORTHBRIDGE_VIA_VX900) += vx900 diff --git a/src/northbridge/via/cn400/Kconfig b/src/northbridge/via/cn400/Kconfig deleted file mode 100644 index 42fa096894..0000000000 --- a/src/northbridge/via/cn400/Kconfig +++ /dev/null @@ -1,36 +0,0 @@ -config NORTHBRIDGE_VIA_CN400 - bool - -# TODO: Values are from the CX700 datasheet, not sure if this matches CN400. -# TODO: What should be the per-chipset default value here? -choice - prompt "Onboard graphics" - default CN400_VIDEO_MB_32MB - depends on NORTHBRIDGE_VIA_CN400 - -# TODO: Disabling onboard graphics is not yet supported in the source code. -config CN400_VIDEO_MB_OFF - bool "Disabled, 0KB" -config CN400_VIDEO_MB_8MB - bool "Enabled, 8MB" -config CN400_VIDEO_MB_16MB - bool "Enabled, 16MB" -config CN400_VIDEO_MB_32MB - bool "Enabled, 32MB" -config CN400_VIDEO_MB_64MB - bool "Enabled, 64MB" -config CN400_VIDEO_MB_128MB - bool "Enabled, 128MB" - -endchoice - -config VIDEO_MB - int - default 0 if CN400_VIDEO_MB_OFF - default 8 if CN400_VIDEO_MB_8MB - default 16 if CN400_VIDEO_MB_16MB - default 32 if CN400_VIDEO_MB_32MB - default 64 if CN400_VIDEO_MB_64MB - default 128 if CN400_VIDEO_MB_128MB - depends on NORTHBRIDGE_VIA_CN400 - diff --git a/src/northbridge/via/cn400/Makefile.inc b/src/northbridge/via/cn400/Makefile.inc deleted file mode 100644 index 667c71a858..0000000000 --- a/src/northbridge/via/cn400/Makefile.inc +++ /dev/null @@ -1,24 +0,0 @@ -## -## This file is part of the coreboot project. -## -## Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com> -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -## - -ramstage-y += northbridge.c -ramstage-y += agp.c -ramstage-y += vga.c -ramstage-y += vlink.c diff --git a/src/northbridge/via/cn400/agp.c b/src/northbridge/via/cn400/agp.c deleted file mode 100644 index ece71e0e7d..0000000000 --- a/src/northbridge/via/cn400/agp.c +++ /dev/null @@ -1,238 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <console/console.h> -#include <arch/io.h> -#include <stdint.h> -#include <device/device.h> -#include <device/pci.h> -#include <device/pci_ids.h> -#include "northbridge.h" -#include "cn400.h" - -/* This is the main AGP device, and only one used when configured for AGP 2.0 */ -static void agp_init(device_t dev) -{ - u32 reg32; - u8 reg8; - int i, j; - - /* Some of this may not be necessary (should be handled by the OS). */ - printk(BIOS_DEBUG, "Enabling AGP.\n"); - - /* Allow R/W access to AGP registers. */ - pci_write_config8(dev, 0x4d, 0x05); - - /* Setup PCI latency timer. */ - pci_write_config8(dev, 0xd, 0x8); - - /* Write Secondary Vendor Ids */ - pci_write_config32(dev, 0x2C, 0xAA071106); - - /* - * Set to AGP 3.0 Mode, which should theoretically render the rest of - * the registers set here pointless. - */ - pci_write_config8(dev, 0x84, 0x1b); - - /* AGP Request Queue Size */ - pci_write_config8(dev, 0x4a, 0x1f); - - /* - * AGP Hardware Support (default 0xc4) - * 7: AGP SBA Enable (1 to Enable) - * 6: AGP Enable - * 5: Reserved - * 4: Fast Write Enable - * 3: AGP8X Mode Enable - * 2: AGP4X Mode Enable - * 1: AGP2X Mode Enable - * 0: AGP1X Mode Enable - */ - pci_write_config8(dev, 0x4b, 0xc4); - - /* Enable AGP Backdoor */ - pci_write_config8(dev, 0xb5, 0x03); - - /* Set aperture to 128 MB. */ - /* TODO: Use config option, explain how it works. */ - pci_write_config32(dev, 0x94, 0x00010f20); - /* Set GART Table Base Address (31:12). */ - pci_write_config32(dev, 0x98, (0x37b20 << 12)); - /* Set AGP Aperture Base. */ - pci_write_config32(dev, 0x10, 0xe8000008); - - /* NMI/AGPBUSY# Function Select */ - pci_write_config8(dev, 0xbe, 0x80); - - /* AGP Misc Control 1 */ - pci_write_config8(dev, 0xc2, 0x40); - - /* Enable CPU/PMSTR GART Access and DBI function. */ - reg32 = pci_read_config8(dev, 0xbf); - reg32 |= 0x8c; - pci_write_config8(dev, 0xbf, reg32); - - /* Enable AGP Aperture. */ - pci_write_config32(dev, 0x90, 0x0180); - - /* AGP Control */ - pci_write_config8(dev, 0xbc, 0x25); - pci_write_config8(dev, 0xbd, 0xd2); - - /* - * AGP Pad, driving strength, and delay control. All this should be - * constant, seeing as the VGA controller is onboard. - */ - pci_write_config8(dev, 0x40, 0xda); - pci_write_config8(dev, 0x41, 0xca); - pci_write_config8(dev, 0x42, 0x01); - pci_write_config8(dev, 0x43, 0xca); - pci_write_config8(dev, 0x44, 0x04); - - /* AGPC CKG Control */ - pci_write_config8(dev, 0xc0, 0x04); - pci_write_config8(dev, 0xc1, 0x02); - -#ifdef DEBUG_CN400 - printk(BIOS_SPEW, "%s PCI Header Regs::\n", dev_path(dev)); - - for (i = 0 ; i < 16; i++) - { - printk(BIOS_SPEW, "%02X: ", i*16); - for (j = 0; j < 16; j++) - { - reg8 = pci_read_config8(dev, j+(i*16)); - printk(BIOS_SPEW, "%02X ", reg8); - } - printk(BIOS_SPEW, "\n"); - } -#endif -} - -static const struct device_operations agp_operations = { - .read_resources = DEVICE_NOOP, - .set_resources = pci_dev_set_resources, - .enable_resources = pci_dev_enable_resources, - .init = agp_init, - .ops_pci = 0, -}; - -static const struct pci_driver agp_driver __pci_driver = { - .ops = &agp_operations, - .vendor = PCI_VENDOR_ID_VIA, - .device = PCI_DEVICE_ID_VIA_CN400_AGP, -}; - -static void agp_bridge_read_resources (device_t dev) -{ - struct resource *res; - - res = new_resource(dev, 1); - res->base = 0xF0000000ULL; - res->size = 0x06000000ULL; - res->limit = 0xffffffffULL; - res->flags = IORESOURCE_MEM | IORESOURCE_FIXED | - IORESOURCE_STORED | IORESOURCE_ASSIGNED; - - res = new_resource(dev, 2); - res->base = 0xB000UL; - res->size = 4096; - res->limit = 0xffffUL; - res->flags = IORESOURCE_IO | IORESOURCE_FIXED | - IORESOURCE_STORED | IORESOURCE_ASSIGNED; - -} -/* - * This is the AGP 3.0 "bridge" @Bus 0 Device 1 Func 0. When using AGP 3.0, the - * config in this device takes presidence. We configure both just to be safe. - */ -static void agp_bridge_init(device_t dev) -{ - u8 reg8; - int i, j; - - printk(BIOS_DEBUG, "Entering %s\n", __func__); - - pci_write_config16(dev, 0x4, 0x0107); - - /* Secondary Bus Number */ - pci_write_config8(dev, 0x19, 0x01); - /* Subordinate Bus Number */ - pci_write_config8(dev, 0x1a, 0x01); - - /* I/O Base */ - pci_write_config8(dev, 0x1c, 0xf0); - - /* I/O Limit */ - pci_write_config8(dev, 0x1d, 0x00); - - /* Memory Base */ - pci_write_config16(dev, 0x20, 0xf400); - - /* Memory Limit */ - pci_write_config16(dev, 0x22, 0xf5f0); - - /* Prefetchable Memory Base */ - pci_write_config16(dev, 0x24, 0xf000); - - /* Prefetchable Memory Limit */ - pci_write_config16(dev, 0x26, 0xf3f0); - - /* Enable VGA Compatible Memory/IO Range */ - pci_write_config8(dev, 0x3e, 0x0e); - - /* AGP Bus Control */ - pci_write_config8(dev, 0x40, 0x83); - pci_write_config8(dev, 0x41, 0xC7); - pci_write_config8(dev, 0x42, 0x02); - pci_write_config8(dev, 0x43, 0x44); - pci_write_config8(dev, 0x44, 0x34); - pci_write_config8(dev, 0x45, 0x72); - - printk(BIOS_SPEW, "%s PCI Header Regs::\n", dev_path(dev)); - - for (i = 0 ; i < 16; i++) - { - printk(BIOS_SPEW, "%02X: ", i*16); - for (j = 0; j < 16; j++) - { - reg8 = pci_read_config8(dev, j+(i*16)); - printk(BIOS_SPEW, "%02X ", reg8); - } - printk(BIOS_SPEW, "\n"); - } - -} - -static const struct device_operations agp_bridge_operations = { - .read_resources = agp_bridge_read_resources, - .set_resources = pci_dev_set_resources, - .enable_resources = pci_bus_enable_resources, - .init = agp_bridge_init, - .scan_bus = pci_scan_bridge, - .ops_pci = 0, -}; - -static const struct pci_driver agp_bridge_driver __pci_driver = { - .ops = &agp_bridge_operations, - .vendor = PCI_VENDOR_ID_VIA, - .device = PCI_DEVICE_ID_VIA_CN400_BRIDGE, -}; diff --git a/src/northbridge/via/cn400/cn400.h b/src/northbridge/via/cn400/cn400.h deleted file mode 100644 index 4921bef3c9..0000000000 --- a/src/northbridge/via/cn400/cn400.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#define DEBUG_CN400 - -/* VGA stuff */ -#define SR_INDEX 0x3c4 -#define SR_DATA 0x3c5 -#define CRTM_INDEX 0x3b4 -#define CRTM_DATA 0x3b5 -#define CRTC_INDEX 0x3d4 -#define CRTC_DATA 0x3d5 - -/* Memory controller registers */ -#define RANK0_END 0x40 -#define RANK1_END 0x41 -#define RANK2_END 0x42 -#define RANK3_END 0x43 - -#define DDR_PAGE_CTL 0x69 -#define DRAM_REFRESH_COUNTER 0x6a -#define DRAM_MISC_CTL 0x6b -#define CH_A_DQS_OUTPUT_DELAY 0x70 -#define CH_A_MD_OUTPUT_DELAY 0x71 - -/* RAM init commands */ -#define RAM_COMMAND_NORMAL (const char) 0x00 -#define RAM_COMMAND_NOP (const char) 0x01 -#define RAM_COMMAND_PRECHARGE (const char) 0x02 -#define RAM_COMMAND_MSR_LOW (const char) 0x03 -#define RAM_COMMAND_CBR (const char) 0x04 -#define RAM_COMMAND_MSR_HIGH (const char) 0x05 diff --git a/src/northbridge/via/cn400/northbridge.c b/src/northbridge/via/cn400/northbridge.c deleted file mode 100644 index b797179047..0000000000 --- a/src/northbridge/via/cn400/northbridge.c +++ /dev/null @@ -1,267 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2008 VIA Technologies, Inc. - * (Written by Aaron Lwe <aaron.lwe@gmail.com> for VIA) - * Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <console/console.h> -#include <arch/io.h> -#include <stdint.h> -#include <device/device.h> -#include <device/pci.h> -#include <device/pci_ids.h> -#include <stdlib.h> -#include <string.h> -#include <lib.h> -#include <cbmem.h> -#include <cpu/cpu.h> -#include "northbridge.h" -#include "cn400.h" - -static void memctrl_init(device_t dev) -{ - device_t vlink_dev; - u16 reg16; - u8 ranks, pagec, paged, pagee, pagef, shadowreg, reg8; - int i, j; - - printk(BIOS_SPEW, "Entering cn400 memctrl_init.\n"); - /* vlink mirror */ - vlink_dev = dev_find_device(PCI_VENDOR_ID_VIA, - PCI_DEVICE_ID_VIA_CN400_VLINK, 0); - - /* Setup Low Memory Top */ - /* 0x47 == HA(32:25) */ - /* 0x84/85 == HA(31:20) << 4 | DRAM Granularity */ - ranks = pci_read_config8(dev, 0x47); - reg16 = (((u16)(ranks - 1) << 9) & 0xFFF0) | 0x01F0; - - pci_write_config16(dev, 0x84, reg16); - printk(BIOS_SPEW, "Low Top Address = 0x%04X\n", reg16); - - /* Set up the VGA framebuffer size and Base Address */ - /* Note dependencies between agp.c and vga.c and here */ - reg16 = (log2(CONFIG_VIDEO_MB) << 12) | (1 << 15) | 0xF00; - pci_write_config16(dev, 0xa0, reg16); - - - for (ranks = 0x4b; ranks >= 0x48; ranks--) { - if (pci_read_config8(dev, ranks)) { - ranks -= 0x48; - break; - } - } - if (ranks == 0x47) - ranks = 0x00; - reg16 = 0xaaf0; - reg16 |= ranks; - /* GMINT Misc. FrameBuffer rank */ - pci_write_config16(dev, 0xb0, reg16); - /* AGPCINT Misc. */ - pci_write_config8(dev, 0xb8, 0x08); - - /* Arbritation Counters */ - pci_write_config8(dev, 0xb2, 0xaa); - - /* Write FIFO Setup */ - pci_write_config8(dev, 0xb3, 0x5a); - - /* Graphics control optimisation */ - pci_write_config8(dev, 0xb4, 0x0f); - - /* Shadow RAM */ - pagec = 0xff, paged = 0xff, pagee = 0xff, pagef = 0x30; - /* PAGE C, D, E are all read write enable */ - pci_write_config8(dev, 0x80, pagec); - pci_write_config8(dev, 0x81, paged); - pci_write_config8(dev, 0x83, pagee); - /* PAGE F are read/writable */ - shadowreg = pci_read_config8(dev, 0x82); - shadowreg |= pagef; - pci_write_config8(dev, 0x82, shadowreg); - pci_write_config8(vlink_dev, 0x61, pagec); - pci_write_config8(vlink_dev, 0x62, paged); - pci_write_config8(vlink_dev, 0x64, pagee); - - shadowreg = pci_read_config8(vlink_dev, 0x63); - shadowreg |= pagef; - pci_write_config8(vlink_dev, 0x63, shadowreg); - - /* Activate VGA Frame Buffer */ - - reg8 = pci_read_config8(dev, 0xA0); - reg8 |= 0x01; - pci_write_config8(dev, 0xA0, reg8); - -#ifdef DEBUG_CN400 - printk(BIOS_SPEW, "%s PCI Header Regs::\n", dev_path(dev)); - - for (i = 0 ; i < 16; i++) - { - printk(BIOS_SPEW, "%02X: ", i*16); - for (j = 0; j < 16; j++) - { - reg8 = pci_read_config8(dev, j+(i*16)); - printk(BIOS_SPEW, "%02X ", reg8); - } - printk(BIOS_SPEW, "\n"); - } -#endif - printk(BIOS_SPEW, "Leaving cn400 %s.\n", __func__); -} - -static const struct device_operations memctrl_operations = { - .read_resources = DEVICE_NOOP, - .set_resources = DEVICE_NOOP, - .enable_resources = DEVICE_NOOP, - .init = memctrl_init, - .ops_pci = 0, -}; - -static const struct pci_driver memctrl_driver __pci_driver = { - .ops = &memctrl_operations, - .vendor = PCI_VENDOR_ID_VIA, - .device = PCI_DEVICE_ID_VIA_CN400_MEMCTRL, -}; - -static void cn400_domain_read_resources(device_t dev) -{ - struct resource *resource; - - printk(BIOS_SPEW, "Entering %s.\n", __func__); - - /* Initialize the system wide I/O space constraints. */ - resource = new_resource(dev, IOINDEX_SUBTRACTIVE(0, 0)); - resource->limit = 0xffffUL; - resource->flags = IORESOURCE_IO | IORESOURCE_SUBTRACTIVE | - IORESOURCE_ASSIGNED; - - /* Initialize the system wide memory resources constraints. */ - resource = new_resource(dev, IOINDEX_SUBTRACTIVE(1, 0)); - resource->limit = 0xffffffffULL; - resource->flags = IORESOURCE_MEM | IORESOURCE_SUBTRACTIVE | - IORESOURCE_ASSIGNED; - - printk(BIOS_SPEW, "Leaving %s.\n", __func__); -} - -#ifdef UNUSED_CODE -static void ram_reservation(device_t dev, unsigned long index, - unsigned long base, unsigned long size) -{ - struct resource *res; - - printk(BIOS_SPEW, "Configuring Via C3 LAPIC Fixed Resource\n"); - /* Fixed LAPIC resource */ - res = new_resource(dev, 1); - res->base = (resource_t) base; - res->size = size; - res->flags = IORESOURCE_MEM | IORESOURCE_FIXED | - IORESOURCE_STORED | IORESOURCE_ASSIGNED; -} -#endif - -static void cn400_domain_set_resources(device_t dev) -{ - device_t mc_dev; - u32 pci_tolm; - - printk(BIOS_SPEW, "Entering %s.\n", __func__); - - pci_tolm = find_pci_tolm(dev->link_list); - mc_dev = dev_find_device(PCI_VENDOR_ID_VIA, - PCI_DEVICE_ID_VIA_CN400_MEMCTRL, 0); - - if (mc_dev) { - unsigned long tomk, tolmk; - unsigned char rambits; - int idx; - - rambits = pci_read_config8(mc_dev, 0x47); - tomk = rambits * 32 * 1024; - /* Compute the Top Of Low Memory (TOLM), in Kb. */ - tolmk = pci_tolm >> 10; - printk(BIOS_SPEW, "tomk is 0x%lx, tolmk is 0x%08lX\n", tomk, tolmk); - if (tolmk >= tomk) { - /* The PCI hole does does not overlap the memory. */ - tolmk = tomk; - } - - /* Locate the High Tables at the Top of Low Memory below the Video RAM */ - set_top_of_ram((tolmk - (CONFIG_VIDEO_MB *1024)) * 1024); - - /* Report the memory regions. */ - idx = 10; - /* TODO: Hole needed? */ - ram_resource(dev, idx++, 0, 640); /* First 640k */ - /* Leave a hole for VGA, 0xa0000 - 0xc0000 */ - ram_resource(dev, idx++, 768, - (tolmk - 768 - CONFIG_VIDEO_MB * 1024)); - } - assign_resources(dev->link_list); - - printk(BIOS_SPEW, "Leaving %s.\n", __func__); -} - -static unsigned int cn400_domain_scan_bus(device_t dev, unsigned int max) -{ - printk(BIOS_DEBUG, "Entering %s.\n", __func__); - - max = pci_scan_bus(dev->link_list, PCI_DEVFN(0, 0), 0xff, max); - return max; -} - -static struct device_operations pci_domain_ops = { - .read_resources = cn400_domain_read_resources, - .set_resources = cn400_domain_set_resources, - .enable_resources = NULL, - .init = NULL, - .scan_bus = cn400_domain_scan_bus, - .ops_pci_bus = pci_bus_default_ops, -}; - -static void cpu_bus_init(device_t dev) -{ - initialize_cpus(dev->link_list); -} - -static struct device_operations cpu_bus_ops = { - .read_resources = DEVICE_NOOP, - .set_resources = DEVICE_NOOP, - .enable_resources = DEVICE_NOOP, - .init = cpu_bus_init, - .scan_bus = 0, -}; - -static void enable_dev(struct device *dev) -{ - printk(BIOS_SPEW, "CN400: enable_dev for device %s.\n", dev_path(dev)); - - /* Set the operations if it is a special bus type. */ - if (dev->path.type == DEVICE_PATH_DOMAIN) { - dev->ops = &pci_domain_ops; - } else if (dev->path.type == DEVICE_PATH_CPU_CLUSTER) { - dev->ops = &cpu_bus_ops; - } -} - -struct chip_operations northbridge_via_cn400_ops = { - CHIP_NAME("VIA CN400 Northbridge") - .enable_dev = enable_dev, -}; diff --git a/src/northbridge/via/cn400/northbridge.h b/src/northbridge/via/cn400/northbridge.h deleted file mode 100644 index 1fa848f31d..0000000000 --- a/src/northbridge/via/cn400/northbridge.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef NORTHBRIDGE_VIA_CN400_H -#define NORTHBRIDGE_VIA_CN400_H - -extern unsigned int cn400_scan_root_bus(device_t root, unsigned int max); - -#endif /* NORTHBRIDGE_VIA_CN400_H */ diff --git a/src/northbridge/via/cn400/raminit.c b/src/northbridge/via/cn400/raminit.c deleted file mode 100644 index d15a6338e0..0000000000 --- a/src/northbridge/via/cn400/raminit.c +++ /dev/null @@ -1,819 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2005 Nick Barker <nick.barker9@btinternet.com> - * Copyright (C) 2009 Jon Harrison <bothlyn@blueyonder.co.uk - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* - Automatically detect and set up ddr dram on the CN400 chipset. - Assumes DDR400 memory as no attempt is made to clock - the chipset down if slower memory is installed. - So far tested on: - 512 Mb DDR400 4 Bank / 2 Rank (1GB) (i.e. double sided) -*/ -/* ported from Via VT8263 Code*/ - -#include <spd.h> -#include <delay.h> -#include <cpu/x86/mtrr.h> -#include "cn400.h" - -static void dimm_read(unsigned long bank,unsigned long x) -{ - //unsigned long eax; - volatile unsigned long y; - //eax = x; - y = * (volatile unsigned long *) (x+ bank) ; - -} - - -static void print_val(char *str, int val) -{ - print_debug(str); - print_debug_hex8(val); -} - -/** - * Configure the bus between the CPU and the northbridge. This might be able to - * be moved to post-ram code in the future. For the most part, these registers - * should not be messed around with. These are too complex to explain short of - * copying the datasheets into the comments, but most of these values are from - * the BIOS Porting Guide, so they should work on any board. If they don't, - * try the values from your factory BIOS. - * - * TODO: Changing the DRAM frequency doesn't work (hard lockup). - * - * @param dev The northbridge's CPU Host Interface (D0F2). - */ -static void c3_cpu_setup(device_t dev) -{ - /* Host bus interface registers (D0F2 0x50-0x67) */ - /* Taken from CN700 and updated from running CN400 */ - uint8_t reg8; - - /* Host Bus I/O Circuit (see datasheet) */ - /* Host Address Pullup/down Driving */ - pci_write_config8(dev, 0x70, 0x33); - pci_write_config8(dev, 0x71, 0x44); - pci_write_config8(dev, 0x72, 0x33); - pci_write_config8(dev, 0x73, 0x44); - - /* Output Delay Stagger Control */ - pci_write_config8(dev, 0x74, 0x70); - - /* AGTL+ I/O Circuit */ - pci_write_config8(dev, 0x75, 0x08); - - /* AGTL+ Compensation Status */ - pci_write_config8(dev, 0x76, 0x74); - - /* AGTL+ Auto Compensation Offest */ - pci_write_config8(dev, 0x77, 0x00); - pci_write_config8(dev, 0x78, 0x94); - - /* Request phase control */ - pci_write_config8(dev, 0x50, 0xA8); - - /* Line DRDY# Timing Control */ - pci_write_config8(dev, 0x60, 0x00); - pci_write_config8(dev, 0x61, 0x00); - pci_write_config8(dev, 0x62, 0x00); - - /* QW DRDY# Timing Control */ - pci_write_config8(dev, 0x63, 0x00); - pci_write_config8(dev, 0x64, 0x00); - pci_write_config8(dev, 0x65, 0x00); - - /* Read Line Burst DRDY# Timing Control */ - pci_write_config8(dev, 0x66, 0x00); - pci_write_config8(dev, 0x67, 0x00); - - /* CPU Interface Control */ - pci_write_config8(dev, 0x51, 0xFE); - pci_write_config8(dev, 0x52, 0xEF); - - /* Arbitration */ - pci_write_config8(dev, 0x53, 0x88); - - /* Write Policy & Reorder Latecy */ - pci_write_config8(dev, 0x56, 0x00); - - /* Delivery-Trigger Control */ - pci_write_config8(dev, 0x58, 0x00); - - /* IPI Control */ - pci_write_config8(dev, 0x59, 0x30); - - /* CPU Misc Control */ - pci_write_config8(dev, 0x5C, 0x00); - - /* Write Policy */ - pci_write_config8(dev, 0x5d, 0xb2); - - /* Bandwidth Timer */ - pci_write_config8(dev, 0x5e, 0x88); - - /* CPU Miscellaneous Control */ - pci_write_config8(dev, 0x5f, 0xc7); - - /* CPU Miscellaneous Control */ - pci_write_config8(dev, 0x55, 0x28); - pci_write_config8(dev, 0x57, 0x69); - - /* CPU Host Bus Final Setup */ - reg8 = pci_read_config8(dev, 0x54); - reg8 |= 0x08; - pci_write_config8(dev, 0x54, reg8); - -} - -static void ddr_ram_setup(void) -{ - uint8_t b, c, bank, ma; - uint16_t i; - unsigned long bank_address; - - - print_debug("CN400 RAM init starting\n"); - - pci_write_config8(ctrl.d0f7, 0x75, 0x08); - - - /* No Interleaving or Multi Page */ - pci_write_config8(ctrl.d0f3, 0x69, 0x00); - pci_write_config8(ctrl.d0f3, 0x6b, 0x10); - -/* - DRAM MA Map Type Device 0 Fn3 Offset 50-51 - - Determine memory addressing based on the module's memory technology and - arrangement. See Table 4-9 of Intel's 82443GX datasheet for details. - - Bank 1/0 MA map type 50[7-5] - Bank 1/0 command rate 50[4] - Bank 3/2 MA map type 50[3-1] - Bank 3/2 command rate 50[0] - - - Read SPD byte 17, Number of banks on SDRAM device. -*/ - c = 0; - b = smbus_read_byte(DIMM0, SPD_NUM_BANKS_PER_SDRAM); - //print_val("Detecting Memory\nNumber of Banks ",b); - - // Only supporting 4 bank chips just now - if( b == 4 ){ - /* Read SPD byte 3, Number of row addresses. */ - c = 0x01; - bank = 0x40; - b = smbus_read_byte(DIMM0, SPD_NUM_ROWS); - //print_val("\nNumber of Rows ", b); - - if( b >= 0x0d ){ // 256/512Mb - - if (b == 0x0e) - bank = 0x48; - else - bank = 0x44; - - /* Read SPD byte 13, Primary DRAM width. */ - b = smbus_read_byte(DIMM0, SPD_PRIMARY_SDRAM_WIDTH); - //print_val("\nPrimary DRAM width", b); - if( b != 4 ) // not 64/128Mb (x4) - c = 0x81; // 256Mb - } - - /* Read SPD byte 4, Number of column addresses. */ - b = smbus_read_byte(DIMM0, SPD_NUM_COLUMNS); - //print_val("\nNo Columns ",b); - if( b == 10 || b == 11 || b == 12) c |= 0x60; // 10/11 bit col addr - if( b == 9 ) c |= 0x40; // 9 bit col addr - if( b == 8 ) c |= 0x20; // 8 bit col addr - - //print_val("\nMA type ", c); - pci_write_config8(ctrl.d0f3, 0x50, c); - - } - - /* Disable Upper Banks */ - pci_write_config8(ctrl.d0f3, 0x51, 0x00); - -/* else - { - die("DRAM module size is not supported by CN400\n"); - } -*/ - -/* - DRAM bank size. See 4.3.1 pg 35 - - 5a->5d set to end address for each bank. 1 bit == 32MB - 5a = bank 0 - 5b = bank 0 + b1 - 5c = bank 0 + b1 + b2 - 5d = bank 0 + b1 + b2 + b3 -*/ - - // Read SPD byte 31 Module bank density - //c = 0; - b = smbus_read_byte(DIMM0, SPD_DENSITY_OF_EACH_ROW_ON_MODULE); - if( b & 0x02 ) - { - c = 0x40; // 2GB - bank |= 0x02; - } - else if( b & 0x01) - { - c = 0x20; // 1GB - if (bank == 0x48) bank |= 0x01; - else bank |= 0x03; - } - else if( b & 0x80) - { - c = 0x10; // 512MB - if (bank == 0x44) bank |= 0x02; - } - else if( b & 0x40) - { - c = 0x08; // 256MB - if (bank == 0x44) bank |= 0x01; - else bank |= 0x03; - } - else if( b & 0x20) - { - c = 0x04; // 128MB - if (bank == 0x40) bank |= 0x02; - } - else if( b & 0x10) - { - c = 0x02; // 64MB - bank |= 0x01; - } - else if( b & 0x08) c = 0x01; // 32MB - else c = 0x01; // Error, use default - - // set bank zero size - pci_write_config8(ctrl.d0f3, 0x40, c); - - // SPD byte 5 # of physical banks - b = smbus_read_byte(DIMM0, SPD_NUM_DIMM_BANKS); - - //print_val("\nNo Physical Banks ",b); - if( b == 2) - { - c <<=1; - bank |= 0x80; - } -/* else - { - die("Only a single DIMM is supported by EPIA-N(L)\n"); - } -*/ - // set banks 1,2,3... - pci_write_config8(ctrl.d0f3, 0x41,c); - pci_write_config8(ctrl.d0f3, 0x42,c); - pci_write_config8(ctrl.d0f3, 0x43,c); - pci_write_config8(ctrl.d0f3, 0x44,c); - pci_write_config8(ctrl.d0f3, 0x45,c); - pci_write_config8(ctrl.d0f3, 0x46,c); - pci_write_config8(ctrl.d0f3, 0x47,c); - - /* Top Rank Address Mirrored to the South Bridge */ - /* over the VLink */ - pci_write_config8(ctrl.d0f7, 0x57, (c << 1)); - - ma = bank; - - /* Read SPD byte 18 CAS Latency */ - b = smbus_read_byte(DIMM0, SPD_ACCEPTABLE_CAS_LATENCIES); -/* print_debug("\nCAS Supported "); - if(b & 0x04) - print_debug("2 "); - if(b & 0x08) - print_debug("2.5 "); - if(b & 0x10) - print_debug("3"); - - c = smbus_read_byte(DIMM0, SPD_MIN_CYCLE_TIME_AT_CAS_MAX); - print_val("\nCycle time at CL X (nS)", c); - c = smbus_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_2ND); - print_val("\nCycle time at CL X-0.5 (nS)", c); - c = smbus_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_3RD); - print_val("\nCycle time at CL X-1 (nS)", c); -*/ - /* Scaling of Cycle Time SPD data */ - /* 7 4 3 0 */ - /* ns x0.1ns */ - bank = smbus_read_byte(DIMM0, SPD_MIN_CYCLE_TIME_AT_CAS_MAX); - - if( b & 0x10 ){ // DDR offering optional CAS 3 - //print_debug("\nStarting at CAS 3"); - c = 0x30; - /* see if we can better it */ - if( b & 0x08 ){ // DDR mandatory CAS 2.5 - if( smbus_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_2ND) <= bank ){ // we can manage max MHz at CAS 2.5 - //print_debug("\nWe can do CAS 2.5"); - c = 0x20; - } - } - if( b & 0x04 ){ // DDR mandatory CAS 2 - if( smbus_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_3RD) <= bank ){ // we can manage max MHz at CAS 2 - //print_debug("\nWe can do CAS 2"); - c = 0x10; - } - } - }else{ // no optional CAS values just 2 & 2.5 - //print_debug("\nStarting at CAS 2.5"); - c = 0x20; // assume CAS 2.5 - if( b & 0x04){ // Should always happen - if( smbus_read_byte(DIMM0, SPD_SDRAM_CYCLE_TIME_2ND) <= bank){ // we can manage max MHz at CAS 2 - //print_debug("\nWe can do CAS 2"); - c = 0x10; - } - } - } - - /* Scale DRAM Cycle Time to tRP/tRCD */ - /* 7 2 1 0 */ - /* ns x0.25ns */ - if ( bank <= 0x50 ) bank = 0x14; - else if (bank <= 0x60) bank = 0x18; - else bank = 0x1E; - -/* - DRAM Timing Device 0 Fn 3 Offset 56 - - RAS Pulse width 56[7,6] - CAS Latency 56[5,4] - Row pre-charge 56[1,0] - - SDR DDR - 00 1T - - 01 2T 2T - 10 3T 2.5T - 11 - 3T - - RAS/CAS delay 56[3,2] - - Determine row pre-charge time (tRP) - - - Read SPD byte 27, min row pre-charge time. -*/ - - b = smbus_read_byte(DIMM0, SPD_MIN_ROW_PRECHARGE_TIME); - - //print_val("\ntRP ",b); - if ( b >= (5 * bank)) { - c |= 0x03; // set tRP = 5T - } - else if ( b >= (4 * bank)) { - c |= 0x02; // set tRP = 4T - } - else if ( b >= (3 * bank)) { - c |= 0x01; // set tRP = 3T - } - -/* - Determine RAS to CAS delay (tRCD) - - Read SPD byte 29, min row pre-charge time. -*/ - - b = smbus_read_byte(DIMM0, SPD_MIN_RAS_TO_CAS_DELAY); - //print_val("\ntRCD ",b); - - if ( b >= (5 * bank)) c |= 0x0C; // set tRCD = 5T - else if ( b >= (4 * bank)) c |= 0x08; // set tRCD = 4T - else if ( b >= (3 * bank)) c |= 0x04; // set tRCD = 3T - -/* - Determine RAS pulse width (tRAS) - - - Read SPD byte 30, device min active to pre-charge time. -*/ - - /* tRAS is in whole ns */ - bank = bank >> 2; - - b = smbus_read_byte(DIMM0, SPD_MIN_ACTIVE_TO_PRECHARGE_DELAY); - //print_val("\ntRAS ",b); - //print_val("\nBank ", bank); - if ( b >= (9 * bank)) c |= 0xC0; // set tRAS = 9T - else if ( b >= (8 * bank)) c |= 0x80; // set tRAS = 8T - else if ( b >= (7 * bank)) c |= 0x40; // set tRAS = 7T - - /* Write DRAM Timing All Banks I */ - pci_write_config8(ctrl.d0f3, 0x56, c); - - /* TWrite DRAM Timing All Banks II */ - pci_write_config8(ctrl.d0f3, 0x57, 0x1a); - - /* DRAM arbitration timer */ - pci_write_config8(ctrl.d0f3, 0x65, 0x99); - -/* - DRAM Clock Device 0 Fn 3 Offset 68 -*/ - bank = smbus_read_byte(DIMM0, SPD_MIN_CYCLE_TIME_AT_CAS_MAX); - - /* Setup DRAM Cycle Time */ - if ( bank <= 0x50 ) - { - /* DRAM DDR Control Alert! Alert! See also c3_cpu_setup */ - /* This sets to 133MHz FSB / DDR400. */ - pci_write_config8(ctrl.d0f3, 0x68, 0x85); - } - else if (bank <= 0x60) - { - /* DRAM DDR Control Alert! Alert! This hardwires to */ - /* 133MHz FSB / DDR333. See also c3_cpu_setup */ - pci_write_config8(ctrl.d0f3, 0x68, 0x81); - } - else - { - /* DRAM DDR Control Alert! Alert! This hardwires to */ - /* 133MHz FSB / DDR266. See also c3_cpu_setup */ - pci_write_config8(ctrl.d0f3, 0x68, 0x80); - } - - /* Delay >= 100ns after DRAM Frequency adjust, See 4.1.1.3 pg 15 */ - udelay(200); - -/* - Determine bank interleave - - Read SPD byte 17, Number of banks on SDRAM device. -*/ - c = 0x0F; - b = smbus_read_byte(DIMM0, SPD_NUM_BANKS_PER_SDRAM); - if( b == 4) c |= 0x80; - else if (b == 2) c |= 0x40; - - /* 4-Way Interleave With Multi-Paging (From Running System)*/ - pci_write_config8(ctrl.d0f3, 0x69, c); - - /*DRAM Controller Internal Options */ - pci_write_config8(ctrl.d0f3, 0x54, 0x01); - - /* DRAM Arbitration Control */ - pci_write_config8(ctrl.d0f3, 0x66, 0x82); - - /* DRAM Control */ - pci_write_config8(ctrl.d0f3, 0x6e, 0x80); - - /* Disable refresh for now */ - pci_write_config8(ctrl.d0f3, 0x6a, 0x00); - - /* DDR Clock Gen Duty Cycle Control */ - pci_write_config8(ctrl.d0f3, 0xEE, 0x01); - - - /* DRAM Clock Control */ - pci_write_config8(ctrl.d0f3, 0x6c, 0x00); - - /* DRAM Bus Turn-Around Setting */ - pci_write_config8(ctrl.d0f3, 0x60, 0x01); - - /* Disable DRAM refresh */ - pci_write_config8(ctrl.d0f3,0x6a,0x0); - - - /* Memory Pads Driving and Range Select */ - pci_write_config8(ctrl.d0f3, 0xe2, 0xAA); - pci_write_config8(ctrl.d0f3, 0xe3, 0x00); - pci_write_config8(ctrl.d0f3, 0xe4, 0x99); - - /* DRAM signal timing control */ - pci_write_config8(ctrl.d0f3, 0x74, 0x99); - pci_write_config8(ctrl.d0f3, 0x76, 0x09); - pci_write_config8(ctrl.d0f3, 0x77, 0x12); - - pci_write_config8(ctrl.d0f3, 0xe0, 0xAA); - pci_write_config8(ctrl.d0f3, 0xe1, 0x00); - pci_write_config8(ctrl.d0f3, 0xe6, 0x00); - pci_write_config8(ctrl.d0f3, 0xe8, 0xEE); - pci_write_config8(ctrl.d0f3, 0xea, 0xEE); - - - /* SPD byte 5 # of physical banks */ - b = smbus_read_byte(DIMM0, SPD_NUM_DIMM_BANKS) -1; - c = b | 0x40; - - pci_write_config8(ctrl.d0f3, 0xb0, c); - - /* Set RAM Decode method */ - pci_write_config8(ctrl.d0f3, 0x55, 0x0a); - - /* Enable DIMM Ranks */ - pci_write_config8(ctrl.d0f3, 0x48, ma); - udelay(200); - - c = smbus_read_byte(DIMM0, SPD_SUPPORTED_BURST_LENGTHS); - c &= 0x08; - if ( c == 0x08 ) - { - print_debug("Setting Burst Length 8\n"); - /* - CPU Frequency Device 0 Function 2 Offset 54 - - CPU FSB Operating Frequency (bits 7:5) - 000 : 100MHz 001 : 133MHz - 010 : 200MHz - 011->111 : Reserved - - SDRAM BL8 (4) - - Don't change Frequency from power up defaults - This seems to lockup the RAM interface - */ - c = pci_read_config8(ctrl.d0f2, 0x54); - c |= 0x10; - pci_write_config8(ctrl.d0f2, 0x54, c); - i = 0x008; // Used later to set SDRAM MSR - } - - - for( bank = 0 , bank_address=0; bank <= b ; bank++) { -/* - DDR init described in Via VT8623 BIOS Porting Guide. Pg 28 (4.2.3.1) -*/ - - /* NOP command enable */ - c = pci_read_config8(ctrl.d0f3, DRAM_MISC_CTL); - c &= 0xf8; /* Clear bits 2-0. */ - c |= RAM_COMMAND_NOP; - pci_write_config8(ctrl.d0f3, DRAM_MISC_CTL, c); - - /* read a double word from any address of the dimm */ - dimm_read(bank_address,0x1f000); - //udelay(200); - - /* All bank precharge Command Enable */ - c = pci_read_config8(ctrl.d0f3, DRAM_MISC_CTL); - c &= 0xf8; /* Clear bits 2-0. */ - c |= RAM_COMMAND_PRECHARGE; - pci_write_config8(ctrl.d0f3, DRAM_MISC_CTL, c); - dimm_read(bank_address,0x1f000); - - - /* MSR Enable Low DIMM*/ - c = pci_read_config8(ctrl.d0f3, DRAM_MISC_CTL); - c &= 0xf8; /* Clear bits 2-0. */ - c |= RAM_COMMAND_MSR_LOW; - pci_write_config8(ctrl.d0f3, DRAM_MISC_CTL, c); - /* TODO: Bank Addressing for Different Numbers of Row Addresses */ - dimm_read(bank_address,0x2000); - udelay(1); - dimm_read(bank_address,0x800); - udelay(1); - - /* All banks precharge Command Enable */ - c = pci_read_config8(ctrl.d0f3, DRAM_MISC_CTL); - c &= 0xf8; /* Clear bits 2-0. */ - c |= RAM_COMMAND_PRECHARGE; - pci_write_config8(ctrl.d0f3, DRAM_MISC_CTL, c); - dimm_read(bank_address,0x1f200); - - /* CBR Cycle Enable */ - c = pci_read_config8(ctrl.d0f3, DRAM_MISC_CTL); - c &= 0xf8; /* Clear bits 2-0. */ - c |= RAM_COMMAND_CBR; - pci_write_config8(ctrl.d0f3, DRAM_MISC_CTL, c); - - /* Read 8 times */ - for (c=0;c<8;c++) { - dimm_read(bank_address,0x1f300); - udelay(100); - } - - /* MSR Enable */ - c = pci_read_config8(ctrl.d0f3, DRAM_MISC_CTL); - c &= 0xf8; /* Clear bits 2-0. */ - c |= RAM_COMMAND_MSR_LOW; - pci_write_config8(ctrl.d0f3, DRAM_MISC_CTL, c); - - -/* - Mode Register Definition - with adjustement so that address calculation is correct - 64 bit technology, therefore - a0-a2 refer to byte within a 64 bit long word, and a3 is the first address line presented - to DIMM as a row or column address. - - MR[9-7] CAS Latency - MR[6] Burst Type 0 = sequential, 1 = interleaved - MR[5-3] burst length 001 = 2, 010 = 4, 011 = 8, others reserved - MR[0-2] dont care - - CAS Latency - 000 reserved - 001 reserved - 010 2 - 011 3 - 100 reserved - 101 1.5 - 110 2.5 - 111 reserved - - CAS 2 0101011000 = 0x158 - CAS 2.5 1101011000 = 0x358 - CAS 3 0111011000 = 0x1d8 - -*/ - c = pci_read_config8(ctrl.d0f3, 0x56); - if( (c & 0x30) == 0x10 ) - dimm_read(bank_address,(0x150 + i)); - else if((c & 0x30) == 0x20 ) - dimm_read(bank_address,(0x350 + i)); - else - dimm_read(bank_address,(0x1d0 + i)); - - - /* Normal SDRAM Mode */ - c = pci_read_config8(ctrl.d0f3, DRAM_MISC_CTL); - c &= 0xf8; /* Clear bits 2-0. */ - c |= RAM_COMMAND_NORMAL; - pci_write_config8(ctrl.d0f3, DRAM_MISC_CTL, c); - - bank_address = pci_read_config8(ctrl.d0f3,0x40+bank) * 0x2000000; - } // end of for each bank - - - /* Set DRAM DQS Output Control */ - pci_write_config8(ctrl.d0f3, 0x79, 0x11); - - /* Set DQS A/B Input delay to defaults */ - pci_write_config8(ctrl.d0f3, 0x7A, 0xA1); - pci_write_config8(ctrl.d0f3, 0x7B, 0x62); - - /* DQS Duty Cycle Control */ - pci_write_config8(ctrl.d0f3, 0xED, 0x11); - - /* SPD byte 5 # of physical banks */ - b = smbus_read_byte(DIMM0, SPD_NUM_DIMM_BANKS) -1; - - /* determine low bond */ - if( b == 2) - bank_address = pci_read_config8(ctrl.d0f3,0x40) * 0x2000000; - else - bank_address = 0; - - for(i = 0x30 ; i < 0x0ff; i++){ - pci_write_config8(ctrl.d0f3,0x70,i); - // clear - *(volatile unsigned long*)(0x4000) = 0; - *(volatile unsigned long*)(0x4100+bank_address) = 0; - *(volatile unsigned long*)(0x4200) = 0; - *(volatile unsigned long*)(0x4300+bank_address) = 0; - *(volatile unsigned long*)(0x4400) = 0; - *(volatile unsigned long*)(0x4500+bank_address) = 0; - - // fill - *(volatile unsigned long*)(0x4000) = 0x12345678; - *(volatile unsigned long*)(0x4100+bank_address) = 0x81234567; - *(volatile unsigned long*)(0x4200) = 0x78123456; - *(volatile unsigned long*)(0x4300+bank_address) = 0x67812345; - *(volatile unsigned long*)(0x4400) = 0x56781234; - *(volatile unsigned long*)(0x4500+bank_address) = 0x45678123; - - // verify - if( *(volatile unsigned long*)(0x4000) != 0x12345678) - continue; - - if( *(volatile unsigned long*)(0x4100+bank_address) != 0x81234567) - continue; - - if( *(volatile unsigned long*)(0x4200) != 0x78123456) - continue; - - if( *(volatile unsigned long*)(0x4300+bank_address) != 0x67812345) - continue; - - if( *(volatile unsigned long*)(0x4400) != 0x56781234) - continue; - - if( *(volatile unsigned long*)(0x4500+bank_address) != 0x45678123) - continue; - - // if everything verified then found low bond - break; - - } - print_val("\nLow Bond ",i); - if( i < 0xff ){ - c = i++; - for( ; i <0xff ; i++){ - pci_write_config8(ctrl.d0f3,0x70, i); - // clear - *(volatile unsigned long*)(0x8000) = 0; - *(volatile unsigned long*)(0x8100+bank_address) = 0; - *(volatile unsigned long*)(0x8200) = 0x0; - *(volatile unsigned long*)(0x8300+bank_address) = 0; - *(volatile unsigned long*)(0x8400) = 0x0; - *(volatile unsigned long*)(0x8500+bank_address) = 0; - - // fill - *(volatile unsigned long*)(0x8000) = 0x12345678; - *(volatile unsigned long*)(0x8100+bank_address) = 0x81234567; - *(volatile unsigned long*)(0x8200) = 0x78123456; - *(volatile unsigned long*)(0x8300+bank_address) = 0x67812345; - *(volatile unsigned long*)(0x8400) = 0x56781234; - *(volatile unsigned long*)(0x8500+bank_address) = 0x45678123; - - // verify - if( *(volatile unsigned long*)(0x8000) != 0x12345678) - break; - - if( *(volatile unsigned long*)(0x8100+bank_address) != 0x81234567) - break; - - if( *(volatile unsigned long*)(0x8200) != 0x78123456) - break; - - if( *(volatile unsigned long*)(0x8300+bank_address) != 0x67812345) - break; - - if( *(volatile unsigned long*)(0x8400) != 0x56781234) - break; - - if( *(volatile unsigned long*)(0x8500+bank_address) != 0x45678123) - break; - - } - print_val(" High Bond ",i); - c = ((i - c)<<1)/3 + c; - print_val(" Setting DQS delay",c); - print_debug("\n"); - pci_write_config8(ctrl.d0f3,0x70,c); - }else{ - pci_write_config8(ctrl.d0f3,0x70,0x67); - } - - /* Set DQS ChA Data Output Delay to the default */ - pci_write_config8(ctrl.d0f3, 0x71, 0x65); - - /* Set Ch B DQS Output Delays */ - pci_write_config8(ctrl.d0f3, 0x72, 0x2a); - pci_write_config8(ctrl.d0f3, 0x73, 0x29); - - pci_write_config8(ctrl.d0f3, 0x78, 0x03); - - /* Mystery Value */ - pci_write_config8(ctrl.d0f3, 0x67, 0x50); - - /* Enable Toggle Limiting */ - pci_write_config8(ctrl.d0f4, 0xA3, 0x80); - -/* - DRAM refresh rate Device 0 F3 Offset 6a - TODO :: Fix for different DRAM technologies - other than 512Mb and DRAM Freq - Units of 16 DRAM clock cycles - 1. -*/ - //c = pci_read_config8(ctrl.d0f3, 0x68); - //c &= 0x07; - //b = smbus_read_byte(DIMM0, SPD_REFRESH); - //print_val("SPD_REFRESH = ", b); - - pci_write_config8(ctrl.d0f3,0x6a,0x65); - - /* SMM and APIC decoding, we do not use SMM */ - b = 0x29; - pci_write_config8(ctrl.d0f3, 0x86, b); - /* SMM and APIC decoding mirror */ - pci_write_config8(ctrl.d0f7, 0xe6, b); - - /* Open Up the Rest of the Shadow RAM */ - pci_write_config8(ctrl.d0f3,0x80,0xff); - pci_write_config8(ctrl.d0f3,0x81,0xff); - - /* pci */ - pci_write_config8(ctrl.d0f7,0x70,0x82); - pci_write_config8(ctrl.d0f7,0x73,0x01); - pci_write_config8(ctrl.d0f7,0x76,0x50); - - pci_write_config8(ctrl.d0f7,0x71,0xc8); - - - /* VGA device. */ - pci_write_config16(ctrl.d0f3, 0xa0, (1 << 15)); - pci_write_config16(ctrl.d0f3, 0xa4, 0x0010); - print_debug("CN400 raminit.c done\n"); -} diff --git a/src/northbridge/via/cn400/raminit.h b/src/northbridge/via/cn400/raminit.h deleted file mode 100644 index 89ea0d686b..0000000000 --- a/src/northbridge/via/cn400/raminit.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2007 Corey Osgood <corey_osgood@verizon.net> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef RAMINIT_H -#define RAMINIT_H - -#define DIMM_SOCKETS 1 /* Only one works, for now. */ - -struct mem_controller { - device_t d0f0, d0f2, d0f3, d0f4, d0f7, d1f0; - u8 channel0[DIMM_SOCKETS]; -}; - -#endif diff --git a/src/northbridge/via/cn400/vga.c b/src/northbridge/via/cn400/vga.c deleted file mode 100644 index a2afdce900..0000000000 --- a/src/northbridge/via/cn400/vga.c +++ /dev/null @@ -1,153 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2007 Corey Osgood <corey.osgood@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* - * Note: Some of the VGA control registers are located on the memory - * controller. Registers are set both in raminit.c and northbridge.c. - */ - -#include <console/console.h> -#include <arch/io.h> -#include <stdint.h> -#include <device/device.h> -#include <device/pci.h> -#include <device/pci_ids.h> -#include <stdlib.h> -#include <string.h> -#include <cpu/cpu.h> -#include <arch/interrupt.h> -#include "northbridge.h" -#include "cn400.h" -#include <x86emu/regs.h> - -static int via_cn400_int15_handler(void) -{ - int res=0; - printk(BIOS_DEBUG, "via_cn400_int15_handler\n"); - switch(X86_EAX & 0xffff) { - case 0x5f19: - break; - case 0x5f18: - X86_EAX=0x5f; - X86_EBX=0x545; // MCLK = 133, 32M frame buffer, 256 M main memory - X86_ECX=0x060; - res=1; - break; - case 0x5f00: - X86_EAX = 0x8600; - break; - case 0x5f01: - X86_EAX = 0x5f; - X86_ECX = (X86_ECX & 0xffffff00 ) | 2; // panel type = 2 = 1024 * 768 - res = 1; - break; - case 0x5f02: - X86_EAX=0x5f; - X86_EBX= (X86_EBX & 0xffff0000) | 2; - X86_ECX= (X86_ECX & 0xffff0000) | 0x401; // PAL + crt only - X86_EDX= (X86_EDX & 0xffff0000) | 0; // TV Layout - default - res=1; - break; - case 0x5f0f: - X86_EAX=0x860f; - break; - default: - printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n", - X86_EAX & 0xffff); - break; - } - return res; -} - -static void vga_init(device_t dev) -{ - u8 reg8; - - mainboard_interrupt_handlers(0x15, &via_cn400_int15_handler); - - /* Set memory rate to 200 MHz. */ - outb(0x3d, CRTM_INDEX); - reg8 = inb(CRTM_DATA); - reg8 &= 0x0f; - reg8 |= (0x1 << 4); - outb(0x3d, CRTM_INDEX); - outb(reg8, CRTM_DATA); - - /* Set framebuffer size. */ - reg8 = (CONFIG_VIDEO_MB / 4); - outb(0x39, SR_INDEX); - outb(reg8, SR_DATA); - - pci_write_config8(dev, 0x04, 0x07); - pci_write_config8(dev, 0x0d, 0x20); - pci_write_config32(dev, 0x10, 0xf0000008); - pci_write_config32(dev, 0x14, 0xf4000000); - - printk(BIOS_DEBUG, "Initializing VGA...\n"); - - pci_dev_init(dev); - - /* It's not clear if these need to be programmed before or after - * the VGA BIOS runs. Try both, clean up later. */ - - /* Set memory rate to 200 MHz (again). */ - outb(0x3d, CRTM_INDEX); - reg8 = inb(CRTM_DATA); - reg8 &= 0x0f; - reg8 |= (0x1 << 4); - outb(0x3d, CRTM_INDEX); - outb(reg8, CRTM_DATA); - - /* Set framebuffer size (again). */ - reg8 = (CONFIG_VIDEO_MB / 4); - outb(0x39, SR_INDEX); - outb(reg8, SR_DATA); - -#ifdef DEBUG_CN400 - int i, j; - - printk(BIOS_SPEW, "%s PCI Header Regs::\n", dev_path(dev)); - - for (i = 0 ; i < 16; i++) - { - printk(BIOS_SPEW, "%02X: ", i*16); - for (j = 0; j < 16; j++) - { - reg8 = pci_read_config8(dev, j+(i*16)); - printk(BIOS_SPEW, "%02X ", reg8); - } - printk(BIOS_SPEW, "\n"); - } -#endif -} - -static const struct device_operations vga_operations = { - .read_resources = pci_dev_read_resources, - .set_resources = pci_dev_set_resources, - .enable_resources = pci_dev_enable_resources, - .init = vga_init, - .ops_pci = 0, -}; - -static const struct pci_driver vga_driver __pci_driver = { - .ops = &vga_operations, - .vendor = PCI_VENDOR_ID_VIA, - .device = PCI_DEVICE_ID_VIA_CN400_VGA, -}; diff --git a/src/northbridge/via/cn400/vlink.c b/src/northbridge/via/cn400/vlink.c deleted file mode 100644 index 2319e75ac9..0000000000 --- a/src/northbridge/via/cn400/vlink.c +++ /dev/null @@ -1,245 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2009 Jon Harrison <bothlyn@blueyonder.co.uk> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include <console/console.h> -#include <arch/io.h> -#include <device/device.h> -#include <device/pci.h> -#include <device/pci_ids.h> -#include "northbridge.h" -#include "cn400.h" - -static void noop_1k(u32 knops) -{ - u32 i; - - for (i = 0; i < 1024 * knops; i++) { - __asm__ volatile ("nop\n\t"); - } - - return; -} - -/* Vlink Performance Improvements */ -static void vlink_init(device_t dev) -{ - u8 reg, reg8; - int i, j; - - printk(BIOS_SPEW, "Entering CN400 %s\n", __func__); - - /* Disconnect the VLink Before Changing Settings */ - reg = pci_read_config8(dev, 0x47); - reg |= 0x04; - pci_write_config8(dev, 0x47, reg); - - /* Wait for anything pending to flush */ - noop_1k(20); - - /* Setup Vlink Mode 1 */ - pci_write_config8(dev, 0x4F, 0x01); - pci_write_config8(dev, 0x48, 0x13); - - /* PCI Buffer Control */ - pci_write_config8(dev, 0x70, 0x82); - - /* CPU to PCI Flow Control */ - pci_write_config8(dev, 0x71, 0xc8); - pci_write_config8(dev, 0x72, 0xee); - - /* PCI Master Control */ - pci_write_config8(dev, 0x73, 0x01); - pci_write_config8(dev, 0x74, 0x20); - - /* PCI Arbitration 1 */ - pci_write_config8(dev, 0x75, 0x0f); - - /* PCI Arbitration 2 */ - pci_write_config8(dev, 0x76, 0x50); - pci_write_config8(dev, 0x77, 0x6e); - pci_write_config8(dev, 0x7F, 0x10); - - pci_write_config8(dev, 0x94, 0x20); - pci_write_config8(dev, 0x95, 0x0f); - - /* V-Link CKG Control 1 */ - pci_write_config8(dev, 0xB0, 0x01); - - /* V-Link NB Compensation Control */ - pci_write_config8(dev, 0xB5, 0x46); - pci_write_config8(dev, 0xB6, 0x68); - reg = pci_read_config8(dev, 0xB4); - reg |= 0x01; - pci_write_config8(dev, 0xB4, reg); - - /* V-Link NB Receive Strobe Delay */ - pci_write_config8(dev, 0xB7, 0x02); - - /* V-Link SB Compensation Control */ - pci_write_config8(dev, 0xB9, 0x84); - reg = pci_read_config8(dev, 0xB8); - reg |= 0x01; - pci_write_config8(dev, 0xB8, reg); - - pci_write_config8(dev, 0xBA, 0x6a); - pci_write_config8(dev, 0xBB, 0x01); - -#ifdef DEBUG_CN400 - /* Reconnect the VLink Before Continuing*/ - reg = pci_read_config8(dev, 0x47); - reg &= ~0x04; - pci_write_config8(dev, 0x47, reg); - - printk(BIOS_SPEW, "%s PCI Header Regs::\n", dev_path(dev)); - - for (i = 0 ; i < 16; i++) - { - printk(BIOS_SPEW, "%02X: ", i*16); - for (j = 0; j < 16; j++) - { - reg8 = pci_read_config8(dev, j+(i*16)); - printk(BIOS_SPEW, "%02X ", reg8); - } - printk(BIOS_SPEW, "\n"); - } -#endif -} - -static const struct device_operations vlink_operations = { - .read_resources = pci_dev_read_resources, - .set_resources = pci_dev_set_resources, - .enable_resources = pci_dev_enable_resources, - .init = vlink_init, - .ops_pci = 0, -}; - -static const struct pci_driver vlink_driver __pci_driver = { - .ops = &vlink_operations, - .vendor = PCI_VENDOR_ID_VIA, - .device = PCI_DEVICE_ID_VIA_CN400_VLINK, -}; - -static void c3_host_init(device_t dev) -{ - u8 reg8; - int i, j; - - printk(BIOS_SPEW, "Entering CN400 %s\n", __func__); - - printk(BIOS_SPEW, "%s PCI Header Regs::\n", dev_path(dev)); - - for (i = 0 ; i < 16; i++) - { - printk(BIOS_SPEW, "%02X: ", i*16); - for (j = 0; j < 16; j++) - { - reg8 = pci_read_config8(dev, j+(i*16)); - printk(BIOS_SPEW, "%02X ", reg8); - } - printk(BIOS_SPEW, "\n"); - } - -} - -static const struct device_operations c3_host_operations = { - .read_resources = DEVICE_NOOP, - .set_resources = DEVICE_NOOP, - .enable_resources = DEVICE_NOOP, - .init = c3_host_init, - .ops_pci = 0, -}; - -static const struct pci_driver c3_host_driver __pci_driver = { - .ops = &c3_host_operations, - .vendor = PCI_VENDOR_ID_VIA, - .device = PCI_DEVICE_ID_VIA_CN400_HOST, -}; - - -static void c3_err_init(device_t dev) -{ - u8 reg8; - int i, j; - - printk(BIOS_SPEW, "Entering CN400 %s\n", __func__); - - printk(BIOS_SPEW, "%s PCI Header Regs::\n", dev_path(dev)); - - for (i = 0 ; i < 16; i++) - { - printk(BIOS_SPEW, "%02X: ", i*16); - for (j = 0; j < 16; j++) - { - reg8 = pci_read_config8(dev, j+(i*16)); - printk(BIOS_SPEW, "%02X ", reg8); - } - printk(BIOS_SPEW, "\n"); - } - -} - -static const struct device_operations c3_err_operations = { - .read_resources = DEVICE_NOOP, - .set_resources = DEVICE_NOOP, - .enable_resources = DEVICE_NOOP, - .init = c3_err_init, - .ops_pci = 0, -}; - -static const struct pci_driver c3_err_driver __pci_driver = { - .ops = &c3_err_operations, - .vendor = PCI_VENDOR_ID_VIA, - .device = PCI_DEVICE_ID_VIA_CN400_ERR, -}; - -static void cn400_pm_init(device_t dev) -{ - u8 reg8; - int i, j; - - printk(BIOS_SPEW, "Entering CN400 %s\n", __func__); - - printk(BIOS_SPEW, "%s PCI Header Regs::\n", dev_path(dev)); - - for (i = 0 ; i < 16; i++) - { - printk(BIOS_SPEW, "%02X: ", i*16); - for (j = 0; j < 16; j++) - { - reg8 = pci_read_config8(dev, j+(i*16)); - printk(BIOS_SPEW, "%02X ", reg8); - } - printk(BIOS_SPEW, "\n"); - } - -} - -static const struct device_operations cn400_pm_operations = { - .read_resources = DEVICE_NOOP, - .set_resources = DEVICE_NOOP, - .enable_resources = DEVICE_NOOP, - .init = cn400_pm_init, - .ops_pci = 0, -}; - -static const struct pci_driver cn400_pm_driver __pci_driver = { - .ops = &c3_err_operations, - .vendor = PCI_VENDOR_ID_VIA, - .device = PCI_DEVICE_ID_VIA_CN400_PM, -}; |