lkml.org 
[lkml]   [2017]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 09/18] fpga: region: use image info as parameter for programming region
    Date
    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>
    ---
    v2: split out from another patch
    v3: change API to use the region->info, remove info param
    remove check for region->info, not needed
    v4: no change to this patch in this version of patchset
    v5: no change to this patch in this version of patchset
    v6: Add Moritz' ack
    ---
    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 35af952..eaacf50 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,
    /**
    * 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 = &region->dev;
    + struct fpga_image_info *info = region->info;
    int ret;

    region = fpga_region_get(region);
    @@ -245,7 +244,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;
    @@ -257,7 +256,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;
    @@ -373,6 +372,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;
    @@ -421,7 +422,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 cb5615c..4fb706b 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.7.4
    \
     
     \ /
      Last update: 2017-11-15 21:24    [W:3.221 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site