aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2019-03-14 20:38:07 +0100
committerHelge Deller <deller@gmx.de>2019-03-14 20:38:07 +0100
commitdca21bdd9745513662322e3fb02bbd03dfb057d3 (patch)
tree6cfd6e34dfaa48204a3728eda441b214e400a329
parent7d3e970c4ef3b53f1af1d4e60c1751b150a5fe52 (diff)
downloadseabios-hppa-dca21bdd9745513662322e3fb02bbd03dfb057d3.zip
seabios-hppa-dca21bdd9745513662322e3fb02bbd03dfb057d3.tar.gz
seabios-hppa-dca21bdd9745513662322e3fb02bbd03dfb057d3.tar.bz2
Fix CPU HPA mod path, needs fix for qemu as well!
-rw-r--r--src/parisc/b160l.h4
-rw-r--r--src/parisc/hppa_hardware.h2
-rw-r--r--src/parisc/parisc.c11
3 files changed, 11 insertions, 6 deletions
diff --git a/src/parisc/b160l.h b/src/parisc/b160l.h
index b5d2f5a..27857cc 100644
--- a/src/parisc/b160l.h
+++ b/src/parisc/b160l.h
@@ -436,7 +436,7 @@ static struct pdc_iodc iodc_data_hpa_f8000000 = {
#define HPA_fff10000_DESCRIPTION "Merlin L2 160 (9000/778/B160L)"
static struct pdc_system_map_mod_info mod_info_hpa_fff10000 = {
- .mod_addr = 0xfff10000,
+ .mod_addr = CPU_HPA,
.mod_pgs = 0x1,
.add_addrs = 0x0,
};
@@ -609,7 +609,7 @@ static struct pdc_iodc iodc_data_hpa_fff81000 = {
.mod_path = &mod_path_hpa_f8000000,\
.num_addr = HPA_f8000000_num_addr,\
.add_addr = { HPA_f8000000_add_addr } },\
- { .hpa = 0xfff10000,\
+ { .hpa = CPU_HPA,\
.iodc = &iodc_data_hpa_fff10000,\
.mod_info = &mod_info_hpa_fff10000,\
.mod_path = &mod_path_hpa_fff10000,\
diff --git a/src/parisc/hppa_hardware.h b/src/parisc/hppa_hardware.h
index 919cf60..28be7d1 100644
--- a/src/parisc/hppa_hardware.h
+++ b/src/parisc/hppa_hardware.h
@@ -31,7 +31,7 @@
#define LASI_PS2KBD_HPA 0xffd08000
#define LASI_PS2MOU_HPA 0xffd08100
#define LASI_GFX_HPA 0xf8000000
-#define CPU_HPA 0xfff10000
+#define CPU_HPA 0xfffb0000
#define MEMORY_HPA 0xfffbf000
#define PCI_HPA DINO_HPA /* PCI bus */
diff --git a/src/parisc/parisc.c b/src/parisc/parisc.c
index b0053c7..27dbc97 100644
--- a/src/parisc/parisc.c
+++ b/src/parisc/parisc.c
@@ -179,7 +179,7 @@ static struct drive_s *parisc_boot_cdrom; // first DVD or CD-ROM
static struct pdc_module_path mod_path_emulated_drives = {
.path = { .flags = 0x0, .bc = { 0xff, 0xff, 0xff, 0x8, 0x0, 0x0 }, .mod = 0x0 },
- .layers = { 0xAA, 0xBB, 0x0, 0x0, 0x0, 0x0 } // AA/BB gets replaced
+ .layers = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } // first two layer entries get replaced
};
/********************************************************
@@ -280,7 +280,12 @@ static void remove_parisc_devices(unsigned int num_cpus)
p++;
}
- /* Generate CPU list */
+ /* Fix monarch CPU */
+ BUG_ON(!cpu_dev);
+ cpu_dev->mod_info->mod_addr = CPU_HPA;
+ cpu_dev->mod_path->path.mod = (CPU_HPA - DINO_HPA) / 0x1000;
+
+ /* Generate other CPU devices */
for (i = 1; i < num_cpus; i++) {
unsigned long hpa = CPU_HPA + i*0x1000;
@@ -292,7 +297,7 @@ static void remove_parisc_devices(unsigned int num_cpus)
parisc_devices[t].mod_info = &modinfo[i];
modpath[i] = *cpu_dev->mod_path;
- modpath[i].path.mod = 128 + i;
+ modpath[i].path.mod = (hpa - DINO_HPA) / 0x1000;
parisc_devices[t].mod_path = &modpath[i];
t++;