ti-sysc.c (c4d41d00552754cc8cdd66a52da9b7c203884d49) | ti-sysc.c (6cfcd5563b4fadbf49ba8fa481978e5e86d30322) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * ti-sysc.c - Texas Instruments sysc interconnect target driver 4 */ 5 6#include <linux/io.h> 7#include <linux/clk.h> 8#include <linux/clkdev.h> --- 222 unchanged lines hidden (view full) --- 231 sysc_mask = BIT(ddata->cap->regbits->srst_shift); 232 233 if (ddata->cfg.quirks & SYSS_QUIRK_RESETDONE_INVERTED) 234 syss_done = 0; 235 else 236 syss_done = ddata->cfg.syss_mask; 237 238 if (syss_offset >= 0) { | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * ti-sysc.c - Texas Instruments sysc interconnect target driver 4 */ 5 6#include <linux/io.h> 7#include <linux/clk.h> 8#include <linux/clkdev.h> --- 222 unchanged lines hidden (view full) --- 231 sysc_mask = BIT(ddata->cap->regbits->srst_shift); 232 233 if (ddata->cfg.quirks & SYSS_QUIRK_RESETDONE_INVERTED) 234 syss_done = 0; 235 else 236 syss_done = ddata->cfg.syss_mask; 237 238 if (syss_offset >= 0) { |
239 error = readx_poll_timeout_atomic(sysc_read_sysstatus, ddata, 240 rstval, (rstval & ddata->cfg.syss_mask) == 241 syss_done, 100, MAX_MODULE_SOFTRESET_WAIT); | 239 error = readx_poll_timeout(sysc_read_sysstatus, ddata, rstval, 240 (rstval & ddata->cfg.syss_mask) == 241 syss_done, 242 100, MAX_MODULE_SOFTRESET_WAIT); |
242 243 } else if (ddata->cfg.quirks & SYSC_QUIRK_RESET_STATUS) { | 243 244 } else if (ddata->cfg.quirks & SYSC_QUIRK_RESET_STATUS) { |
244 error = readx_poll_timeout_atomic(sysc_read_sysconfig, ddata, 245 rstval, !(rstval & sysc_mask), 246 100, MAX_MODULE_SOFTRESET_WAIT); | 245 error = readx_poll_timeout(sysc_read_sysconfig, ddata, rstval, 246 !(rstval & sysc_mask), 247 100, MAX_MODULE_SOFTRESET_WAIT); |
247 } 248 249 return error; 250} 251 252static int sysc_add_named_clock_from_child(struct sysc *ddata, 253 const char *name, 254 const char *optfck_name) --- 1018 unchanged lines hidden (view full) --- 1273} 1274 1275static int __maybe_unused sysc_noirq_suspend(struct device *dev) 1276{ 1277 struct sysc *ddata; 1278 1279 ddata = dev_get_drvdata(dev); 1280 | 248 } 249 250 return error; 251} 252 253static int sysc_add_named_clock_from_child(struct sysc *ddata, 254 const char *name, 255 const char *optfck_name) --- 1018 unchanged lines hidden (view full) --- 1274} 1275 1276static int __maybe_unused sysc_noirq_suspend(struct device *dev) 1277{ 1278 struct sysc *ddata; 1279 1280 ddata = dev_get_drvdata(dev); 1281 |
1281 if (ddata->cfg.quirks & 1282 (SYSC_QUIRK_LEGACY_IDLE | SYSC_QUIRK_NO_IDLE)) | 1282 if (ddata->cfg.quirks & SYSC_QUIRK_LEGACY_IDLE) |
1283 return 0; 1284 1285 return pm_runtime_force_suspend(dev); 1286} 1287 1288static int __maybe_unused sysc_noirq_resume(struct device *dev) 1289{ 1290 struct sysc *ddata; 1291 1292 ddata = dev_get_drvdata(dev); 1293 | 1283 return 0; 1284 1285 return pm_runtime_force_suspend(dev); 1286} 1287 1288static int __maybe_unused sysc_noirq_resume(struct device *dev) 1289{ 1290 struct sysc *ddata; 1291 1292 ddata = dev_get_drvdata(dev); 1293 |
1294 if (ddata->cfg.quirks & 1295 (SYSC_QUIRK_LEGACY_IDLE | SYSC_QUIRK_NO_IDLE)) | 1294 if (ddata->cfg.quirks & SYSC_QUIRK_LEGACY_IDLE) |
1296 return 0; 1297 1298 return pm_runtime_force_resume(dev); 1299} 1300 1301static const struct dev_pm_ops sysc_pm_ops = { 1302 SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(sysc_noirq_suspend, sysc_noirq_resume) 1303 SET_RUNTIME_PM_OPS(sysc_runtime_suspend, --- 420 unchanged lines hidden (view full) --- 1724 1725 if (!lock) { 1726 kick0_val = 0x83e70b13; 1727 kick1_val = 0x95a4f1e0; 1728 } 1729 1730 local_irq_save(flags); 1731 /* RTC_STATUS BUSY bit may stay active for 1/32768 seconds (~30 usec) */ | 1295 return 0; 1296 1297 return pm_runtime_force_resume(dev); 1298} 1299 1300static const struct dev_pm_ops sysc_pm_ops = { 1301 SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(sysc_noirq_suspend, sysc_noirq_resume) 1302 SET_RUNTIME_PM_OPS(sysc_runtime_suspend, --- 420 unchanged lines hidden (view full) --- 1723 1724 if (!lock) { 1725 kick0_val = 0x83e70b13; 1726 kick1_val = 0x95a4f1e0; 1727 } 1728 1729 local_irq_save(flags); 1730 /* RTC_STATUS BUSY bit may stay active for 1/32768 seconds (~30 usec) */ |
1732 error = readl_poll_timeout_atomic(ddata->module_va + 0x44, val, 1733 !(val & BIT(0)), 100, 50); | 1731 error = readl_poll_timeout(ddata->module_va + 0x44, val, 1732 !(val & BIT(0)), 100, 50); |
1734 if (error) 1735 dev_warn(ddata->dev, "rtc busy timeout\n"); 1736 /* Now we have ~15 microseconds to read/write various registers */ 1737 sysc_write(ddata, 0x6c, kick0_val); 1738 sysc_write(ddata, 0x70, kick1_val); 1739 local_irq_restore(flags); 1740} 1741 --- 1118 unchanged lines hidden (view full) --- 2860 break; 2861 } 2862 } 2863 mutex_unlock(&sysc_soc->list_lock); 2864 2865 return error; 2866} 2867 | 1733 if (error) 1734 dev_warn(ddata->dev, "rtc busy timeout\n"); 1735 /* Now we have ~15 microseconds to read/write various registers */ 1736 sysc_write(ddata, 0x6c, kick0_val); 1737 sysc_write(ddata, 0x70, kick1_val); 1738 local_irq_restore(flags); 1739} 1740 --- 1118 unchanged lines hidden (view full) --- 2859 break; 2860 } 2861 } 2862 mutex_unlock(&sysc_soc->list_lock); 2863 2864 return error; 2865} 2866 |
2867/* 2868 * Ignore timers tagged with no-reset and no-idle. These are likely in use, 2869 * for example by drivers/clocksource/timer-ti-dm-systimer.c. If more checks 2870 * are needed, we could also look at the timer register configuration. 2871 */ 2872static int sysc_check_active_timer(struct sysc *ddata) 2873{ 2874 if (ddata->cap->type != TI_SYSC_OMAP2_TIMER && 2875 ddata->cap->type != TI_SYSC_OMAP4_TIMER) 2876 return 0; 2877 2878 if ((ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT) && 2879 (ddata->cfg.quirks & SYSC_QUIRK_NO_IDLE)) 2880 return -EBUSY; 2881 2882 return 0; 2883} 2884 |
|
2868static const struct of_device_id sysc_match_table[] = { 2869 { .compatible = "simple-bus", }, 2870 { /* sentinel */ }, 2871}; 2872 2873static int sysc_probe(struct platform_device *pdev) 2874{ 2875 struct ti_sysc_platform_data *pdata = dev_get_platdata(&pdev->dev); --- 40 unchanged lines hidden (view full) --- 2916 return error; 2917 2918 sysc_init_early_quirks(ddata); 2919 2920 error = sysc_check_disabled_devices(ddata); 2921 if (error) 2922 return error; 2923 | 2885static const struct of_device_id sysc_match_table[] = { 2886 { .compatible = "simple-bus", }, 2887 { /* sentinel */ }, 2888}; 2889 2890static int sysc_probe(struct platform_device *pdev) 2891{ 2892 struct ti_sysc_platform_data *pdata = dev_get_platdata(&pdev->dev); --- 40 unchanged lines hidden (view full) --- 2933 return error; 2934 2935 sysc_init_early_quirks(ddata); 2936 2937 error = sysc_check_disabled_devices(ddata); 2938 if (error) 2939 return error; 2940 |
2941 error = sysc_check_active_timer(ddata); 2942 if (error) 2943 return error; 2944 |
|
2924 error = sysc_get_clocks(ddata); 2925 if (error) 2926 return error; 2927 2928 error = sysc_init_resets(ddata); 2929 if (error) 2930 goto unprepare; 2931 --- 129 unchanged lines hidden --- | 2945 error = sysc_get_clocks(ddata); 2946 if (error) 2947 return error; 2948 2949 error = sysc_init_resets(ddata); 2950 if (error) 2951 goto unprepare; 2952 --- 129 unchanged lines hidden --- |