linux/drivers/rtc
Bryan O'Donoghue 5c3124fdd7 rtc: snvs: Fix usage of snvs_rtc_enable
commit 1485991c02 upstream.

commit 179a502f8c ("rtc: snvs: add Freescale rtc-snvs driver") introduces
the SNVS RTC driver with a function snvs_rtc_enable().

snvs_rtc_enable() can return an error on the enable path however this
driver does not currently trap that failure on the probe() path and
consequently if enabling the RTC fails we encounter a later error spinning
forever in rtc_write_sync_lp().

[   36.093481] [<c010d630>] (__irq_svc) from [<c0c2e9ec>] (_raw_spin_unlock_irqrestore+0x34/0x44)
[   36.102122] [<c0c2e9ec>] (_raw_spin_unlock_irqrestore) from [<c072e32c>] (regmap_read+0x4c/0x5c)
[   36.110938] [<c072e32c>] (regmap_read) from [<c085d0f4>] (rtc_write_sync_lp+0x6c/0x98)
[   36.118881] [<c085d0f4>] (rtc_write_sync_lp) from [<c085d160>] (snvs_rtc_alarm_irq_enable+0x40/0x4c)
[   36.128041] [<c085d160>] (snvs_rtc_alarm_irq_enable) from [<c08567b4>] (rtc_timer_do_work+0xd8/0x1a8)
[   36.137291] [<c08567b4>] (rtc_timer_do_work) from [<c01441b8>] (process_one_work+0x28c/0x76c)
[   36.145840] [<c01441b8>] (process_one_work) from [<c01446cc>] (worker_thread+0x34/0x58c)
[   36.153961] [<c01446cc>] (worker_thread) from [<c014aee4>] (kthread+0x138/0x150)
[   36.161388] [<c014aee4>] (kthread) from [<c0107e14>] (ret_from_fork+0x14/0x20)
[   36.168635] rcu_sched kthread starved for 2602 jiffies! g496 c495 f0x2 RCU_GP_WAIT_FQS(3) ->state=0x0 ->cpu=0
[   36.178564] rcu_sched       R  running task        0     8      2 0x00000000
[   36.185664] [<c0c288b0>] (__schedule) from [<c0c29134>] (schedule+0x3c/0xa0)
[   36.192739] [<c0c29134>] (schedule) from [<c0c2db80>] (schedule_timeout+0x78/0x4e0)
[   36.200422] [<c0c2db80>] (schedule_timeout) from [<c01a7ab0>] (rcu_gp_kthread+0x648/0x1864)
[   36.208800] [<c01a7ab0>] (rcu_gp_kthread) from [<c014aee4>] (kthread+0x138/0x150)
[   36.216309] [<c014aee4>] (kthread) from [<c0107e14>] (ret_from_fork+0x14/0x20)

This patch fixes by parsing the result of rtc_write_sync_lp() and
propagating both in the probe and elsewhere. If the RTC doesn't start we
don't proceed loading the driver and don't get into this loop mess later
on.

