summaryrefslogtreecommitdiffstats
path: root/kernel/firmware_analyzer.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-02 15:13:06 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-02 15:13:06 -0400
commitc9bf1cf098c8ea4daeb3e6c9b274a9025c03045d (patch)
tree91b1dc03fc3916a92e1c99bd91a6643842c62525 /kernel/firmware_analyzer.c
parent7621dff1d3fba7bdb31b2b15abca1e5ff8ca4380 (diff)
downloadopen-iov-c9bf1cf098c8ea4daeb3e6c9b274a9025c03045d.tar.gz
open-iov-c9bf1cf098c8ea4daeb3e6c9b274a9025c03045d.zip
kernel: GR context-promote bisection modes 4-17 and server-managed-ctxbuf registry variant; complete vgsp rename; docs/tooling refresh
- gsp_phys_booter: GR promote bisection modes 4-17 (two-phase zero-field VA, batched entries, hVirtMemory, bare VA, KMD SKIP_CTXBUFFER_ALLOC channel, old-interface GPU_INITIALIZE_CTX, FBMEM context buffer, UVM-faithful PA-only, PATCH/PM auxiliary promotes, server-managed no-promote path); PATCH/PM geometry queries and buffers; pre-boot SET_REGISTRY profile selection - gsp_phys_gpu: gsp_phys_rmcall_gr_promote clamp 0..17 and gsp_phys_srv_ctxbuf parameter; registry image variant with RMSetClientRMAllocatedCtxBuffer=0 - vgsp rename across kernel, scripts, tools and docs (module vgsp.ko, /sys/kernel/debug/vgsp/, vgsp-<subsystem>: log prefixes) - risc-v-gsp-rm-debugger user-facing rename and docs/CI refresh; guest-diag tool updates; README/SBOM/install/Makefile sync Live status: CE ladder and P6 guest-copy forwarding green; GR engine context commit still open (all promote shapes accepted or cleanly refused; the channel stays CTXNOTVALID) - see Handoff-vGPU-IO.md Addendum 21 (local).
Diffstat (limited to 'kernel/firmware_analyzer.c')
-rw-r--r--kernel/firmware_analyzer.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/kernel/firmware_analyzer.c b/kernel/firmware_analyzer.c
index 2d8d84d..9873181 100644
--- a/kernel/firmware_analyzer.c
+++ b/kernel/firmware_analyzer.c
@@ -3,6 +3,8 @@
* Auto-discovers RPC handler addresses, struct layouts, and firmware signatures
*/
+#define pr_fmt(fmt) "vgsp-fw-analyzer: " fmt
+
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
@@ -116,19 +118,19 @@ static int analyze_rpc_dispatcher(const u8 *fw, size_t fw_len, struct fw_address
ret = find_pattern(fw, fw_len, pattern_rpc_dispatch, sizeof(pattern_rpc_dispatch), &offset);
if (ret == 0) {
addrs->rpc_dispatch_primary = GSP_FW_BASE + offset;
- pr_info("FW_ANALYZER: Found RPC dispatcher at 0x%llx\n", addrs->rpc_dispatch_primary);
+ pr_info("Found RPC dispatcher at 0x%llx\n", addrs->rpc_dispatch_primary);
}
ret = find_pattern(fw, fw_len, pattern_jump_table, sizeof(pattern_jump_table), &offset);
if (ret == 0) {
addrs->rpc_jump_table = GSP_FW_BASE + offset;
- pr_info("FW_ANALYZER: Found RPC jump table at 0x%llx\n", addrs->rpc_jump_table);
+ pr_info("Found RPC jump table at 0x%llx\n", addrs->rpc_jump_table);
}
ret = find_pattern(fw, fw_len, pattern_alloc, sizeof(pattern_alloc), &offset);
if (ret == 0) {
addrs->alloc_main = GSP_FW_BASE + offset;
- pr_info("FW_ANALYZER: Found ALLOC handler at 0x%llx\n", addrs->alloc_main);
+ pr_info("Found ALLOC handler at 0x%llx\n", addrs->alloc_main);
}
return 0;
@@ -153,8 +155,8 @@ int fw_analyzer_analyze(const u8 *fw_data, size_t fw_len, struct fw_analysis_res
if (ret)
return ret;
- pr_info("FW_ANALYZER: Firmware size=%zu, CRC32=0x%08x\n", fw_len, result->crc32);
- pr_info("FW_ANALYZER: SHA256: %*phN\n", 32, result->sha256);
+ pr_info("Firmware size=%zu, CRC32=0x%08x\n", fw_len, result->crc32);
+ pr_info("SHA256: %*phN\n", 32, result->sha256);
/* Match against known signatures */
for (size_t i = 0; i < ARRAY_SIZE(known_signatures); i++) {
@@ -163,13 +165,13 @@ int fw_analyzer_analyze(const u8 *fw_data, size_t fw_len, struct fw_analysis_res
strncpy(result->version, known_signatures[i].version, sizeof(result->version) - 1);
result->addresses = known_signatures[i].addrs;
result->matched = true;
- pr_info("FW_ANALYZER: Matched known firmware version: %s\n", result->version);
+ pr_info("Matched known firmware version: %s\n", result->version);
return 0;
}
}
/* Auto-discover addresses if no match */
- pr_info("FW_ANALYZER: No known signature match, attempting auto-discovery\n");
+ pr_info("No known signature match, attempting auto-discovery\n");
ret = analyze_rpc_dispatcher(fw_data, fw_len, &result->addresses);
if (ret == 0) {
result->matched = false;
@@ -186,7 +188,7 @@ int fw_analyzer_load_and_analyze(const char *fw_path, struct fw_analysis_result
ret = request_firmware(&fw, fw_path, NULL);
if (ret) {
- pr_err("FW_ANALYZER: Failed to load firmware %s: %d\n", fw_path, ret);
+ pr_err("Failed to load firmware %s: %d\n", fw_path, ret);
return ret;
}