blob: 4f2f80dff50969889a2f6b08a3b757d44e3f9c1b [file] [log] [blame]
Patrick Georgi70517072020-05-10 18:47:05 +02001/* SPDX-License-Identifier: BSD-3-Clause */
Aaron Durbin76c37002012-10-30 09:03:43 -05002
3#ifndef PEI_DATA_H
4#define PEI_DATA_H
5
Elyes HAOUASc4e41932018-11-01 11:29:50 +01006#include <stdint.h>
7
Aaron Durbin76c37002012-10-30 09:03:43 -05008typedef void (*tx_byte_func)(unsigned char byte);
Stefan Reinauer190688c2013-08-13 11:18:42 -07009#define PEI_VERSION 15
Aaron Durbinb1c25e72013-05-23 15:57:46 -050010
Angel Pons9a094c42021-02-11 14:24:03 +010011#define SPD_LEN 256
12
Aaron Durbinb1c25e72013-05-23 15:57:46 -050013#define MAX_USB2_PORTS 16
14#define MAX_USB3_PORTS 16
15#define USB_OC_PIN_SKIP 8
16
Duncan Lauriebcfcfa42013-06-03 10:41:12 -070017enum usb2_port_location {
18 USB_PORT_BACK_PANEL = 0,
19 USB_PORT_FRONT_PANEL,
20 USB_PORT_DOCK,
21 USB_PORT_MINI_PCIE,
22 USB_PORT_FLEX,
23 USB_PORT_INTERNAL,
24 USB_PORT_SKIP
25};
26
27/* Usb Port Length:
28 * [16:4] = length in inches in octal format
29 * [3:0] = decimal point
30 */
Aaron Durbinb1c25e72013-05-23 15:57:46 -050031struct usb2_port_setting {
32 uint16_t length;
33 uint8_t enable;
34 uint8_t over_current_pin;
Duncan Lauriebcfcfa42013-06-03 10:41:12 -070035 uint8_t location;
Stefan Reinauer6a001132017-07-13 02:20:27 +020036} __packed;
Aaron Durbinb1c25e72013-05-23 15:57:46 -050037
38struct usb3_port_setting {
39 uint8_t enable;
40 uint8_t over_current_pin;
Stefan Reinauer6a001132017-07-13 02:20:27 +020041} __packed;
Aaron Durbin8256a9b2012-11-29 17:18:53 -060042
Aaron Durbin76c37002012-10-30 09:03:43 -050043struct pei_data
44{
45 uint32_t pei_version;
46 uint32_t mchbar;
47 uint32_t dmibar;
48 uint32_t epbar;
49 uint32_t pciexbar;
50 uint16_t smbusbar;
Angel Ponse8abb5a2020-04-15 15:01:53 +020051 /* Unused by HSW MRC, but changes to the memory layout of this struct break the ABI */
52 uint32_t _unused_wdbbar;
53 uint32_t _unused_wdbsize;
Aaron Durbin76c37002012-10-30 09:03:43 -050054 uint32_t hpet_address;
55 uint32_t rcba;
56 uint32_t pmbase;
57 uint32_t gpiobase;
Aaron Durbin8256a9b2012-11-29 17:18:53 -060058 uint32_t temp_mmio_base;
Angel Pons6ba3a072020-04-24 17:42:19 +020059 /* System type: 0 => Mobile, 1 => Desktop/Server, 5 => ULT, Others => Reserved */
60 uint32_t system_type;
Aaron Durbin76c37002012-10-30 09:03:43 -050061 uint32_t tseg_size;
62 uint8_t spd_addresses[4];
Aaron Durbin76c37002012-10-30 09:03:43 -050063 int boot_mode;
64 int ec_present;
Stefan Reinauer1cc34162013-06-27 15:59:18 -070065 int gbe_enable;
Aaron Durbin76c37002012-10-30 09:03:43 -050066 // 0 = leave channel enabled
67 // 1 = disable dimm 0 on channel
68 // 2 = disable dimm 1 on channel
69 // 3 = disable dimm 0+1 on channel
70 int dimm_channel0_disabled;
71 int dimm_channel1_disabled;
Duncan Lauriebcfcfa42013-06-03 10:41:12 -070072 /* Enable 2x Refresh Mode */
73 int ddr_refresh_2x;
Stefan Reinauer190688c2013-08-13 11:18:42 -070074 int dq_pins_interleaved;
Aaron Durbin76c37002012-10-30 09:03:43 -050075 /* Data read from flash and passed into MRC */
76 unsigned char *mrc_input;
77 unsigned int mrc_input_len;
78 /* Data from MRC that should be saved to flash */
79 unsigned char *mrc_output;
80 unsigned int mrc_output_len;
Angel Pons1db5bc72020-01-15 00:49:03 +010081 /* Max frequency to run DDR3 at. Can be one of four values: 800, 1067, 1333, 1600 */
Aaron Durbin76c37002012-10-30 09:03:43 -050082 uint32_t max_ddr3_freq;
Duncan Laurie289bac62013-07-30 15:41:42 -070083 /* Route all USB ports to XHCI controller in resume path */
84 int usb_xhci_on_resume;
Aaron Durbinb1c25e72013-05-23 15:57:46 -050085 struct usb2_port_setting usb2_ports[MAX_USB2_PORTS];
86 struct usb3_port_setting usb3_ports[MAX_USB3_PORTS];
Angel Pons9a094c42021-02-11 14:24:03 +010087 uint8_t spd_data[4][SPD_LEN];
Aaron Durbin76c37002012-10-30 09:03:43 -050088 tx_byte_func tx_byte;
Stefan Reinauer6a001132017-07-13 02:20:27 +020089} __packed;
Aaron Durbin76c37002012-10-30 09:03:43 -050090
91#endif