linux/drivers/rtc
Thierry Reding 5fa4086987 rtc: tegra: Implement clock handling
Accessing the registers of the RTC block on Tegra requires the module
clock to be enabled. This only works because the RTC module clock will
be enabled by default during early boot. However, because the clock is
unused, the CCF will disable it at late_init time. This causes the RTC
to become unusable afterwards. This can easily be reproduced by trying
to use the RTC:

	$ hwclock --rtc /dev/rtc1

This will hang the system. I ran into this by following up on a report
by Martin Michlmayr that reboot wasn't working on Tegra210 systems. It
turns out that the rtc-tegra driver's ->shutdown() implementation will
hang the CPU, because of the disabled clock, before the system can be
rebooted.

What confused me for a while is that the same driver is used on prior
Tegra generations where the hang can not be observed. However, as Peter
De Schrijver pointed out, this is because on 32-bit Tegra chips the RTC
clock is enabled by the tegra20_timer.c clocksource driver, which uses
the RTC to provide a persistent clock. This code is never enabled on
64-bit Tegra because the persistent clock infrastructure does not exist
on 64-bit ARM.

The proper fix for this is to add proper clock handling to the RTC
driver in order to ensure that the clock is enabled when the driver
requires it. All device trees contain the clock already, therefore
no additional changes are required.

