[coreboot] [SeaBIOS] [SimNow] PORT_IRQ_STAT register is 0 in ahci_port_setup
WANG Siyuan
wangsiyuanbuaa at gmail.com
Fri Mar 8 04:48:57 CET 2013
According to this piece of code in src/ahci.c, seabios fails to set
DMA or PIO on ahci. PORT_IRQ_STAT is 0.
end = calc_future_tsc(AHCI_REQUEST_TIMEOUT);
do {
for (;;) {
intbits = ahci_port_readl(ctrl, pnr, PORT_IRQ_STAT);
//dprintf(1, "intbits == 0x%x\n", intbits);
if (intbits) {
ahci_port_writel(ctrl, pnr, PORT_IRQ_STAT, intbits);
if (intbits & 0x02) {
status = GET_LOWFLAT(fis->psfis[2]);
error = GET_LOWFLAT(fis->psfis[3]);
break;
}
if (intbits & 0x01) {
status = GET_LOWFLAT(fis->rfis[2]);
error = GET_LOWFLAT(fis->rfis[3]);
break;
}
}
if (check_tsc(end)) {
warn_timeout();
return -1;
}
yield();
}
dprintf(8, "AHCI/%d: ... intbits 0x%x, status 0x%x ...\n",
pnr, intbits, status);
} while (status & ATA_CB_STAT_BSY);
On Fri, Mar 8, 2013 at 7:34 AM, Kevin O'Connor <kevin at koconnor.net> wrote:
> On Thu, Mar 07, 2013 at 04:59:43PM +0800, WANG Siyuan wrote:
>> Hi,
>> I am trying to boot a hard disk image using coreboot and seabios on
>> SimNow Simulator.
>> The system stops at seabios stage.
>>
>> PORT_CMD_START fails in function ahci_port_setup (seabios/src/ahci.c),
>> Then I traced into function ahci_command (seabios/src/ahci.c), I found
>> the value of register ORT_IRQ_STAT is always 0:
>> intbits = ahci_port_readl(ctrl, pnr, PORT_IRQ_STAT);
>> intbits returns 0 all the time, so system stops here until time out.
>>
>> Any comments would be appreciated.
>
> There is a 32 second timeout in that code (which may be a longer wall
> time if run under a simulator) - are you sure it didn't eventually
> time out. As to why it is taking so long - could be an error in the
> simulator or in the seabios driver. You could try disabling the ahci
> code in seabios via kconfig.
>
> -Kevin
--
Yours sincerely,
WANG Siyuan
More information about the coreboot
mailing list