Lines Matching +full:spi +full:- +full:slave
2 * Xilinx Spartan6 Slave Serial SPI Driver
12 * Manage Xilinx FPGA firmware that is loaded over SPI using
13 * the slave serial configuration interface.
18 #include <linux/fpga/fpga-mgr.h>
23 #include <linux/spi/spi.h>
27 struct spi_device *spi; member
34 struct xilinx_spi_conf *conf = mgr->priv; in xilinx_spi_state()
36 if (!gpiod_get_value(conf->done)) in xilinx_spi_state()
46 struct xilinx_spi_conf *conf = mgr->priv; in xilinx_spi_write_init()
50 if (info->flags & FPGA_MGR_PARTIAL_RECONFIG) { in xilinx_spi_write_init()
51 dev_err(&mgr->dev, "Partial reconfiguration not supported.\n"); in xilinx_spi_write_init()
52 return -EINVAL; in xilinx_spi_write_init()
55 gpiod_set_value(conf->prog_b, 1); in xilinx_spi_write_init()
59 gpiod_set_value(conf->prog_b, 0); in xilinx_spi_write_init()
61 if (gpiod_get_value(conf->done)) { in xilinx_spi_write_init()
62 dev_err(&mgr->dev, "Unexpected DONE pin state...\n"); in xilinx_spi_write_init()
63 return -EIO; in xilinx_spi_write_init()
74 struct xilinx_spi_conf *conf = mgr->priv; in xilinx_spi_write()
82 remaining = fw_data_end - fw_data; in xilinx_spi_write()
85 ret = spi_write(conf->spi, fw_data, stride); in xilinx_spi_write()
87 dev_err(&mgr->dev, "SPI error in firmware write: %d\n", in xilinx_spi_write()
99 struct spi_device *spi = conf->spi; in xilinx_spi_apply_cclk_cycles() local
103 ret = spi_write(conf->spi, din_data, sizeof(din_data)); in xilinx_spi_apply_cclk_cycles()
105 dev_err(&spi->dev, "applying CCLK cycles failed: %d\n", ret); in xilinx_spi_apply_cclk_cycles()
113 struct xilinx_spi_conf *conf = mgr->priv; in xilinx_spi_write_complete()
117 if (gpiod_get_value(conf->done)) in xilinx_spi_write_complete()
120 timeout = jiffies + usecs_to_jiffies(info->config_complete_timeout_us); in xilinx_spi_write_complete()
128 if (gpiod_get_value(conf->done)) in xilinx_spi_write_complete()
132 dev_err(&mgr->dev, "Timeout after config data transfer.\n"); in xilinx_spi_write_complete()
133 return -ETIMEDOUT; in xilinx_spi_write_complete()
143 static int xilinx_spi_probe(struct spi_device *spi) in xilinx_spi_probe() argument
149 conf = devm_kzalloc(&spi->dev, sizeof(*conf), GFP_KERNEL); in xilinx_spi_probe()
151 return -ENOMEM; in xilinx_spi_probe()
153 conf->spi = spi; in xilinx_spi_probe()
156 conf->prog_b = devm_gpiod_get(&spi->dev, "prog_b", GPIOD_OUT_LOW); in xilinx_spi_probe()
157 if (IS_ERR(conf->prog_b)) { in xilinx_spi_probe()
158 dev_err(&spi->dev, "Failed to get PROGRAM_B gpio: %ld\n", in xilinx_spi_probe()
159 PTR_ERR(conf->prog_b)); in xilinx_spi_probe()
160 return PTR_ERR(conf->prog_b); in xilinx_spi_probe()
163 conf->done = devm_gpiod_get(&spi->dev, "done", GPIOD_IN); in xilinx_spi_probe()
164 if (IS_ERR(conf->done)) { in xilinx_spi_probe()
165 dev_err(&spi->dev, "Failed to get DONE gpio: %ld\n", in xilinx_spi_probe()
166 PTR_ERR(conf->done)); in xilinx_spi_probe()
167 return PTR_ERR(conf->done); in xilinx_spi_probe()
170 mgr = fpga_mgr_create(&spi->dev, "Xilinx Slave Serial FPGA Manager", in xilinx_spi_probe()
173 return -ENOMEM; in xilinx_spi_probe()
175 spi_set_drvdata(spi, mgr); in xilinx_spi_probe()
184 static int xilinx_spi_remove(struct spi_device *spi) in xilinx_spi_remove() argument
186 struct fpga_manager *mgr = spi_get_drvdata(spi); in xilinx_spi_remove()
194 { .compatible = "xlnx,fpga-slave-serial", },
201 .name = "xlnx-slave-spi",
212 MODULE_DESCRIPTION("Load Xilinx FPGA firmware over SPI");