From: Tom Rix <trix@xxxxxxxxxx> Which update ops need to be used will depend on the FPGA_MGR_REIMAGE bit in the fpga_image_info flags. reimaging is optional, no drv that does not need to remimage should be forced to provide stub functions. Signed-off-by: Tom Rix <trix@xxxxxxxxxx> --- drivers/fpga/fpga-mgr.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/fpga/fpga-mgr.c b/drivers/fpga/fpga-mgr.c index 4263c9e94949d..5247703a3743d 100644 --- a/drivers/fpga/fpga-mgr.c +++ b/drivers/fpga/fpga-mgr.c @@ -369,6 +369,14 @@ int fpga_mgr_load(struct fpga_manager *mgr, struct fpga_image_info *info) { const struct fpga_manager_update_ops *uops = &mgr->mops->reconfig; + if (!uops->write_complete || + !uops->write_init || + (!uops->write && !uops->write_sg) || + (uops->write && uops->write_sg)) { + dev_err(&mgr->dev, "Attempt to load an image without fpga_manager_update_ops\n"); + return -EOPNOTSUPP; + } + if (info->sgt) return fpga_mgr_buf_load_sg(mgr, info, uops, info->sgt); if (info->buf && info->count) @@ -579,10 +587,7 @@ struct fpga_manager *fpga_mgr_create(struct device *dev, const char *name, struct fpga_manager *mgr; int id, ret; - if (!mops || !mops->reconfig.write_complete || !mops->state || - !mops->reconfig.write_init || (!mops->reconfig.write && - !mops->reconfig.write_sg) || - (mops->reconfig.write && mops->reconfig.write_sg)) { + if (!mops || !mops->state) { dev_err(dev, "Attempt to register without fpga_manager_ops\n"); return NULL; } -- 2.26.3