Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bus: ti-sysc: Drop legacy idle quirk handling

There are no more users that need the legacy idle quirk so let's drop
the legacy idle quirk handling. This simplifies the PM code to just
sysc_pm_ops with unified handling for all the interconnect targets.

Reviewed-by: Dhruva Gole <d-gole@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>

+2 -108
+2 -107
drivers/bus/ti-sysc.c
··· 1469 1469 1470 1470 ddata = dev_get_drvdata(dev); 1471 1471 1472 - if (ddata->cfg.quirks & 1473 - (SYSC_QUIRK_LEGACY_IDLE | SYSC_QUIRK_NO_IDLE)) 1472 + if (ddata->cfg.quirks & SYSC_QUIRK_NO_IDLE) 1474 1473 return 0; 1475 1474 1476 1475 if (!ddata->enabled) ··· 1487 1488 1488 1489 ddata = dev_get_drvdata(dev); 1489 1490 1490 - if (ddata->cfg.quirks & 1491 - (SYSC_QUIRK_LEGACY_IDLE | SYSC_QUIRK_NO_IDLE)) 1491 + if (ddata->cfg.quirks & SYSC_QUIRK_NO_IDLE) 1492 1492 return 0; 1493 1493 1494 1494 if (ddata->cfg.quirks & SYSC_QUIRK_REINIT_ON_RESUME) { ··· 2455 2457 return pm_generic_runtime_resume(dev); 2456 2458 } 2457 2459 2458 - #ifdef CONFIG_PM_SLEEP 2459 - static int sysc_child_suspend_noirq(struct device *dev) 2460 - { 2461 - struct sysc *ddata; 2462 - int error; 2463 - 2464 - ddata = sysc_child_to_parent(dev); 2465 - 2466 - dev_dbg(ddata->dev, "%s %s\n", __func__, 2467 - ddata->name ? ddata->name : ""); 2468 - 2469 - error = pm_generic_suspend_noirq(dev); 2470 - if (error) { 2471 - dev_err(dev, "%s error at %i: %i\n", 2472 - __func__, __LINE__, error); 2473 - 2474 - return error; 2475 - } 2476 - 2477 - if (!pm_runtime_status_suspended(dev)) { 2478 - error = pm_generic_runtime_suspend(dev); 2479 - if (error) { 2480 - dev_dbg(dev, "%s busy at %i: %i\n", 2481 - __func__, __LINE__, error); 2482 - 2483 - return 0; 2484 - } 2485 - 2486 - error = sysc_runtime_suspend(ddata->dev); 2487 - if (error) { 2488 - dev_err(dev, "%s error at %i: %i\n", 2489 - __func__, __LINE__, error); 2490 - 2491 - return error; 2492 - } 2493 - 2494 - ddata->child_needs_resume = true; 2495 - } 2496 - 2497 - return 0; 2498 - } 2499 - 2500 - static int sysc_child_resume_noirq(struct device *dev) 2501 - { 2502 - struct sysc *ddata; 2503 - int error; 2504 - 2505 - ddata = sysc_child_to_parent(dev); 2506 - 2507 - dev_dbg(ddata->dev, "%s %s\n", __func__, 2508 - ddata->name ? ddata->name : ""); 2509 - 2510 - if (ddata->child_needs_resume) { 2511 - ddata->child_needs_resume = false; 2512 - 2513 - error = sysc_runtime_resume(ddata->dev); 2514 - if (error) 2515 - dev_err(ddata->dev, 2516 - "%s runtime resume error: %i\n", 2517 - __func__, error); 2518 - 2519 - error = pm_generic_runtime_resume(dev); 2520 - if (error) 2521 - dev_err(ddata->dev, 2522 - "%s generic runtime resume: %i\n", 2523 - __func__, error); 2524 - } 2525 - 2526 - return pm_generic_resume_noirq(dev); 2527 - } 2528 - #endif 2529 - 2530 - static struct dev_pm_domain sysc_child_pm_domain = { 2531 - .ops = { 2532 - SET_RUNTIME_PM_OPS(sysc_child_runtime_suspend, 2533 - sysc_child_runtime_resume, 2534 - NULL) 2535 - USE_PLATFORM_PM_SLEEP_OPS 2536 - SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(sysc_child_suspend_noirq, 2537 - sysc_child_resume_noirq) 2538 - } 2539 - }; 2540 - 2541 2460 /* Caller needs to take list_lock if ever used outside of cpu_pm */ 2542 2461 static void sysc_reinit_modules(struct sysc_soc_info *soc) 2543 2462 { ··· 2525 2610 mutex_unlock(&sysc_soc->list_lock); 2526 2611 } 2527 2612 2528 - /** 2529 - * sysc_legacy_idle_quirk - handle children in omap_device compatible way 2530 - * @ddata: device driver data 2531 - * @child: child device driver 2532 - * 2533 - * Allow idle for child devices as done with _od_runtime_suspend(). 2534 - * Otherwise many child devices will not idle because of the permanent 2535 - * parent usecount set in pm_runtime_irq_safe(). 2536 - * 2537 - * Note that the long term solution is to just modify the child device 2538 - * drivers to not set pm_runtime_irq_safe() and then this can be just 2539 - * dropped. 2540 - */ 2541 - static void sysc_legacy_idle_quirk(struct sysc *ddata, struct device *child) 2542 - { 2543 - if (ddata->cfg.quirks & SYSC_QUIRK_LEGACY_IDLE) 2544 - dev_pm_domain_set(child, &sysc_child_pm_domain); 2545 - } 2546 - 2547 2613 static int sysc_notifier_call(struct notifier_block *nb, 2548 2614 unsigned long event, void *device) 2549 2615 { ··· 2541 2645 error = sysc_child_add_clocks(ddata, dev); 2542 2646 if (error) 2543 2647 return error; 2544 - sysc_legacy_idle_quirk(ddata, dev); 2545 2648 break; 2546 2649 default: 2547 2650 break;
-1
include/linux/platform_data/ti-sysc.h
··· 71 71 #define SYSC_QUIRK_SWSUP_SIDLE_ACT BIT(12) 72 72 #define SYSC_QUIRK_SWSUP_SIDLE BIT(11) 73 73 #define SYSC_QUIRK_EXT_OPT_CLOCK BIT(10) 74 - #define SYSC_QUIRK_LEGACY_IDLE BIT(9) 75 74 #define SYSC_QUIRK_RESET_STATUS BIT(8) 76 75 #define SYSC_QUIRK_NO_IDLE BIT(7) 77 76 #define SYSC_QUIRK_NO_IDLE_ON_INIT BIT(6)