Skip to contentSkip to conversation

RTC: omap-rtc: enable for SOC_AM33XX

PATCH New Daniel Mack 3 participants 9 messages Oct 18, 2012 – Oct 22, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/3 RTC: omap-rtc: enable for SOC_AM33XX

The same IP is found on AM33xx as well, so let users select it.

---
 drivers/rtc/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/rtc/Kconfig +1 -1
index 19c03ab..5cb5be7 100644
@@ -777,7 +777,7 @@ config RTC_DRV_IMXDI
 
 config RTC_DRV_OMAP
 	tristate "TI OMAP1"
-	depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_DAVINCI_DA8XX
+	depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_DAVINCI_DA8XX || SOC_AM33XX
 	help
 	  Say "yes" here to support the real time clock on TI OMAP1 and
 	  DA8xx/OMAP-L13x chips.  This driver can also be built as a
Signature · 1 line
1.7.11.7
#1 lore raw

PATCH 2/3 RTC: omap-rtc: enable pm_runtime

This is needed as preparation for platforms where using pm runtime usage is mandatory.

---
 drivers/rtc/rtc-omap.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
drivers/rtc/rtc-omap.c +10 -0
index 0b614e3..baa876e 100644
@@ -17,6 +17,7 @@
 #include <linux/module.h>
 #include <linux/ioport.h>
 #include <linux/delay.h>
+#include <linux/pm_runtime.h>
 #include <linux/rtc.h>
 #include <linux/bcd.h>
 #include <linux/platform_device.h>
@@ -322,6 +323,9 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
 		goto fail;
 	}
 
+	pm_runtime_enable(&pdev->dev);
+	pm_runtime_get_sync(&pdev->dev);
+
 	rtc = rtc_device_register(pdev->name, &pdev->dev,
 			&omap_rtc_ops, THIS_MODULE);
 	if (IS_ERR(rtc)) {
@@ -420,6 +424,8 @@ static int __exit omap_rtc_remove(struct platform_device *pdev)
 		free_irq(omap_rtc_alarm, rtc);
 
 	rtc_device_unregister(rtc);
+	pm_runtime_put_sync(&pdev->dev);
+	pm_runtime_disable(&pdev->dev);
 	iounmap(rtc_base);
 	release_mem_region(mem->start, resource_size(mem));
 	return 0;
@@ -442,11 +448,15 @@ static int omap_rtc_suspend(struct platform_device *pdev, pm_message_t state)
 	else
 		rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
 
+	pm_runtime_put_sync(&pdev->dev);
+
 	return 0;
 }
 
 static int omap_rtc_resume(struct platform_device *pdev)
 {
+	pm_runtime_get_sync(&pdev->dev);
+
 	if (device_may_wakeup(&pdev->dev))
 		disable_irq_wake(omap_rtc_alarm);
 	else
Signature · 1 line
1.7.11.7
#2 lore raw

PATCH 2/3 RTC: omap-rtc: enable pm_runtime

Quoted 4 lines · Daniel Mack

This is needed as preparation for platforms where using pm runtime usage is mandatory.

It looks like, you just duplicated effort here.
RTC patches have been already submitted quite some time back for AM33xx, probably you missed to do google before spending time on this.

Patch Series -
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg23253.html

Denial,
It would be really helpful if you could test these patches and ack them.

Just FYI, we have bunch of parallel activities going inside team to upstream all the patches/module/drivers/features, so to avoid such duplication of effort, I suggest you to google for the patches or ping on mailing list.

Thanks,
Vaibhav

Quoted 52 lines
---
 drivers/rtc/rtc-omap.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
drivers/rtc/rtc-omap.c +10 -0
index 0b614e3..baa876e 100644
@@ -17,6 +17,7 @@
 #include <linux/module.h>
 #include <linux/ioport.h>
 #include <linux/delay.h>
+#include <linux/pm_runtime.h>
 #include <linux/rtc.h>
 #include <linux/bcd.h>
 #include <linux/platform_device.h>
@@ -322,6 +323,9 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
 		goto fail;
 	}
 
