| From f998b6775de00881f36cfd93614ba01228bf7cde Mon Sep 17 00:00:00 2001 |
| From: Alan Tull <atull@kernel.org> |
| Date: Wed, 15 Nov 2017 14:20:19 -0600 |
| Subject: [PATCH 1668/1795] 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> |
| (cherry picked from commit 61c32102391ff38dfd4aba835dd0f99db6b46908) |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/fpga/fpga-region.c | 16 +++++++++------- |
| include/linux/fpga/fpga-mgr.h | 4 ++++ |
| 2 files changed, 13 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/fpga/fpga-region.c b/drivers/fpga/fpga-region.c |
| index 93e7ce9bc6e3..13aa08631f7a 100644 |
| --- a/drivers/fpga/fpga-region.c |
| +++ b/drivers/fpga/fpga-region.c |
| @@ -230,14 +230,13 @@ static int fpga_region_get_bridges(struct fpga_region *region, |
| /** |
| * fpga_region_program_fpga - program FPGA |
| * @region: FPGA region |
| - * @overlay: device node of the overlay |
| - * Program an FPGA using information in the region's fpga image info. |
| + * Program an FPGA using fpga image info (region->info). |
| * Return 0 for success or negative error code. |
| */ |
| -static int fpga_region_program_fpga(struct fpga_region *region, |
| - struct device_node *overlay) |
| +static int fpga_region_program_fpga(struct fpga_region *region) |
| { |
| struct device *dev = ®ion->dev; |
| + struct fpga_image_info *info = region->info; |
| int ret; |
| |
| region = fpga_region_get(region); |
| @@ -252,7 +251,7 @@ static int fpga_region_program_fpga(struct fpga_region *region, |
| goto err_put_region; |
| } |
| |
| - ret = fpga_region_get_bridges(region, overlay); |
| + ret = fpga_region_get_bridges(region, info->overlay); |
| if (ret) { |
| dev_err(dev, "failed to get FPGA bridges\n"); |
| goto err_unlock_mgr; |
| @@ -264,7 +263,7 @@ static int fpga_region_program_fpga(struct fpga_region *region, |
| goto err_put_br; |
| } |
| |
| - ret = fpga_mgr_load(region->mgr, region->info); |
| + ret = fpga_mgr_load(region->mgr, info); |
| if (ret) { |
| dev_err(dev, "failed to load FPGA image\n"); |
| goto err_put_br; |
| @@ -380,6 +379,8 @@ static int fpga_region_notify_pre_apply(struct fpga_region *region, |
| if (!info) |
| return -ENOMEM; |
| |
| + info->overlay = nd->overlay; |
| + |
| /* Read FPGA region properties from the overlay */ |
| if (of_property_read_bool(nd->overlay, "partial-fpga-config")) |
| info->flags |= FPGA_MGR_PARTIAL_RECONFIG; |
| @@ -428,7 +429,8 @@ static int fpga_region_notify_pre_apply(struct fpga_region *region, |
| } |
| |
| region->info = info; |
| - ret = fpga_region_program_fpga(region, nd->overlay); |
| + |
| + ret = fpga_region_program_fpga(region); |
| if (ret) { |
| fpga_image_info_free(info); |
| region->info = NULL; |
| diff --git a/include/linux/fpga/fpga-mgr.h b/include/linux/fpga/fpga-mgr.h |
| index cb5615c87504..4fb706bd9aba 100644 |
| --- a/include/linux/fpga/fpga-mgr.h |
| +++ b/include/linux/fpga/fpga-mgr.h |
| @@ -89,6 +89,7 @@ enum fpga_mgr_states { |
| * @buf: contiguous buffer containing FPGA image |
| * @count: size of buf |
| * @dev: device that owns this |
| + * @overlay: Device Tree overlay |
| */ |
| struct fpga_image_info { |
| u32 flags; |
| @@ -100,6 +101,9 @@ struct fpga_image_info { |
| const char *buf; |
| size_t count; |
| struct device *dev; |
| +#ifdef CONFIG_OF |
| + struct device_node *overlay; |
| +#endif |
| }; |
| |
| /** |
| -- |
| 2.19.0 |
| |