android_kernel_motorola_sm6375/drivers/ata
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Damien Le Moal db3f016ad5 ata: libata: Fix sata_down_spd_limit() when no link speed is reported
[ Upstream commit 69f2c9346313ba3d3dfa4091ff99df26c67c9021 ]

Commit 2dc0b46b5e ("libata: sata_down_spd_limit should return if
driver has not recorded sstatus speed") changed the behavior of
sata_down_spd_limit() to return doing nothing if a drive does not report
a current link speed, to avoid reducing the link speed to the lowest 1.5
Gbps speed.

However, the change assumed that a speed was recorded before probing
(e.g. before a suspend/resume) and set in link->sata_spd. This causes
problems with adapters/drives combination failing to establish a link
speed during probe autonegotiation. One example reported of this problem
is an mvebu adapter with a 3Gbps port-multiplier box: autonegotiation
fails, leaving no recorded link speed and no reported current link
speed. Probe retries also fail as no action is taken by sata_set_spd()
after each retry.

Fix this by returning early in sata_down_spd_limit() only if we do have
a recorded link speed, that is, if link->sata_spd is not 0. With this
fix, a failed probe not leading to a recorded link speed is retried at
the lower 1.5 Gbps speed, with the link speed potentially increased
later on the second revalidate of the device if the device reports
that it supports higher link speeds.

Reported-by: Marius Dinu <marius@psihoexpert.ro>
Fixes: 2dc0b46b5e ("libata: sata_down_spd_limit should return if driver has not recorded sstatus speed")
Reviewed-by: Niklas Cassel <niklas.cassel@wdc.com>
Tested-by: Marius Dinu <marius@psihoexpert.ro>
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-02-22 12:50:24 +01:00
..
acard-ahci.c
ahci.c ata: ahci: Fix PCS quirk application for suspend 2023-01-18 11:41:42 +01:00
ahci.h ata: ahci: Match EM_MAX_SLOTS with SATA_PMP_MAX_PORTS 2022-10-29 10:20:34 +02:00
ahci_brcm.c ata: ahci_brcm: Add back regulators management 2021-03-04 10:26:23 +01:00
ahci_ceva.c
ahci_da850.c
ahci_dm816.c
ahci_imx.c ata: ahci-imx: Fix MODULE_ALIAS 2022-10-29 10:20:34 +02:00
ahci_mtk.c
ahci_mvebu.c ata: ahci: mvebu: Make SATA PHY optional for Armada 3720 2020-11-01 12:01:05 +01:00
ahci_octeon.c
ahci_platform.c
ahci_qoriq.c
ahci_seattle.c
ahci_st.c
ahci_sunxi.c ata: ahci_sunxi: Disable DIPM 2021-07-19 08:53:15 +02:00
ahci_tegra.c
ahci_xgene.c
ata_generic.c
ata_piix.c
Kconfig
libahci.c ata: ahci: Disable SXS for Hisilicon Kunpeng920 2021-05-11 14:04:10 +02:00
libahci_platform.c ata: libahci_platform: Sanity check the DT child nodes number 2022-10-26 13:22:56 +02:00
libata-acpi.c
libata-core.c ata: libata: Fix sata_down_spd_limit() when no link speed is reported 2023-02-22 12:50:24 +01:00
libata-eh.c ata: libata-eh: Add missing command name 2022-08-25 11:18:18 +02:00
libata-pmp.c
libata-scsi.c libata: if T_LENGTH is zero, dma direction should be DMA_NONE 2021-12-22 09:29:39 +01:00
libata-sff.c libata: fix ata_pio_sector for CONFIG_HIGHMEM 2021-08-12 13:21:04 +02:00
libata-trace.c
libata-transport.c ata: libata-transport: fix double ata_host_put() in ata_tport_add() 2022-11-25 17:42:15 +01:00
libata-transport.h
libata-zpodd.c
libata.h
Makefile
pata_acpi.c
pata_ali.c
pata_amd.c
pata_arasan_cf.c pata_arasan_cf: fix IRQ check 2021-05-14 09:44:24 +02:00
pata_artop.c
pata_atiixp.c
pata_atp867x.c
pata_bk3710.c
pata_buddha.c
pata_cmd64x.c
pata_cmd640.c
pata_cs5520.c
pata_cs5530.c
pata_cs5535.c
pata_cs5536.c
pata_cypress.c
pata_efar.c
pata_ep93xx.c pata_ep93xx: fix deferred probing 2021-07-14 16:53:21 +02:00
pata_falcon.c
pata_ftide010.c
pata_gayle.c
pata_hpt3x2n.c
pata_hpt3x3.c
pata_hpt37x.c ata: pata_hpt37x: fix PCI clock detection 2022-03-08 19:07:46 +01:00
pata_hpt366.c
pata_icside.c
pata_imx.c
pata_isapnp.c
pata_it821x.c
pata_it8213.c
pata_ixp4xx_cf.c pata_ipx4xx_cf: Fix unsigned comparison with less than zero 2023-01-18 11:40:59 +01:00
pata_jmicron.c
pata_legacy.c ata: pata_legacy: fix pdc20230_set_piomode() 2022-11-10 17:57:50 +01:00
pata_macio.c
pata_marvell.c ata: pata_marvell: Check the 'bmdma_addr' beforing reading 2022-04-27 13:50:48 +02:00
pata_mpc52xx.c
pata_mpiix.c
pata_netcell.c
pata_ninja32.c
pata_ns87410.c
pata_ns87415.c
pata_octeon_cf.c ata: pata_octeon_cf: Fix refcount leak in octeon_cf_probe 2022-06-14 18:11:57 +02:00
pata_of_platform.c
pata_oldpiix.c
pata_opti.c
pata_optidma.c
pata_palmld.c
pata_pcmcia.c
pata_pdc202xx_old.c
pata_pdc2027x.c
pata_piccolo.c
pata_platform.c
pata_pxa.c
pata_radisys.c
pata_rb532_cf.c pata_rb532_cf: fix deferred probing 2021-07-14 16:53:20 +02:00
pata_rdc.c
pata_rz1000.c
pata_samsung_cf.c
pata_sc1200.c
pata_sch.c
pata_serverworks.c
pata_sil680.c
pata_sis.c
pata_sl82c105.c
pata_triflex.c
pata_via.c
pdc_adma.c
sata_dwc_460ex.c ata: sata_dwc_460ex: Fix crash due to OOB write 2022-04-15 14:18:39 +02:00
sata_fsl.c sata_fsl: fix warning in remove_proc_entry when rmmod sata_fsl 2021-12-08 09:01:11 +01:00
sata_gemini.c
sata_gemini.h
sata_highbank.c sata_highbank: fix deferred probing 2021-07-14 16:53:20 +02:00
sata_inic162x.c
sata_mv.c ata: sata_mv: Fix the error handling of mv_chip_id() 2021-11-02 19:46:12 +01:00
sata_nv.c ata: sata_nv: Fix retrieving of active qcs 2020-11-05 11:43:12 +01:00
sata_promise.c
sata_promise.h
sata_qstor.c
sata_rcar.c ata: sata_rcar: Fix DMA boundary mask 2020-11-01 12:01:06 +01:00
sata_sil.c
sata_sil24.c
sata_sis.c
sata_svw.c
sata_sx4.c
sata_uli.c
sata_via.c
sata_vsc.c
sis.h