diff --git a/src/soc/amd/common/block/include/amdblocks/smn.h b/src/soc/amd/common/block/include/amdblocks/smn.h index 0268926bbe..ad6972114e 100644 --- a/src/soc/amd/common/block/include/amdblocks/smn.h +++ b/src/soc/amd/common/block/include/amdblocks/smn.h @@ -9,4 +9,12 @@ uint32_t smn_read32(uint32_t reg); uint64_t smn_read64(uint32_t reg); void smn_write32(uint32_t reg, uint32_t val); +#if defined(__SIMPLE_DEVICE__) + +uint32_t smn_io_read32(uint32_t reg); +uint64_t smn_io_read64(uint32_t reg); +void smn_io_write32(uint32_t reg, uint32_t val); + +#endif + #endif /* AMD_BLOCK_SMN_H */ diff --git a/src/soc/amd/common/block/smn/smn.c b/src/soc/amd/common/block/smn/smn.c index caf6a41004..41396701e2 100644 --- a/src/soc/amd/common/block/smn/smn.c +++ b/src/soc/amd/common/block/smn/smn.c @@ -25,3 +25,25 @@ void smn_write32(uint32_t reg, uint32_t val) pci_write_config32(SOC_GNB_DEV, SMN_INDEX_ADDR, reg); pci_write_config32(SOC_GNB_DEV, SMN_DATA_ADDR, val); } + + +#if defined(__SIMPLE_DEVICE__) + +uint32_t smn_io_read32(uint32_t reg) +{ + pci_io_write_config32(SOC_GNB_DEV, SMN_INDEX_ADDR, reg); + return pci_io_read_config32(SOC_GNB_DEV, SMN_DATA_ADDR); +} + +uint64_t smn_io_read64(uint32_t reg) +{ + return smn_io_read32(reg) | (uint64_t)smn_io_read32(reg + 4) << 32; +} + +void smn_io_write32(uint32_t reg, uint32_t val) +{ + pci_io_write_config32(SOC_GNB_DEV, SMN_INDEX_ADDR, reg); + pci_io_write_config32(SOC_GNB_DEV, SMN_DATA_ADDR, val); +} + +#endif