ec/it*: Add ESPI definitions

This commit is contained in:
Jeremy Soller 2020-12-29 09:58:50 -07:00 committed by Jeremy Soller
parent 87e16205d6
commit b0c196d4b9
4 changed files with 207 additions and 0 deletions

61
src/ec/it5570e/espi.c Normal file
View File

@ -0,0 +1,61 @@
#include <common/debug.h>
#include <ec/espi.h>
// Not all wires are defined or implemented
// Index 2 - AP to EC
struct VirtualWire __code VW_SLP_S3_N = VIRTUAL_WIRE(2, 0);
struct VirtualWire __code VW_SLP_S4_N = VIRTUAL_WIRE(2, 1);
struct VirtualWire __code VW_SLP_S5_N = VIRTUAL_WIRE(2, 2);
// Index 3 - AP to EC
struct VirtualWire __code VW_SUS_STAT_N = VIRTUAL_WIRE(3, 0);
struct VirtualWire __code VW_PLTRST_N = VIRTUAL_WIRE(3, 1);
struct VirtualWire __code VW_OOB_RST_WARN = VIRTUAL_WIRE(3, 2);
// Index 4 - EC to AP
struct VirtualWire __code VW_OOB_RST_ACK = VIRTUAL_WIRE(4, 0);
struct VirtualWire __code VW_WAKE_N = VIRTUAL_WIRE(4, 2);
struct VirtualWire __code VW_PME_N = VIRTUAL_WIRE(4, 3);
// Index 5 - EC to AP
struct VirtualWire __code VW_BOOT_LOAD_DONE = VIRTUAL_WIRE(5, 0);
struct VirtualWire __code VW_ERROR_FATAL = VIRTUAL_WIRE(5, 1);
struct VirtualWire __code VW_ERROR_NONFATAL = VIRTUAL_WIRE(5, 2);
struct VirtualWire __code VW_BOOT_LOAD_STATUS = VIRTUAL_WIRE(5, 3);
// Index 6 - EC to AP
struct VirtualWire __code VW_SCI_N = VIRTUAL_WIRE(6, 0);
struct VirtualWire __code VW_SMI_N = VIRTUAL_WIRE(6, 1);
struct VirtualWire __code VW_RCIN_N = VIRTUAL_WIRE(6, 2);
struct VirtualWire __code VW_HOST_RST_ACK = VIRTUAL_WIRE(6, 3);
// Index 7 - AP to EC
struct VirtualWire __code VW_HOST_RST_WARN = VIRTUAL_WIRE(7, 0);
// Index 40 - EC to AP (platform specific)
struct VirtualWire __code VW_SUS_ACK_N = VIRTUAL_WIRE(40, 0);
// Index 41 - AP to EC (platform specific)
struct VirtualWire __code VW_SUS_WARN_N = VIRTUAL_WIRE(41, 0);
struct VirtualWire __code VW_SUS_PWRDN_ACK = VIRTUAL_WIRE(41, 1);
enum VirtualWireState vw_get(struct VirtualWire * vw) __critical {
uint8_t index = *vw->index;
switch ((index >> vw->shift) & VWS_HIGH) {
case VWS_LOW:
return VWS_LOW;
case VWS_HIGH:
return VWS_HIGH;
default:
return VWS_INVALID;
}
}
void vw_set(struct VirtualWire * vw, enum VirtualWireState state) __critical {
uint8_t index = *vw->index;
index &= ~(VWS_HIGH << vw->shift);
switch (state) {
case VWS_LOW:
index |= VWS_LOW << vw->shift;
break;
case VWS_HIGH:
index |= VWS_HIGH << vw->shift;
break;
default:
break;
}
*vw->index = index;
}

View File

