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