[PATCH v3] fpga: altera-freeze-bridge: clear all illegal request bits

From: tze . yee . ng

Date: Mon Oct 05 2026 - 22:34:55 EST


From: Tanmay Kathpalia <tanmay.kathpalia@xxxxxxxxxx>

The freeze_illegal_request register is write-1-to-clear with one bit per
Freeze Bridge connected to the Partial Reconfiguration Region Controller;
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 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 v2:
https://lore.kernel.org/all/2fe34c2dec61150a39d21e067521b0acc031247c.1789956938.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 c24c976117c8..2591dcc53d83 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