diff options
author | Helge Deller <deller@gmx.de> | 2023-10-13 14:06:31 +0200 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2023-10-13 14:06:31 +0200 |
commit | df96dc39e04af0ebd61a207b46bf7ca082e7b56d (patch) | |
tree | 71bf9d2e9a0bb17b02f741a170081361ceef68f7 | |
parent | 6ab15759b1173312a6ecdf8788a860f24f0d28e8 (diff) | |
download | seabios-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.c | 2 | ||||
-rw-r--r-- | src/parisc/hppa_hardware.h | 2 | ||||
-rw-r--r-- | src/parisc/parisc.c | 18 |
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); } |