Blame view
drivers/fpga/dfl-fme-region.c
2.06 KB
bb61b9be3
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// SPDX-License-Identifier: GPL-2.0 /* * FPGA Region Driver for FPGA Management Engine (FME) * * Copyright (C) 2017-2018 Intel Corporation, Inc. * * Authors: * Wu Hao <hao.wu@intel.com> * Joseph Grecco <joe.grecco@intel.com> * Enno Luebbers <enno.luebbers@intel.com> * Tim Whisonant <tim.whisonant@intel.com> * Ananda Ravuri <ananda.ravuri@intel.com> * Henry Mitchel <henry.mitchel@intel.com> */ #include <linux/module.h> |
34bd28339
|
17 |
#include <linux/fpga/fpga-mgr.h> |
bb61b9be3
|
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <linux/fpga/fpga-region.h> #include "dfl-fme-pr.h" static int fme_region_get_bridges(struct fpga_region *region) { struct dfl_fme_region_pdata *pdata = region->priv; struct device *dev = &pdata->br->dev; return fpga_bridge_get_to_list(dev, region->info, ®ion->bridge_list); } static int fme_region_probe(struct platform_device *pdev) { struct dfl_fme_region_pdata *pdata = dev_get_platdata(&pdev->dev); struct device *dev = &pdev->dev; struct fpga_region *region; struct fpga_manager *mgr; int ret; mgr = fpga_mgr_get(&pdata->mgr->dev); if (IS_ERR(mgr)) return -EPROBE_DEFER; |
fea82b7f6
|
41 |
region = devm_fpga_region_create(dev, mgr, fme_region_get_bridges); |
bb61b9be3
|
42 43 44 45 46 47 |
if (!region) { ret = -ENOMEM; goto eprobe_mgr_put; } region->priv = pdata; |
7514a4249
|
48 |
region->compat_id = mgr->compat_id; |
bb61b9be3
|
49 50 51 52 |
platform_set_drvdata(pdev, region); ret = fpga_region_register(region); if (ret) |
fea82b7f6
|
53 |
goto eprobe_mgr_put; |
bb61b9be3
|
54 55 56 57 58 |
dev_dbg(dev, "DFL FME FPGA Region probed "); return 0; |
bb61b9be3
|
59 60 61 62 63 64 65 |
eprobe_mgr_put: fpga_mgr_put(mgr); return ret; } static int fme_region_remove(struct platform_device *pdev) { |
b77c98780
|
66 |
struct fpga_region *region = platform_get_drvdata(pdev); |
34bd28339
|
67 |
struct fpga_manager *mgr = region->mgr; |
bb61b9be3
|
68 69 |
fpga_region_unregister(region); |
34bd28339
|
70 |
fpga_mgr_put(mgr); |
bb61b9be3
|
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
return 0; } static struct platform_driver fme_region_driver = { .driver = { .name = DFL_FPGA_FME_REGION, }, .probe = fme_region_probe, .remove = fme_region_remove, }; module_platform_driver(fme_region_driver); MODULE_DESCRIPTION("FPGA Region for DFL FPGA Management Engine"); MODULE_AUTHOR("Intel Corporation"); MODULE_LICENSE("GPL v2"); MODULE_ALIAS("platform:dfl-fme-region"); |