linux-stable/drivers/ata
Conrad Kostecki d29630b79d ahci: asm1064: asm1166: don't limit reported ports
[ Upstream commit 6cd8adc3e1 ]

Previously, patches have been added to limit the reported count of SATA
ports for asm1064 and asm1166 SATA controllers, as those controllers do
report more ports than physically having.

While it is allowed to report more ports than physically having in CAP.NP,
it is not allowed to report more ports than physically having in the PI
(Ports Implemented) register, which is what these HBAs do.
(This is a AHCI spec violation.)

Unfortunately, it seems that the PMP implementation in these ASMedia HBAs
is also violating the AHCI and SATA-IO PMP specification.

What these HBAs do is that they do not report that they support PMP
(CAP.SPM (Supports Port Multiplier) is not set).

Instead, they have decided to add extra "virtual" ports in the PI register
that is used if a port multiplier is connected to any of the physical
ports of the HBA.

Enumerating the devices behind the PMP as specified in the AHCI and
SATA-IO specifications, by using PMP READ and PMP WRITE commands to the
physical ports of the HBA is not possible, you have to use the "virtual"
ports.

This is of course bad, because this gives us no way to detect the device
and vendor ID of the PMP actually connected to the HBA, which means that
we can not apply the proper PMP quirks for the PMP that is connected to
the HBA.

Limiting the port map will thus stop these controllers from working with
SATA Port Multipliers.

This patch reverts both patches for asm1064 and asm1166, so old behavior
is restored and SATA PMP will work again, but it will also reintroduce the
(minutes long) extra boot time for the ASMedia controllers that do not
have a PMP connected (either on the PCIe card itself, or an external PMP).

However, a longer boot time for some, is the lesser evil compared to some
other users not being able to detect their drives at all.

