From: Marco Ziliani <rylos78@gmail.com>
To: Damien Le Moal <dlemoal@kernel.org>, Niklas Cassel <cassel@kernel.org>
Cc: Kyrylo Biryuk <illofspeed@gmail.com>,
linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org, Marco Ziliani <rylos78@gmail.com>
Subject: [PATCH] ata: libata-pmp: disable the SEMB port on Marvell 88SM9705
Date: Wed, 28 Oct 2026 20:50:18 +0100 [thread overview]
Message-ID: <20261028-pmp-88sm9705-v1-1-cf951fe74573@gmail.com> (raw)
The Marvell 88SM9705 is a 1-to-5 SATA port multiplier with one
additional SEMB (SATA Enclosure Management Bridge) port [1]. Ports
0-4 are device ports and port 5 is the SEMB. The number of fan-out
ports in GSCR[2] is 6 when the SEMB is enabled and 5 when it is not,
so on boards without the SEMB there is no link 5 and this quirk does
nothing. That includes the common 8-port PCIe cards that pair an
88SE9215 with an 88SM9705, which report 5 ports.
The SEMB port never answers SRST. libata probes it like a device
port, and every EH round on the PMP ends in a retry loop that lasts
about a minute before EH gives up, then starts over:
ata19.15: Port Multiplier 1.2, 0x1b4b:0x9705 r160, 6 ports, feat 0x1/0x1f
ata19.05: hard resetting link
ata19.05: failed to resume link (SControl 0)
ata19.05: softreset failed (1st FIS failed)
ata19.05: hard resetting link
...
ata20.05: reset failed, giving up
Disk discovery waits for this, including disks on other controllers.
libata.force cannot work around it: the "disable" horkage only takes
effect after IDENTIFY, which the SEMB link never reaches.
Treat port 5 the same way as port 4 of the Marvell 88SM4140 and mark
the link ATA_LFLAG_DISABLED.
Tested by the user who found the problem (see the synodeb link below)
on a Synology DX1215 expansion unit (four 88SM9705 r160 behind a
Marvell 88SE9235), one disk in the DX1215 and one on a separate AHCI
controller, one boot each, Debian 6.12 libata with and without this
change:
without with
"softreset failed" lines 60 0
disk on the separate controller 200.6 s 18.6 s
disk behind an 88SM9705 203.3 s 21.3 s
Each PMP still logs one "failed to resume link (SControl 0)" for port 5
at probe time.
Link: https://www.marvell.com/content/dam/marvell/en/public-collateral/storage/marvell-storage-88sm9705-functional-specifications-2015-06.pdf [1]
Link: https://github.com/rylos/synodeb/discussions/8
Cc: stable@vger.kernel.org
Signed-off-by: Marco Ziliani <rylos78@gmail.com>
---
I don't have this hardware myself: the problem was found and measured
on a DX1215 by a user of synodeb (Debian on Synology NAS units), who
preferred not to send the patch. It is carried in the synodeb kernels.
Kyrylo, your DX1222 has the same 88SE9235 + 88SM9705 chain: if it shows
the same port 5 retry loop, a Tested-by would be very welcome.
---
drivers/ata/libata-pmp.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
index 904f418387..72bc458568 100644
--- a/drivers/ata/libata-pmp.c
+++ b/drivers/ata/libata-pmp.c
@@ -482,6 +482,19 @@ static void sata_pmp_quirks(struct ata_port *ap)
if (link->pmp == 4)
link->flags |= ATA_LFLAG_DISABLED;
}
+ } else if (vendor == 0x1b4b && devid == 0x9705) {
+ /*
+ * Marvell 88SM9705 quirks
+ *
+ * 1-to-5 PMP with an extra SEMB port. It reports 6 ports and
+ * port 5 is the SEMB, which never answers SRST: EH spends about
+ * a minute per round retrying it, and disk discovery waits for
+ * that. Seen behind a Marvell 88SE9235 in the Synology DX1215.
+ */
+ ata_for_each_link(link, ap, EDGE) {
+ if (link->pmp == 5)
+ link->flags |= ATA_LFLAG_DISABLED;
+ }
}
}
---
base-commit: fb2c3f44a7e14627b9dca8e6b568e6cdc234b40b
change-id: 20261028-pmp-88sm9705-2f741b435f16
Best regards,
--
Marco Ziliani <rylos78@gmail.com>
next reply other threads:[~2026-10-28 19:50 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-28 19:50 Marco Ziliani [this message]
2026-11-02 16:05 ` Niklas Cassel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261028-pmp-88sm9705-v1-1-cf951fe74573@gmail.com \
--to=rylos78@gmail.com \
--cc=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=illofspeed@gmail.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®