Patrick Georgi | 7051707 | 2020-05-10 18:47:05 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: BSD-3-Clause */ |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 2 | |
| 3 | #ifndef PEI_DATA_H |
| 4 | #define PEI_DATA_H |
| 5 | |
Elyes HAOUAS | c4e4193 | 2018-11-01 11:29:50 +0100 | [diff] [blame] | 6 | #include <stdint.h> |
| 7 | |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 8 | typedef void (*tx_byte_func)(unsigned char byte); |
Stefan Reinauer | 190688c | 2013-08-13 11:18:42 -0700 | [diff] [blame] | 9 | #define PEI_VERSION 15 |
Aaron Durbin | b1c25e7 | 2013-05-23 15:57:46 -0500 | [diff] [blame] | 10 | |
Angel Pons | 9a094c4 | 2021-02-11 14:24:03 +0100 | [diff] [blame^] | 11 | #define SPD_LEN 256 |
| 12 | |
Aaron Durbin | b1c25e7 | 2013-05-23 15:57:46 -0500 | [diff] [blame] | 13 | #define MAX_USB2_PORTS 16 |
| 14 | #define MAX_USB3_PORTS 16 |
| 15 | #define USB_OC_PIN_SKIP 8 |
| 16 | |
Duncan Laurie | bcfcfa4 | 2013-06-03 10:41:12 -0700 | [diff] [blame] | 17 | enum 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 Durbin | b1c25e7 | 2013-05-23 15:57:46 -0500 | [diff] [blame] | 31 | struct usb2_port_setting { |
| 32 | uint16_t length; |
| 33 | uint8_t enable; |
| 34 | uint8_t over_current_pin; |
Duncan Laurie | bcfcfa4 | 2013-06-03 10:41:12 -0700 | [diff] [blame] | 35 | uint8_t location; |
Stefan Reinauer | 6a00113 | 2017-07-13 02:20:27 +0200 | [diff] [blame] | 36 | } __packed; |
Aaron Durbin | b1c25e7 | 2013-05-23 15:57:46 -0500 | [diff] [blame] | 37 | |
| 38 | struct usb3_port_setting { |
| 39 | uint8_t enable; |
| 40 | uint8_t over_current_pin; |
Stefan Reinauer | 6a00113 | 2017-07-13 02:20:27 +0200 | [diff] [blame] | 41 | } __packed; |
Aaron Durbin | 8256a9b | 2012-11-29 17:18:53 -0600 | [diff] [blame] | 42 | |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 43 | struct 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 Pons | e8abb5a | 2020-04-15 15:01:53 +0200 | [diff] [blame] | 51 | /* 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 Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 54 | uint32_t hpet_address; |
| 55 | uint32_t rcba; |
| 56 | uint32_t pmbase; |
| 57 | uint32_t gpiobase; |
Aaron Durbin | 8256a9b | 2012-11-29 17:18:53 -0600 | [diff] [blame] | 58 | uint32_t temp_mmio_base; |
Angel Pons | 6ba3a07 | 2020-04-24 17:42:19 +0200 | [diff] [blame] | 59 | /* System type: 0 => Mobile, 1 => Desktop/Server, 5 => ULT, Others => Reserved */ |
| 60 | uint32_t system_type; |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 61 | uint32_t tseg_size; |
| 62 | uint8_t spd_addresses[4]; |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 63 | int boot_mode; |
| 64 | int ec_present; |
Stefan Reinauer | 1cc3416 | 2013-06-27 15:59:18 -0700 | [diff] [blame] | 65 | int gbe_enable; |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 66 | // 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 Laurie | bcfcfa4 | 2013-06-03 10:41:12 -0700 | [diff] [blame] | 72 | /* Enable 2x Refresh Mode */ |
| 73 | int ddr_refresh_2x; |
Stefan Reinauer | 190688c | 2013-08-13 11:18:42 -0700 | [diff] [blame] | 74 | int dq_pins_interleaved; |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 75 | /* 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 Pons | 1db5bc7 | 2020-01-15 00:49:03 +0100 | [diff] [blame] | 81 | /* Max frequency to run DDR3 at. Can be one of four values: 800, 1067, 1333, 1600 */ |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 82 | uint32_t max_ddr3_freq; |
Duncan Laurie | 289bac6 | 2013-07-30 15:41:42 -0700 | [diff] [blame] | 83 | /* Route all USB ports to XHCI controller in resume path */ |
| 84 | int usb_xhci_on_resume; |
Aaron Durbin | b1c25e7 | 2013-05-23 15:57:46 -0500 | [diff] [blame] | 85 | struct usb2_port_setting usb2_ports[MAX_USB2_PORTS]; |
| 86 | struct usb3_port_setting usb3_ports[MAX_USB3_PORTS]; |
Angel Pons | 9a094c4 | 2021-02-11 14:24:03 +0100 | [diff] [blame^] | 87 | uint8_t spd_data[4][SPD_LEN]; |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 88 | tx_byte_func tx_byte; |
Stefan Reinauer | 6a00113 | 2017-07-13 02:20:27 +0200 | [diff] [blame] | 89 | } __packed; |
Aaron Durbin | 76c3700 | 2012-10-30 09:03:43 -0500 | [diff] [blame] | 90 | |
| 91 | #endif |