Lines Matching +full:poll +full:- +full:period
1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 2013-2015 Altera Corporation
9 #include <linux/fpga/fpga-mgr.h>
96 /* In power-up order. Reverse for power-down. */
98 "FPGA-1.5V",
99 "FPGA-1.1V",
100 "FPGA-2.5V",
136 return readl(priv->fpga_base_addr + reg_offset); in socfpga_fpga_readl()
142 writel(value, priv->fpga_base_addr + reg_offset); in socfpga_fpga_writel()
148 return __raw_readl(priv->fpga_base_addr + reg_offset); in socfpga_fpga_raw_readl()
154 __raw_writel(value, priv->fpga_base_addr + reg_offset); in socfpga_fpga_raw_writel()
159 writel(value, priv->fpga_data_addr); in socfpga_fpga_data_writel()
222 /* Poll DCLKSTAT to see if it completed in the timeout period. */ in socfpga_fpga_dclk_set_and_wait_clear()
230 } while (timeout--); in socfpga_fpga_dclk_set_and_wait_clear()
232 return -ETIMEDOUT; in socfpga_fpga_dclk_set_and_wait_clear()
241 * HW doesn't support an interrupt for changes in state, so poll to see in socfpga_fpga_wait_for_state()
242 * if it matches the requested state within the timeout period. in socfpga_fpga_wait_for_state()
248 } while (timeout--); in socfpga_fpga_wait_for_state()
250 return -ETIMEDOUT; in socfpga_fpga_wait_for_state()
296 complete(&priv->status_complete); in socfpga_fpga_isr()
308 init_completion(&priv->status_complete); in socfpga_fpga_wait_for_config_done()
312 &priv->status_complete, in socfpga_fpga_wait_for_config_done()
315 ret = -ETIMEDOUT; in socfpga_fpga_wait_for_config_done()
331 return -EINVAL; in socfpga_fpga_cfg_mode_get()
361 struct socfpga_fpga_priv *priv = mgr->priv; in socfpga_fpga_reset()
367 * - Set CTRL.CFGWDTH, CTRL.CDRATIO to match cfg mode in socfpga_fpga_reset()
368 * - Set CTRL.NCE to 0 in socfpga_fpga_reset()
392 return -ETIMEDOUT; in socfpga_fpga_reset()
404 struct socfpga_fpga_priv *priv = mgr->priv; in socfpga_fpga_ops_configure_init()
407 if (info->flags & FPGA_MGR_PARTIAL_RECONFIG) { in socfpga_fpga_ops_configure_init()
408 dev_err(&mgr->dev, "Partial reconfiguration not supported.\n"); in socfpga_fpga_ops_configure_init()
409 return -EINVAL; in socfpga_fpga_ops_configure_init()
411 /* Steps 1 - 5: Reset the FPGA */ in socfpga_fpga_ops_configure_init()
418 return -ETIMEDOUT; in socfpga_fpga_ops_configure_init()
437 struct socfpga_fpga_priv *priv = mgr->priv; in socfpga_fpga_ops_configure_write()
442 return -EINVAL; in socfpga_fpga_ops_configure_write()
444 /* Write out the complete 32-bit chunks. */ in socfpga_fpga_ops_configure_write()
447 count -= sizeof(u32); in socfpga_fpga_ops_configure_write()
450 /* Write out remaining non 32-bit chunks. */ in socfpga_fpga_ops_configure_write()
465 return -EFAULT; in socfpga_fpga_ops_configure_write()
474 struct socfpga_fpga_priv *priv = mgr->priv; in socfpga_fpga_ops_configure_complete()
479 * - Observe CONF_DONE and nSTATUS (active low) in socfpga_fpga_ops_configure_complete()
480 * - if CONF_DONE = 1 and nSTATUS = 1, configuration was successful in socfpga_fpga_ops_configure_complete()
481 * - if CONF_DONE = 0 and nSTATUS = 0, configuration failed in socfpga_fpga_ops_configure_complete()
493 * - Write 4 to DCLKCNT in socfpga_fpga_ops_configure_complete()
494 * - Wait for STATUS.DCNTDONE = 1 in socfpga_fpga_ops_configure_complete()
495 * - Clear W1C bit in STATUS.DCNTDONE in socfpga_fpga_ops_configure_complete()
498 return -ETIMEDOUT; in socfpga_fpga_ops_configure_complete()
502 return -ETIMEDOUT; in socfpga_fpga_ops_configure_complete()
523 struct socfpga_fpga_priv *priv = mgr->priv; in socfpga_fpga_ops_state()
546 struct device *dev = &pdev->dev; in socfpga_fpga_probe()
553 return -ENOMEM; in socfpga_fpga_probe()
555 priv->fpga_base_addr = devm_platform_ioremap_resource(pdev, 0); in socfpga_fpga_probe()
556 if (IS_ERR(priv->fpga_base_addr)) in socfpga_fpga_probe()
557 return PTR_ERR(priv->fpga_base_addr); in socfpga_fpga_probe()
559 priv->fpga_data_addr = devm_platform_ioremap_resource(pdev, 1); in socfpga_fpga_probe()
560 if (IS_ERR(priv->fpga_data_addr)) in socfpga_fpga_probe()
561 return PTR_ERR(priv->fpga_data_addr); in socfpga_fpga_probe()
563 priv->irq = platform_get_irq(pdev, 0); in socfpga_fpga_probe()
564 if (priv->irq < 0) in socfpga_fpga_probe()
565 return priv->irq; in socfpga_fpga_probe()
567 ret = devm_request_irq(dev, priv->irq, socfpga_fpga_isr, 0, in socfpga_fpga_probe()
579 { .compatible = "altr,socfpga-fpga-mgr", },