+	pm_runtime_enable(&pdev->dev);
+	pm_runtime_get_sync(&pdev->dev);
+
 	rtc = rtc_device_register(pdev->name, &pdev->dev,
 			&omap_rtc_ops, THIS_MODULE);
 	if (IS_ERR(rtc)) {
@@ -420,6 +424,8 @@ static int __exit omap_rtc_remove(struct platform_device *pdev)
 		free_irq(omap_rtc_alarm, rtc);
 
 	rtc_device_unregister(rtc);
+	pm_runtime_put_sync(&pdev->dev);
+	pm_runtime_disable(&pdev->dev);
 	iounmap(rtc_base);
 	release_mem_region(mem->start, resource_size(mem));
 	return 0;
@@ -442,11 +448,15 @@ static int omap_rtc_suspend(struct platform_device *pdev, pm_message_t state)
 	else
 		rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
 
+	pm_runtime_put_sync(&pdev->dev);
+
 	return 0;
 }
 
 static int omap_rtc_resume(struct platform_device *pdev)
 {
+	pm_runtime_get_sync(&pdev->dev);
+
 	if (device_may_wakeup(&pdev->dev))
 		disable_irq_wake(omap_rtc_alarm);
 	else
#3 lore raw

PATCH 2/3 RTC: omap-rtc: enable pm_runtime

Quoted 6 lines · Vaibhav Hiremath
Quoted 3 lines · Daniel Mack

This is needed as preparation for platforms where using pm runtime usage is mandatory.

Quoted 8 lines
Quoted 1 line

It looks like, you just duplicated effort here.
RTC patches have been already submitted quite some time back for AM33xx, probably you missed to do google before spending time on this.

Patch Series -
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg23253.html

Heh, damn :) I would have thought that so shortly after the merge window, that code either went in already or is yet missing. Oh well.

Quoted 2 lines

Denial,
It would be really helpful if you could test these patches and ack them.

Ok, will do tomorrow. What's missing there is support for writing to the OMAP_RTC_OSC_REG (path 3/3 in my series). Would like me to rebase the functionality? I need thatkind of setup for my board ...

Quoted 4 lines

Just FYI, we have bunch of parallel activities going inside team to upstream all the patches/module/drivers/features, so to avoid such duplication of effort, I suggest you to google for the patches or ping on mailing list.

Yes, it's more difficult to participate in the AM33xx code than in other platforms. I'm not complaining about other doing all the hard work though, it's just a little different.

Anyway - thanks for the heads-up!

Daniel

#4 lore raw

PATCH 2/3 RTC: omap-rtc: enable pm_runtime

Quoted 19 lines · Daniel Mack
Quoted 6 lines · Vaibhav Hiremath
Quoted 3 lines · Daniel Mack

This is needed as preparation for platforms where using pm runtime usage is mandatory.

Quoted 8 lines
Quoted 1 line

It looks like, you just duplicated effort here.
RTC patches have been already submitted quite some time back for AM33xx, probably you missed to do google before spending time on this.

Patch Series -
http://www.mail-archive.com/davinci-linux-open-source at linux.davincidsp.com/msg23253.html

Heh, damn :) I would have thought that so shortly after the merge window, that code either went in already or is yet missing. Oh well.

Quoted 8 lines
Quoted 2 lines

Denial,
It would be really helpful if you could test these patches and ack them.

Ok, will do tomorrow. What's missing there is support for writing to the OMAP_RTC_OSC_REG (path 3/3 in my series). Would like me to rebase the functionality? I need thatkind of setup for my board ...

This is bit tricky and required more discussion before merging it, let me reopen the old discussion which I had started some time back -

RTC OSC clock is required to configure clocksource systemtimer for the kernel, and it is important when you get into PM related features.

Please refer the below commit for more reference,

http://marc.info/?l=u-boot&m=135057734713796&w=2

Quoted 9 lines
Quoted 4 lines

Just FYI, we have bunch of parallel activities going inside team to upstream all the patches/module/drivers/features, so to avoid such duplication of effort, I suggest you to google for the patches or ping on mailing list.

Yes, it's more difficult to participate in the AM33xx code than in other platforms. I'm not complaining about other doing all the hard work though, it's just a little different.

No its not. Its good that we have so many developers contributing, so now its just working together. Recommend you to ping once before spending time, so that we can collaboratively work together, even I wouldn't mind you to pick/own on-going development and submit it.

Thanks,
Vaibhav

Quoted 6 lines

Anyway - thanks for the heads-up!

Daniel

#5 lore raw

PATCH 2/3 RTC: omap-rtc: enable pm_runtime

