Bochs DMA Errors and invlaid DMA Bus Master port # PCI BAR4
Posted: Mon Oct 29, 2018 2:41 pm
HI,
I have a problem with DMA in bochs and qemu.
I have my OS run correctly in virtual box. when I tried to run it on bochs the DMA IDE interrupts stopped to fire upon reading sectors.
I have been struggling with this for a couple of days with no clue of what is going on.
I have enabled DMA debugging in side bochs and I have noticed during the BIOS initialization that the DMA debug messages indicate that the DMA Bus Master I/O port is 0x80 or 0x000d ?!!
The important thing is that it is different from the value I read from BAR4 in the PCI header of the ATA disk I have which is 0xC001, and having the status bit set indicates that it is an I/O port and not mem/io so the port address i 0xc000.
When I try to write to this address, bochs does not generate any debug output which made me suspect that there is something wrong with this address.
I hardwired the dma port address to 0x80 and only then bochs starts spitting out debug info upon writing to that address.
The problem is that I still cannot get interrupts to fire.
An error occurs when I try to write to the address offset to set the DMA table (offset 4) and the debug output is as follows:
Notice the write to 0x0084, that is the attempt to write to the address offset which says that it is ignored.
Any help will be much appreciated.
Thanks a lot,
Karim.
I have a problem with DMA in bochs and qemu.
I have my OS run correctly in virtual box. when I tried to run it on bochs the DMA IDE interrupts stopped to fire upon reading sectors.
I have been struggling with this for a couple of days with no clue of what is going on.
I have enabled DMA debugging in side bochs and I have noticed during the BIOS initialization that the DMA debug messages indicate that the DMA Bus Master I/O port is 0x80 or 0x000d ?!!
Code: Select all
00000000000d[DMA ] write: address=000d value=00
00000000000d[DMA ] DMA-1: master clear
00000000000d[DMA ] write: address=00da value=00
00000000000d[DMA ] DMA-2: master clear
00000000005d[DMA ] write: address=00d6 value=c0
00000000005d[DMA ] DMA-2: mode register[0] = c0
00000000005d[DMA ] write: address=00d4 value=00
00000000005d[DMA ] DMA-2: set_mask_bit=0, channel=0, mask now=00h
00000005160d[DMA ] write: address=0080 value=00
00000005160d[DMA ] write: extra page register 0x0080 (unused)
00000005200d[DMA ] write: address=0080 value=00
00000005200d[DMA ] write: extra page register 0x0080 (unused)
00000005235d[DMA ] write: address=0080 value=00
00000005235d[DMA ] write: extra page register 0x0080 (unused)
00000005275d[DMA ] write: address=0080 value=00
00000005275d[DMA ] write: extra page register 0x0080 (unused)
00000005310d[DMA ] write: address=0080 value=00
......
When I try to write to this address, bochs does not generate any debug output which made me suspect that there is something wrong with this address.
I hardwired the dma port address to 0x80 and only then bochs starts spitting out debug info upon writing to that address.
The problem is that I still cannot get interrupts to fire.
An error occurs when I try to write to the address offset to set the DMA table (offset 4) and the debug output is as follows:
Code: Select all
00704828900d[DMA ] write: address=0080 value=00
00704828900d[DMA ] write: extra page register 0x0080 (unused)
00704828910d[DMA ] write: address=0082 value=06
00704828910d[DMA ] DMA-1: page register 3 = 06
00704828920e[DEV ] write to port 0x0084 with len 4 ignored
00704838220d[DMA ] read addr=0082
00704843265d[DMA ] write: address=0080 value=09
00704843265d[DMA ] write: extra page register 0x0080 (unused)
Any help will be much appreciated.
Thanks a lot,
Karim.