Reported-by: Martin Michlmayr <tbm@cyrius.com>
Acked-By Peter De Schrijver <pdeschrijver@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
2017-01-23 00:46:55 +01:00
..
class.c
hctosys.c
interface.c ktime: Cleanup ktime_set() usage 2016-12-25 17:21:22 +01:00
Kconfig rtc: add STM32 RTC driver 2017-01-13 01:40:31 +01:00
Makefile rtc: add STM32 RTC driver 2017-01-13 01:40:31 +01:00
rtc-88pm80x.c
rtc-88pm860x.c
rtc-ab-b5ze-s3.c
rtc-ab3100.c
rtc-ab8500.c
rtc-abx80x.c rtc: abx80x: use devm_add_action_or_reset() 2016-07-19 17:27:42 +02:00
rtc-ac100.c rtc: ac100: Add NULL checking for devm_kzalloc call 2016-09-22 00:14:41 +02:00
rtc-armada38x.c rtc: armada38x: make struct rtc_class_ops const 2017-01-12 12:33:58 +01:00
rtc-as3722.c
rtc-asm9260.c rtc: asm9260: fix module autoload 2016-10-19 08:45:48 +02:00
rtc-at32ap700x.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-at91rm9200.c
rtc-at91rm9200.h
rtc-at91sam9.c rtc: at91sam9: Fix missing spin_lock_init() 2016-07-26 00:09:18 +02:00
rtc-au1xxx.c rtc: constify rtc_class_ops structures 2017-01-11 17:23:06 +01:00
rtc-bfin.c rtc: constify rtc_class_ops structures 2017-01-11 17:23:06 +01:00
rtc-bq32k.c rtc: bq32k: Fix handling of oscillator failure flag 2016-08-31 18:21:35 +02:00
rtc-bq4802.c
rtc-cmos.c RTC for 4.10 2016-12-18 18:18:03 -08:00
rtc-coh901331.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-core.h
rtc-da9052.c rtc: explicitly set tm_sec = 0 for drivers with minute accurancy 2016-07-19 18:15:21 +02:00
rtc-da9055.c rtc: explicitly set tm_sec = 0 for drivers with minute accurancy 2016-07-19 18:15:21 +02:00
rtc-da9063.c
rtc-davinci.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-dev.c
rtc-digicolor.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-dm355evm.c rtc: constify rtc_class_ops structures 2017-01-11 17:23:06 +01:00
rtc-ds1216.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-ds1286.c rtc: ds1286: move header to linux/rtc 2016-07-08 16:23:11 +02:00
rtc-ds1302.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-ds1305.c rtc: simplify implementations of read_alarm 2016-07-09 10:24:45 +02:00
rtc-ds1307.c rtc: ds1307: Add ACPI support 2016-12-19 00:59:07 +01:00
rtc-ds1343.c rtc: simplify implementations of read_alarm 2016-07-09 10:24:45 +02:00
rtc-ds1347.c rtc: ds1347: changed raw spi calls to register map calls 2016-09-22 00:14:40 +02:00
rtc-ds1374.c rtc: ds1374: Merge conditional + WARN_ON() 2016-12-07 16:34:43 +01:00
rtc-ds1390.c
rtc-ds1511.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-ds1553.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-ds1672.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-ds1685.c rtc: simplify implementations of read_alarm 2016-07-09 10:24:45 +02:00
rtc-ds1742.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-ds2404.c rtc: ds2404: move rtc-ds2404.h to platform_data 2016-06-27 10:48:28 +02:00
rtc-ds3232.c rtc: simplify implementations of read_alarm 2016-07-09 10:24:45 +02:00
rtc-efi-platform.c
rtc-efi.c rtc: efi: Fail probing if RTC reads don't work 2016-06-06 17:07:33 +02:00
rtc-em3027.c
rtc-ep93xx.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-fm3130.c
rtc-gemini.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-generic.c rtc: generic: remove get_rtc_time/set_rtc_time wrappers 2016-06-04 00:23:35 +02:00
rtc-hid-sensor-time.c
rtc-hym8563.c rtc: hym8563: in .read_alarm set .tm_sec to 0 to signal minute accuracy 2016-07-19 18:18:06 +02:00
rtc-imxdi.c rtc: constify rtc_class_ops structures 2017-01-11 17:23:06 +01:00
rtc-isl1208.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-isl12022.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-jz4740.c rtc: jz4740: make the driver builtin only 2016-11-09 01:37:03 +01:00
rtc-lib.c rtc: make rtc-lib explicitly non-modular 2016-11-04 23:31:29 +01:00
rtc-lp8788.c
rtc-lpc24xx.c
rtc-lpc32xx.c
rtc-ls1x.c rtc: constify rtc_class_ops structures 2017-01-11 17:23:06 +01:00
rtc-m41t80.c rtc: m41t80: add suspend handlers for alarm IRQ 2016-07-21 20:06:57 +02:00
rtc-m41t93.c
rtc-m41t94.c
rtc-m48t35.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-m48t59.c
rtc-m48t86.c rtc: m48t86: move m48t86.h to platform_data 2016-06-27 18:15:25 +02:00
rtc-max6900.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-max6902.c
rtc-max6916.c rtc: add support for Maxim max6916 2016-06-04 16:05:59 +02:00
rtc-max8907.c
rtc-max8925.c
rtc-max8997.c
rtc-max8998.c
rtc-max77686.c
rtc-mc13xxx.c rtc: mc13xxx: remove UIE signaling 2016-05-20 12:33:51 +02:00
rtc-mc146818-lib.c rtc: move mc146818 helper functions out-of-line 2016-06-26 01:20:08 +02:00
rtc-mcp795.c rtc: mcp795: add alarm support. 2017-01-11 17:23:04 +01:00
rtc-moxart.c
rtc-mpc5121.c
rtc-mrst.c rtc: simplify implementations of read_alarm 2016-07-09 10:24:45 +02:00
rtc-msm6242.c
rtc-mt6397.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-mv.c
rtc-mxc.c rtc: constify rtc_class_ops structures 2017-01-11 17:23:06 +01:00
rtc-nuc900.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-omap.c rtc: omap: prevent disabling of clock/module during suspend 2016-11-04 23:11:39 +01:00
rtc-opal.c powerpc/opal: Add inline function to get rc from an ASYNC_COMP opal_msg 2016-06-29 17:33:18 +10:00
rtc-palmas.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-pcap.c
rtc-pcf2123.c rtc: pcf2123: Add missing error code assignment before test 2016-08-31 18:21:34 +02:00
rtc-pcf2127.c
rtc-pcf8523.c
rtc-pcf8563.c rtc: explicitly set tm_sec = 0 for drivers with minute accurancy 2016-07-19 18:15:21 +02:00
rtc-pcf8583.c
rtc-pcf50633.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-pcf85063.c rtc: pcf85063: do not register a RTC device if chip is not present 2016-11-04 23:08:59 +01:00
rtc-pic32.c rtc: pic32: Delete owner assignment 2016-08-31 18:21:35 +02:00
rtc-pl030.c
rtc-pl031.c
rtc-pm8xxx.c rtc: rtc-pm8xxx: Add support for pm8018 rtc 2016-08-31 09:33:33 +01:00
rtc-proc.c
rtc-ps3.c
rtc-puv3.c
rtc-pxa.c
rtc-r7301.c rtc: add support for EPSON TOYOCOM RTC-7301SF/DG 2016-12-19 00:59:21 +01:00
rtc-r9701.c
rtc-rc5t583.c rtc: explicitly set tm_sec = 0 for drivers with minute accurancy 2016-07-19 18:15:21 +02:00
rtc-rk808.c
rtc-rp5c01.c
rtc-rs5c313.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-rs5c348.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-rs5c372.c rtc: simplify implementations of read_alarm 2016-07-09 10:24:45 +02:00
rtc-rv3029c2.c rtc: rv3029: hide unused i2c device table 2016-05-21 17:07:16 +02:00
rtc-rv8803.c rtc: rv8803: set VDETOFF and SWOFF via device tree 2016-10-12 13:24:39 +02:00
rtc-rx4581.c
rtc-rx6110.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-rx8010.c rtc: rx8010: change lock mechanism 2017-01-04 23:39:15 +01:00
rtc-rx8025.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-rx8581.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-s3c.c rtc: s3c: Add s3c_rtc_{enable/disable}_clk in s3c_rtc_setfreq() 2016-07-19 17:48:06 +02:00
rtc-s3c.h
rtc-s5m.c
rtc-s35390a.c rtc: s35390a: improve two comments in .set_alarm 2016-07-11 23:22:35 +02:00
rtc-sa1100.c
rtc-sa1100.h
rtc-sh.c rtc: constify rtc_class_ops structures 2017-01-11 17:23:06 +01:00
rtc-sirfsoc.c
rtc-snvs.c rtc: snvs: return error in case enable_irq_wake fails 2016-05-20 12:33:51 +02:00
rtc-spear.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-st-lpc.c
rtc-starfire.c rtc: sparc: make starfire explicitly non-modular 2016-11-04 23:31:31 +01:00
rtc-stk17ta8.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-stm32.c rtc: stm32: fix building without CONFIG_OF 2017-01-13 17:51:53 +01:00
rtc-stmp3xxx.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-sun4v.c rtc: sparc: make sun4v explicitly non-modular 2016-11-04 23:31:33 +01:00
rtc-sun6i.c
rtc-sunxi.c
rtc-sysfs.c rtc: sysfs: fix a cast removing the const attribute 2016-08-31 18:21:35 +02:00
rtc-tegra.c rtc: tegra: Implement clock handling 2017-01-23 00:46:55 +01:00
rtc-test.c
rtc-tile.c
rtc-tps6586x.c rtc: tps6586x: rename so module can be autoloaded 2016-05-21 17:07:17 +02:00
rtc-tps65910.c rtc: tps65910: use 'unsigned int' instead of 'unsigned' in arguments 2017-01-10 01:32:51 +01:00
rtc-tps80031.c
rtc-twl.c rtc: twl: make driver DT only 2016-11-30 21:21:33 +01:00
rtc-tx4939.c
rtc-v3020.c rtc: v3020: move rtc-v3020.h to platform_data 2016-07-09 10:24:21 +02:00
rtc-vr41xx.c
rtc-vt8500.c
rtc-wm831x.c
rtc-wm8350.c
rtc-x1205.c rtc: remove useless DRV_VERSION 2016-05-20 12:33:51 +02:00
rtc-xgene.c
rtc-zynqmp.c rtc: zynqmp: Update seconds time programming logic 2016-05-20 12:33:51 +02:00
systohc.c