diff --git a/src/soc/intel/common/block/gpmr/gpmr.c b/src/soc/intel/common/block/gpmr/gpmr.c index 1a3a6023d6..d0fe499be0 100644 --- a/src/soc/intel/common/block/gpmr/gpmr.c +++ b/src/soc/intel/common/block/gpmr/gpmr.c @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -16,17 +17,22 @@ #define DMI_PCR_GPMR_EN BIT(31) /* GPMR Register read given offset */ -static uint32_t gpmr_read32(uint16_t offset) +uint32_t gpmr_read32(uint16_t offset) { return pcr_read32(PID_DMI, offset); } /* GPMR Register write given offset and val */ -static void gpmr_write32(uint16_t offset, uint32_t val) +void gpmr_write32(uint16_t offset, uint32_t val) { return pcr_write32(PID_DMI, offset, val); } +void gpmr_or32(uint16_t offset, uint32_t ordata) +{ + return pcr_or32(PID_DMI, offset, ordata); +} + /* Check for available free gpmr */ static int get_available_gpmr(void) { diff --git a/src/soc/intel/common/block/include/intelblocks/gpmr.h b/src/soc/intel/common/block/include/intelblocks/gpmr.h new file mode 100644 index 0000000000..d898f329b8 --- /dev/null +++ b/src/soc/intel/common/block/include/intelblocks/gpmr.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef SOC_INTEL_COMMON_BLOCK_GPMR_H +#define SOC_INTEL_COMMON_BLOCK_GPMR_H + +#include +#include + +uint32_t gpmr_read32(uint16_t offset); +void gpmr_write32(uint16_t offset, uint32_t val); +void gpmr_or32(uint16_t offset, uint32_t ordata); +enum cb_err enable_gpmr(uint32_t base, uint32_t size, uint32_t dest_id); + +#endif /* SOC_INTEL_COMMON_BLOCK_GPMR_H */ diff --git a/src/soc/intel/common/block/include/intelblocks/pcr_gpmr.h b/src/soc/intel/common/block/include/intelblocks/pcr_gpmr.h new file mode 100644 index 0000000000..fb138f91a0 --- /dev/null +++ b/src/soc/intel/common/block/include/intelblocks/pcr_gpmr.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef SOC_INTEL_COMMON_BLOCK_PCR_GPMR_H +#define SOC_INTEL_COMMON_BLOCK_PCR_GPMR_H + +#define GPMR_LPCLGIR1 0x2730 +#define GPMR_DMICTL 0x2234 +#define GPMR_DMICTL_SRLOCK (1 << 31) +#define GPMR_LPCGMR 0x2740 +#define GPMR_GCS 0x274c +#define GPMR_GCS_BILD (1 << 0) +#define GPMR_LPCIOD 0x2770 +#define GPMR_LPCIOE 0x2774 +#define GPMR_TCOBASE 0x2778 +#define GPMR_TCOEN (1 << 1) + +#define MAX_GPMR_REGS 3 + +#define GPMR_OFFSET(x) (0x277c + (x) * 8) +#define GPMR_LIMIT_MASK 0xffff0000 +#define GPMR_BASE_SHIFT 16 +#define GPMR_BASE_MASK 0xffff + +#define GPMR_DID_OFFSET(x) (0x2780 + (x) * 8) +#define GPMR_EN BIT(31) + +#endif /* SOC_INTEL_COMMON_BLOCK_PCR_GPMR_H */