Hi Daniel,

Quoted 13 lines · Vaibhav
Quoted 7 lines · Daniel Mack
Quoted 1 line · Vaibhav Hiremath

It would be really helpful if you could test these patches and ack them.

Ok, will do tomorrow. What's missing there is support for writing to the OMAP_RTC_OSC_REG (path 3/3 in my series). Would like me to rebase the functionality? I need thatkind of setup for my board ...

This is bit tricky and required more discussion before merging it, let me reopen the old discussion which I had started some time back -

Quoted 6 lines

RTC OSC clock is required to configure clocksource systemtimer for the kernel, and it is important when you get into PM related features.

Please refer the below commit for more reference,

http://marc.info/?l=u-boot&m=135057734713796&w=2

Newer version (v4) of omap rtc patches for am335x has been posted, "rtc: omap dt support (for am33xx)".
In case you can test, please do it over the new series.

You would need also need DT patch that adds DT node to test (it has been separated from the series as it is felt that it should not be part of same series), "arm/dts: am33xx rtc node"

If you are using mainline uboot, you would need the fix as mentioned by Vaibhav H (as in the link he provided above), expecting it to reach uboot mainline soon.

If the above is being attempted to achieve in Kernel it would cause 2-3 seconds delay in boot time (else it had to be made a module), please refer link provided by Vaibhav H for more details.

else you can do in current mainline uboot,

mw.l 0x44e3e06c 0x83e70b13
mw.l 0x44e3e070 0x95a4f1e0
mw.b 0x44e3e054 0x48

and then boot kernel.

Regards
Afzal

#6 lore raw

PATCH 2/3 RTC: omap-rtc: enable pm_runtime

Quoted 23 lines · Afzal

Hi Daniel,

Quoted 13 lines · Vaibhav
Quoted 7 lines · Daniel Mack
Quoted 1 line · Vaibhav Hiremath

It would be really helpful if you could test these patches and ack them.

Ok, will do tomorrow. What's missing there is support for writing to the OMAP_RTC_OSC_REG (path 3/3 in my series). Would like me to rebase the functionality? I need thatkind of setup for my board ...

This is bit tricky and required more discussion before merging it, let me reopen the old discussion which I had started some time back -

Quoted 6 lines

RTC OSC clock is required to configure clocksource systemtimer for the kernel, and it is important when you get into PM related features.

Please refer the below commit for more reference,

http://marc.info/?l=u-boot&m=135057734713796&w=2

Quoted 8 lines

Newer version (v4) of omap rtc patches for am335x has been posted, "rtc: omap dt support (for am33xx)".
In case you can test, please do it over the new series.

You would need also need DT patch that adds DT node to test (it has been separated from the series as it is felt that it should not be part of same series), "arm/dts: am33xx rtc node"

Agreed. I tested your patches and they do basically the same thing than mine. You can take my

on all patches in this series except for 2/5 which I didn't test as I don't have any Davinci platform.

Quoted 9 lines

If you are using mainline uboot, you would need the fix as mentioned by Vaibhav H (as in the link he provided above), expecting it to reach uboot mainline soon.

If the above is being attempted to achieve in Kernel it would cause 2-3 seconds delay in boot time (else it had to be made a module), please refer link provided by Vaibhav H for more details.

Quoted 7 lines

else you can do in current mainline uboot,

mw.l 0x44e3e06c 0x83e70b13
mw.l 0x44e3e070 0x95a4f1e0
mw.b 0x44e3e054 0x48

and then boot kernel.

I'm surprised that survives the kernel boot, but I'll give it a try. In case you want to add that logic to the kernel as well, please copy me in the discussion :)

Thanks,
Daniel

#7 lore raw

PATCH 2/3 RTC: omap-rtc: enable pm_runtime

Quoted 33 lines · Daniel Mack
Quoted 23 lines · Afzal

Hi Daniel,

Quoted 13 lines · Vaibhav
Quoted 7 lines · Daniel Mack
Quoted 1 line · Vaibhav Hiremath

It would be really helpful if you could test these patches and ack them.

Ok, will do tomorrow. What's missing there is support for writing to the OMAP_RTC_OSC_REG (path 3/3 in my series). Would like me to rebase the functionality? I need thatkind of setup for my board ...

This is bit tricky and required more discussion before merging it, let me reopen the old discussion which I had started some time back -

