瀏覽代碼

sysvar: fix a few broken pointers; don't reset status; add debug

Fix a few broken pointers in the sysvar implementation.
Don't reset the status information when loading a configuration.
Add some (optional) debug output to the sysvar system.
H. Peter Anvin 1 年之前
父節點
當前提交
aae59a22f3
共有 27 個文件被更改,包括 45 次插入11 次删除
  1. 1 1
      esp32/max80/config.c
  2. 2 0
      esp32/max80/max80.ino
  3. 36 5
      esp32/max80/sysvars.c
  4. 2 1
      esp32/max80/sysvars.h
  5. 二進制
      esp32/output/max80.ino.bin
  6. 3 3
      fpga/max80.qpf
  7. 二進制
      fpga/output/bypass.jic
  8. 二進制
      fpga/output/bypass.rbf.gz
  9. 二進制
      fpga/output/bypass.rpd.gz
  10. 二進制
      fpga/output/bypass.svf.gz
  11. 二進制
      fpga/output/bypass.xsvf.gz
  12. 二進制
      fpga/output/max80.fw
  13. 二進制
      fpga/output/v1.fw
  14. 二進制
      fpga/output/v1.jic
  15. 二進制
      fpga/output/v1.rbf.gz
  16. 二進制
      fpga/output/v1.rpd.gz
  17. 二進制
      fpga/output/v1.sof
  18. 二進制
      fpga/output/v1.svf.gz
  19. 二進制
      fpga/output/v1.xsvf.gz
  20. 二進制
      fpga/output/v2.fw
  21. 二進制
      fpga/output/v2.jic
  22. 二進制
      fpga/output/v2.rbf.gz
  23. 二進制
      fpga/output/v2.rpd.gz
  24. 二進制
      fpga/output/v2.sof
  25. 二進制
      fpga/output/v2.svf.gz
  26. 二進制
      fpga/output/v2.xsvf.gz
  27. 1 1
      rv32/checksum.h

+ 1 - 1
esp32/max80/config.c

@@ -172,7 +172,7 @@ void init_config(void)
 		   spiffs_conf.base_path, err);
     }
 
-    sysvar_reset();
+    sysvar_reset(sysvar_ns_config);
 
     FILE *f = fopen(CONFIG_FILE, "r");
     if (!f)

+ 2 - 0
esp32/max80/max80.ino

