aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2022-10-22 20:44:17 +0200
committerHelge Deller <deller@gmx.de>2022-10-22 20:44:17 +0200
commit61287c7866ee8d9f8bf922ba751f9c19f783ce7b (patch)
treedd3383cc1a88d757e9121bade5f545ae4009fb85
parent2aab4569826b6b0642abbfdc5bd0b0578094239e (diff)
downloadseabios-hppa-61287c7866ee8d9f8bf922ba751f9c19f783ce7b.zip
seabios-hppa-61287c7866ee8d9f8bf922ba751f9c19f783ce7b.tar.gz
seabios-hppa-61287c7866ee8d9f8bf922ba751f9c19f783ce7b.tar.bz2
parisc: add CPU ID
-rw-r--r--src/parisc/b160l.h9
-rw-r--r--src/parisc/parisc.c30
2 files changed, 30 insertions, 9 deletions
diff --git a/src/parisc/b160l.h b/src/parisc/b160l.h
index 3ac99b4..9df9772 100644
--- a/src/parisc/b160l.h
+++ b/src/parisc/b160l.h
@@ -1,13 +1,14 @@
/* AUTO-GENERATED FILE FOR QEMU */
#define PARISC_MODEL "9000/778/B160L"
#define PARISC_PDC_MODEL 0x5020, 0x481, 0x0, 0x2020202, 0x7794d7fe, 0x10000001, 0x4, 0xba, 0xba
-// #define MPE_PARISC_MODEL "928LX 3kRanger Fox"
-#define MPE_PARISC_MODEL "e3000/A400-100-11#N"
+#define MPE_PARISC_MODEL "928LX 3kRanger Fox"
+// #define MPE_PARISC_MODEL "e3000/A400-100-11#N"
// #define MPE_PARISC_MODEL "e3000/A500-200-20#A"
-#define MPE_PARISC_PDC_MODEL 0x4800, 0x481, 0x0, 0x00000000, 0x44143A73, 0x10000001, 0x0, 0, 0
+#define MPE_PARISC_PDC_MODEL 0x4800, 0x481, 0x0, 0x00000000, 0x44143A73, 0x10000001, 0x0, 0, 0 // Orville E23 ?
+// #define MPE_PARISC_PDC_MODEL 0x2810, 0x481, 0x0, 0x00000000, 0x44143A73, 0x10000001, 0x0, 0, 0 // Nova Low (old) - breaks
#define PARISC_PDC_VERSION 0x0008
-#define PARISC_PDC_CPUID 0x01e8
+#define PARISC_PDC_CPUID 0x01e8 // CPUID vers 15 rev 8 (0x000001e8)
#define PARISC_PDC_CAPABILITIES 0x0002
#define PARISC_PDC_ENTRY_ORG 0x4800
#define PARISC_PDC_CACHE_INFO\
diff --git a/src/parisc/parisc.c b/src/parisc/parisc.c
index ffae2c5..73308bc 100644
--- a/src/parisc/parisc.c
+++ b/src/parisc/parisc.c
@@ -118,7 +118,8 @@ int pdc_console;
#define CONSOLE_SERIAL 0x0001
#define CONSOLE_GRAPHICS 0x0002
-int opsys_id = OS_ID_MPEXL; // default OS: OS_ID_HPUX or OS_ID_MPEXL
+unsigned int opsys_id = OS_ID_MPEXL; // default OS: OS_ID_HPUX or OS_ID_MPEXL
+unsigned int parisc_cpuid = PARISC_PDC_CPUID;
int sti_font;
@@ -947,8 +948,21 @@ static int pdc_chassis(ARG_LIST)
case PDC_CHASSIS_DISPWARN:
ARG4 = (ARG3 >> 17) & 7;
chassis_code = ARG3 & 0xffff;
- if (1) printf("\nPDC_CHASSIS: %s (%d), %sCHASSIS %0x\n",
+ if (1) printf("PDC_CHASSIS: %s (%d), %sCHASSIS %0x\n",
systat[ARG4], ARG4, (ARG3>>16)&1 ? "blank display, ":"", chassis_code);
+
+dump_mem(0x3a0, 32*4);
+#if 0
+IN:
+0x00000000000e4008: ldi 3c8,r21
+0x00000000000e400c: ldwa 0(r21),r21
+0x00000000000e4010: cmpb,=,n r0,r21,0xe41ec
+
+0x00000000000e4014: ldb -31(sp),r22
+0x00000000000e4018: depw r22,15,16,r26
+0x00000000000e401c: break 4,80
+#endif
+
// fall through
case PDC_CHASSIS_WARN:
// return warnings regarding fans, batteries and temperature: None!
@@ -1045,7 +1059,7 @@ static int pdc_model(ARG_LIST)
return -20;
return PDC_OK;
case PDC_MODEL_CPU_ID:
- result[0] = PARISC_PDC_CPUID;
+ result[0] = parisc_cpuid;
return PDC_OK;
case PDC_MODEL_CAPABILITIES:
result[0] = PARISC_PDC_CAPABILITIES;
@@ -1133,8 +1147,9 @@ static int pdc_coproc(ARG_LIST)
mtctl(-1UL, 10); /* initialize cr10 */
result[0] = 0xc0;
result[1] = 0xc0;
- result[17] = 0x01; // Revision /* 1 auf c3k */
- result[18] = 0x13; // Model /* 0x13 auf c3k */
+ result[17] = 1; // Revision
+ // use same model for FPU as for CPU
+ result[18] = parisc_cpuid >> 5; // Model
return PDC_OK;
}
return PDC_BAD_OPTION;
@@ -2155,6 +2170,7 @@ static void prepare_boot_path(volatile struct pz_device *dest,
/* copy device path to entry in PAGE0 */
memcpy((void*)dest, source, sizeof(*source));
+ // dest->iodc_io = 0; // delete predefined iodc_io
memcpy((void*)&dest->dp, mod_path, sizeof(struct device_path));
/* copy device path to stable storage */
@@ -2262,6 +2278,10 @@ void __VISIBLE start_parisc_firmware(void)
} else
opsys_id = OS_ID_HPUX; /* else default to HP-UX */
+ /* CPUID 0x01e8 PCX-L2 (B160) = 0x01e8 = vers 15 rev 8 */
+ parisc_cpuid = romfile_loadstring_to_int("opt/cpuid", parisc_cpuid);
+ dprintf(0, "fw_cfg: CPU ID %x\n", parisc_cpuid);
+
model.sw_id = romfile_loadstring_to_int("opt/hostid", model.sw_id);
dprintf(0, "fw_cfg: machine hostid %lu\n", model.sw_id);