blob: 23153a040fa960e74a8c2f2ab6ae23c87b6e5416 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0 */
Simon Glasse7d04d82016-03-11 22:07:19 -07002/*
3 * Copyright (c) 2016 Google, Inc
Simon Glasse7d04d82016-03-11 22:07:19 -07004 */
5
6#ifndef __ASM_ARCH_PCH_H
7#define __ASM_ARCH_PCH_H
8
9/* CPU bus clock is fixed at 100MHz */
10#define CPU_BCLK 100
11
12#define PMBASE 0x40
13#define ACPI_CNTL 0x44
14#define ACPI_EN (1 << 7)
15
16#define GPIO_BASE 0x48 /* LPC GPIO Base Address Register */
17#define GPIO_CNTL 0x4C /* LPC GPIO Control Register */
18#define GPIO_EN (1 << 4)
19
20#define PCIEXBAR 0x60
21
22#define PCH_DEV_LPC PCI_BDF(0, 0x1f, 0)
23
24/* RCB registers */
25#define OIC 0x31fe /* 16bit */
26#define HPTC 0x3404 /* 32bit */
27#define FD 0x3418 /* 32bit */
28
29/* Function Disable 1 RCBA 0x3418 */
30#define PCH_DISABLE_ALWAYS (1 << 0)
31
32/* PM registers */
33#define TCO1_CNT 0x60
34#define TCO_TMR_HLT (1 << 11)
35
36
37/* Device 0:0.0 PCI configuration space */
38
39#define EPBAR 0x40
40#define MCHBAR 0x48
41#define PCIEXBAR 0x60
42#define DMIBAR 0x68
43#define GGC 0x50 /* GMCH Graphics Control */
44#define DEVEN 0x54 /* Device Enable */
45#define DEVEN_D7EN (1 << 14)
46#define DEVEN_D4EN (1 << 7)
47#define DEVEN_D3EN (1 << 5)
48#define DEVEN_D2EN (1 << 4)
49#define DEVEN_D1F0EN (1 << 3)
50#define DEVEN_D1F1EN (1 << 2)
51#define DEVEN_D1F2EN (1 << 1)
52#define DEVEN_D0EN (1 << 0)
53#define DPR 0x5c
54#define DPR_EPM (1 << 2)
55#define DPR_PRS (1 << 1)
56#define DPR_SIZE_MASK 0xff0
57
58#define MCHBAR_PEI_VERSION 0x5034
59#define BIOS_RESET_CPL 0x5da8
60#define EDRAMBAR 0x5408
61#define MCH_PAIR 0x5418
62#define GDXCBAR 0x5420
63
64#define PAM0 0x80
65#define PAM1 0x81
66#define PAM2 0x82
67#define PAM3 0x83
68#define PAM4 0x84
69#define PAM5 0x85
70#define PAM6 0x86
71
72/* PCODE MMIO communications live in the MCHBAR. */
73#define BIOS_MAILBOX_INTERFACE 0x5da4
74#define MAILBOX_RUN_BUSY (1 << 31)
75#define MAILBOX_BIOS_CMD_READ_PCS 1
76#define MAILBOX_BIOS_CMD_WRITE_PCS 2
77#define MAILBOX_BIOS_CMD_READ_CALIBRATION 0x509
78#define MAILBOX_BIOS_CMD_FSM_MEASURE_INTVL 0x909
79#define MAILBOX_BIOS_CMD_READ_PCH_POWER 0xa
80#define MAILBOX_BIOS_CMD_READ_PCH_POWER_EXT 0xb
81#define MAILBOX_BIOS_CMD_READ_C9C10_VOLTAGE 0x26
82#define MAILBOX_BIOS_CMD_WRITE_C9C10_VOLTAGE 0x27
83/* Errors are returned back in bits 7:0. */
84#define MAILBOX_BIOS_ERROR_NONE 0
85#define MAILBOX_BIOS_ERROR_INVALID_COMMAND 1
86#define MAILBOX_BIOS_ERROR_TIMEOUT 2
87#define MAILBOX_BIOS_ERROR_ILLEGAL_DATA 3
88#define MAILBOX_BIOS_ERROR_RESERVED 4
89#define MAILBOX_BIOS_ERROR_ILLEGAL_VR_ID 5
90#define MAILBOX_BIOS_ERROR_VR_INTERFACE_LOCKED 6
91#define MAILBOX_BIOS_ERROR_VR_ERROR 7
92/* Data is passed through bits 31:0 of the data register. */
93#define BIOS_MAILBOX_DATA 0x5da0
94
95/* SATA IOBP Registers */
96#define SATA_IOBP_SP0_SECRT88 0xea002688
97#define SATA_IOBP_SP1_SECRT88 0xea002488
98
99#define SATA_SECRT88_VADJ_MASK 0xff
100#define SATA_SECRT88_VADJ_SHIFT 16
101
102#define SATA_IOBP_SP0DTLE_DATA 0xea002550
103#define SATA_IOBP_SP0DTLE_EDGE 0xea002554
104#define SATA_IOBP_SP1DTLE_DATA 0xea002750
105#define SATA_IOBP_SP1DTLE_EDGE 0xea002754
106
107#define SATA_DTLE_MASK 0xF
108#define SATA_DTLE_DATA_SHIFT 24
109#define SATA_DTLE_EDGE_SHIFT 16
110
111/* Power Management */
Simon Glass398336e2019-02-16 20:25:01 -0700112#define PCH_PCS 0x84
113#define PCH_PCS_PS_D3HOT 3
114
Simon Glasse7d04d82016-03-11 22:07:19 -0700115#define GEN_PMCON_1 0xa0
116#define SMI_LOCK (1 << 4)
117#define GEN_PMCON_2 0xa2
118#define SYSTEM_RESET_STS (1 << 4)
119#define THERMTRIP_STS (1 << 3)
120#define SYSPWR_FLR (1 << 1)
121#define PWROK_FLR (1 << 0)
122#define GEN_PMCON_3 0xa4
123#define SUS_PWR_FLR (1 << 14)
124#define GEN_RST_STS (1 << 9)
125#define RTC_BATTERY_DEAD (1 << 2)
126#define PWR_FLR (1 << 1)
127#define SLEEP_AFTER_POWER_FAIL (1 << 0)
128#define GEN_PMCON_LOCK 0xa6
129#define SLP_STR_POL_LOCK (1 << 2)
130#define ACPI_BASE_LOCK (1 << 1)
131#define PMIR 0xac
132#define PMIR_CF9LOCK (1 << 31)
133#define PMIR_CF9GR (1 << 20)
134
135/* Broadwell PCH (Wildcat Point) */
136#define PCH_WPT_HSW_U_SAMPLE 0x9cc1
137#define PCH_WPT_BDW_U_SAMPLE 0x9cc2
138#define PCH_WPT_BDW_U_PREMIUM 0x9cc3
139#define PCH_WPT_BDW_U_BASE 0x9cc5
140#define PCH_WPT_BDW_Y_SAMPLE 0x9cc6
141#define PCH_WPT_BDW_Y_PREMIUM 0x9cc7
142#define PCH_WPT_BDW_Y_BASE 0x9cc9
143#define PCH_WPT_BDW_H 0x9ccb
144
145#define SA_IGD_OPROM_VENDEV 0x80860406
146
147/* Dynamically determine if the part is ULT */
148bool cpu_is_ult(void);
149
150u32 pch_iobp_read(u32 address);
151int pch_iobp_write(u32 address, u32 data);
152int pch_iobp_update(u32 address, u32 andvalue, u32 orvalue);
153int pch_iobp_exec(u32 addr, u16 op_dcode, u8 route_id, u32 *data, u8 *resp);
154
155#endif