aboutsummaryrefslogtreecommitdiffstats
path: root/nvdebug.h
diff options
context:
space:
mode:
authorJoshua Bakita <jbakita@cs.unc.edu>2024-04-13 14:19:10 -0400
committerJoshua Bakita <jbakita@cs.unc.edu>2024-04-13 14:19:10 -0400
commit6c8c5c70a885395afae4e7dd49d6abd9c470bc9e (patch)
treedd0440345208df6f1d3c35e5c9813ec296358ad5 /nvdebug.h
parent7cfa24cebeaf144b446d07e15fb25e78bb14841e (diff)
Add /proc/gpu#/local_memory API for getting VRAM size
Diffstat (limited to 'nvdebug.h')
-rw-r--r--nvdebug.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/nvdebug.h b/nvdebug.h
index ff35f70..b13d311 100644
--- a/nvdebug.h
+++ b/nvdebug.h
@@ -1145,7 +1145,34 @@ typedef union {
1145} page_tbl_entry_v0_t; 1145} page_tbl_entry_v0_t;
1146*/ 1146*/
1147 1147
1148/* VRAM Information
1148 1149
1150 If ECC is disabled:
1151 bytes = (magnitude << scale) * 1024 * 1024
1152 If ECC is enabled:
1153 bytes = ((magnitude << scale) * 1024 * 1024) / 16 * 15
1154
1155 Support: Pascal, Volta, Turing, [more?]
1156 */
1157#define NV_FB_MMU_LOCAL_MEMORY_RANGE 0x00100ce0
1158typedef union {
1159 struct {
1160 uint32_t scale:4;
1161 uint32_t mag:6;
1162 uint32_t:20;
1163 bool is_ecc:1;
1164 uint32_t:1;
1165 } __attribute__((packed));
1166 uint32_t raw;
1167} memory_range_t;
1168
1169static inline uint64_t memory_range_to_bytes(memory_range_t range) {
1170 // ECC takes a byte out of available memory for parity data
1171 if (range.is_ecc)
1172 return ((range.mag << range.scale) * 1024ull * 1024ull) / 16 * 15;
1173 else
1174 return (range.mag << range.scale) * 1024ull * 1024ull;
1175}
1149 1176
1150/* Begin nvdebug types and functions */ 1177/* Begin nvdebug types and functions */
1151 1178