Fixes: 0077a504e1 ("ahci: asm1166: correct count of reported ports")
Fixes: 9815e39617 ("ahci: asm1064: correct count of reported ports")
Cc: stable@vger.kernel.org
Reported-by: Matt <cryptearth@googlemail.com>
Signed-off-by: Conrad Kostecki <conikost@gentoo.org>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
[cassel: rewrote commit message]
Signed-off-by: Niklas Cassel <cassel@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-13 12:50:08 +02:00
..
acard-ahci.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
ahci.c ahci: asm1064: asm1166: don't limit reported ports 2024-04-13 12:50:08 +02:00
ahci.h ata: ahci: fix enum constants for gcc-13 2023-11-08 11:22:21 +01:00
ahci_brcm.c ata: ahci_brcm: Add back regulators management 2021-03-04 09:39:40 +01:00
ahci_ceva.c ata: add an extra argument to ahci_platform_get_resources() 2018-08-22 08:08:27 -07:00
ahci_da850.c ata: add an extra argument to ahci_platform_get_resources() 2018-08-22 08:08:27 -07:00
ahci_dm816.c ata: add an extra argument to ahci_platform_get_resources() 2018-08-22 08:08:27 -07:00
ahci_imx.c ata: ahci-imx: Fix MODULE_ALIAS 2022-11-03 23:52:24 +09:00
ahci_mtk.c ata: add an extra argument to ahci_platform_get_resources() 2018-08-22 08:08:27 -07:00
ahci_mvebu.c ata: ahci: mvebu: do Armada 38x configuration only on relevant SoCs 2019-12-05 09:21:06 +01:00
ahci_octeon.c
ahci_platform.c ata: Disable AHCI ALPM feature for Ampere Computing eMAG SATA 2019-11-20 18:46:06 +01:00
ahci_qoriq.c ata: add an extra argument to ahci_platform_get_resources() 2018-08-22 08:08:27 -07:00
ahci_seattle.c ata: add an extra argument to ahci_platform_get_resources() 2018-08-22 08:08:27 -07:00
ahci_st.c ata: add an extra argument to ahci_platform_get_resources() 2018-08-22 08:08:27 -07:00
ahci_sunxi.c ata: ahci_sunxi: Disable DIPM 2021-07-20 16:16:04 +02:00
ahci_tegra.c ata: add an extra argument to ahci_platform_get_resources() 2018-08-22 08:08:27 -07:00
ahci_xgene.c ata: ahci: Drop pointless VPRINTK() calls and convert the remaining ones 2023-10-10 21:44:56 +02:00
ata_generic.c
ata_piix.c
Kconfig ata: ahci_brcm: Allow using driver or DSL SoCs 2019-11-24 08:19:33 +01:00
libahci.c ata: libahci: clear pending interrupt status 2023-10-10 21:44:56 +02:00
libahci_platform.c ata: libahci_platform: Sanity check the DT child nodes number 2022-10-26 13:19:40 +02:00
libata-acpi.c
libata-core.c ata: libata: disallow dev-initiated LPM transitions to unsupported states 2023-10-10 21:45:00 +02:00
libata-eh.c ata: libata-eh: Fix compilation warning in ata_eh_link_report() 2023-10-25 11:16:54 +02:00
libata-pmp.c libata: Return correct status in sata_pmp_eh_recover_pm() when ATA_DFLAG_DETACH is set 2020-04-17 10:48:52 +02:00
libata-scsi.c ata: libata-scsi: ignore reserved bits for REPORT SUPPORTED OPERATION CODES 2023-10-10 21:44:59 +02:00
libata-sff.c libata: fix ata_pio_sector for CONFIG_HIGHMEM 2021-08-12 13:19:44 +02:00
libata-trace.c
libata-transport.c ata: libata-core: Do not register PM operations for SAS ports 2023-10-10 21:45:00 +02:00
libata-transport.h
libata-zpodd.c libata: zpodd: Fix small read overflow in zpodd_get_mech_type() 2019-08-25 10:47:54 +02:00
libata.h ata: libata-core: Do not register PM operations for SAS ports 2023-10-10 21:45:00 +02:00
Makefile Merge branch 'for-4.17' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata 2018-04-03 17:42:25 -07:00
pata_acpi.c
pata_ali.c
pata_amd.c
pata_arasan_cf.c pata_arasan_cf: fix IRQ check 2021-05-22 10:59:33 +02:00
pata_artop.c
pata_atiixp.c
pata_atp867x.c
pata_bk3710.c pata_bk3710: clarify license version and use SPDX header 2018-03-01 13:59:03 -08:00
pata_cmd64x.c
pata_cmd640.c libata: remove ata_sff_data_xfer_noirq() 2018-07-11 10:45:28 -07:00
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-20 16:15:47 +02:00
pata_falcon.c pata_falcon: clarify license version and use SPDX header 2018-03-01 13:58:17 -08:00
pata_ftide010.c ata: pata_ftide010: Add missing MODULE_DESCRIPTION 2023-09-23 10:48:14 +02:00
pata_gayle.c ata: add Amiga Gayle PATA controller driver 2018-03-19 07:41:36 -07:00
pata_hpt3x2n.c
pata_hpt3x3.c
pata_hpt37x.c ata: pata_hpt37x: fix PCI clock detection 2022-03-08 19:04:07 +01:00
pata_hpt366.c
pata_icside.c libata: remove ata_sff_data_xfer_noirq() 2018-07-11 10:45:28 -07:00
pata_imx.c Merge branch 'for-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata 2018-08-24 13:20:33 -07:00
pata_isapnp.c ata: pata_isapnp: Add missing error check for devm_ioport_map() 2023-12-08 08:43:23 +01:00
pata_it821x.c pata_it821x: Delete an error message for a failed memory allocation in it821x_firmware_command() 2018-02-18 05:26:07 -08:00
pata_it8213.c
pata_ixp4xx_cf.c pata_ipx4xx_cf: Fix unsigned comparison with less than zero 2023-01-18 11:30:09 +01:00
pata_jmicron.c
pata_legacy.c ata: pata_legacy: fix pdc20230_set_piomode() 2022-11-10 17:46:51 +01:00
pata_macio.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
pata_marvell.c ata: pata_marvell: Check the 'bmdma_addr' beforing reading 2022-04-27 13:39:44 +02:00
pata_mpc52xx.c pata_mpc52xx: Delete an error message for a failed memory allocation in mpc52xx_ata_probe() 2018-02-18 05:23:25 -08:00
pata_mpiix.c
pata_netcell.c
pata_ninja32.c
pata_ns87410.c
pata_ns87415.c ata: pata_ns87415: mark ns87560_tf_read static 2023-08-11 11:45:32 +02:00
pata_octeon_cf.c ata: pata_octeon_cf: Fix refcount leak in octeon_cf_probe 2022-06-14 16:59:35 +02:00
pata_of_platform.c
pata_oldpiix.c
pata_opti.c
pata_optidma.c
pata_palmld.c libata: remove ata_sff_data_xfer_noirq() 2018-07-11 10:45:28 -07:00
pata_pcmcia.c libata: remove ata_sff_data_xfer_noirq() 2018-07-11 10:45:28 -07:00
pata_pdc202xx_old.c
pata_pdc2027x.c
pata_piccolo.c
pata_platform.c libata: remove ata_sff_data_xfer_noirq() 2018-07-11 10:45:28 -07:00
pata_pxa.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
pata_radisys.c
pata_rb532_cf.c pata_rb532_cf: fix deferred probing 2021-07-20 16:15:47 +02:00
pata_rdc.c
pata_rz1000.c
pata_samsung_cf.c headers: separate linux/mod_devicetable.h from linux/platform_device.h 2018-07-07 17:52:26 +02:00
pata_sc1200.c
pata_sch.c
pata_serverworks.c
pata_sil680.c
pata_sis.c
pata_sl82c105.c
pata_triflex.c
pata_via.c libata: remove ata_sff_data_xfer_noirq() 2018-07-11 10:45:28 -07:00
pdc_adma.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
sata_dwc_460ex.c ata: sata_dwc_460ex: Fix crash due to OOB write 2022-04-15 14:15:06 +02:00
sata_fsl.c sata_fsl: fix warning in remove_proc_entry when rmmod sata_fsl 2021-12-08 08:50:12 +01:00
sata_gemini.c ata: sata_gemini: Add missing MODULE_DESCRIPTION 2023-09-23 10:48:14 +02:00
sata_gemini.h
sata_highbank.c sata_highbank: fix deferred probing 2021-07-20 16:15:47 +02:00
sata_inic162x.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
sata_mv.c ata: sata_mv: Fix the error handling of mv_chip_id() 2021-11-02 18:26:44 +01:00
sata_nv.c ata: sata_nv: Fix retrieving of active qcs 2020-11-05 11:08:38 +01:00
sata_promise.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
sata_promise.h
sata_qstor.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
sata_rcar.c ata: sata_rcar: Fix DMA boundary mask 2020-11-05 11:08:35 +01:00
sata_sil.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
sata_sil24.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
sata_sis.c
sata_svw.c
sata_sx4.c ata: make qc_prep return ata_completion_errors 2020-10-01 13:14:54 +02:00
sata_uli.c
sata_via.c
sata_vsc.c
sis.h