On Wed, Mar 21, 2012 at 10:50:17PM +0100, Nils wrote:
Op zaterdag 10-03-2012 om 14:05 uur [tijdzone -0500], schreef Kevin O'Connor:
It looks pretty clear that the controller doesn't like 9-segment nor e-segment addresses. You could try "malloc_low() - 0x50000" to see how the controller likes 4-segment address, but basically the only hope of getting this to work is to see if you can fix the controller.
I studied the datasheets and tried different things but had no result.
Then i tried "malloc_low() - 0x100" and the controller seems to work.
Could it be that some SeaBIOS parts overlap at LOWRAM_END ? ( ohci controller and (E)BDA ?)
The logs pretty clearly indicate that the ram is in the 9-segment and not the a-segment. It may be a hardware bug that confuses addresses that are close.
Do you have any suggestions ?
Attached log from latest git + debugging patch and log from same code but with "malloc_low() - 0x100" .
If it's just a 256 byte offset, you can add a "malloc_low(256)" to the top of usb.c:usb_setup() to reserve the troublesome addresses. Note though, the e-segment values we tested before seem to be also impacted. I have a vague plan to change SeaBIOS in the future to use e-segment addresses instead of 9-segment addresses.