Fixes: 179a502f8c ("rtc: snvs: add Freescale rtc-snvs driver")
Signed-off-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
[bwh: Backported to 3.16:
 - No cleanup is needed on error in snvs_rtc_probe(); just return
 - Adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2018-10-21 08:45:10 +01:00
..
class.c rtc: honor device tree /alias entries when assigning IDs 2014-01-23 16:37:00 -08:00
hctosys.c rtc_sysfs_show_hctosys(): display 0 if resume failed 2012-10-06 03:05:04 +09:00
interface.c rtc: set the alarm to the next expiring timer 2018-02-13 18:42:03 +00:00
Kconfig rtc: s5m: add support for S2MPS14 RTC 2014-06-10 15:34:47 -07:00
Makefile rtc: da9063: RTC driver 2014-06-06 16:08:08 -07:00
rtc-88pm80x.c drivers/rtc/rtc-88pm80x.c: use dev_get_platdata() 2013-11-13 12:09:28 +09:00
rtc-88pm860x.c drivers/rtc/rtc-88pm860x.c: add missing of_node_put() 2014-06-06 16:08:07 -07:00
rtc-ab3100.c drivers/rtc/rtc-ab3100.c: remove empty function 2013-07-03 16:07:54 -07:00
rtc-ab8500.c drivers/rtc/rtc-ab8500.c: add second resolution to rtc driver 2013-07-03 16:07:59 -07:00
rtc-as3722.c drivers/rtc/rtc-as3722.c: use SIMPLE_DEV_PM_OPS macro 2014-04-03 16:21:22 -07:00
rtc-at32ap700x.c rtc: rtc-at32ap700x: remove unnecessary OOM messages 2014-04-03 16:21:17 -07:00
rtc-at91rm9200.c rtc: rtc-at91rm9200: fix infinite wait for ACKUPD irq 2014-06-06 16:08:08 -07:00
rtc-at91rm9200.h Revert "drivers/rtc/rtc-at91rm9200.c: use a variable for storing IMR" 2013-04-05 09:36:53 -07:00
rtc-at91sam9.c rtc: at91sam9: include <mach/hardware.h> explicitly 2013-12-20 11:41:32 +01:00
rtc-au1xxx.c drivers/rtc/rtc-au1xxx.c: remove empty function 2013-07-03 16:07:54 -07:00
rtc-bfin.c drivers/rtc/rtc-bfin.c: do not abort when requesting irq fails 2014-06-06 16:08:08 -07:00
rtc-bq32k.c drivers/rtc/rtc-bq32k.c: remove empty function 2013-07-03 16:07:55 -07:00
rtc-bq4802.c drivers/rtc/rtc-bq4802.c: remove empty function 2013-07-03 16:07:54 -07:00
rtc-cmos.c rtc-cmos: fix wakeup from S5 without CONFIG_PM_SLEEP 2014-10-30 09:40:16 -07:00
rtc-coh901331.c rtc: rtc-coh901331: use devm_ioremap_resource() 2014-04-03 16:21:18 -07:00
rtc-core.h rtc: update to class device removal patches 2007-05-08 11:15:18 -07:00
rtc-da9052.c drivers/rtc/rtc-da9052.c: ALARM causes interrupt storm 2014-06-06 16:08:07 -07:00
rtc-da9055.c drivers/rtc/rtc-da9055.c: remove use of regmap_irq_get_virq() 2014-04-03 16:21:24 -07:00
rtc-da9063.c rtc: da9063: RTC driver 2014-06-06 16:08:08 -07:00
rtc-davinci.c rtc: rtc-davinci: use devm_ioremap_resource() 2014-04-03 16:21:18 -07:00
rtc-dev.c rtc: use dev_warn()/dev_dbg()/pr_err() instead of printk() 2013-02-21 17:22:29 -08:00
rtc-dm355evm.c drivers/rtc/rtc-dm355evm.c: remove empty function 2013-07-03 16:07:53 -07:00
rtc-ds1216.c drivers/rtc/rtc-ds1216.c: use module_platform_driver_probe() 2013-07-03 16:08:00 -07:00
rtc-ds1286.c drivers/rtc/rtc-ds1286.c: remove empty function 2013-07-03 16:07:56 -07:00
rtc-ds1302.c drivers/rtc/rtc-ds1302.c: handle write protection 2013-07-03 16:07:59 -07:00
rtc-ds1305.c rtc: fix potential race condition 2014-04-03 16:21:16 -07:00
rtc-ds1307.c rtc: ds1307: Fix relying on reset value for weekday 2016-11-20 01:16:47 +00:00
rtc-ds1343.c drivers/rtc/rtc-ds1343.c: fix potential race condition 2014-06-06 16:08:08 -07:00
rtc-ds1347.c rtc: add support for maxim dallas rtc ds1347 2014-04-03 16:21:23 -07:00
rtc-ds1374.c drivers/rtc/rtc-ds1374.c: fix spacing related issues 2013-07-03 16:07:46 -07:00
rtc-ds1390.c rtc: rtc-ds1390: remove unnecessary OOM messages 2014-04-03 16:21:17 -07:00
rtc-ds1511.c rtc: treewide: remove excess rtc_device validation 2014-04-03 16:21:24 -07:00
rtc-ds1553.c rtc: treewide: remove excess rtc_device validation 2014-04-03 16:21:24 -07:00
rtc-ds1672.c rtc: fix potential race condition 2014-04-03 16:21:16 -07:00
rtc-ds1742.c rtc: rtc-ds1742: make of_device_id array const 2014-06-06 16:08:07 -07:00
rtc-ds2404.c drivers/rtc/rtc-ds2404.c: use dev_get_platdata() 2013-11-13 12:09:29 +09:00
rtc-ds3232.c drivers/rtc/rtc-ds3232.c: enable ds3232 to work as wakeup source 2014-04-03 16:21:22 -07:00
rtc-ds3234.c drivers/rtc/rtc-ds3234.c: remove empty function 2013-07-03 16:07:56 -07:00
rtc-efi.c drivers/rtc/rtc-efi.c: avoid subtracting day twice when computing year days 2014-06-06 16:08:07 -07:00
rtc-em3027.c drivers/rtc/rtc-em3027.c: remove empty function 2013-07-03 16:07:56 -07:00
rtc-ep93xx.c drivers/rtc/rtc-ep93xx.c: use dev_get_platdata() 2013-11-13 12:09:29 +09:00
rtc-fm3130.c drivers/rtc/rtc-fm3130.c: remove empty function 2013-07-03 16:07:56 -07:00
rtc-generic.c drivers/rtc/rtc-generic.c: remove empty function 2013-07-03 16:07:57 -07:00
rtc-hid-sensor-time.c tree-wide: use reinit_completion instead of INIT_COMPLETION 2013-11-15 09:32:21 +09:00
rtc-hym8563.c rtc: hym8563: fix invalid year calculation 2016-05-01 00:05:59 +02:00
rtc-imxdi.c drivers/rtc/rtc-imxdi.c: check the return value from clk_prepare_enable() 2014-04-03 16:21:16 -07:00
rtc-isl1208.c drivers/rtc/rtc-isl1208.c: use devm_* APIs 2013-11-13 12:09:27 +09:00
rtc-isl12022.c drivers/rtc: Replace PTR_RET with PTR_ERR_OR_ZERO 2013-07-16 16:06:00 +09:30
rtc-isl12057.c drivers/rtc/rtc-isl12057.c: fix masking of register values 2015-01-16 14:34:38 +00:00
rtc-jz4740.c rtc: rtc-jz4740: use devm_ioremap_resource() 2014-04-03 16:21:19 -07:00
rtc-lib.c rtc: Initialized rtc_time->tm_isdst 2011-08-26 17:26:35 -07:00
rtc-lp8788.c drivers/rtc/rtc-lp8788.c: remove empty function 2013-07-03 16:07:53 -07:00
rtc-lpc32xx.c rtc: rtc-lpc32xx: remove unnecessary OOM messages 2014-04-03 16:21:18 -07:00
rtc-ls1x.c drivers/rtc/rtc-ls1x.c: remove empty function 2013-07-03 16:07:53 -07:00
rtc-m41t80.c drivers/rtc/rtc-m41t80.c: add support for MicroCrystal rv4162 2014-06-06 16:08:07 -07:00
rtc-m41t93.c drivers/rtc/rtc-m41t93.c: remove empty function 2013-07-03 16:07:56 -07:00
rtc-m41t94.c drivers/rtc/rtc-m41t94.c: remove empty function 2013-07-03 16:07:57 -07:00
rtc-m48t35.c drivers/rtc: Replace PTR_RET with PTR_ERR_OR_ZERO 2013-07-16 16:06:00 +09:30
rtc-m48t59.c drivers/rtc/rtc-m48t59.c: use dev_get_platdata() 2013-11-13 12:09:29 +09:00
rtc-m48t86.c drivers/rtc/rtc-m48t86.c: use dev_get_platdata() 2013-11-13 12:09:29 +09:00
rtc-max6900.c drivers/rtc/rtc-max6900.c: remove redundant checks 2013-11-13 12:09:27 +09:00
rtc-max6902.c drivers/rtc/rtc-max6902.c: remove empty function 2013-07-03 16:07:57 -07:00
rtc-max8907.c rtc: max8907: weekday encoding fixes 2014-01-23 16:37:00 -08:00
rtc-max8925.c drivers/rtc/rtc-max8925.c: remove empty function 2013-07-03 16:07:53 -07:00
rtc-max8997.c drivers/rtc/rtc-max8997.c: remove empty function 2013-07-03 16:07:57 -07:00
rtc-max8998.c For the 3.11 merge we only have one new MFD driver for the Kontron PLD. 2013-07-10 11:10:27 -07:00
rtc-max77686.c drivers/rtc/rtc-max77686.c: Fix wrong register 2013-09-11 15:58:56 -07:00
rtc-mc13xxx.c drivers/rtc/rtc-mc13xxx.c: fix potential race condition 2014-04-03 16:21:23 -07:00
rtc-mcp795.c drivers/rtc: add support for Microchip MCP795 2014-06-06 16:08:08 -07:00
rtc-moxart.c rtc: rtc-moxart: remove unnecessary OOM messages 2014-04-03 16:21:17 -07:00
rtc-mpc5121.c drivers: clean-up prom.h implicit includes 2013-10-09 20:04:04 -05:00
rtc-mrst.c drivers/rtc/rtc-mrst.c: remove redundant dev_set_drvdata 2013-11-13 12:09:27 +09:00
rtc-msm6242.c drivers/rtc/rtc-msm6242.c: remove empty function 2013-07-03 16:07:53 -07:00
rtc-mv.c rtc: rtc-mv: make of_device_id array const 2014-06-06 16:08:08 -07:00
rtc-mxc.c drivers/rtc/rtc-mxc.c: check the return value from clk_prepare_enable() 2014-01-23 16:36:59 -08:00
rtc-nuc900.c rtc: rtc-nuc900: fix loop timeout test 2017-10-12 15:28:02 +01:00
rtc-omap.c rtc: omap: fix missing wakealarm attribute 2015-01-15 10:43:53 +00:00
rtc-palmas.c rtc: rtc-palmas: make of_device_id array const 2014-06-06 16:08:08 -07:00
rtc-pcap.c rtc: rtc-pcap: remove unnecessary platform_set_drvdata() 2013-07-03 16:07:51 -07:00
rtc-pcf2123.c drivers/rtc/rtc-pcf2123.c: use dev_get_platdata() 2013-11-13 12:09:29 +09:00
rtc-pcf2127.c drivers/rtc/rtc-pcf2127.c: replace IS_ERR and PTR_ERR with PTR_ERR_OR_ZERO 2014-01-23 16:37:00 -08:00
rtc-pcf8523.c drivers/rtc/rtc-pcf8523.c: fix month definition 2014-05-06 13:04:58 -07:00
rtc-pcf8563.c drivers/rtc: Replace PTR_RET with PTR_ERR_OR_ZERO 2013-07-16 16:06:00 +09:30
rtc-pcf8583.c drivers/rtc: Replace PTR_RET with PTR_ERR_OR_ZERO 2013-07-16 16:06:00 +09:30
rtc-pcf50633.c rtc: rtc-pcf50633: use devm_*() functions 2013-04-29 18:28:38 -07:00
rtc-pl030.c drivers/rtc/rtc-pl030.c: use devm_kzalloc() instead of kmalloc() 2013-11-13 12:09:31 +09:00
rtc-pl031.c drivers/rtc/rtc-pl03x.c: remove unnecessary amba_set_drvdata() 2013-11-13 12:09:31 +09:00
rtc-pm8xxx.c rtc: pm8xxx: move device_init_wakeup() before rtc_register 2014-04-03 16:21:23 -07:00
rtc-proc.c procfs: new helper - PDE_DATA(inode) 2013-04-09 14:13:32 -04:00
rtc-ps3.c drivers/rtc/rtc-ps3.c: remove empty function 2013-07-03 16:07:58 -07:00
rtc-puv3.c drivers/rtc/rtc-puv3.c: remove "&dev->" for typo issue MIME-Version: 1.0 2014-06-20 08:22:39 +08:00
rtc-pxa.c drivers/rtc/rtc-pxa.c: make of_device_id array const 2014-06-06 16:08:09 -07:00
rtc-r9701.c rtc: rtc-r9701: use spi_set_drvdata() 2013-04-29 18:28:34 -07:00
rtc-rc5t583.c rtc: rtc-rc5t583: use platform_{get,set}_drvdata() 2013-07-03 16:07:55 -07:00
rtc-rp5c01.c rtc: rtc-rp5c01: remove unnecessary platform_set_drvdata() 2013-07-03 16:07:52 -07:00
rtc-rs5c313.c drivers/rtc/rtc-rs5c313.c: remove empty function 2013-07-03 16:07:58 -07:00
rtc-rs5c348.c drivers/rtc/rtc-rs5c348.c: use dev_get_platdata() 2013-11-13 12:09:29 +09:00
rtc-rs5c372.c drivers/rtc/rtc-rs5c372.c: add R2221T/L variant to the driver 2013-05-07 18:38:26 -07:00
rtc-rv3029c2.c drivers/rtc/rtc-rv3029c2.c: fix potential race condition 2014-04-03 16:21:24 -07:00
rtc-rx4581.c drivers/rtc/rtc-rx4581.c: remove empty function 2013-07-03 16:07:58 -07:00
rtc-rx8025.c rtc: rtc-rx8025: remove unnecessary OOM messages 2014-04-03 16:21:18 -07:00
rtc-rx8581.c drivers/rtc/rtc-rx8581.c: add SMBus-only adapters support 2014-01-23 16:37:00 -08:00
rtc-s3c.c drivers/rtc/rtc-s3c.c: remove NO_IRQ macro 2014-04-03 16:21:24 -07:00
rtc-s3c.h rtc: s3c: make header file local 2013-04-19 13:51:25 +02:00
rtc-s5m.c rtc: s5m: fix to update ctrl register 2015-09-29 16:44:49 +01:00
rtc-s35390a.c rtc: rtc-s35390a: use devm_*() functions 2013-04-29 18:28:38 -07:00
rtc-sa1100.c rtc: sa1100: fix unbalanced clk_prepare_enable/clk_disable_unprepare 2017-11-26 13:50:23 +00:00
rtc-sh.c drivers/rtc/rtc-sh.c: use dev_get_platdata() 2013-11-13 12:09:30 +09:00
rtc-sirfsoc.c drivers/rtc/rtc-sirfsoc.c: move hardware initilization earlier in probe 2015-01-15 10:43:51 +00:00
rtc-snvs.c rtc: snvs: Fix usage of snvs_rtc_enable 2018-10-21 08:45:10 +01:00
rtc-spear.c rtc: rtc-spear: remove unnecessary OOM messages 2014-04-03 16:21:18 -07:00
rtc-starfire.c drivers/rtc/rtc-starfire.c: remove empty function 2013-07-03 16:07:58 -07:00
rtc-stk17ta8.c rtc: treewide: remove excess rtc_device validation 2014-04-03 16:21:24 -07:00
rtc-stmp3xxx.c drivers/rtc/rtc-stmp3xxx.c: remove redundant of_match_ptr 2013-11-13 12:09:30 +09:00
rtc-sun4v.c drivers/rtc/rtc-sun4v.c: remove empty function 2013-07-03 16:07:58 -07:00
rtc-sunxi.c rtc: sunxi: change compatibles 2014-04-03 16:21:21 -07:00
rtc-sysfs.c rtc: convert class code to use dev_groups 2013-07-29 13:10:58 -07:00
rtc-tegra.c drivers/rtc: don't check resource with devm_ioremap_resource 2013-05-18 11:57:07 +02:00
rtc-test.c rtc: fix potential race condition 2014-04-03 16:21:16 -07:00
rtc-tile.c drivers/rtc/rtc-tile.c: remove empty function 2013-07-03 16:07:53 -07:00
rtc-tps6586x.c drivers/rtc/rtc-tps6586x.c: device wakeup flags correction 2013-06-12 16:29:45 -07:00
rtc-tps65910.c drivers/rtc/rtc-tps65910.c: remove unnecessary include 2013-11-13 12:09:31 +09:00
rtc-tps80031.c drivers/rtc/rtc-tps80031.c: remove empty function 2013-07-03 16:07:58 -07:00
rtc-twl.c drivers/rtc/rtc-twl.c: use devm_*() functions 2014-01-23 16:36:59 -08:00
rtc-tx4939.c rtc: tx4939: avoid unintended sign extension on a 24 bit shift 2018-10-21 08:44:52 +01:00
rtc-v3020.c drivers/rtc/rtc-v3020.c: use dev_get_platdata() 2013-11-13 12:09:30 +09:00
rtc-vr41xx.c rtc: vr41xx: Wire up alarm_irq_enable 2016-05-01 00:05:59 +02:00
rtc-vt8500.c rtc: rtc-vt8500: use devm_ioremap_resource() 2014-04-03 16:21:19 -07:00
rtc-wm831x.c drivers/rtc/rtc-wm831x.c: remove empty function 2013-07-03 16:07:59 -07:00
rtc-wm8350.c rtc: rtc-wm8350: switch to using SIMPLE_DEV_PM_OPS 2013-04-29 18:28:32 -07:00
rtc-x1205.c rtc: fix potential race condition 2014-04-03 16:21:16 -07:00
rtc-xgene.c drivers/rtc: add APM X-Gene SoC RTC driver 2014-06-06 16:08:06 -07:00
systohc.c NTP: Add a CONFIG_RTC_SYSTOHC configuration 2013-01-15 18:16:06 -08:00