@ -0,0 +1,123 @@
// SPDX-License-Identifier: GPL-3.0-only
#ifndef _EC_ESPI_H
#define _EC_ESPI_H
#include <stdint.h>
#ifndef EC_ESPI
#define EC_ESPI 0
#endif // EC_ESPI
struct VirtualWire {
volatile uint8_t __xdata * index;
uint8_t shift;
};
#define VIRTUAL_WIRE(INDEX, SHIFT) { \
.index = &VWIDX ## INDEX, \
.shift = SHIFT, \
}
enum VirtualWireState {
VWS_INVALID = 0x00,
VWS_LOW = 0x10,
VWS_HIGH = 0x11,
};
enum VirtualWireState vw_get(struct VirtualWire * vw) __critical;
void vw_set(struct VirtualWire * vw, enum VirtualWireState state) __critical;
// Not all wires are defined or implemented
// Index 2 - AP to EC
extern struct VirtualWire __code VW_SLP_S3_N;
extern struct VirtualWire __code VW_SLP_S4_N;
extern struct VirtualWire __code VW_SLP_S5_N;
// Index 3 - AP to EC
extern struct VirtualWire __code VW_SUS_STAT_N;
extern struct VirtualWire __code VW_PLTRST_N;
extern struct VirtualWire __code VW_OOB_RST_WARN;
// Index 4 - EC to AP
extern struct VirtualWire __code VW_OOB_RST_ACK;
extern struct VirtualWire __code VW_WAKE_N;
extern struct VirtualWire __code VW_PME_N;
// Index 5 - EC to AP
extern struct VirtualWire __code VW_BOOT_LOAD_DONE;
extern struct VirtualWire __code VW_ERROR_FATAL;
extern struct VirtualWire __code VW_ERROR_NONFATAL;
extern struct VirtualWire __code VW_BOOT_LOAD_STATUS;
// Index 6 - EC to AP
extern struct VirtualWire __code VW_SCI_N;
extern struct VirtualWire __code VW_SMI_N;
extern struct VirtualWire __code VW_RCIN_N;
extern struct VirtualWire __code VW_HOST_RST_ACK;
// Index 7 - AP to EC
extern struct VirtualWire __code VW_HOST_RST_WARN;
// Index 40 - EC to AP (platform specific)
extern struct VirtualWire __code VW_SUS_ACK_N;
// Index 41 - AP to EC (platform specific)
extern struct VirtualWire __code VW_SUS_WARN_N;
extern struct VirtualWire __code VW_SUS_PWRDN_ACK;
// General capabilities and configurations
volatile uint8_t __xdata __at(0x3107) ESGCAC0;
volatile uint8_t __xdata __at(0x3106) ESGCAC1;
volatile uint8_t __xdata __at(0x3105) ESGCAC2;
volatile uint8_t __xdata __at(0x3104) ESGCAC3;
// Channel 0 capabilities and configurations
volatile uint8_t __xdata __at(0x310B) ESC0CAC0;
volatile uint8_t __xdata __at(0x310A) ESC0CAC1;
volatile uint8_t __xdata __at(0x3109) ESC0CAC2;
volatile uint8_t __xdata __at(0x3108) ESC0CAC3;
// Channel 1 capabilities and configurations
volatile uint8_t __xdata __at(0x310F) ESC1CAC0;
volatile uint8_t __xdata __at(0x310E) ESC1CAC1;
volatile uint8_t __xdata __at(0x310D) ESC1CAC2;
volatile uint8_t __xdata __at(0x310C) ESC1CAC3;
// Channel 2 capabilities and configurations
volatile uint8_t __xdata __at(0x3113) ESC2CAC0;
volatile uint8_t __xdata __at(0x3112) ESC2CAC1;
volatile uint8_t __xdata __at(0x3111) ESC2CAC2;
volatile uint8_t __xdata __at(0x3110) ESC2CAC3;
// Channel 3 capabilities and configurations
volatile uint8_t __xdata __at(0x3117) ESC3CAC0;
volatile uint8_t __xdata __at(0x3116) ESC3CAC1;
volatile uint8_t __xdata __at(0x3115) ESC3CAC2;
volatile uint8_t __xdata __at(0x3114) ESC3CAC3;
// eSPI PC control
volatile uint8_t __xdata __at(0x3190) ESPCTRL0;
// eSPI general control
volatile uint8_t __xdata __at(0x31A0) ESGCTRL0;
volatile uint8_t __xdata __at(0x31A1) ESGCTRL1;
volatile uint8_t __xdata __at(0x31A2) ESGCTRL2;
volatile uint8_t __xdata __at(0x31A3) ESGCTRL3;
// Virtual wires
volatile uint8_t __xdata __at(0x3200) VWIDX0;
volatile uint8_t __xdata __at(0x3202) VWIDX2;
volatile uint8_t __xdata __at(0x3203) VWIDX3;
volatile uint8_t __xdata __at(0x3204) VWIDX4;
volatile uint8_t __xdata __at(0x3205) VWIDX5;
volatile uint8_t __xdata __at(0x3206) VWIDX6;
volatile uint8_t __xdata __at(0x3207) VWIDX7;
// Virtual wires at 0x40
volatile uint8_t __xdata __at(0x3240) VWIDX40;
volatile uint8_t __xdata __at(0x3241) VWIDX41;
volatile uint8_t __xdata __at(0x3242) VWIDX42;
// Virtual wire control
volatile uint8_t __xdata __at(0x3290) VWCTRL0;
volatile uint8_t __xdata __at(0x3291) VWCTRL1;
volatile uint8_t __xdata __at(0x3292) VWCTRL2;
volatile uint8_t __xdata __at(0x3293) VWCTRL3;
volatile uint8_t __xdata __at(0x3295) VWCTRL5;
volatile uint8_t __xdata __at(0x3296) VWCTRL6;
#endif // _EC_ESPI_H

View File

@ -1,5 +1,18 @@
// SPDX-License-Identifier: GPL-3.0-only
#include <ec/espi.h>
#if EC_ESPI
// eSPI signature (byte 7 = 0xA4)
static __code char __at(0x40) SIGNATURE[32] = {
0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA4, 0x95,
0x85, 0x12, 0x5A, 0x5A, 0xAA, 0x00, 0x55, 0x55,
0x49, 0x54, 0x45, 0x20, 0x54, 0x65, 0x63, 0x68,
0x2E, 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x20, 0x20
};
#else // EC_ESPI
// LPC signature (byte 7 = 0xA5)
static __code char __at(0x40) SIGNATURE[32] = {
0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0x94,
0x85, 0x12, 0x5A, 0x5A, 0xAA, 0x00, 0x55, 0x55,
@ -7,3 +20,4 @@ static __code char __at(0x40) SIGNATURE[32] = {
0x49, 0x54, 0x45, 0x20, 0x54, 0x65, 0x63, 0x68,
0x2E, 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x20, 0x20
};
#endif // EC_ESPI

View File

@ -0,0 +1,9 @@
// SPDX-License-Identifier: GPL-3.0-only
#ifndef _EC_ESPI_H
#define _EC_ESPI_H
// eSPI not supported on IT8587E
#define EC_ESPI 0
#endif // _EC_ESPI_H