diff options
Diffstat (limited to 'src/southbridge/intel')
-rw-r--r-- | src/southbridge/intel/i82801jx/dmi_setup.c | 141 | ||||
-rw-r--r-- | src/southbridge/intel/i82801jx/early_init.c | 59 | ||||
-rw-r--r-- | src/southbridge/intel/i82801jx/i82801jx.h | 3 |
3 files changed, 0 insertions, 203 deletions
diff --git a/src/southbridge/intel/i82801jx/dmi_setup.c b/src/southbridge/intel/i82801jx/dmi_setup.c deleted file mode 100644 index 83633a4930..0000000000 --- a/src/southbridge/intel/i82801jx/dmi_setup.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2012 secunet Security Networks AG - * - * 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. - */ - -#include <arch/io.h> -#include <device/pci_def.h> -#include <console/console.h> -#include <northbridge/intel/gm45/gm45.h> -#include "i82801jx.h" - -/* VC1 Port Arbitration Table */ -static const u8 vc1_pat[] = { - 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, -}; -void i82801jx_dmi_setup(void) -{ - int i; - u32 reg32; - - RCBA32(RCBA_V1CAP) = (RCBA32(RCBA_V1CAP) & ~(0x7f<<16)) | (0x12<<16); - - RCBA32(0x0088) = 0x00109000; - RCBA16(0x01fc) = 0x060b; - RCBA32(0x01f4) = 0x86000040; - RCBA8 (0x0220) = 0x45; - RCBA32(0x2024) &= ~(1 << 7); - - - /* VC1 setup for isochronous transfers: */ - - /* Set VC1 virtual channel id to 1. */ - RCBA32(RCBA_V1CTL) = (RCBA32(RCBA_V1CTL) & ~(0x7 << 24)) | (0x1 << 24); - /* Enable TC7 traffic on VC1. */ - RCBA32(RCBA_V1CTL) = (RCBA32(RCBA_V1CTL) & ~(0x7f << 1)) | (1 << 7); - /* Disable TC7-TC1 traffic on VC0. */ - RCBA32(RCBA_V0CTL) &= ~(0x7f << 1); - /* TC7-TC1 traffic on PCIe root ports will be disabled in pci driver. */ - - /* Set table type to time-based WRR. */ - RCBA32(RCBA_V1CTL) = (RCBA32(RCBA_V1CTL) & ~(0x7 << 17)) | (0x4 << 17); - /* Program port arbitration table. */ - for (i = 0; i < sizeof(vc1_pat); ++i) - RCBA8(RCBA_PAT + i) = vc1_pat[i]; - /* Load port arbitration table. */ - RCBA32(RCBA_V1CTL) |= (1 << 16); - - /* Enable VC1. */ - RCBA32(RCBA_V1CTL) |= (1 << 31); - - - /* Setup RCRB: */ - - /* Set component id to 2 for southbridge, northbridge has id 1. */ - RCBA8(RCBA_ESD + 2) = 2; - /* Set target port number and target component id of the northbridge. */ - RCBA8(RCBA_ULD + 3) = 1; - RCBA8(RCBA_ULD + 2) = 1; - /* Set target rcrb base address, i.e. DMIBAR. */ - RCBA32(RCBA_ULBA) = (uintptr_t)DEFAULT_DMIBAR; - - /* Enable ASPM. */ - if (LPC_IS_MOBILE(PCI_DEV(0, 0x1f, 0))) { - reg32 = RCBA32(RCBA_DMC); - /* Enable mobile specific power saving (set this first). */ - reg32 = (reg32 & ~(3 << 10)) | (1 << 10); - RCBA32(RCBA_DMC) = reg32; - /* Enable DMI power savings. */ - reg32 |= (1 << 19); - RCBA32(RCBA_DMC) = reg32; - /* Advertise L0s and L1. */ - RCBA32(RCBA_LCAP) |= (3 << 10); - /* Enable L0s and L1. */ - RCBA32(RCBA_LCTL) |= (3 << 0); - } else { - /* Enable DMI power savings. */ - RCBA32(RCBA_DMC) |= (1 << 19); - /* Advertise L0s only. */ - RCBA32(RCBA_LCAP) = (RCBA32(RCBA_LCAP) & ~(3<<10)) | (1<<10); - /* Enable L0s only. */ - RCBA32(RCBA_LCTL) = (RCBA32(RCBA_LCTL) & ~(3<< 0)) | (1<< 0); - } -} - -/* Should be called after VC1 has been enabled on both sides. */ -void i82801jx_dmi_poll_vc1(void) -{ - int timeout; - - timeout = 0x7ffff; - printk(BIOS_DEBUG, "ICH10 waits for VC1 negotiation... "); - while ((RCBA32(RCBA_V1STS) & (1 << 1)) && --timeout) {} - if (!timeout) - printk(BIOS_DEBUG, "timeout!\n"); - else - printk(BIOS_DEBUG, "done.\n"); - - /* Check for x2 DMI link. */ - if (((RCBA16(RCBA_LSTS) >> 4) & 0x3f) == 2) { - printk(BIOS_DEBUG, "x2 DMI link detected.\n"); - RCBA32(0x2024) = (RCBA32(0x2024) & ~(7 << 21)) | (3 << 21); - RCBA16(0x20c4) |= (1 << 15); - RCBA16(0x20e4) |= (1 << 15); - /* TODO: Maybe we have to save and - restore these settings across S3. */ - } - - timeout = 0x7ffff; - printk(BIOS_DEBUG, "ICH10 waits for port arbitration table update... "); - while ((RCBA32(RCBA_V1STS) & (1 << 0)) && --timeout) {} - if (!timeout) - printk(BIOS_DEBUG, "timeout!\n"); - else - printk(BIOS_DEBUG, "done.\n"); -} diff --git a/src/southbridge/intel/i82801jx/early_init.c b/src/southbridge/intel/i82801jx/early_init.c deleted file mode 100644 index e2ac852316..0000000000 --- a/src/southbridge/intel/i82801jx/early_init.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2012 secunet Security Networks AG - * - * 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. - */ - -#include <arch/io.h> -#include "i82801jx.h" - -void i82801jx_early_init(void) -{ - const pci_devfn_t d31f0 = PCI_DEV(0, 0x1f, 0); - - /* Set up RCBA. */ - pci_write_config32(d31f0, D31F0_RCBA, (uintptr_t)DEFAULT_RCBA | 1); - - /* Set up PMBASE. */ - pci_write_config32(d31f0, D31F0_PMBASE, DEFAULT_PMBASE | 1); - /* Enable PMBASE. */ - pci_write_config8(d31f0, D31F0_ACPI_CNTL, 0x80); - - /* Set up GPIOBASE. */ - pci_write_config32(d31f0, D31F0_GPIO_BASE, DEFAULT_GPIOBASE); - /* Enable GPIO. */ - pci_write_config8(d31f0, D31F0_GPIO_CNTL, - pci_read_config8(d31f0, D31F0_GPIO_CNTL) | 0x10); - - /* Reset watchdog. */ - outw(0x0008, DEFAULT_TCOBASE + 0x04); /* R/WC, clear TCO caused SMI. */ - outw(0x0002, DEFAULT_TCOBASE + 0x06); /* R/WC, clear second timeout. */ - - /* Enable upper 128bytes of CMOS. */ - RCBA32(0x3400) = (1 << 2); - - /* Initialize power management initialization - register early as it affects reboot behavior. */ - /* Bit 20 activates global reset of host and ME on cf9 writes of 0x6 - and 0xe (required if ME is disabled but present), bit 31 locks it. - The other bits are 'must write'. */ - u8 reg8 = pci_read_config8(d31f0, 0xac); - reg8 |= (1 << 31) | (1 << 30) | (1 << 20) | (3 << 8); - pci_write_config8(d31f0, 0xac, reg8); - - /* TODO: If RTC power failed, reset RTC state machine - (set, then reset RTC 0x0b bit7) */ - - /* TODO: Check power state bits in GEN_PMCON_2 (D31F0 0xa2) - before they get cleared. */ -} diff --git a/src/southbridge/intel/i82801jx/i82801jx.h b/src/southbridge/intel/i82801jx/i82801jx.h index fe55157850..9b0f95593b 100644 --- a/src/southbridge/intel/i82801jx/i82801jx.h +++ b/src/southbridge/intel/i82801jx/i82801jx.h @@ -229,9 +229,6 @@ int i2c_block_read(unsigned int device, unsigned int cmd, unsigned int bytes, int smbus_block_read(unsigned int device, unsigned int cmd, u8 bytes, u8 *buf); int smbus_block_write(unsigned int device, unsigned int cmd, u8 bytes, const u8 *buf); -void i82801jx_early_init(void); -void i82801jx_dmi_setup(void); -void i82801jx_dmi_poll_vc1(void); int southbridge_detect_s3_resume(void); #endif |