Robert Reif wrote:
I'm trying to boot solaris 2.5.1 and it appears based on the addresses it's accessing that mbus systems think they are a single processor system.
Commenting out ob_sconfig_init gets further so this should depend on the machine type. Only single processor systems should have a slavioconfig entry.
Something like this is need so SMP machines (ss10, ss20, ss600mp) don't have this entry since they dont' have a slavio chip.
Index: include/openbios/drivers.h =================================================================== --- include/openbios/drivers.h (revision 420) +++ include/openbios/drivers.h (working copy) @@ -54,7 +54,8 @@ /* drivers/obio.c */ int ob_obio_init(uint64_t slavio_base, unsigned long fd_offset, unsigned long counter_offset, unsigned long intr_offset, - unsigned long aux1_offset, unsigned long aux2_offset); + unsigned long aux1_offset, unsigned long aux2_offset, + unsigned long sconfig_offset); int start_cpu(unsigned int pc, unsigned int context_ptr, unsigned int context, int cpu);
Index: arch/sparc32/openbios.c =================================================================== --- arch/sparc32/openbios.c (revision 420) +++ arch/sparc32/openbios.c (working copy) @@ -30,7 +30,7 @@ uint64_t iommu_base, slavio_base; uint64_t intctl_base, counter_base, nvram_base, ms_kb_base, serial_base; unsigned long fd_offset, counter_offset, intr_offset; - unsigned long aux1_offset, aux2_offset; + unsigned long aux1_offset, aux2_offset, sconfig_offset; uint64_t dma_base, esp_base, le_base; uint64_t tcx_base; int machine_id_low, machine_id_high; @@ -50,6 +50,7 @@ .intr_offset = 0x00e00000, .aux1_offset = 0x00900000, .aux2_offset = 0x00910000, + .sconfig_offset = 0x00800000, .dma_base = 0x78400000, .esp_base = 0x78800000, .le_base = 0x78c00000, @@ -69,6 +70,7 @@ .intr_offset = 0x00400000, // 0xff1400000ULL, .aux1_offset = 0x00800000, // 0xff1800000ULL, .aux2_offset = 0x00a01000, // 0xff1a01000ULL, + .sconfig_offset = -1, .dma_base = 0xef0400000ULL, .esp_base = 0xef0800000ULL, .le_base = 0xef0c00000ULL, @@ -88,6 +90,7 @@ .intr_offset = 0x00400000, // 0xff1400000ULL, .aux1_offset = 0x00800000, // 0xff1800000ULL, .aux2_offset = 0x00a01000, // 0xff1a01000ULL, XXX should not exist + .sconfig_offset = -1, .dma_base = 0xef0081000ULL, .esp_base = 0xef0080000ULL, .le_base = 0xef0060000ULL, @@ -122,7 +125,8 @@ #ifdef CONFIG_DRIVER_OBIO ob_obio_init(hwdef->slavio_base, hwdef->fd_offset, hwdef->counter_offset, hwdef->intr_offset, - hwdef->aux1_offset, hwdef->aux2_offset); + hwdef->aux1_offset, hwdef->aux2_offset, + hwdef->sconfig_offset); nvconf_init(); #endif #ifdef CONFIG_DRIVER_SBUS Index: drivers/obio.c =================================================================== --- drivers/obio.c (revision 420) +++ drivers/obio.c (working copy) @@ -1236,7 +1236,8 @@ int ob_obio_init(uint64_t slavio_base, unsigned long fd_offset, unsigned long counter_offset, unsigned long intr_offset, - unsigned long aux1_offset, unsigned long aux2_offset) + unsigned long aux1_offset, unsigned long aux2_offset, + unsigned long sconfig_offset) {
// All devices were integrated to NCR89C105, see @@ -1262,7 +1263,8 @@ if (fd_offset != (unsigned long) -1) ob_fd_init(slavio_base, fd_offset, FD_INTR);
- ob_sconfig_init(slavio_base, SLAVIO_SCONFIG); + if (sconfig_offset != (unsigned long) -1) + ob_sconfig_init(slavio_base, sconfig_offset);
ob_auxio_init(slavio_base, aux1_offset);