Quoted 6 lines

RTC OSC clock is required to configure clocksource systemtimer for the kernel, and it is important when you get into PM related features.

Please refer the below commit for more reference,

http://marc.info/?l=u-boot&m=135057734713796&w=2

Quoted 8 lines

Newer version (v4) of omap rtc patches for am335x has been posted, "rtc: omap dt support (for am33xx)".
In case you can test, please do it over the new series.

You would need also need DT patch that adds DT node to test (it has been separated from the series as it is felt that it should not be part of same series), "arm/dts: am33xx rtc node"

Quoted 5 lines

Agreed. I tested your patches and they do basically the same thing than mine. You can take my

Thanks Daniel for testing these patches.

Quoted 18 lines

on all patches in this series except for 2/5 which I didn't test as I don't have any Davinci platform.

Quoted 15 lines

If you are using mainline uboot, you would need the fix as mentioned by Vaibhav H (as in the link he provided above), expecting it to reach uboot mainline soon.

If the above is being attempted to achieve in Kernel it would cause 2-3 seconds delay in boot time (else it had to be made a module), please refer link provided by Vaibhav H for more details.

else you can do in current mainline uboot,

mw.l 0x44e3e06c 0x83e70b13
mw.l 0x44e3e070 0x95a4f1e0
mw.b 0x44e3e054 0x48

Quoted 7 lines
Quoted 1 line

and then boot kernel.

I'm surprised that survives the kernel boot, but I'll give it a try. In case you want to add that logic to the kernel as well, please copy me in the discussion :)

Certainly...

Some background information for your reference,
We had some discussion in the past on this, and we decided to make this as a fallback mechanism considering following scenarios -

- System built with 32k crystal OSC, connected to RTC module

- System without 32k crystal OSC, as RTC is not used.

- Boot-Loader dependency for RTC clock enable (required for system-timer)

So the fallback mechanism would be something similar -

http://arago-project.org/git/projects/?p=linux-am33x.git;a=commit;h=58abec6ac010f4f8818caa4a52d16c4802e14acc

Thanks,
Vaibhav

Quoted 4 lines

Thanks,
Daniel

#8 lore raw

PATCH 3/3 RTC: omap-rtc: add DT bindings

In reply to Daniel Mack

This adds bindings for the OMAP RTC driver.

There are currently two compatible string it matches, "ti,omap-rtc" and "ti,am33xx-rtc". This is done because the AM33xx needs extra registers to be written in order to unlock the register set.

Also, the OMAP_RTC_OSC_REG can be set up via DT, in particular two bits:

32KCLK_EN - Selects external clock source, namely
rtc_32k_clk_rtc_32k_clk that is from the 32-kHz oscillator

32KCLK_SEL - 32-kHz clock enable post clock mux of
rtc_32k_clk_rtc_32k_aux_clk and rtc_32k_clk_rtc_32k_clk

---
 Documentation/devicetree/bindings/rtc/omap-rtc.txt | 25 +++++++
 drivers/rtc/rtc-omap.c                             | 78 ++++++++++++++++++++++
 2 files changed, 103 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/rtc/omap-rtc.txt
Documentation/devicetree/bindings/rtc/omap-rtc.txt new file +25 -0
new file mode 100644
index 0000000..a2abc9c
@@ -0,0 +1,25 @@
+* OMAP RTC
+
+Required properties:
+- compatible : Should be "ti,omap-rtc" or "ti,am33xx-rtc"
+
+
+Optional properties for AM33xx
+- ti,rtc-external-osc - Selects external clock source, namely
+			rtc_32k_clk_rtc_32k_clk that is from the
+			32-kHz oscillator
+
+- ti,rtc-32clk-enable - 32-kHz clock enable post clock mux of
+			rtc_32k_clk_rtc_32k_aux_clk and
+			rtc_32k_clk_rtc_32k_clk
+
+Example for AM33xx:
+
+rtc at 44e3e000 {
+	compatible = "marvell,am33xx-rtc";
+	reg = <0x44e3e000 0x1000>;
+	interrupts = <75 76>;
+	ti,hwmods = "rtc";
+	ti,rtc-32clk-enable;
+	ti,rtc-external-osc;
+};
drivers/rtc/rtc-omap.c +78 -0

108 lines not on this page · raw message

Signature · 1 line
1.7.11.7