ATA fixes for 6.2-rc2
A single fix to address an issue with wake from suspend with PCS adapters, from Adam. -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSRPv8tYSvhwAzJdzjdoc3SxdoYdgUCY6+JYAAKCRDdoc3SxdoY dlYQAP0fABQ/yloLqTw11Lw0PNr3X8sVlI+l5QiOArmo9p2wvgEAqMP1bZVKlfp0 eSL10uDUxxuub69rK1v65wAIm4vp7AE= =gsn6 -----END PGP SIGNATURE----- Merge tag 'ata-6.2-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata Pull ata fix from Damien Le Moal: "A single fix to address an issue with wake from suspend with PCS adapters, from Adam" * tag 'ata-6.2-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata: ata: ahci: Fix PCS quirk application for suspend
This commit is contained in:
Коммит
e39d9b9f89
|
@ -83,6 +83,7 @@ enum board_ids {
|
||||||
static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
|
static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
|
||||||
static void ahci_remove_one(struct pci_dev *dev);
|
static void ahci_remove_one(struct pci_dev *dev);
|
||||||
static void ahci_shutdown_one(struct pci_dev *dev);
|
static void ahci_shutdown_one(struct pci_dev *dev);
|
||||||
|
static void ahci_intel_pcs_quirk(struct pci_dev *pdev, struct ahci_host_priv *hpriv);
|
||||||
static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
|
static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
|
||||||
unsigned long deadline);
|
unsigned long deadline);
|
||||||
static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
|
static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
|
||||||
|
@ -676,6 +677,25 @@ static void ahci_pci_save_initial_config(struct pci_dev *pdev,
|
||||||
ahci_save_initial_config(&pdev->dev, hpriv);
|
ahci_save_initial_config(&pdev->dev, hpriv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ahci_pci_reset_controller(struct ata_host *host)
|
||||||
|
{
|
||||||
|
struct pci_dev *pdev = to_pci_dev(host->dev);
|
||||||
|
struct ahci_host_priv *hpriv = host->private_data;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = ahci_reset_controller(host);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If platform firmware failed to enable ports, try to enable
|
||||||
|
* them here.
|
||||||
|
*/
|
||||||
|
ahci_intel_pcs_quirk(pdev, hpriv);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void ahci_pci_init_controller(struct ata_host *host)
|
static void ahci_pci_init_controller(struct ata_host *host)
|
||||||
{
|
{
|
||||||
struct ahci_host_priv *hpriv = host->private_data;
|
struct ahci_host_priv *hpriv = host->private_data;
|
||||||
|
@ -870,7 +890,7 @@ static int ahci_pci_device_runtime_resume(struct device *dev)
|
||||||
struct ata_host *host = pci_get_drvdata(pdev);
|
struct ata_host *host = pci_get_drvdata(pdev);
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = ahci_reset_controller(host);
|
rc = ahci_pci_reset_controller(host);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
ahci_pci_init_controller(host);
|
ahci_pci_init_controller(host);
|
||||||
|
@ -906,7 +926,7 @@ static int ahci_pci_device_resume(struct device *dev)
|
||||||
ahci_mcp89_apple_enable(pdev);
|
ahci_mcp89_apple_enable(pdev);
|
||||||
|
|
||||||
if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
|
if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
|
||||||
rc = ahci_reset_controller(host);
|
rc = ahci_pci_reset_controller(host);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
@ -1784,12 +1804,6 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
/* save initial config */
|
/* save initial config */
|
||||||
ahci_pci_save_initial_config(pdev, hpriv);
|
ahci_pci_save_initial_config(pdev, hpriv);
|
||||||
|
|
||||||
/*
|
|
||||||
* If platform firmware failed to enable ports, try to enable
|
|
||||||
* them here.
|
|
||||||
*/
|
|
||||||
ahci_intel_pcs_quirk(pdev, hpriv);
|
|
||||||
|
|
||||||
/* prepare host */
|
/* prepare host */
|
||||||
if (hpriv->cap & HOST_CAP_NCQ) {
|
if (hpriv->cap & HOST_CAP_NCQ) {
|
||||||
pi.flags |= ATA_FLAG_NCQ;
|
pi.flags |= ATA_FLAG_NCQ;
|
||||||
|
@ -1899,7 +1913,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
rc = ahci_reset_controller(host);
|
rc = ahci_pci_reset_controller(host);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче