diff options
Diffstat (limited to 'drivers/fpga/altera-pr-ip-core.c')
-rw-r--r-- | drivers/fpga/altera-pr-ip-core.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/fpga/altera-pr-ip-core.c b/drivers/fpga/altera-pr-ip-core.c index a7b31f9797ce..65e0b6a2c031 100644 --- a/drivers/fpga/altera-pr-ip-core.c +++ b/drivers/fpga/altera-pr-ip-core.c | |||
@@ -1,3 +1,4 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0 | ||
1 | /* | 2 | /* |
2 | * Driver for Altera Partial Reconfiguration IP Core | 3 | * Driver for Altera Partial Reconfiguration IP Core |
3 | * | 4 | * |
@@ -5,18 +6,6 @@ | |||
5 | * | 6 | * |
6 | * Based on socfpga-a10.c Copyright (C) 2015-2016 Altera Corporation | 7 | * Based on socfpga-a10.c Copyright (C) 2015-2016 Altera Corporation |
7 | * by Alan Tull <atull@opensource.altera.com> | 8 | * by Alan Tull <atull@opensource.altera.com> |
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify it | ||
10 | * under the terms and conditions of the GNU General Public License, | ||
11 | * version 2, as published by the Free Software Foundation. | ||
12 | * | ||
13 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
15 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
16 | * more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along with | ||
19 | * this program. If not, see <http://www.gnu.org/licenses/>. | ||
20 | */ | 9 | */ |
21 | #include <linux/delay.h> | 10 | #include <linux/delay.h> |
22 | #include <linux/fpga/altera-pr-ip-core.h> | 11 | #include <linux/fpga/altera-pr-ip-core.h> |
@@ -187,6 +176,8 @@ static const struct fpga_manager_ops alt_pr_ops = { | |||
187 | int alt_pr_register(struct device *dev, void __iomem *reg_base) | 176 | int alt_pr_register(struct device *dev, void __iomem *reg_base) |
188 | { | 177 | { |
189 | struct alt_pr_priv *priv; | 178 | struct alt_pr_priv *priv; |
179 | struct fpga_manager *mgr; | ||
180 | int ret; | ||
190 | u32 val; | 181 | u32 val; |
191 | 182 | ||
192 | priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); | 183 | priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); |
@@ -201,15 +192,27 @@ int alt_pr_register(struct device *dev, void __iomem *reg_base) | |||
201 | (val & ALT_PR_CSR_STATUS_MSK) >> ALT_PR_CSR_STATUS_SFT, | 192 | (val & ALT_PR_CSR_STATUS_MSK) >> ALT_PR_CSR_STATUS_SFT, |
202 | (int)(val & ALT_PR_CSR_PR_START)); | 193 | (int)(val & ALT_PR_CSR_PR_START)); |
203 | 194 | ||
204 | return fpga_mgr_register(dev, dev_name(dev), &alt_pr_ops, priv); | 195 | mgr = fpga_mgr_create(dev, dev_name(dev), &alt_pr_ops, priv); |
196 | if (!mgr) | ||
197 | return -ENOMEM; | ||
198 | |||
199 | dev_set_drvdata(dev, mgr); | ||
200 | |||
201 | ret = fpga_mgr_register(mgr); | ||
202 | if (ret) | ||
203 | fpga_mgr_free(mgr); | ||
204 | |||
205 | return ret; | ||
205 | } | 206 | } |
206 | EXPORT_SYMBOL_GPL(alt_pr_register); | 207 | EXPORT_SYMBOL_GPL(alt_pr_register); |
207 | 208 | ||
208 | int alt_pr_unregister(struct device *dev) | 209 | int alt_pr_unregister(struct device *dev) |
209 | { | 210 | { |
211 | struct fpga_manager *mgr = dev_get_drvdata(dev); | ||
212 | |||
210 | dev_dbg(dev, "%s\n", __func__); | 213 | dev_dbg(dev, "%s\n", __func__); |
211 | 214 | ||
212 | fpga_mgr_unregister(dev); | 215 | fpga_mgr_unregister(mgr); |
213 | 216 | ||
214 | return 0; | 217 | return 0; |
215 | } | 218 | } |