coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
hudson.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef HUDSON_H
4 #define HUDSON_H
5 
6 #include <types.h>
7 #include <device/device.h>
8 
9 /* Offsets from ACPI_MMIO_BASE
10  * This is defined by AGESA, but we don't include AGESA headers to avoid
11  * polluting the namespace.
12  */
13 #define PM_MMIO_BASE 0xfed80300
14 
15 /* Power management index/data registers */
16 #define BIOSRAM_INDEX 0xcd4
17 #define BIOSRAM_DATA 0xcd5
18 #define PM_INDEX 0xcd6
19 #define PM_DATA 0xcd7
20 #define PM2_INDEX 0xcd0
21 #define PM2_DATA 0xcd1
22 
23 #define PM_ACPI_MMIO_EN 0x24
24 #define PM_SERIRQ_CONF 0x54
25 #define PM_EVT_BLK 0x60
26 #define PM1_CNT_BLK 0x62
27 #define PM_TMR_BLK 0x64
28 #define PM_CPU_CTRL 0x66
29 #define PM_GPE0_BLK 0x68
30 #define PM_ACPI_SMI_CMD 0x6A
31 #define PM_ACPI_CONF 0x74
32 #define PM_PMIO_DEBUG 0xD2
33 #define PM_MANUAL_RESET 0xD3
34 #define PM_HUD_SD_FLASH_CTRL 0xE7
35 #define PM_YANG_SD_FLASH_CTRL 0xE8
36 #define PM_PCIB_CFG 0xEA
37 
38 #define HUDSON_ACPI_IO_BASE CONFIG_HUDSON_ACPI_IO_BASE
39 #define ACPI_PM_EVT_BLK (HUDSON_ACPI_IO_BASE + 0x00) /* 4 bytes */
40 #define ACPI_PM1_CNT_BLK (HUDSON_ACPI_IO_BASE + 0x04) /* 2 bytes */
41 #define ACPI_PM_TMR_BLK (HUDSON_ACPI_IO_BASE + 0x18) /* 4 bytes */
42 #define ACPI_GPE0_BLK (HUDSON_ACPI_IO_BASE + 0x10) /* 8 bytes */
43 #define ACPI_CPU_CONTROL (HUDSON_ACPI_IO_BASE + 0x08) /* 6 bytes */
44 
45 #define ACPI_SMI_CTL_PORT 0xb2
46 #define ACPI_SMI_CMD_CST_CONTROL 0xde
47 #define ACPI_SMI_CMD_PST_CONTROL 0xad
48 #define ACPI_SMI_CMD_DISABLE 0xbe
49 #define ACPI_SMI_CMD_ENABLE 0xef
50 #define ACPI_SMI_CMD_S4_REQ 0xc0
51 
52 #define REV_HUDSON_A11 0x11
53 #define REV_HUDSON_A12 0x12
54 
55 #define SPIROM_BASE_ADDRESS_REGISTER 0xA0
56 #define ROUTE_TPM_2_SPI BIT(3)
57 #define SPI_ROM_ENABLE 0x02
58 #define SPI_BASE_ADDRESS 0xFEC10000
59 
60 #define LPC_IO_PORT_DECODE_ENABLE 0x44
61 #define DECODE_ENABLE_PARALLEL_PORT0 BIT(0)
62 #define DECODE_ENABLE_PARALLEL_PORT1 BIT(1)
63 #define DECODE_ENABLE_PARALLEL_PORT2 BIT(2)
64 #define DECODE_ENABLE_PARALLEL_PORT3 BIT(3)
65 #define DECODE_ENABLE_PARALLEL_PORT4 BIT(4)
66 #define DECODE_ENABLE_PARALLEL_PORT5 BIT(5)
67 #define DECODE_ENABLE_SERIAL_PORT0 BIT(6)
68 #define DECODE_ENABLE_SERIAL_PORT1 BIT(7)
69 #define DECODE_ENABLE_SERIAL_PORT2 BIT(8)
70 #define DECODE_ENABLE_SERIAL_PORT3 BIT(9)
71 #define DECODE_ENABLE_SERIAL_PORT4 BIT(10)
72 #define DECODE_ENABLE_SERIAL_PORT5 BIT(11)
73 #define DECODE_ENABLE_SERIAL_PORT6 BIT(12)
74 #define DECODE_ENABLE_SERIAL_PORT7 BIT(13)
75 #define DECODE_ENABLE_AUDIO_PORT0 BIT(14)
76 #define DECODE_ENABLE_AUDIO_PORT1 BIT(15)
77 #define DECODE_ENABLE_AUDIO_PORT2 BIT(16)
78 #define DECODE_ENABLE_AUDIO_PORT3 BIT(17)
79 #define DECODE_ENABLE_MIDI_PORT0 BIT(18)
80 #define DECODE_ENABLE_MIDI_PORT1 BIT(19)
81 #define DECODE_ENABLE_MIDI_PORT2 BIT(20)
82 #define DECODE_ENABLE_MIDI_PORT3 BIT(21)
83 #define DECODE_ENABLE_MSS_PORT0 BIT(22)
84 #define DECODE_ENABLE_MSS_PORT1 BIT(23)
85 #define DECODE_ENABLE_MSS_PORT2 BIT(24)
86 #define DECODE_ENABLE_MSS_PORT3 BIT(25)
87 #define DECODE_ENABLE_FDC_PORT0 BIT(26)
88 #define DECODE_ENABLE_FDC_PORT1 BIT(27)
89 #define DECODE_ENABLE_GAME_PORT BIT(28)
90 #define DECODE_ENABLE_KBC_PORT BIT(29)
91 #define DECODE_ENABLE_ACPIUC_PORT BIT(30)
92 #define DECODE_ENABLE_ADLIB_PORT BIT(31)
93 
94 #define LPC_IO_OR_MEM_DECODE_ENABLE 0x48
95 #define LPC_WIDEIO2_ENABLE BIT(25)
96 #define LPC_WIDEIO1_ENABLE BIT(24)
97 #define LPC_WIDEIO0_ENABLE BIT(2)
98 
99 #define LPC_WIDEIO_GENERIC_PORT 0x64
100 
101 #define LPC_ALT_WIDEIO_RANGE_ENABLE 0x74
102 #define LPC_ALT_WIDEIO2_ENABLE BIT(3)
103 #define LPC_ALT_WIDEIO1_ENABLE BIT(2)
104 #define LPC_ALT_WIDEIO0_ENABLE BIT(0)
105 
106 #define LPC_TRUSTED_PLATFORM_MODULE 0x7c
107 #define TPM_12_EN BIT(0)
108 #define TPM_LEGACY_EN BIT(2)
109 
110 #define LPC_WIDEIO2_GENERIC_PORT 0x90
111 
112 #define SPI_CNTRL0 0x00
113 #define SPI_READ_MODE_MASK (BIT(30) | BIT(29) | BIT(18))
114 /* Nominal is 16.7MHz on older devices, 33MHz on newer */
115 #define SPI_READ_MODE_NOM 0x00000000
116 #define SPI_READ_MODE_DUAL112 ( BIT(29) )
117 #define SPI_READ_MODE_QUAD114 ( BIT(29) | BIT(18))
118 #define SPI_READ_MODE_DUAL122 (BIT(30) )
119 #define SPI_READ_MODE_QUAD144 (BIT(30) | BIT(18))
120 #define SPI_READ_MODE_NORMAL66 (BIT(30) | BIT(29) )
121 /* Nominal and SPI_READ_MODE_FAST_HUDSON1 are the only valid choices for H1 */
122 #define SPI_READ_MODE_FAST_HUDSON1 ( BIT(18))
123 #define SPI_READ_MODE_FAST (BIT(30) | BIT(29) | BIT(18))
124 #define SPI_ARB_ENABLE BIT(19)
125 
126 #define SPI_CNTRL1 0x0c
127 /* Use SPI_SPEED_16M-SPI_SPEED_66M below for hudson and bolton */
128 #define SPI_CNTRL1_SPEED_MASK (BIT(15) | BIT(14) | BIT(13) | BIT(12))
129 #define SPI_NORM_SPEED_SH 12
130 #define SPI_FAST_SPEED_SH 8
131 
132 #define SPI100_ENABLE 0x20
133 #define SPI_USE_SPI100 BIT(0)
134 
135 #define SPI100_SPEED_CONFIG 0x22
136 #define SPI_SPEED_66M (0x0)
137 #define SPI_SPEED_33M ( BIT(0))
138 #define SPI_SPEED_22M ( BIT(1) )
139 #define SPI_SPEED_16M ( BIT(1) | BIT(0))
140 #define SPI_SPEED_100M (BIT(2) )
141 #define SPI_SPEED_800K (BIT(2) | BIT(0))
142 #define SPI_NORM_SPEED_NEW_SH 12
143 #define SPI_FAST_SPEED_NEW_SH 8
144 #define SPI_ALT_SPEED_NEW_SH 4
145 #define SPI_TPM_SPEED_NEW_SH 0
146 
147 #define SPI100_HOST_PREF_CONFIG 0x2c
148 #define SPI_RD4DW_EN_HOST BIT(15)
149 
150 static inline int hudson_sata_enable(void)
151 {
152  /* True if IDE or AHCI. */
153  return (CONFIG_HUDSON_SATA_MODE == 0) || (CONFIG_HUDSON_SATA_MODE == 2);
154 }
155 
156 static inline int hudson_ide_enable(void)
157 {
158  /* True if IDE or LEGACY IDE. */
159  return (CONFIG_HUDSON_SATA_MODE == 0) || (CONFIG_HUDSON_SATA_MODE == 3);
160 }
161 
162 void hudson_lpc_port80(void);
163 void hudson_lpc_decode(void);
164 void hudson_pci_port80(void);
165 void hudson_clk_output_48Mhz(void);
166 void hudson_read_mode(u32 mode);
167 void hudson_set_spi100(u16 norm, u16 fast, u16 alt, u16 tpm);
168 void hudson_disable_4dw_burst(void);
169 void hudson_set_readspeed(u16 norm, u16 fast);
172 void hudson_tpm_decode_spi(void);
173 
174 void hudson_enable(struct device *dev);
175 void s3_resume_init_data(void *FchParams);
176 
177 #endif /* HUDSON_H */
void hudson_enable(struct device *dev)
Definition: hudson.c:39
void hudson_pci_port80(void)
Definition: early_setup.c:12
void hudson_clk_output_48Mhz(void)
Definition: early_setup.c:179
void hudson_lpc_decode(void)
Definition: early_setup.c:68
void hudson_lpc_port80(void)
Definition: early_setup.c:57
void hudson_read_mode(u32 mode)
Definition: early_setup.c:241
void hudson_set_spi100(u16 norm, u16 fast, u16 alt, u16 tpm)
Definition: early_setup.c:210
static int hudson_sata_enable(void)
Definition: hudson.h:150
void s3_resume_init_data(void *FchParams)
static int hudson_ide_enable(void)
Definition: hudson.h:156
void hudson_disable_4dw_burst(void)
Definition: early_setup.c:222
void hudson_tpm_decode_spi(void)
Definition: early_setup.c:249
void lpc_wideio_16_window(uint16_t base)
Definition: early_setup.c:173
void hudson_set_readspeed(u16 norm, u16 fast)
Definition: early_setup.c:231
void lpc_wideio_512_window(uint16_t base)
Definition: early_setup.c:167
uintptr_t base
Definition: uart.c:17
unsigned short uint16_t
Definition: stdint.h:11
uint32_t u32
Definition: stdint.h:51
uint16_t u16
Definition: stdint.h:48
Definition: device.h:107