blob: efbbc7f8c7143f0af7cd1e0c71d3ea48969391dd [file] [log] [blame]
Angel Ponsd28443e2020-04-05 13:22:44 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06002
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06003#include <stdint.h>
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06004#include <string.h>
Angel Pons77ef99b2021-02-11 14:25:44 +01005#include <ec/google/chromeec/ec.h>
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06006#include <northbridge/intel/haswell/raminit.h>
7#include <southbridge/intel/lynxpoint/pch.h>
8#include <southbridge/intel/lynxpoint/lp_gpio.h>
Matt DeVillierc12e5ae2016-11-27 02:19:02 -06009#include "../../onboard.h"
10#include "../../variant.h"
11
Angel Pons90ae0892021-03-12 17:00:52 +010012unsigned int variant_get_spd_index(void)
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060013{
14 const int gpio_vector[] = {13, 9, 47, -1};
Angel Pons90ae0892021-03-12 17:00:52 +010015 return get_gpios(gpio_vector);
16}
Angel Pons77ef99b2021-02-11 14:25:44 +010017
Angel Pons90ae0892021-03-12 17:00:52 +010018bool variant_is_dual_channel(const unsigned int spd_index)
19{
Karthikeyan Ramasubramanianc80ff842018-09-17 16:19:34 -060020 uint32_t board_version = PEPPY_BOARD_VERSION_PROTO;
Karthikeyan Ramasubramanianc80ff842018-09-17 16:19:34 -060021 google_chromeec_get_board_version(&board_version);
22 switch (board_version) {
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060023 case PEPPY_BOARD_VERSION_PROTO:
24 /* Index 0 is 2GB config with CH0 only. */
Angel Pons90ae0892021-03-12 17:00:52 +010025 return spd_index != 0;
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060026
27 case PEPPY_BOARD_VERSION_EVT:
28 default:
Matt DeVillierf41eea42019-12-26 20:10:32 -060029 /* Index 0-3 are 4GB config with both CH0 and CH1.
Angel Pons90ae0892021-03-12 17:00:52 +010030 Index 4-7 are 2GB config with CH0 only. */
31 return spd_index <= 3;
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060032 }
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060033}
34
Angel Ponsd0f971f2021-03-12 14:20:05 +010035const struct usb2_port_config mainboard_usb2_ports[MAX_USB2_PORTS] = {
Angel Ponsa3c6ed02021-02-11 13:59:12 +010036 /* Length, Enable, OCn#, Location */
37 { 0x0150, 1, USB_OC_PIN_SKIP, /* P0: LTE */
38 USB_PORT_MINI_PCIE },
39 { 0x0040, 1, 0, /* P1: Port A, CN10 */
40 USB_PORT_BACK_PANEL },
41 { 0x0080, 1, USB_OC_PIN_SKIP, /* P2: CCD */
42 USB_PORT_INTERNAL },
43 { 0x0040, 1, USB_OC_PIN_SKIP, /* P3: BT */
44 USB_PORT_MINI_PCIE },
45 { 0x0040, 1, 2, /* P4: Port B, CN6 */
46 USB_PORT_BACK_PANEL },
47 { 0x0000, 0, USB_OC_PIN_SKIP, /* P5: EMPTY */
48 USB_PORT_SKIP },
49 { 0x0150, 1, USB_OC_PIN_SKIP, /* P6: SD Card */
50 USB_PORT_FLEX },
51 { 0x0000, 0, USB_OC_PIN_SKIP, /* P7: EMPTY */
52 USB_PORT_SKIP },
53};
Matt DeVillierc12e5ae2016-11-27 02:19:02 -060054
Angel Ponsd0f971f2021-03-12 14:20:05 +010055const struct usb3_port_config mainboard_usb3_ports[MAX_USB3_PORTS] = {
Angel Ponsa3c6ed02021-02-11 13:59:12 +010056 /* Enable, OCn# */
57 { 1, 0 }, /* P1; Port A, CN6 */
58 { 0, USB_OC_PIN_SKIP }, /* P2; */
59 { 0, USB_OC_PIN_SKIP }, /* P3; */
60 { 0, USB_OC_PIN_SKIP }, /* P4; */
61};