]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
libata: Add the AHCI_HFLAG_NO_WRITE_TO_RO flag
authorDoug Berger <opendmb@gmail.com>
Wed, 21 Jun 2017 23:20:13 +0000 (16:20 -0700)
committerTejun Heo <tj@kernel.org>
Thu, 22 Jun 2017 20:12:59 +0000 (16:12 -0400)
While most hardware will simply ignore a write to a read-only register,
some hardware will signal an abort if this occurs.

This commit introduces the flag AHCI_HFLAG_NO_WRITE_TO_RO to prevent the
AHCI library from attempting to write to the HOST_CAP, HOST_CAP2, and
HOST_PORTS_IMPL registers which may be read-only.

Signed-off-by: Doug Berger <opendmb@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/ahci.h
drivers/ata/libahci.c

index ee176e4af97a2eb228496c557ef180ce77c30ef9..8b61123d2c3c1cd55489feb389b68735077219d5 100644 (file)
@@ -249,6 +249,8 @@ enum {
 #endif
        AHCI_HFLAG_WAKE_BEFORE_STOP     = (1 << 22), /* wake before DMA stop */
        AHCI_HFLAG_YES_ALPM             = (1 << 23), /* force ALPM cap on */
+       AHCI_HFLAG_NO_WRITE_TO_RO       = (1 << 24), /* don't write to read
+                                                       only registers */
 
        /* ap->flags bits */
 
index 4462f8a8cf2c1c1edf79040ecbbe85ed61295f92..3e286d86ab42acbc54c84488e74ffc37f13dff65 100644 (file)
@@ -945,7 +945,8 @@ int ahci_reset_controller(struct ata_host *host)
                /* Some registers might be cleared on reset.  Restore
                 * initial values.
                 */
-               ahci_restore_initial_config(host);
+               if (!(hpriv->flags & AHCI_HFLAG_NO_WRITE_TO_RO))
+                       ahci_restore_initial_config(host);
        } else
                dev_info(host->dev, "skipping global host reset\n");