Author: avg
Date: Fri Mar 22 10:38:22 2019
New Revision: 345411
URL: https://svnweb.freebsd.org/changeset/base/345411

Log:
  intpm: change translation of HBA error status to smbus(4) errors
  
  PIIX4_SMBHSTSTAT_ERR can be set for several reasons that, unfortunately,
  cannot be distinguished, but the most typical case is a missing or hung
  slave (SMB_ENOACK).
  
  PIIX4_SMBHSTSTAT_FAIL means failed or killed / aborted transaction, so
  it's previous mapping to SMB_ENOACK was not ideal.
  
  After this change an smb(4) access to a missing slave results in ENXIO
  rather than EIO.  To me, that seems to be more appropriate.
  
  MFC after:    3 weeks

Modified:
  head/sys/dev/intpm/intpm.c

Modified: head/sys/dev/intpm/intpm.c
==============================================================================
--- head/sys/dev/intpm/intpm.c  Fri Mar 22 09:11:45 2019        (r345410)
+++ head/sys/dev/intpm/intpm.c  Fri Mar 22 10:38:22 2019        (r345411)
@@ -525,12 +525,19 @@ intsmb_error(device_t dev, int status)
 {
        int error = 0;
 
+       /*
+        * PIIX4_SMBHSTSTAT_ERR can mean either of
+        * - SMB_ENOACK ("Unclaimed cycle"),
+        * - SMB_ETIMEOUT ("Host device time-out"),
+        * - SMB_EINVAL ("Illegal command field").
+        * SMB_ENOACK seems to be most typical.
+        */
        if (status & PIIX4_SMBHSTSTAT_ERR)
-               error |= SMB_EBUSERR;
+               error |= SMB_ENOACK;
        if (status & PIIX4_SMBHSTSTAT_BUSC)
                error |= SMB_ECOLLI;
        if (status & PIIX4_SMBHSTSTAT_FAIL)
-               error |= SMB_ENOACK;
+               error |= SMB_EABORT;
 
        if (error != 0 && bootverbose)
                device_printf(dev, "error = %d, status = %#x\n", error, status);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to