• Home
  • Raw
  • Download

Lines Matching +full:fpga +full:- +full:mgr

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Technologic Systems TS-73xx SBC FPGA loader
7 * FPGA Manager Driver for the on-board Altera Cyclone II FPGA found on
8 * TS-7300, heavily based on load_fpga.c in their vendor tree.
17 #include <linux/fpga/fpga-mgr.h>
35 static enum fpga_mgr_states ts73xx_fpga_state(struct fpga_manager *mgr) in ts73xx_fpga_state() argument
40 static int ts73xx_fpga_write_init(struct fpga_manager *mgr, in ts73xx_fpga_write_init() argument
44 struct ts73xx_fpga_priv *priv = mgr->priv; in ts73xx_fpga_write_init()
46 /* Reset the FPGA */ in ts73xx_fpga_write_init()
47 writeb(0, priv->io_base + TS73XX_FPGA_CONFIG_REG); in ts73xx_fpga_write_init()
49 writeb(TS73XX_FPGA_RESET, priv->io_base + TS73XX_FPGA_CONFIG_REG); in ts73xx_fpga_write_init()
55 static int ts73xx_fpga_write(struct fpga_manager *mgr, const char *buf, in ts73xx_fpga_write() argument
58 struct ts73xx_fpga_priv *priv = mgr->priv; in ts73xx_fpga_write()
63 while (count--) { in ts73xx_fpga_write()
64 ret = readb_poll_timeout(priv->io_base + TS73XX_FPGA_CONFIG_REG, in ts73xx_fpga_write()
70 writeb(buf[i], priv->io_base + TS73XX_FPGA_DATA_REG); in ts73xx_fpga_write()
77 static int ts73xx_fpga_write_complete(struct fpga_manager *mgr, in ts73xx_fpga_write_complete() argument
80 struct ts73xx_fpga_priv *priv = mgr->priv; in ts73xx_fpga_write_complete()
84 reg = readb(priv->io_base + TS73XX_FPGA_CONFIG_REG); in ts73xx_fpga_write_complete()
86 writeb(reg, priv->io_base + TS73XX_FPGA_CONFIG_REG); in ts73xx_fpga_write_complete()
89 reg = readb(priv->io_base + TS73XX_FPGA_CONFIG_REG); in ts73xx_fpga_write_complete()
91 writeb(reg, priv->io_base + TS73XX_FPGA_CONFIG_REG); in ts73xx_fpga_write_complete()
93 reg = readb(priv->io_base + TS73XX_FPGA_CONFIG_REG); in ts73xx_fpga_write_complete()
95 return -ETIMEDOUT; in ts73xx_fpga_write_complete()
109 struct device *kdev = &pdev->dev; in ts73xx_fpga_probe()
111 struct fpga_manager *mgr; in ts73xx_fpga_probe() local
116 return -ENOMEM; in ts73xx_fpga_probe()
118 priv->dev = kdev; in ts73xx_fpga_probe()
121 priv->io_base = devm_ioremap_resource(kdev, res); in ts73xx_fpga_probe()
122 if (IS_ERR(priv->io_base)) in ts73xx_fpga_probe()
123 return PTR_ERR(priv->io_base); in ts73xx_fpga_probe()
125 mgr = devm_fpga_mgr_create(kdev, "TS-73xx FPGA Manager", in ts73xx_fpga_probe()
127 if (!mgr) in ts73xx_fpga_probe()
128 return -ENOMEM; in ts73xx_fpga_probe()
130 platform_set_drvdata(pdev, mgr); in ts73xx_fpga_probe()
132 return fpga_mgr_register(mgr); in ts73xx_fpga_probe()
137 struct fpga_manager *mgr = platform_get_drvdata(pdev); in ts73xx_fpga_remove() local
139 fpga_mgr_unregister(mgr); in ts73xx_fpga_remove()
146 .name = "ts73xx-fpga-mgr",
154 MODULE_DESCRIPTION("TS-73xx FPGA Manager driver");