On 04/08/16 20:22, Mark Cave-Ayland wrote:
Thanks for comprehensive testing :)
Let's start with the DP 3, 4 and PB being unable to identify the root device. The first step here is to get the macio/dbdma logs from QEMU - please can you enable DEBUG_MACIO in hw/ide/macio.c and DEBUG_DBDMA in hw/misc/macio/mac_dbdma.c and post the logs for either DP 4 or PB somewhere where I can grab them?
Thanks for the logs - I think I can see what is going wrong with the public beta, it's failing trying to read the TOC here:
------------ IDE transfer buffer_size: 14 buffer_index: 0 lba: ffffffff size: 14 ------------------------- DBDMA[1a]: writel 0x0000000000000d00 <= 0xd8009000 DBDMA[1a]: channel 0x1a reg 0x0 DBDMA[1a]: status 0x00009400 DBDMA: -> DBDMA_run_bh DBDMA[1a]: channel_run dbdma_cmd 0x55aed8ac1430 req_count 0x0800 command 0x2000 phy_addr 0x010ca000 cmd_dep 0x00000000 res_count 0x0000 xfer_status 0x0000 DBDMA[1a]: start_input DBDMA[1a]: addr 0x10ca000 key 0x0
pmac_ide_atapi_transfer_cb DBDMA[1a]: dbdma_end DBDMA[1a]: conditional_wait DBDMA[1a]: dbdma_cmdptr_save 0x01072000 DBDMA[1a]: xfer_status 0x00008400 res_count 0x0800 DBDMA[1a]: conditional_interrupt DBDMA[1a]: conditional_branch DBDMA[1a]: dbdma_cmdptr_load 0x01072010 DBDMA[1a]: channel_run dbdma_cmd 0x55aed8ac1430 req_count 0x0000 command 0x7000 phy_addr 0x00000000 cmd_dep 0x00000000 res_count 0x0000 xfer_status 0x0000 DBDMA: <- DBDMA_run_bh DBDMA[1a]: writel 0x0000000000000d00 <= 0xa0002000 DBDMA[1a]: channel 0x1a reg 0x0 DBDMA[1a]: status 0x00000000 DBDMA[1a]: readl 0x0000000000000d04 => 0x00000000 DBDMA[1a]: channel 0x1a reg 0x1 DBDMA[1a]: writel 0x0000000000000d00 <= 0xfc000000 DBDMA[1a]: channel 0x1a reg 0x0 DBDMA[1a]: status 0x00000000 DBDMA[1a]: readl 0x0000000000000d04 => 0x00000000 DBDMA[1a]: channel 0x1a reg 0x1 DBDMA[1a]: writel 0x0000000000000d08 <= 0x00000000 DBDMA[1a]: channel 0x1a reg 0x2 DBDMA[1a]: writel 0x0000000000000d0c <= 0x01072000 DBDMA[1a]: channel 0x1a reg 0x3 DBDMA[1a]: dbdma_cmdptr_load 0x01072000
This corresponds to this code in QEMU's hw/ide/macio.c:
if (s->lba == -1) { /* Non-block ATAPI transfer - just copy to RAM */ s->io_buffer_size = MIN(s->io_buffer_size, io->len); dma_memory_write(&address_space_memory, io->addr, s->io_buffer, s->io_buffer_size); ide_atapi_cmd_ok(s); m->dma_active = false; goto done; }
Here the QEMU block code should have already placed the generated TOC into s->io_buffer and DMA the first 14 bytes into RAM but for some reason that's not happening so the code is looping looking for a signature that isn't present.
Zoltan: this is very similar to the related issue you had with your MorphOS tests which this code should have resolved, unless I managed to get something wrong in my last rewrite of the macio code?
ATB,
Mark.