diff options
-rw-r--r-- | drivers/fpga/intel_pr.c | 53 |
1 files changed, 9 insertions, 44 deletions
diff --git a/drivers/fpga/intel_pr.c b/drivers/fpga/intel_pr.c index fadd9b1a78..a0239a741c 100644 --- a/drivers/fpga/intel_pr.c +++ b/drivers/fpga/intel_pr.c @@ -61,48 +61,6 @@ static int intel_get_freeze_br_addr(fdt_addr_t *addr, unsigned int region) return ret; } -static int intel_freeze_br_req_ack(fdt_addr_t addr, u32 req_ack) -{ - u32 status, illegal, ctrl; - int ret = -ETIMEDOUT; - unsigned long start = get_timer(0); - - while (1) { - illegal = readl(addr + FREEZE_CSR_ILLEGAL_REQ_OFFSET); - if (illegal) { - printf("illegal request 0x%x detected\n", illegal); - - writel(illegal, addr + FREEZE_CSR_ILLEGAL_REQ_OFFSET); - - illegal = readl(addr + FREEZE_CSR_ILLEGAL_REQ_OFFSET); - if (illegal) - printf("illegal request not cleared 0x%x\n", illegal); - - ret = -EINVAL; - break; - } - - status = readl(addr + FREEZE_CSR_STATUS_OFFSET); - status &= req_ack; - if (status) { - ctrl = readl(addr + FREEZE_CSR_CTRL_OFFSET); - printf("%s request %x acknowledged %x %x\n", - __func__, req_ack, status, ctrl); - - ret = 0; - break; - } - - if (get_timer(start) > FREEZE_TIMEOUT) - break; - - udelay(1); - WATCHDOG_RESET(); - } - - return ret; -} - static int intel_freeze_br_do_freeze(unsigned int region) { u32 status; @@ -122,7 +80,11 @@ static int intel_freeze_br_do_freeze(unsigned int region) writel(FREEZE_CSR_CTRL_FREEZE_REQ, addr + FREEZE_CSR_CTRL_OFFSET); - ret = intel_freeze_br_req_ack(addr, FREEZE_CSR_STATUS_FREEZE_REQ_DONE); + ret = wait_for_bit_le32((const u32 *)(addr + + FREEZE_CSR_STATUS_OFFSET), + FREEZE_CSR_STATUS_FREEZE_REQ_DONE, true, + FREEZE_TIMEOUT, false); + if (ret) writel(0, addr + FREEZE_CSR_CTRL_OFFSET); else @@ -152,7 +114,10 @@ static int intel_freeze_br_do_unfreeze(unsigned int region) writel(FREEZE_CSR_CTRL_UNFREEZE_REQ, addr + FREEZE_CSR_CTRL_OFFSET); - ret = intel_freeze_br_req_ack(addr, FREEZE_CSR_STATUS_UNFREEZE_REQ_DONE); + ret = wait_for_bit_le32((const u32 *)(addr + + FREEZE_CSR_STATUS_OFFSET), + FREEZE_CSR_STATUS_UNFREEZE_REQ_DONE, true, + FREEZE_TIMEOUT, false); writel(0, addr + FREEZE_CSR_CTRL_OFFSET); |