[PATCH v4] fpga: altera-freeze-bridge: clear all illegal request bits
From: tze . yee . ng
Date: Wed Nov 11 2026 - 22:43:52 EST
From: Tanmay Kathpalia <tanmay.kathpalia@xxxxxxxxxx>
A Partial Reconfiguration Region Controller can be connected to one or
more Freeze Bridge. Each Freeze Bridge has an illegal_request bit
represented in the freeze_illegal_request register. Bit i is the bridge on
freeze interface i. Unlike the status and control registers, which act on
all bridges collectively, this register reports each bridge individually.
Writing a literal 1 clears only bit 0 and leaves the illegal request
latched for every other bridge. Write back the value just read instead, so
the set-to-clear applies to whichever Freeze Bridge reported the request.
Fixes: ca24a648f535 ("fpga: add altera freeze bridge support")
Cc: stable@xxxxxxxxxxxxxxx # v4.10+
Signed-off-by: Tanmay Kathpalia <tanmay.kathpalia@xxxxxxxxxx>
Signed-off-by: Tze Yee Ng <tze.yee.ng@xxxxxxxxxx>
---
Changes in v4:
- Restore the narrative opening sentences from v2; the earlier rewrite read
too much like a dense hardware spec (Xu Yilun).
Changes in v3:
- Reword the commit message in imperative mood (Xu Yilun).
- Describe the freeze_illegal_request register layout: one write-1-to-clear
bit per Freeze Bridge via the Conduit Merger, versus the collective
status/ctrl registers (Xu Yilun).
Changes in v2:
- Add "Cc: stable@xxxxxxxxxxxxxxx # v4.10+" into the signoff area so the
stable-kernel rule is satisfied (reported by kernel test robot).
- Remove Chiau Ee's signoff as he is no longer working on this patch.
Link v3:
https://lore.kernel.org/all/13856736bdb808b64826aab337d9919abeb3ea5c.1791253862.git.tze.yee.ng@xxxxxxxxxx/
---
drivers/fpga/altera-freeze-bridge.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/fpga/altera-freeze-bridge.c b/drivers/fpga/altera-freeze-bridge.c
index 30d03ba14481..cc0c320538da 100644
--- a/drivers/fpga/altera-freeze-bridge.c
+++ b/drivers/fpga/altera-freeze-bridge.c
@@ -51,7 +51,7 @@ static int altera_freeze_br_req_ack(struct altera_freeze_br_data *priv,
if (illegal) {
dev_err(dev, "illegal request detected 0x%x", illegal);
- writel(1, csr_illegal_req_addr);
+ writel(illegal, csr_illegal_req_addr);
illegal = readl(csr_illegal_req_addr);
if (illegal)
--
2.43.7