diff options
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index d78c12e7cb5e..486cc4ded190 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -2373,6 +2373,9 @@ static int of_dev_hwmod_lookup(struct device_node *np, | |||
2373 | * registers. This address is needed early so the OCP registers that | 2373 | * registers. This address is needed early so the OCP registers that |
2374 | * are part of the device's address space can be ioremapped properly. | 2374 | * are part of the device's address space can be ioremapped properly. |
2375 | * | 2375 | * |
2376 | * If SYSC access is not needed, the registers will not be remapped | ||
2377 | * and non-availability of MPU access is not treated as an error. | ||
2378 | * | ||
2376 | * Returns 0 on success, -EINVAL if an invalid hwmod is passed, and | 2379 | * Returns 0 on success, -EINVAL if an invalid hwmod is passed, and |
2377 | * -ENXIO on absent or invalid register target address space. | 2380 | * -ENXIO on absent or invalid register target address space. |
2378 | */ | 2381 | */ |
@@ -2387,6 +2390,11 @@ static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data, | |||
2387 | 2390 | ||
2388 | _save_mpu_port_index(oh); | 2391 | _save_mpu_port_index(oh); |
2389 | 2392 | ||
2393 | /* if we don't need sysc access we don't need to ioremap */ | ||
2394 | if (!oh->class->sysc) | ||
2395 | return 0; | ||
2396 | |||
2397 | /* we can't continue without MPU PORT if we need sysc access */ | ||
2390 | if (oh->_int_flags & _HWMOD_NO_MPU_PORT) | 2398 | if (oh->_int_flags & _HWMOD_NO_MPU_PORT) |
2391 | return -ENXIO; | 2399 | return -ENXIO; |
2392 | 2400 | ||
@@ -2396,8 +2404,10 @@ static int __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data, | |||
2396 | oh->name); | 2404 | oh->name); |
2397 | 2405 | ||
2398 | /* Extract the IO space from device tree blob */ | 2406 | /* Extract the IO space from device tree blob */ |
2399 | if (!np) | 2407 | if (!np) { |
2408 | pr_err("omap_hwmod: %s: no dt node\n", oh->name); | ||
2400 | return -ENXIO; | 2409 | return -ENXIO; |
2410 | } | ||
2401 | 2411 | ||
2402 | va_start = of_iomap(np, index + oh->mpu_rt_idx); | 2412 | va_start = of_iomap(np, index + oh->mpu_rt_idx); |
2403 | } else { | 2413 | } else { |
@@ -2456,13 +2466,11 @@ static int __init _init(struct omap_hwmod *oh, void *data) | |||
2456 | oh->name, np->name); | 2466 | oh->name, np->name); |
2457 | } | 2467 | } |
2458 | 2468 | ||
2459 | if (oh->class->sysc) { | 2469 | r = _init_mpu_rt_base(oh, NULL, index, np); |
2460 | r = _init_mpu_rt_base(oh, NULL, index, np); | 2470 | if (r < 0) { |
2461 | if (r < 0) { | 2471 | WARN(1, "omap_hwmod: %s: doesn't have mpu register target base\n", |
2462 | WARN(1, "omap_hwmod: %s: doesn't have mpu register target base\n", | 2472 | oh->name); |
2463 | oh->name); | 2473 | return 0; |
2464 | return 0; | ||
2465 | } | ||
2466 | } | 2474 | } |
2467 | 2475 | ||
2468 | r = _init_clocks(oh, NULL); | 2476 | r = _init_clocks(oh, NULL); |