ata: ahci: Disable SXS for Hisilicon Kunpeng920
[ Upstream commit 234e6d2c18f5b080cde874483c4c361f3ae7cffe ] On Hisilicon Kunpeng920, ESP is set to 1 by default for all ports of SATA controller. In some scenarios, some ports are not external SATA ports, and it cause disks connected to these ports to be identified as removable disks. So disable the SXS capability on the software side to prevent users from mistakenly considering non-removable disks as removable disks and performing related operations. Signed-off-by: Xingui Yang <yangxingui@huawei.com> Signed-off-by: Luo Jiaxing <luojiaxing@huawei.com> Reviewed-by: John Garry <john.garry@huawei.com> Link: https://lore.kernel.org/r/1615544676-61926-1-git-send-email-luojiaxing@huawei.com Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
1f3daf672a
commit
7d77ac088f
|
@ -1728,6 +1728,11 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
|
hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64
|
#ifdef CONFIG_ARM64
|
||||||
|
if (pdev->vendor == PCI_VENDOR_ID_HUAWEI &&
|
||||||
|
pdev->device == 0xa235 &&
|
||||||
|
pdev->revision < 0x30)
|
||||||
|
hpriv->flags |= AHCI_HFLAG_NO_SXS;
|
||||||
|
|
||||||
if (pdev->vendor == 0x177d && pdev->device == 0xa01c)
|
if (pdev->vendor == 0x177d && pdev->device == 0xa01c)
|
||||||
hpriv->irq_handler = ahci_thunderx_irq_handler;
|
hpriv->irq_handler = ahci_thunderx_irq_handler;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -242,6 +242,7 @@ enum {
|
||||||
suspend/resume */
|
suspend/resume */
|
||||||
AHCI_HFLAG_IGN_NOTSUPP_POWER_ON = (1 << 27), /* ignore -EOPNOTSUPP
|
AHCI_HFLAG_IGN_NOTSUPP_POWER_ON = (1 << 27), /* ignore -EOPNOTSUPP
|
||||||
from phy_power_on() */
|
from phy_power_on() */
|
||||||
|
AHCI_HFLAG_NO_SXS = (1 << 28), /* SXS not supported */
|
||||||
|
|
||||||
/* ap->flags bits */
|
/* ap->flags bits */
|
||||||
|
|
||||||
|
|
|
@ -493,6 +493,11 @@ void ahci_save_initial_config(struct device *dev, struct ahci_host_priv *hpriv)
|
||||||
cap |= HOST_CAP_ALPM;
|
cap |= HOST_CAP_ALPM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((cap & HOST_CAP_SXS) && (hpriv->flags & AHCI_HFLAG_NO_SXS)) {
|
||||||
|
dev_info(dev, "controller does not support SXS, disabling CAP_SXS\n");
|
||||||
|
cap &= ~HOST_CAP_SXS;
|
||||||
|
}
|
||||||
|
|
||||||
if (hpriv->force_port_map && port_map != hpriv->force_port_map) {
|
if (hpriv->force_port_map && port_map != hpriv->force_port_map) {
|
||||||
dev_info(dev, "forcing port_map 0x%x -> 0x%x\n",
|
dev_info(dev, "forcing port_map 0x%x -> 0x%x\n",
|
||||||
port_map, hpriv->force_port_map);
|
port_map, hpriv->force_port_map);
|
||||||
|
|
Loading…
Reference in New Issue