:p
atchew
Login
I am so sorry to reply late. Here is the newly rebase patch, pls help check, thanks. 1: For ATA device, the first ATA_CMD_IDENTIFY_PACKET_DEVICE command will be failed with PORT_IRQ_TF set to 1 from ahci spec; 2: For seabios, this fail will be considered as timeout for it only polling PORT_IRQ_D2H_REG/PIO_FIS; 3: From ahci spec, I have not yet found any evidences which can be use to combine the above fail with these above error; May be, we can also add PORT_IRQ_TF_ERR bit check while polling command completion? Signed-off-by: zhaoxin\runaguooc <RunaGuo-oc@zhaoxin.com> --- src/hw/ahci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hw/ahci.c b/src/hw/ahci.c index XXXXXXX..XXXXXXX 100644 --- a/src/hw/ahci.c +++ b/src/hw/ahci.c @@ -XXX,XX +XXX,XX @@ static int ahci_command(struct ahci_port_s *port_gf, int iswrite, int isatapi, error = GET_LOWFLAT(fis->psfis[3]); break; } - if (intbits & 0x01) { + + if (intbits & (0x01| PORT_IRQ_TF_ERR)) { status = GET_LOWFLAT(fis->rfis[2]); error = GET_LOWFLAT(fis->rfis[3]); break; -- 2.17.1 ________________________________ 发件人: Gerd Hoffmann <kraxel@redhat.com> 发送时间: 2020年9月30日 18:58:20 收件人: RunaGuo-oc 抄送: seabios@seabios.org 主题: Re: [SeaBIOS] [PATCH] AHCI: The attached ATA device cannot be detected when binding AHCI controller to Virtual Machine On Tue, Aug 04, 2020 at 11:17:05AM -0000, RunaGuo-oc@zhaoxin.com wrote: > When binding AHCI controller to virtual machine, the attached ATA device cannot be recognized for the following reason: > The first Identify PACKET CMD will be failed without dobut which will lead PORT_IRQ_TF_ERR be set in PxIS due to ERR bit set to 1 in D2H Register FIS(PxTFD.STS.ERR=1). In this case, the first CMD will be timeout for seabios only polling PORT_IRQ_D2H_REG_FIS & PORT_IRQ_PIOS_FIS before triggering error handling which leads AHCI controller is an error state, then the second IDENTIFY CMD cannot be issued by AHCI controller, no ATA device will be detected. > > In AHCI spec HBA Port State Machine section(5.3.8.1 and 5.3.16.5), we can see this sequence: RegFIS:Entry --> ERR:FatalTaskfile (PxTFD.STS.ERR=1) --> ERR:WaitForClear, no entry for PORT_IRQ_D2H_REG_FIS/PORT_IRQ_PIOS_FIS to be set at this time. > > May be we can also add PORT_IRQ_TF_ERR bit check when polling command completion status? > > fail log: > 02.386: |bffa6000| AHCI/1: link up > 02.387: |bffa6000| AHCI/1: send cmd ... > 02.387: |bffa7000| phys_free bffa9c00 (detail=0xbffaa320) > 02.396: |bffa7000| phys_free bffaa200 (detail=0xbffaa1d0) > 02.396: |bffa7000| phys_free bffaa000 (detail=0xbffaa1a0) > 02.396: |bffa7000| phys_free bffaa380 (detail=0xbffaa350) > 02.400: \bffa7000/ End thread > 02.401: phys_free bffa7000 (detail=0xbffaa170) > 34.391: |bffa6000| WARNING - Timeout at ahci_command:153! > 34.392: |bffa6000| AHCI/1: send cmd ... > 66.397: |bffa6000| WARNING - Timeout at ahci_command:153! > > Signed-off-by: zhaoxin\runaguooc <RunaGuo-oc@zhaoxin.com> Patch doesn't apply to git master. Can you rebase and resend? And while being at it wrap the commit message to hot have lines longer than 80 chars? thanks, Gerd _______________________________________________ SeaBIOS mailing list -- seabios@seabios.org To unsubscribe send an email to seabios-leave@seabios.org
Hi Paul, Thank you for your recent detailed email reply. I'm not good at sending patches. I have already sent another patch which met your request by git send-email format before i found your email address, i hope you can also receive it, i.m so sorry. for your question about how i test this: 1:boot OS from storages other than AHCI with IOV enabled,eg,XHCI; 2:attach an SSD(not ODD) to SATA-AHCI port in zhaoxin platform; 3:build seabios in debug mode and run the qemu script in attachment document; 4: we can failed log in previous mail. thanks, Runa ________________________________ 发件人: RunaGuo-oc 发送时间: 2021年3月28日 19:23 收件人: Gerd Hoffmann 抄送: seabios@seabios.org 主题: 答复: [SeaBIOS] [PATCH] AHCI: The attached ATA device cannot be detected when binding AHCI controller to Virtual Machine I am so sorry to reply late. Here is the newly rebase patch, pls help check, thanks. 1: For ATA device, the first ATA_CMD_IDENTIFY_PACKET_DEVICE command will be failed with PORT_IRQ_TF set to 1 from ahci spec; 2: For seabios, this fail will be considered as timeout for it only polling PORT_IRQ_D2H_REG/PIO_FIS; 3: From ahci spec, I have not yet found any evidences which can be use to combine the above fail with these above error; May be, we can also add PORT_IRQ_TF_ERR bit check while polling command completion? Signed-off-by: zhaoxin\runaguooc <RunaGuo-oc@zhaoxin.com> --- src/hw/ahci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hw/ahci.c b/src/hw/ahci.c index XXXXXXX..XXXXXXX 100644 --- a/src/hw/ahci.c +++ b/src/hw/ahci.c @@ -XXX,XX +XXX,XX @@ static int ahci_command(struct ahci_port_s *port_gf, int iswrite, int isatapi, error = GET_LOWFLAT(fis->psfis[3]); break; } - if (intbits & 0x01) { + + if (intbits & (0x01| PORT_IRQ_TF_ERR)) { status = GET_LOWFLAT(fis->rfis[2]); error = GET_LOWFLAT(fis->rfis[3]); break; -- 2.17.1 ________________________________ 发件人: Gerd Hoffmann <kraxel@redhat.com> 发送时间: 2020年9月30日 18:58:20 收件人: RunaGuo-oc 抄送: seabios@seabios.org 主题: Re: [SeaBIOS] [PATCH] AHCI: The attached ATA device cannot be detected when binding AHCI controller to Virtual Machine On Tue, Aug 04, 2020 at 11:17:05AM -0000, RunaGuo-oc@zhaoxin.com wrote: > When binding AHCI controller to virtual machine, the attached ATA device cannot be recognized for the following reason: > The first Identify PACKET CMD will be failed without dobut which will lead PORT_IRQ_TF_ERR be set in PxIS due to ERR bit set to 1 in D2H Register FIS(PxTFD.STS.ERR=1). In this case, the first CMD will be timeout for seabios only polling PORT_IRQ_D2H_REG_FIS & PORT_IRQ_PIOS_FIS before triggering error handling which leads AHCI controller is an error state, then the second IDENTIFY CMD cannot be issued by AHCI controller, no ATA device will be detected. > > In AHCI spec HBA Port State Machine section(5.3.8.1 and 5.3.16.5), we can see this sequence: RegFIS:Entry --> ERR:FatalTaskfile (PxTFD.STS.ERR=1) --> ERR:WaitForClear, no entry for PORT_IRQ_D2H_REG_FIS/PORT_IRQ_PIOS_FIS to be set at this time. > > May be we can also add PORT_IRQ_TF_ERR bit check when polling command completion status? > > fail log: > 02.386: |bffa6000| AHCI/1: link up > 02.387: |bffa6000| AHCI/1: send cmd ... > 02.387: |bffa7000| phys_free bffa9c00 (detail=0xbffaa320) > 02.396: |bffa7000| phys_free bffaa200 (detail=0xbffaa1d0) > 02.396: |bffa7000| phys_free bffaa000 (detail=0xbffaa1a0) > 02.396: |bffa7000| phys_free bffaa380 (detail=0xbffaa350) > 02.400: \bffa7000/ End thread > 02.401: phys_free bffa7000 (detail=0xbffaa170) > 34.391: |bffa6000| WARNING - Timeout at ahci_command:153! > 34.392: |bffa6000| AHCI/1: send cmd ... > 66.397: |bffa6000| WARNING - Timeout at ahci_command:153! > > Signed-off-by: zhaoxin\runaguooc <RunaGuo-oc@zhaoxin.com> Patch doesn't apply to git master. Can you rebase and resend? And while being at it wrap the commit message to hot have lines longer than 80 chars? thanks, Gerd _______________________________________________ SeaBIOS mailing list -- seabios@seabios.org To unsubscribe send an email to seabios-leave@seabios.org