Skip to content

Commit cca25c3

Browse files
committed
v0.2.1: add developer quick links, reverse engineering artifacts section, clarify VF 88 is not conservative
1 parent 1fd4f91 commit cca25c3

4 files changed

Lines changed: 96 additions & 22 deletions

File tree

‎README.md‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
66
[![CI](https://github.com/SHANAjam/rtx5090-xbar-control/actions/workflows/ci.yml/badge.svg)](https://github.com/SHANAjam/rtx5090-xbar-control/actions/workflows/ci.yml)
77

8-
**中文版**:[README.zh-CN.md](README.zh-CN.md) · **技术文档**:[English](docs/TECHNICAL_NOTES.md) / [中文](docs/TECHNICAL_NOTES.zh-CN.md)
8+
**中文版**:[README.zh-CN.md](README.zh-CN.md)
9+
10+
**👨‍💻 Developers, jump straight to:** [Technical Notes (EN)](docs/TECHNICAL_NOTES.md) · [技术说明 (中文)](docs/TECHNICAL_NOTES.zh-CN.md)
911

1012
---
1113

@@ -110,7 +112,9 @@ VF : start at +88 MHz (tune per card)
110112
```
111113

112114
- `VF +88 MHz` means adding an 88 MHz frequency offset to the selected XBAR V/F points.
115+
- **88 MHz is not a "conservative" value.** It was a starting point on the author's card.
113116
- Different cards / VBIOS / cooling may need different values.
117+
- If you want to be more conservative, start with **+44 MHz or 0 MHz**.
114118
- If unstable, lower XBAR first.
115119

116120
---

‎README.zh-CN.md‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
66
[![CI](https://github.com/SHANAjam/rtx5090-xbar-control/actions/workflows/ci.yml/badge.svg)](https://github.com/SHANAjam/rtx5090-xbar-control/actions/workflows/ci.yml)
77

8-
**English**:[README.md](README.md) · **技术文档**:[English](docs/TECHNICAL_NOTES.md) / [中文](docs/TECHNICAL_NOTES.zh-CN.md)
8+
**English**:[README.md](README.md)
9+
10+
**👨‍💻 开发者直达:** [技术说明 (中文)](docs/TECHNICAL_NOTES.zh-CN.md) · [Technical Notes (EN)](docs/TECHNICAL_NOTES.md)
911

1012
---
1113

@@ -110,7 +112,9 @@ VF :从 +88 MHz 开始试(每张卡单独调)
110112
```
111113

112114
- `VF +88 MHz` 表示给选中的 XBAR V/F 点额外加 88 MHz 频率偏移。
115+
- **88 MHz 不是“保守值”**,只是作者机器上的起点。
113116
- 不同显卡 / VBIOS / 散热需要不同值。
117+
- 想更保守可以从 **+44 MHz 或 0 MHz** 开始。
114118
- 不稳定就先降低 XBAR。
115119

116120
---

‎docs/TECHNICAL_NOTES.md‎

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,13 @@
1212
- [3.3 V/F points](#33-vf-points)
1313
- [3.4 PERF limits](#34-perf-limits)
1414
- [3.5 L2 stability test](#35-l2-stability-test)
15-
- [4. Dynamic layout adaptation](#4-dynamic-layout-adaptation)
16-
- [5. Driver validation matrix](#5-driver-validation-matrix)
15+
- [4. Reverse engineering process and artifacts](#4-reverse-engineering-process-and-artifacts)
16+
- [5. Dynamic layout adaptation](#5-dynamic-layout-adaptation)
17+
- [6. Driver validation matrix](#6-driver-validation-matrix)
18+
- [7. Debugging](#7-debugging)
19+
- [8. Adding support for a new driver](#8-adding-support-for-a-new-driver)
20+
- [9. References](#9-references)
21+
- [10. Known limitations](#10-known-limitations)
1722
- [6. Debugging](#6-debugging)
1823
- [7. Adding support for a new driver](#7-adding-support-for-a-new-driver)
1924
- [8. References](#8-references)
@@ -106,7 +111,37 @@ docs/
106111
- Uses random L2 reads over a 32 MiB buffer and atomic mismatch counting.
107112
- Integrated as `l2-test`.
108113

109-
## 4. Dynamic layout adaptation
114+
## 4. Reverse engineering process and artifacts
115+
116+
The disassembly process is documented through:
117+
118+
- Static table parsing (`scripts/validate_nvapi_drivers.py`)
119+
- Offset derivation (`scripts/derive_nvapi_offsets.py`)
120+
- Capstone disassembly tool (`scripts/disasm_nvapi.py`)
121+
- Raw disassembly artifacts in [`docs/reverse/`](reverse/)
122+
123+
The key steps were:
124+
125+
1. Locate the NvAPI static ID table (`{u64 ptr, u32 id, u32 pad}`).
126+
2. Resolve wrapper stubs and real implementations.
127+
3. Disassemble the real functions and identify version checks.
128+
4. Map buffer writes to structure fields.
129+
5. Cross-validate across R572..R610.
130+
131+
Raw files include:
132+
133+
```text
134+
docs/reverse/lookup_102f50_full_61088.txt
135+
docs/reverse/get_info_real_full_61088.txt
136+
docs/reverse/get_control_real_full_61088.txt
137+
docs/reverse/set_control_real_full_61088.txt
138+
docs/reverse/clk_get_61088.txt
139+
docs/reverse/vf_status_61088.txt
140+
docs/reverse/vf_get_61088.txt
141+
docs/reverse/rtx5090_gameready_direct_links.txt
142+
```
143+
144+
## 5. Dynamic layout adaptation
110145

111146
The program no longer relies on per-card hardcoded layout for:
112147

@@ -118,7 +153,7 @@ The program no longer relies on per-card hardcoded layout for:
118153

119154
Remaining constants are NvAPI structure field offsets (e.g. `+0x114`, `+0x38`). They are API-structure-level and were verified across R572..R610.
120155

121-
## 5. Driver validation matrix
156+
## 6. Driver validation matrix
122157

123158
Validated driver versions (desktop and selected notebook):
124159

@@ -140,7 +175,7 @@ Scripts:
140175
python scripts/run_full_validation.py
141176
```
142177

143-
## 6. Debugging
178+
## 7. Debugging
144179

145180
```powershell
146181
python run.py --verbose --log-file debug.log status
@@ -160,7 +195,7 @@ If `probe` fails:
160195
- Do **not** use `--force-driver`.
161196
- Collect `probe` output and report it.
162197

163-
## 7. Adding support for a new driver
198+
## 8. Adding support for a new driver
164199

165200
1. Obtain `nvapi64.dll` or `nvapi64_impl.dll` from the driver package.
166201
2. Run:
@@ -171,15 +206,15 @@ If `probe` fails:
171206
3. If all checks pass, add the version prefix to `driver_check.VALIDATED_DRIVER_PREFIXES`.
172207
4. If a check fails, reverse-engineer the new layout and update this document.
173208

174-
## 8. References
209+
## 9. References
175210

176211
- LACT issue #1147: https://github.com/ilya-zlobintsev/LACT/issues/1147
177212
- LACT PR #1158: https://github.com/ilya-zlobintsev/LACT/pull/1158
178213
- LACT issue #1159: https://github.com/ilya-zlobintsev/LACT/issues/1159
179214
- NVIDIA/open-gpu-kernel-modules#1266: https://github.com/NVIDIA/open-gpu-kernel-modules/issues/1266
180215
- mVolt+: https://github.com/b00nz/mVolt
181216

182-
## 9. Known limitations
217+
## 10. Known limitations
183218

184219
- Physical MSVDD direct read is not implemented.
185220
- PERF limits SET is not exposed.

‎docs/TECHNICAL_NOTES.zh-CN.md‎

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@
1212
- [3.3 V/F 点](#33-vf-点)
1313
- [3.4 PERF limits](#34-perf-limits)
1414
- [3.5 L2 稳定性测试](#35-l2-稳定性测试)
15-
- [4. 动态布局适配](#4-动态布局适配)
16-
- [5. 驱动验证矩阵](#5-驱动验证矩阵)
17-
- [6. 调试](#6-调试)
18-
- [7. 如何支持新驱动](#7-如何支持新驱动)
19-
- [8. 参考链接](#8-参考链接)
20-
- [9. 已知限制](#9-已知限制)
15+
- [4. 反汇编过程与产物](#4-反汇编过程与产物)
16+
- [5. 动态布局适配](#5-动态布局适配)
17+
- [6. 驱动验证矩阵](#6-驱动验证矩阵)
18+
- [7. 调试](#7-调试)
19+
- [8. 如何支持新驱动](#8-如何支持新驱动)
20+
- [9. 参考链接](#9-参考链接)
21+
- [10. 已知限制](#10-已知限制)
2122

2223
## 1. 项目结构
2324

@@ -106,7 +107,37 @@ docs/
106107
- 使用 32 MiB 缓冲区随机 L2 读取 + 原子错误计数。
107108
- 集成命令:`l2-test`。
108109

109-
## 4. 动态布局适配
110+
## 4. 反汇编过程与产物
111+
112+
反汇编过程通过以下内容记录:
113+
114+
- 静态表解析:`scripts/validate_nvapi_drivers.py`
115+
- 偏移推导:`scripts/derive_nvapi_offsets.py`
116+
- Capstone 反汇编工具:`scripts/disasm_nvapi.py`
117+
- 原始反汇编产物:[`docs/reverse/`](reverse/)
118+
119+
关键步骤:
120+
121+
1. 定位 NvAPI 静态 ID 表(`{u64 ptr, u32 id, u32 pad}`)。
122+
2. 解析 wrapper 与真实实现。
123+
3. 反汇编真实函数并识别版本检查。
124+
4. 将 buffer 写入映射到结构体字段。
125+
5. 跨 R572..R610 交叉验证。
126+
127+
原始文件包括:
128+
129+
```text
130+
docs/reverse/lookup_102f50_full_61088.txt
131+
docs/reverse/get_info_real_full_61088.txt
132+
docs/reverse/get_control_real_full_61088.txt
133+
docs/reverse/set_control_real_full_61088.txt
134+
docs/reverse/clk_get_61088.txt
135+
docs/reverse/vf_status_61088.txt
136+
docs/reverse/vf_get_61088.txt
137+
docs/reverse/rtx5090_gameready_direct_links.txt
138+
```
139+
140+
## 5. 动态布局适配
110141

111142
程序已不再依赖以下硬编码:
112143

@@ -118,7 +149,7 @@ docs/
118149

119150
剩余常量是 NvAPI 结构体字段偏移(如 `+0x114`、`+0x38`),属于 API 结构定义,已在 R572..R610 验证一致。
120151

121-
## 5. 驱动验证矩阵
152+
## 6. 驱动验证矩阵
122153

123154
已验证驱动版本(桌面 + 部分笔记本):
124155

@@ -140,7 +171,7 @@ docs/
140171
python scripts/run_full_validation.py
141172
```
142173

143-
## 6. 调试
174+
## 7. 调试
144175

145176
```powershell
146177
python run.py --verbose --log-file debug.log status
@@ -160,7 +191,7 @@ python run.py perf --json
160191
- **不要**使用 `--force-driver`。
161192
- 收集 `probe` 输出并反馈。
162193

163-
## 7. 如何支持新驱动
194+
## 8. 如何支持新驱动
164195

165196
1. 从驱动包获取 `nvapi64.dll` 或 `nvapi64_impl.dll`。
166197
2. 运行:
@@ -171,15 +202,15 @@ python run.py perf --json
171202
3. 全部通过后,把版本前缀加入 `driver_check.VALIDATED_DRIVER_PREFIXES`。
172203
4. 如果有失败项,需要重新逆向布局并更新本文档。
173204

174-
## 8. 参考链接
205+
## 9. 参考链接
175206

176207
- LACT issue #1147:https://github.com/ilya-zlobintsev/LACT/issues/1147
177208
- LACT PR #1158:https://github.com/ilya-zlobintsev/LACT/pull/1158
178209
- LACT issue #1159:https://github.com/ilya-zlobintsev/LACT/issues/1159
179210
- NVIDIA/open-gpu-kernel-modules#1266:https://github.com/NVIDIA/open-gpu-kernel-modules/issues/1266
180211
- mVolt+:https://github.com/b00nz/mVolt
181212

182-
## 9. 已知限制
213+
## 10. 已知限制
183214

184215
- 物理 MSVDD 直接读取未实现。
185216
- PERF limits SET 未暴露。

0 commit comments

Comments
 (0)