mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 14:50:19 +00:00
libata fixes for 5.16-rc2
* Prevent accesses to unsupported log pages as that causes device scan failures with LLDDs using libsas (from me). * A couple of fixes for AMD AHCI adapters handling of low power modes and resume (from Mario). * Fix a compilation warning (from me). -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQSRPv8tYSvhwAzJdzjdoc3SxdoYdgUCYZghUgAKCRDdoc3SxdoY dhOcAQC2K9EI479PDutvtwO9QOPr8mGCPh01t711G6BhQcJLBwEA7qzpMBpDxgRc l39Nqs8Wc3UgiQnIqOFZnzux3xiN7A8= =9kBE -----END PGP SIGNATURE----- Merge tag 'libata-5.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata Pull libata fixes from Damien Le Moal: - Prevent accesses to unsupported log pages as that causes device scan failures with LLDDs using libsas (from me). - A couple of fixes for AMD AHCI adapters handling of low power modes and resume (from Mario). - Fix a compilation warning (from me). * tag 'libata-5.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata: ata: libata-sata: Declare ata_ncq_sdev_attrs static ata: libahci: Adjust behavior when StorageD3Enable _DSD is set ata: ahci: Add Green Sardine vendor ID as board_ahci_mobile ata: libata: add missing ata_identify_page_supported() calls ata: libata: improve ata_read_log_page() error message
This commit is contained in:
commit
a90af8f15b
@ -438,6 +438,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
/* AMD */
|
||||
{ PCI_VDEVICE(AMD, 0x7800), board_ahci }, /* AMD Hudson-2 */
|
||||
{ PCI_VDEVICE(AMD, 0x7900), board_ahci }, /* AMD CZ */
|
||||
{ PCI_VDEVICE(AMD, 0x7901), board_ahci_mobile }, /* AMD Green Sardine */
|
||||
/* AMD is using RAID class only for ahci controllers */
|
||||
{ PCI_VENDOR_ID_AMD, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
PCI_CLASS_STORAGE_RAID << 8, 0xffffff, board_ahci },
|
||||
|
@ -2323,6 +2323,18 @@ int ahci_port_resume(struct ata_port *ap)
|
||||
EXPORT_SYMBOL_GPL(ahci_port_resume);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static void ahci_handle_s2idle(struct ata_port *ap)
|
||||
{
|
||||
void __iomem *port_mmio = ahci_port_base(ap);
|
||||
u32 devslp;
|
||||
|
||||
if (pm_suspend_via_firmware())
|
||||
return;
|
||||
devslp = readl(port_mmio + PORT_DEVSLP);
|
||||
if ((devslp & PORT_DEVSLP_ADSE))
|
||||
ata_msleep(ap, devslp_idle_timeout);
|
||||
}
|
||||
|
||||
static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
|
||||
{
|
||||
const char *emsg = NULL;
|
||||
@ -2336,6 +2348,9 @@ static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg)
|
||||
ata_port_freeze(ap);
|
||||
}
|
||||
|
||||
if (acpi_storage_d3(ap->host->dev))
|
||||
ahci_handle_s2idle(ap);
|
||||
|
||||
ahci_rpm_put_port(ap);
|
||||
return rc;
|
||||
}
|
||||
|
@ -2031,8 +2031,9 @@ retry:
|
||||
dev->horkage |= ATA_HORKAGE_NO_DMA_LOG;
|
||||
goto retry;
|
||||
}
|
||||
ata_dev_err(dev, "Read log page 0x%02x failed, Emask 0x%x\n",
|
||||
(unsigned int)page, err_mask);
|
||||
ata_dev_err(dev,
|
||||
"Read log 0x%02x page 0x%02x failed, Emask 0x%x\n",
|
||||
(unsigned int)log, (unsigned int)page, err_mask);
|
||||
}
|
||||
|
||||
return err_mask;
|
||||
@ -2177,6 +2178,9 @@ static void ata_dev_config_ncq_prio(struct ata_device *dev)
|
||||
struct ata_port *ap = dev->link->ap;
|
||||
unsigned int err_mask;
|
||||
|
||||
if (!ata_identify_page_supported(dev, ATA_LOG_SATA_SETTINGS))
|
||||
return;
|
||||
|
||||
err_mask = ata_read_log_page(dev,
|
||||
ATA_LOG_IDENTIFY_DEVICE,
|
||||
ATA_LOG_SATA_SETTINGS,
|
||||
@ -2453,7 +2457,8 @@ static void ata_dev_config_devslp(struct ata_device *dev)
|
||||
* Check device sleep capability. Get DevSlp timing variables
|
||||
* from SATA Settings page of Identify Device Data Log.
|
||||
*/
|
||||
if (!ata_id_has_devslp(dev->id))
|
||||
if (!ata_id_has_devslp(dev->id) ||
|
||||
!ata_identify_page_supported(dev, ATA_LOG_SATA_SETTINGS))
|
||||
return;
|
||||
|
||||
err_mask = ata_read_log_page(dev,
|
||||
|
@ -922,7 +922,7 @@ DEVICE_ATTR(ncq_prio_enable, S_IRUGO | S_IWUSR,
|
||||
ata_ncq_prio_enable_show, ata_ncq_prio_enable_store);
|
||||
EXPORT_SYMBOL_GPL(dev_attr_ncq_prio_enable);
|
||||
|
||||
struct attribute *ata_ncq_sdev_attrs[] = {
|
||||
static struct attribute *ata_ncq_sdev_attrs[] = {
|
||||
&dev_attr_unload_heads.attr,
|
||||
&dev_attr_ncq_prio_enable.attr,
|
||||
&dev_attr_ncq_prio_supported.attr,
|
||||
|
Loading…
x
Reference in New Issue
Block a user