aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2023-10-13 14:06:31 +0200
committerHelge Deller <deller@gmx.de>2023-10-13 14:06:31 +0200
commitdf96dc39e04af0ebd61a207b46bf7ca082e7b56d (patch)
tree71bf9d2e9a0bb17b02f741a170081361ceef68f7
parent6ab15759b1173312a6ecdf8788a860f24f0d28e8 (diff)
downloadseabios-hppa-df96dc39e04af0ebd61a207b46bf7ca082e7b56d.zip
seabios-hppa-df96dc39e04af0ebd61a207b46bf7ca082e7b56d.tar.gz
seabios-hppa-df96dc39e04af0ebd61a207b46bf7ca082e7b56d.tar.bz2
fix CPU coprocessor detection and SCSI boot on HPUX
-rw-r--r--src/hw/blockcmd.c2
-rw-r--r--src/parisc/hppa_hardware.h2
-rw-r--r--src/parisc/parisc.c18
3 files changed, 15 insertions, 7 deletions
diff --git a/src/hw/blockcmd.c b/src/hw/blockcmd.c
index 89f16a8..abddb76 100644
--- a/src/hw/blockcmd.c
+++ b/src/hw/blockcmd.c
@@ -144,7 +144,7 @@ int
scsi_is_ready(struct disk_op_s *op)
{
ASSERT32FLAT();
- dprintf(6, "scsi_is_ready (drive=%p)\n", op->drive_fl);
+ // dprintf(6, "scsi_is_ready (drive=%p)\n", op->drive_fl);
/* Retry TEST UNIT READY for 5 seconds unless MEDIUM NOT PRESENT is
* reported by the device 3 times. If the device reports "IN PROGRESS",
diff --git a/src/parisc/hppa_hardware.h b/src/parisc/hppa_hardware.h
index b088801..3d67fbc 100644
--- a/src/parisc/hppa_hardware.h
+++ b/src/parisc/hppa_hardware.h
@@ -30,6 +30,8 @@
#define PCI_HPA DINO_HPA /* PCI bus */
+#define SCSI_HPA 0xf1040000 /* emulated SCSI, needs to be in f region */
+
/* offsets to DINO HPA: */
#define DINO_PCI_ADDR 0x064
#define DINO_CONFIG_DATA 0x068
diff --git a/src/parisc/parisc.c b/src/parisc/parisc.c
index 095017d..1b03a02 100644
--- a/src/parisc/parisc.c
+++ b/src/parisc/parisc.c
@@ -340,6 +340,7 @@ static const char *hpa_name(unsigned long hpa)
DO(DINO_SCSI_HPA)
DO(CPU_HPA)
DO(MEMORY_HPA)
+ DO(SCSI_HPA)
DO(LASI_HPA)
DO(LASI_UART_HPA)
DO(LASI_SCSI_HPA)
@@ -596,6 +597,7 @@ static void hppa_pci_build_devices_list(void)
BUG_ON(offs == -1UL);
pfa = (unsigned long) elroy_port(0, offs);
pfa += pci->bdf << 8;
+ pfa |= SCSI_HPA;
dprintf(1, "PCI device #%d %pP bdf 0x%x at pfa 0x%lx\n", curr_pci_devices, pci, pci->bdf, pfa);
pdev->hpa = pfa;
@@ -1399,7 +1401,10 @@ static int pdc_cache(unsigned int *arg)
machine_cache_info->ic_count, machine_cache_info->ic_loop, machine_cache_info->ic_stride,
machine_cache_info->dc_count, machine_cache_info->dc_loop, machine_cache_info->dc_stride);
#endif
-#if 0
+#if 1
+ machine_cache_info->ic_size = 1024; /* no instruction cache */
+ machine_cache_info->dc_size = 1024; /* no data cache */
+#elif 0
machine_cache_info->dc_conf = (struct pdc_cache_cf) { 0 }; // .alias=1, .sh=3, };
machine_cache_info->ic_conf = (struct pdc_cache_cf) { 0 }; // .alias=1, .sh=3, };
@@ -1459,10 +1464,10 @@ static int pdc_coproc(unsigned int *arg)
/* Set one bit per cpu in ccr_functional and ccr_present.
Ignore that specification only mentions 8 bits for cr10
and set all FPUs functional */
- mask = 1UL;
+ mask = 1UL << 7;
mtctl(mask, 10); /* initialize cr10 */
- result[0] = 1; // mask
- result[1] = 1; // mask
+ result[0] = mask;
+ result[1] = mask;
result[17] = 1; // Revision
result[18] = has_astro ? 0x0f : 0x13; // Model
return PDC_OK;
@@ -1495,7 +1500,7 @@ static int pdc_iodc(unsigned int *arg)
ARG6 = 2; // Memory modules return 2 bytes of IODC memory (result2 ret[0] = 0x6701f41 HI !!)
memcpy((void*) ARG5, iodc_p, ARG6);
c = (unsigned char *) ARG5;
- printf("SeaBIOS: PDC_IODC get: hpa = 0x%lx, HV: 0x%x 0x%x IODC_SPA=0x%x type 0x%x, \n", hpa, c[0], c[1], c[2], c[3]);
+ // printf("SeaBIOS: PDC_IODC get: hpa = 0x%lx, HV: 0x%x 0x%x IODC_SPA=0x%x type 0x%x, \n", hpa, c[0], c[1], c[2], c[3]);
// c[0] = iodc_p->hversion_model; // FIXME. BROKEN HERE !!!
// c[1] = iodc_p->hversion_rev || (iodc_p->hversion << 4);
result[0] = ARG6;
@@ -1804,7 +1809,7 @@ static int pdc_system_map(unsigned int *arg)
case PDC_TRANSLATE_PATH:
mod_path = (struct pdc_module_path *)ARG3;
hppa_device_t *dev = find_hppa_device_by_path(mod_path, &hpa_index, 1);
- if (1) {
+ if (0) {
dprintf(1, "PDC_TRANSLATE_PATH dev=%p hpa=%lx ", dev, dev ? dev->hpa:0UL);
print_mod_path(mod_path);
if (dev && dev->pci)
@@ -2587,6 +2592,7 @@ static void find_scsi_pci_card(void)
pdev++;
pdev->pci_addr = pmem;
mem_boot_boot.hpa = pdev->hpa;
+ dprintf(1, "PCI: Enabling BOOT DEVICE HPA %x\n", mem_boot_boot.hpa);
}