@@ -102,6 +102,8 @@ void setup() {
     TTY::init();
     heap_info();
 
+    sysvar_init();
+
     printf("[FW]   MAX80 firmware compiled on %s\n", fwdate);
     printf("[PCB]  MAX80 board version: %s\n", board_info.version_str);
     setvar_str(status_max80_hw_ver, board_info.version_str);

+ 36 - 5
esp32/max80/sysvars.c

@@ -1,3 +1,4 @@
+#include "common.h"
 #include "sysvars.h"
 
 #include <stdlib.h>
@@ -5,6 +6,12 @@
 #include <stdio.h>
 #include <time.h>
 
+#define DEBUG 1
+
+#ifndef DEBUG
+# define DEBUG 0
+#endif
+
 static const char *sysvar_bool_tostr(sysvar_t from, char *buf)
 {
     buf[0] = '0' + from.v_bool;
@@ -266,6 +273,13 @@ static bool do_setvar(size_t var, sysvar_t val, bool is_set)
     if (type->datasize)
 	free_ptr = to->v_ptr;
 
+    if (DEBUG) {
+	char tostr_buf[SYSVAR_BUFLEN];
+	printf("%ssetvar %zu %s <- %s\n", is_set ? "" : "un",
+	       var, sysvar_name[var],
+	       notempty(type->tostr(val, tostr_buf)));
+    }
+
     if (!type->set || (type->datasize && !val.v_ptr)) {
 	sysvar_val[var] = val;
     } else {
@@ -336,6 +350,10 @@ bool setvar_fromstr(size_t var, const char *str)
     if (type->datasize)
 	free_ptr = to->v_ptr;
 
+    if (DEBUG) {
+	printf("setvar_fromstr %zu %s <- %s\n", var, sysvar_name[var], str);
+    }
+
     /* A fromstr method is required */
     if (!type->fromstr(to, str))
 	return false;
@@ -368,8 +386,8 @@ size_t sysvar_find(size_t ns, const char *name)
     const char * const *varname;
     const size_t count = nsi[1].first - nsi->first;
 
-    varname = bsearch(name, sysvar_name + nsi->first,
-		      count, sizeof(const char *),
+    varname = bsearch(&name, sysvar_name + nsi->first,
+		      count, sizeof *sysvar_name,
 		      string_ptr_compare);
     if (!varname)
 	return 0;
@@ -379,10 +397,23 @@ size_t sysvar_find(size_t ns, const char *name)
 
 /* --- Initialization/reset to defaults --- */
 
-void sysvar_reset(void)
+void sysvar_reset(size_t ns)
+{
+    if (ns >= (size_t)sysvar_nscount)
+	return;
+
+    enum sysvar_enum i;
+    for (i = sysvar_ns[ns].first; i < sysvar_ns[ns+1].first; i++)
+	unsetvar(i);
+
+    if (sysvar_changed < i)
+	sysvar_changed = i;
+}
+
+void sysvar_init(void)
 {
-    for (enum sysvar_enum i = sysvar_null; i < sysvar_count; i++)
+    for (enum sysvar_enum i = sysvar_null+1; i < sysvar_count; i++)
 	unsetvar(i);
 
-    sysvar_changed = sysvar_null;
+    sysvar_changed = sysvar_count;
 }

+ 2 - 1
esp32/max80/sysvars.h

@@ -72,7 +72,8 @@ extern_c bool unsetvar(size_t var);
 extern_c const char *getvar_tostr(size_t var);
 extern_c const char *getvar_tostr_r(size_t var, char *buf);
 extern_c bool setvar_fromstr(size_t var, const char *str);
-extern_c void sysvar_reset(void);
+extern_c void sysvar_init(void);
+extern_c void sysvar_reset(size_t ns);
 extern_c size_t sysvar_find(size_t ns, const char *name);
 extern_c size_t sysvar_marshall(enum sysvar_enum first, size_t count,
 				void *buf, size_t *buflen, uintptr_t extaddr);

二進制
esp32/output/max80.ino.bin


+ 3 - 3
fpga/max80.qpf

@@ -19,15 +19,15 @@
 #
 # Quartus Prime
 # Version 22.1std.0 Build 915 10/25/2022 SC Lite Edition
-# Date created = 22:49:04  August 30, 2023
+# Date created = 13:58:18  September 05, 2023
 #
 # -------------------------------------------------------------------------- #
 
 QUARTUS_VERSION = "22.1"
-DATE = "22:49:04  August 30, 2023"
+DATE = "13:58:18  September 05, 2023"
 
 # Revisions
 
-PROJECT_REVISION = "v2"
 PROJECT_REVISION = "v1"
+PROJECT_REVISION = "v2"
 PROJECT_REVISION = "bypass"

二進制
fpga/output/bypass.jic


二進制
fpga/output/bypass.rbf.gz


二進制
fpga/output/bypass.rpd.gz


二進制
fpga/output/bypass.svf.gz


二進制
fpga/output/bypass.xsvf.gz


二進制
fpga/output/max80.fw


二進制
fpga/output/v1.fw


二進制
fpga/output/v1.jic


二進制
fpga/output/v1.rbf.gz


二進制
fpga/output/v1.rpd.gz


二進制
fpga/output/v1.sof


二進制
fpga/output/v1.svf.gz


二進制
fpga/output/v1.xsvf.gz


二進制
fpga/output/v2.fw


二進制
fpga/output/v2.jic


二進制
fpga/output/v2.rbf.gz


二進制
fpga/output/v2.rpd.gz


二進制
fpga/output/v2.sof


二進制
fpga/output/v2.svf.gz


二進制
fpga/output/v2.xsvf.gz


+ 1 - 1
rv32/checksum.h

@@ -1,4 +1,4 @@
 #ifndef CHECKSUM_H
 #define CHECKSUM_H
-#define SDRAM_SUM 0x8751cf2a
+#define SDRAM_SUM 0x674c2aeb
 #endif