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