diff options
author | Felix Held <felix-coreboot@felixheld.de> | 2023-07-18 17:29:04 +0200 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2023-07-20 14:24:07 +0000 |
commit | ed7b1c4ba0afe6731fc758b417fe4182e852d3e7 (patch) | |
tree | 7d29d48697fd10b7fe6336aa7c49e09cf883a655 /src/soc/amd/common/block | |
parent | 545d9992dc9cdfc06708019b4ecdbb75d2d06721 (diff) |
soc/amd/common/block/smn: add smn_read64
Add smn_read64 which calls smn_read32 twice to read two adjacent 32 bit
SMN registers and merges the results into a 64 bit value which it then
returns.
Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: Ib2d58ec9818559cbefd7b819ae311ad02fafa18f
Reviewed-on: https://review.coreboot.org/c/coreboot/+/76552
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Fred Reitberger <reitbergerfred@gmail.com>
Diffstat (limited to 'src/soc/amd/common/block')
-rw-r--r-- | src/soc/amd/common/block/include/amdblocks/smn.h | 1 | ||||
-rw-r--r-- | src/soc/amd/common/block/smn/smn.c | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/src/soc/amd/common/block/include/amdblocks/smn.h b/src/soc/amd/common/block/include/amdblocks/smn.h index 962c8acd82..0268926bbe 100644 --- a/src/soc/amd/common/block/include/amdblocks/smn.h +++ b/src/soc/amd/common/block/include/amdblocks/smn.h @@ -6,6 +6,7 @@ #include <types.h> uint32_t smn_read32(uint32_t reg); +uint64_t smn_read64(uint32_t reg); void smn_write32(uint32_t reg, uint32_t val); #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 055f732cf7..caf6a41004 100644 --- a/src/soc/amd/common/block/smn/smn.c +++ b/src/soc/amd/common/block/smn/smn.c @@ -15,6 +15,11 @@ uint32_t smn_read32(uint32_t reg) return pci_read_config32(SOC_GNB_DEV, SMN_DATA_ADDR); } +uint64_t smn_read64(uint32_t reg) +{ + return smn_read32(reg) | (uint64_t)smn_read32(reg + 4) << 32; +} + void smn_write32(uint32_t reg, uint32_t val) { pci_write_config32(SOC_GNB_DEV, SMN_INDEX_ADDR, reg); |