coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mainboard.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <amdblocks/acpimmio.h>
4 #include <device/mmio.h>
5 #include <delay.h>
6 #include <device/device.h>
8 #include <device/pci_ops.h>
9 
10 static const u8 mainboard_intr_data[] = {
11  [0x00] = 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* INTA# - INTH# */
12  [0x08] = 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, /* Misc-nil, 0, 1, 2, INT from Serial irq */
13  [0x10] = 0x09, 0x1F, 0x1F, 0x10, 0x1F, 0x12, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14  0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
15  0x12, 0x11, 0x12, 0x11, 0x12, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
16  0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17  0x10, 0x11, 0x12, 0x13
18 };
19 
20 /* PIRQ Setup */
21 static void pirq_setup(void)
22 {
24 }
25 
26 /**********************************************
27  * Enable the dedicated functions of the board.
28  **********************************************/
29 static void mainboard_enable(struct device *dev)
30 {
31  pirq_setup();
32 
33  /* enable GPP CLK0 thru CLK1 */
34  /* disable GPP CLK2 thru SLT_GFX_CLK */
35  misc_write8(0, 0xFF);
36  misc_write8(1, 0);
37  misc_write8(2, 0);
38  misc_write8(3, 0);
39  misc_write8(4, 0);
40 
41  /*
42  * Force the onboard SATA port to GEN2 speed.
43  * The offboard SATA port can remain at GEN3.
44  */
45  pm_write8(0xda, (pm_read8(0xda) & 0xfb) | 0x04);
46 }
47 
48 static void mainboard_final(void *chip_info)
49 {
50  struct device *ahci_dev;
52  u8 *memptr;
53 
54  ahci_dev = pcidev_on_root(0x11, 0);
55  ABAR = pci_read_config32(ahci_dev, 0x24);
56  ABAR &= 0xFFFFFC00;
57  memptr = (u8 *)(ABAR + 0x100 + 0x80 + 0x2C); /* we're on the 2nd port */
58  *memptr = 0x21; /* force to GEN2 and start re-negotiate */
59  mdelay(1);
60  *memptr = 0x20;
61 }
62 
65  .final = mainboard_final,
66 };
struct chip_operations mainboard_ops
Definition: mainboard.c:19
#define ABAR
Definition: 82870.h:5
static uint8_t pm_read8(uint8_t reg)
Definition: acpimmio.h:166
static void pm_write8(uint8_t reg, uint8_t value)
Definition: acpimmio.h:181
static void misc_write8(uint8_t reg, uint8_t value)
Definition: acpimmio.h:271
void mdelay(unsigned int msecs)
Definition: delay.c:2
DEVTREE_CONST struct device * pcidev_on_root(uint8_t dev, uint8_t fn)
Definition: device_const.c:260
static void mainboard_final(void *chip_info)
Definition: mainboard.c:48
static const u8 mainboard_intr_data[]
Definition: mainboard.c:10
static void mainboard_enable(struct device *dev)
Definition: mainboard.c:29
static void pirq_setup(void)
Definition: mainboard.c:21
static __always_inline u32 pci_read_config32(const struct device *dev, u16 reg)
Definition: pci_ops.h:58
const u8 * intr_data_ptr
Definition: amd_pci_util.c:13
unsigned long uintptr_t
Definition: stdint.h:21
uint8_t u8
Definition: stdint.h:45
void(* enable_dev)(struct device *dev)
Definition: device.h:24
Definition: device.h:107