[SeaBIOS] 答复: [PATCH] AHCI: The attached ATA device cannot be detected when binding AHCI controller to Virtual Machine

RunaGuo-oc posted 1 patch 3 years, 1 month ago
Failed in applying to current master (apply log)
There is a newer version of this series
src/hw/ahci.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[SeaBIOS] 答复: [PATCH] AHCI: The attached ATA device cannot be detected when binding AHCI controller to Virtual Machine
Posted by RunaGuo-oc 3 years, 1 month ago

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 d45b430..998b5fe 100644
--- a/src/hw/ahci.c
+++ b/src/hw/ahci.c
@@ -143,7 +143,8 @@ 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
[SeaBIOS] Re: 答复: [PATCH] AHCI: The attached ATA device cannot be detected when binding AHCI controller to Virtual Machine
Posted by Paul Menzel 3 years, 1 month ago
Dear Run Guo,

Am 28.03.21 um 13:23 schrieb RunaGuo-oc:
> I am so sorry to reply late.

Thank you for following up. Can you please configure your email client 
to use UTF-8 character set instead of gb2312? The subject line looks 
quite mangled. Also, please just send plain text messages, and no HTML 
part [1].

> Here is the newly rebase patch, pls help  check, thanks.

Can you please use git send-email to send the patches [2]?

     $ git commit --amend -s
     $ git format-patch --reroll-count=3 -1
     $ git send-email 0001*

> 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;

AHCI

> 2: For seabios, this fail will be considered as timeout for it only polling PORT_IRQ_D2H_REG/PIO_FIS;

SeaBIOS

> 3: From ahci spec, I have not yet found  any evidences which can be use to combine the 

AHCI

> above fail with these above error;

Please add how you tested this.

> May be, we can also add PORT_IRQ_TF_ERR bit check while polling command completion?
Thank you again for your contribution.

> Signed-off-by: zhaoxin\runaguooc <RunaGuo-oc@zhaoxin.com>

Please configure the author name with:

     $ git config --global user.name Runa Guo-oc

> ---
>   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 d45b430..998b5fe 100644
> --- a/src/hw/ahci.c
> +++ b/src/hw/ahci.c
> @@ -143,7 +143,8 @@ 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


Kind regards,

Paul


[1]: https://useplaintext.email/
[2]: https://git-scm.com/docs/git-send-email#_examples
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-leave@seabios.org
[SeaBIOS] 答复: [PATCH] AHCI: The attached ATA device cannot be detected when binding AHCI controller to Virtual Machine
Posted by RunaGuo-oc 3 years ago

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 d45b430..998b5fe 100644
--- a/src/hw/ahci.c
+++ b/src/hw/ahci.c
@@ -143,7 +143,8 @@ 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