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