1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */ 265dd74a6SSimon Glass /* 365dd74a6SSimon Glass * Copyright (c) 2011, Google Inc. 465dd74a6SSimon Glass */ 565dd74a6SSimon Glass 665dd74a6SSimon Glass #ifndef ASM_ARCH_PEI_DATA_H 765dd74a6SSimon Glass #define ASM_ARCH_PEI_DATA_H 865dd74a6SSimon Glass 9e6126a58SMasahiro Yamada #include <linux/linkage.h> 10e6126a58SMasahiro Yamada 1165dd74a6SSimon Glass struct pch_usb3_controller_settings { 1265dd74a6SSimon Glass /* 0: Disable, 1: Enable, 2: Auto, 3: Smart Auto */ 1365dd74a6SSimon Glass uint16_t mode; 1465dd74a6SSimon Glass /* 4 bit mask, 1: switchable, 0: not switchable */ 1565dd74a6SSimon Glass uint16_t hs_port_switch_mask; 1665dd74a6SSimon Glass /* 0: No xHCI preOS driver, 1: xHCI preOS driver */ 1765dd74a6SSimon Glass uint16_t preboot_support; 1865dd74a6SSimon Glass /* 0: Disable, 1: Enable */ 1965dd74a6SSimon Glass uint16_t xhci_streams; 2065dd74a6SSimon Glass }; 2165dd74a6SSimon Glass 2265dd74a6SSimon Glass typedef asmlinkage void (*tx_byte_func)(unsigned char byte); 2365dd74a6SSimon Glass 2465dd74a6SSimon Glass #define PEI_VERSION 6 2565dd74a6SSimon Glass 2665dd74a6SSimon Glass struct __packed pei_data { 2765dd74a6SSimon Glass uint32_t pei_version; 2865dd74a6SSimon Glass uint32_t mchbar; 2965dd74a6SSimon Glass uint32_t dmibar; 3065dd74a6SSimon Glass uint32_t epbar; 3165dd74a6SSimon Glass uint32_t pciexbar; 3265dd74a6SSimon Glass uint16_t smbusbar; 3365dd74a6SSimon Glass uint32_t wdbbar; 3465dd74a6SSimon Glass uint32_t wdbsize; 3565dd74a6SSimon Glass uint32_t hpet_address; 3665dd74a6SSimon Glass uint32_t rcba; 3765dd74a6SSimon Glass uint32_t pmbase; 3865dd74a6SSimon Glass uint32_t gpiobase; 3965dd74a6SSimon Glass uint32_t thermalbase; 4065dd74a6SSimon Glass uint32_t system_type; /* 0 Mobile, 1 Desktop/Server */ 4165dd74a6SSimon Glass uint32_t tseg_size; 4265dd74a6SSimon Glass uint8_t spd_addresses[4]; 4365dd74a6SSimon Glass uint8_t ts_addresses[4]; 4465dd74a6SSimon Glass int boot_mode; 4565dd74a6SSimon Glass int ec_present; 4665dd74a6SSimon Glass int gbe_enable; 4765dd74a6SSimon Glass /* 4865dd74a6SSimon Glass * 0 = leave channel enabled 4965dd74a6SSimon Glass * 1 = disable dimm 0 on channel 5065dd74a6SSimon Glass * 2 = disable dimm 1 on channel 5165dd74a6SSimon Glass * 3 = disable dimm 0+1 on channel 5265dd74a6SSimon Glass */ 5365dd74a6SSimon Glass int dimm_channel0_disabled; 5465dd74a6SSimon Glass int dimm_channel1_disabled; 5565dd74a6SSimon Glass /* Seed values saved in CMOS */ 5665dd74a6SSimon Glass uint32_t scrambler_seed; 5765dd74a6SSimon Glass uint32_t scrambler_seed_s3; 5865dd74a6SSimon Glass /* Data read from flash and passed into MRC */ 5965dd74a6SSimon Glass unsigned char *mrc_input; 6065dd74a6SSimon Glass unsigned int mrc_input_len; 6165dd74a6SSimon Glass /* Data from MRC that should be saved to flash */ 6265dd74a6SSimon Glass unsigned char *mrc_output; 6365dd74a6SSimon Glass unsigned int mrc_output_len; 6465dd74a6SSimon Glass /* 6565dd74a6SSimon Glass * Max frequency DDR3 could be ran at. Could be one of four values: 6665dd74a6SSimon Glass * 800, 1067, 1333, 1600 6765dd74a6SSimon Glass */ 6865dd74a6SSimon Glass uint32_t max_ddr3_freq; 6965dd74a6SSimon Glass /* 7065dd74a6SSimon Glass * USB Port Configuration: 7165dd74a6SSimon Glass * [0] = enable 7265dd74a6SSimon Glass * [1] = overcurrent pin 7365dd74a6SSimon Glass * [2] = length 7465dd74a6SSimon Glass * 7565dd74a6SSimon Glass * Ports 0-7 can be mapped to OC0-OC3 7665dd74a6SSimon Glass * Ports 8-13 can be mapped to OC4-OC7 7765dd74a6SSimon Glass * 7865dd74a6SSimon Glass * Port Length 7965dd74a6SSimon Glass * MOBILE: 8065dd74a6SSimon Glass * < 0x050 = Setting 1 (back panel, 1-5in, lowest tx amplitude) 8165dd74a6SSimon Glass * < 0x140 = Setting 2 (back panel, 5-14in, highest tx amplitude) 8265dd74a6SSimon Glass * DESKTOP: 8365dd74a6SSimon Glass * < 0x080 = Setting 1 (front/back panel, <8in, lowest tx amplitude) 8465dd74a6SSimon Glass * < 0x130 = Setting 2 (back panel, 8-13in, higher tx amplitude) 8565dd74a6SSimon Glass * < 0x150 = Setting 3 (back panel, 13-15in, higest tx amplitude) 8665dd74a6SSimon Glass */ 8765dd74a6SSimon Glass uint16_t usb_port_config[16][3]; 8865dd74a6SSimon Glass /* See the usb3 struct above for details */ 8965dd74a6SSimon Glass struct pch_usb3_controller_settings usb3; 9065dd74a6SSimon Glass /* 9165dd74a6SSimon Glass * SPD data array for onboard RAM. Specify address 0xf0, 9265dd74a6SSimon Glass * 0xf1, 0xf2, 0xf3 to index one of the 4 slots in 9365dd74a6SSimon Glass * spd_address for a given "DIMM". 9465dd74a6SSimon Glass */ 9565dd74a6SSimon Glass uint8_t spd_data[4][256]; 9665dd74a6SSimon Glass tx_byte_func tx_byte; 9765dd74a6SSimon Glass int ddr3lv_support; 9865dd74a6SSimon Glass /* 9965dd74a6SSimon Glass * pcie_init needs to be set to 1 to have the system agent initialise 10065dd74a6SSimon Glass * PCIe. Note: This should only be required if your system has Gen3 10165dd74a6SSimon Glass * devices and it will increase your boot time by at least 100ms. 10265dd74a6SSimon Glass */ 10365dd74a6SSimon Glass int pcie_init; 10465dd74a6SSimon Glass /* 10565dd74a6SSimon Glass * N mode functionality. Leave this setting at 0. 10665dd74a6SSimon Glass * 0 Auto 10765dd74a6SSimon Glass * 1 1N 10865dd74a6SSimon Glass * 2 2N 10965dd74a6SSimon Glass */ 11065dd74a6SSimon Glass int nmode; 11165dd74a6SSimon Glass /* 11265dd74a6SSimon Glass * DDR refresh rate config. JEDEC Standard No.21-C Annex K allows 11365dd74a6SSimon Glass * for DIMM SPD data to specify whether double-rate is required for 11465dd74a6SSimon Glass * extended operating temperature range. 11565dd74a6SSimon Glass * 0 Enable double rate based upon temperature thresholds 11665dd74a6SSimon Glass * 1 Normal rate 11765dd74a6SSimon Glass * 2 Always enable double rate 11865dd74a6SSimon Glass */ 11965dd74a6SSimon Glass int ddr_refresh_rate_config; 12065dd74a6SSimon Glass }; 12165dd74a6SSimon Glass 12265dd74a6SSimon Glass #endif 123