Add basic setup for the PCH. Signed-off-by: Simon Glass <sjg@chromium.org>master
parent
a0bd851ece
commit
4e7a6acac7
@ -0,0 +1,99 @@ |
||||
/*
|
||||
* Copyright (C) 2014 Google, Inc |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <errno.h> |
||||
#include <fdtdec.h> |
||||
#include <malloc.h> |
||||
#include <asm/lapic.h> |
||||
#include <asm/pci.h> |
||||
#include <asm/arch/bd82x6x.h> |
||||
#include <asm/arch/model_206ax.h> |
||||
#include <asm/arch/pch.h> |
||||
#include <asm/arch/sandybridge.h> |
||||
|
||||
void bd82x6x_pci_init(pci_dev_t dev) |
||||
{ |
||||
u16 reg16; |
||||
u8 reg8; |
||||
|
||||
debug("bd82x6x PCI init.\n"); |
||||
/* Enable Bus Master */ |
||||
reg16 = pci_read_config16(dev, PCI_COMMAND); |
||||
reg16 |= PCI_COMMAND_MASTER; |
||||
pci_write_config16(dev, PCI_COMMAND, reg16); |
||||
|
||||
/* This device has no interrupt */ |
||||
pci_write_config8(dev, INTR, 0xff); |
||||
|
||||
/* disable parity error response and SERR */ |
||||
reg16 = pci_read_config16(dev, BCTRL); |
||||
reg16 &= ~(1 << 0); |
||||
reg16 &= ~(1 << 1); |
||||
pci_write_config16(dev, BCTRL, reg16); |
||||
|
||||
/* Master Latency Count must be set to 0x04! */ |
||||
reg8 = pci_read_config8(dev, SMLT); |
||||
reg8 &= 0x07; |
||||
reg8 |= (0x04 << 3); |
||||
pci_write_config8(dev, SMLT, reg8); |
||||
|
||||
/* Will this improve throughput of bus masters? */ |
||||
pci_write_config8(dev, PCI_MIN_GNT, 0x06); |
||||
|
||||
/* Clear errors in status registers */ |
||||
reg16 = pci_read_config16(dev, PSTS); |
||||
/* reg16 |= 0xf900; */ |
||||
pci_write_config16(dev, PSTS, reg16); |
||||
|
||||
reg16 = pci_read_config16(dev, SECSTS); |
||||
/* reg16 |= 0xf900; */ |
||||
pci_write_config16(dev, SECSTS, reg16); |
||||
} |
||||
|
||||
#define PCI_BRIDGE_UPDATE_COMMAND |
||||
void bd82x6x_pci_dev_enable_resources(pci_dev_t dev) |
||||
{ |
||||
uint16_t command; |
||||
|
||||
command = pci_read_config16(dev, PCI_COMMAND); |
||||
command |= PCI_COMMAND_IO; |
||||
#ifdef PCI_BRIDGE_UPDATE_COMMAND |
||||
/*
|
||||
* If we write to PCI_COMMAND, on some systems this will cause the |
||||
* ROM and APICs to become invisible. |
||||
*/ |
||||
debug("%x cmd <- %02x\n", dev, command); |
||||
pci_write_config16(dev, PCI_COMMAND, command); |
||||
#else |
||||
printf("%s cmd <- %02x (NOT WRITTEN!)\n", dev_path(dev), command); |
||||
#endif |
||||
} |
||||
|
||||
void bd82x6x_pci_bus_enable_resources(pci_dev_t dev) |
||||
{ |
||||
uint16_t ctrl; |
||||
|
||||
ctrl = pci_read_config16(dev, PCI_BRIDGE_CONTROL); |
||||
ctrl |= PCI_COMMAND_IO; |
||||
ctrl |= PCI_BRIDGE_CTL_VGA; |
||||
debug("%x bridge ctrl <- %04x\n", dev, ctrl); |
||||
pci_write_config16(dev, PCI_BRIDGE_CONTROL, ctrl); |
||||
|
||||
bd82x6x_pci_dev_enable_resources(dev); |
||||
} |
||||
|
||||
int bd82x6x_init_pci_devices(void) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
int bd82x6x_init(void) |
||||
{ |
||||
bd82x6x_pci_init(PCH_DEV); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,14 @@ |
||||
/*
|
||||
* Copyright (C) 2014 Google, Inc |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _ASM_ARCH_BD82X6X_H |
||||
#define _ASM_ARCH_BD82X6X_H |
||||
|
||||
void bd82x6x_pci_init(pci_dev_t dev); |
||||
int bd82x6x_init_pci_devices(void); |
||||
int bd82x6x_init(void); |
||||
|
||||
#endif |
Loading…
Reference in new issue