aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/fpga/fpga-region.c
diff options
context:
space:
mode:
authorAlan Tull <atull@kernel.org>2017-11-15 15:20:19 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-11-28 10:30:37 -0500
commit61c32102391ff38dfd4aba835dd0f99db6b46908 (patch)
tree511334facdfa6d898fab5f692fdd56e8fb0fdfdc /drivers/fpga/fpga-region.c
parented81f5fc3c35c22d0fc62813cfa4e11b6aea0a64 (diff)
fpga: region: use image info as parameter for programming region
Use FPGA image info (region->info) when region code is programming the FPGA to pass in multiple parameters. This is a baby step in refactoring the FPGA region code to separate out common FPGA region code from FPGA region Device Tree overlay support. Signed-off-by: Alan Tull <atull@kernel.org> Acked-by: Moritz Fischer <mdf@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/fpga/fpga-region.c')
-rw-r--r--drivers/fpga/fpga-region.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/fpga/fpga-region.c b/drivers/fpga/fpga-region.c
index 35af952a889a..eaacf5049381 100644
--- a/drivers/fpga/fpga-region.c
+++ b/drivers/fpga/fpga-region.c
@@ -223,14 +223,13 @@ static int fpga_region_get_bridges(struct fpga_region *region,
223/** 223/**
224 * fpga_region_program_fpga - program FPGA 224 * fpga_region_program_fpga - program FPGA
225 * @region: FPGA region 225 * @region: FPGA region
226 * @overlay: device node of the overlay 226 * Program an FPGA using fpga image info (region->info).
227 * Program an FPGA using information in the region's fpga image info.
228 * Return 0 for success or negative error code. 227 * Return 0 for success or negative error code.
229 */ 228 */
230static int fpga_region_program_fpga(struct fpga_region *region, 229static int fpga_region_program_fpga(struct fpga_region *region)
231 struct device_node *overlay)
232{ 230{
233 struct device *dev = &region->dev; 231 struct device *dev = &region->dev;
232 struct fpga_image_info *info = region->info;
234 int ret; 233 int ret;
235 234
236 region = fpga_region_get(region); 235 region = fpga_region_get(region);
@@ -245,7 +244,7 @@ static int fpga_region_program_fpga(struct fpga_region *region,
245 goto err_put_region; 244 goto err_put_region;
246 } 245 }
247 246
248 ret = fpga_region_get_bridges(region, overlay); 247 ret = fpga_region_get_bridges(region, info->overlay);
249 if (ret) { 248 if (ret) {
250 dev_err(dev, "failed to get FPGA bridges\n"); 249 dev_err(dev, "failed to get FPGA bridges\n");
251 goto err_unlock_mgr; 250 goto err_unlock_mgr;
@@ -257,7 +256,7 @@ static int fpga_region_program_fpga(struct fpga_region *region,
257 goto err_put_br; 256 goto err_put_br;
258 } 257 }
259 258
260 ret = fpga_mgr_load(region->mgr, region->info); 259 ret = fpga_mgr_load(region->mgr, info);
261 if (ret) { 260 if (ret) {
262 dev_err(dev, "failed to load FPGA image\n"); 261 dev_err(dev, "failed to load FPGA image\n");
263 goto err_put_br; 262 goto err_put_br;
@@ -373,6 +372,8 @@ static int fpga_region_notify_pre_apply(struct fpga_region *region,
373 if (!info) 372 if (!info)
374 return -ENOMEM; 373 return -ENOMEM;
375 374
375 info->overlay = nd->overlay;
376
376 /* Read FPGA region properties from the overlay */ 377 /* Read FPGA region properties from the overlay */
377 if (of_property_read_bool(nd->overlay, "partial-fpga-config")) 378 if (of_property_read_bool(nd->overlay, "partial-fpga-config"))
378 info->flags |= FPGA_MGR_PARTIAL_RECONFIG; 379 info->flags |= FPGA_MGR_PARTIAL_RECONFIG;
@@ -421,7 +422,8 @@ static int fpga_region_notify_pre_apply(struct fpga_region *region,
421 } 422 }
422 423
423 region->info = info; 424 region->info = info;
424 ret = fpga_region_program_fpga(region, nd->overlay); 425
426 ret = fpga_region_program_fpga(region);
425 if (ret) { 427 if (ret) {
426 fpga_image_info_free(info); 428 fpga_image_info_free(info);
427 region->info = NULL; 429 region->info = NULL;