aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/remoteproc/remoteproc_core.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index 16cd54324246..48feebd6d0a2 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -281,25 +281,27 @@ rproc_find_carveout_by_name(struct rproc *rproc, const char *name, ...)
281 * @len: associated area size 281 * @len: associated area size
282 * 282 *
283 * This function is a helper function to verify requested device area (couple 283 * This function is a helper function to verify requested device area (couple
284 * da, len) is part of specified carevout. 284 * da, len) is part of specified carveout.
285 * If da is not set (defined as FW_RSC_ADDR_ANY), only requested length is
286 * checked.
285 * 287 *
286 * Return: 0 if carveout match request else -ENOMEM 288 * Return: 0 if carveout matches request else error
287 */ 289 */
288int rproc_check_carveout_da(struct rproc *rproc, struct rproc_mem_entry *mem, 290static int rproc_check_carveout_da(struct rproc *rproc,
289 u32 da, u32 len) 291 struct rproc_mem_entry *mem, u32 da, u32 len)
290{ 292{
291 struct device *dev = &rproc->dev; 293 struct device *dev = &rproc->dev;
292 int delta = 0; 294 int delta;
293 295
294 /* Check requested resource length */ 296 /* Check requested resource length */
295 if (len > mem->len) { 297 if (len > mem->len) {
296 dev_err(dev, "Registered carveout doesn't fit len request\n"); 298 dev_err(dev, "Registered carveout doesn't fit len request\n");
297 return -ENOMEM; 299 return -EINVAL;
298 } 300 }
299 301
300 if (da != FW_RSC_ADDR_ANY && mem->da == FW_RSC_ADDR_ANY) { 302 if (da != FW_RSC_ADDR_ANY && mem->da == FW_RSC_ADDR_ANY) {
301 /* Update existing carveout da */ 303 /* Address doesn't match registered carveout configuration */
302 mem->da = da; 304 return -EINVAL;
303 } else if (da != FW_RSC_ADDR_ANY && mem->da != FW_RSC_ADDR_ANY) { 305 } else if (da != FW_RSC_ADDR_ANY && mem->da != FW_RSC_ADDR_ANY) {
304 delta = da - mem->da; 306 delta = da - mem->da;
305 307
@@ -307,13 +309,13 @@ int rproc_check_carveout_da(struct rproc *rproc, struct rproc_mem_entry *mem,
307 if (delta < 0) { 309 if (delta < 0) {
308 dev_err(dev, 310 dev_err(dev,
309 "Registered carveout doesn't fit da request\n"); 311 "Registered carveout doesn't fit da request\n");
310 return -ENOMEM; 312 return -EINVAL;
311 } 313 }
312 314
313 if (delta + len > mem->len) { 315 if (delta + len > mem->len) {
314 dev_err(dev, 316 dev_err(dev,
315 "Registered carveout doesn't fit len request\n"); 317 "Registered carveout doesn't fit len request\n");
316 return -ENOMEM; 318 return -EINVAL;
317 } 319 }
318 } 320 }
319 321