aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2024-01-15 15:22:10 +0100
committerHelge Deller <deller@gmx.de>2024-01-15 15:22:10 +0100
commit0883dafe99d62a38138be1ac82467ab6b82e49ff (patch)
tree758a2b4b5d464970d345d153005c97f0b914137d
parentc7a6383b20418dda3eeaa4cefbb431fd3521c6fd (diff)
downloadseabios-hppa-0883dafe99d62a38138be1ac82467ab6b82e49ff.zip
seabios-hppa-0883dafe99d62a38138be1ac82467ab6b82e49ff.tar.gz
seabios-hppa-0883dafe99d62a38138be1ac82467ab6b82e49ff.tar.bz2
64-bit kernel boots with 64-bit PDC
-rw-r--r--src/parisc/parisc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/parisc/parisc.c b/src/parisc/parisc.c
index 7544171..bdd9eff 100644
--- a/src/parisc/parisc.c
+++ b/src/parisc/parisc.c
@@ -805,7 +805,7 @@ static void remove_parisc_devices(unsigned int num_cpus)
/* Fix monarch CPU */
BUG_ON(!cpu_dev);
- cpu_dev->mod_info->mod_addr = CPU_HPA;
+ cpu_dev->mod_info->mod_addr = F_EXTEND(CPU_HPA);
if (has_astro)
cpu_offset = CPU_HPA - 32*0x1000;
else
@@ -869,6 +869,14 @@ static hppa_device_t *add_index_all_devices(void)
for (i = 0; i < (MAX_DEVICES-1); i++) {
dev = parisc_devices + i;
+ if (!dev->hpa)
+ continue;
+
+ /* FIX PDC up for 64-bit PDC !!!
+ * hpa and mod_addr in device tables need upper 32 bits set
+ */
+ dev->hpa = F_EXTEND(dev->hpa);
+ dev->mod_info->mod_addr = F_EXTEND(dev->mod_info->mod_addr);
dev->index = index;
if (0)
@@ -1649,7 +1657,7 @@ static int pdc_iodc(unsigned long *arg)
struct pdc_iodc *iodc_p;
unsigned char *c;
- // dprintf(1, "\n\nSeaBIOS: Info PDC_IODC function %ld ARG3=%x ARG4=%x ARG5=%x ARG6=%x\n", option, ARG3, ARG4, ARG5, ARG6);
+ // dprintf(1, "\n\nSeaBIOS: Info PDC_IODC function %ld ARG3=%lx ARG4=%lx ARG5=%lx ARG6=%lx\n", option, ARG3, ARG4, ARG5, ARG6);
switch (option) {
case PDC_IODC_READ:
hpa = ARG3;