* [rtc-linux] [PATCH v2 0/4] SA1100 RTC clean-up for ARM64
@ 2015-04-30 20:37 ` Rob Herring
0 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: Russell King, Robert Jarzmik, Alessandro Zummo
Cc: linux-arm-kernel, Arnd Bergmann, Rob Herring, Daniel Mack,
Haojian Zhuang, Eric Miao, rtc-linux
This series enables building the SA1100 RTC driver for ARM64 in
preparation for enabling CONFIG_ARCH_MMP on ARM64. This is needed for
supporting the PXA1928 SOC.
The previous version can be found here[1]. This is mostly an update to
summarize the discussion about SA1100 and PXA RTC support.
Rob
[1] http://comments.gmane.org/gmane.linux.ports.arm.kernel/391410
Rob Herring (4):
ARM: pxa: add memory resource to RTC device
rtc: sa1100: convert to run-time register mapping
ARM: sa1100: remove unused RTC register definitions
ARM: mmp: remove unused RTC register definitions
arch/arm/mach-mmp/include/mach/regs-rtc.h | 23 --------
arch/arm/mach-pxa/devices.c | 18 +-----
arch/arm/mach-sa1100/include/mach/SA-1100.h | 34 ------------
drivers/rtc/rtc-sa1100.c | 86 ++++++++++++++++++++---------
4 files changed, 61 insertions(+), 100 deletions(-)
delete mode 100644 arch/arm/mach-mmp/include/mach/regs-rtc.h
--
2.1.0
--
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 0/4] SA1100 RTC clean-up for ARM64
@ 2015-04-30 20:37 ` Rob Herring
0 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: linux-arm-kernel
This series enables building the SA1100 RTC driver for ARM64 in
preparation for enabling CONFIG_ARCH_MMP on ARM64. This is needed for
supporting the PXA1928 SOC.
The previous version can be found here[1]. This is mostly an update to
summarize the discussion about SA1100 and PXA RTC support.
Rob
[1] http://comments.gmane.org/gmane.linux.ports.arm.kernel/391410
Rob Herring (4):
ARM: pxa: add memory resource to RTC device
rtc: sa1100: convert to run-time register mapping
ARM: sa1100: remove unused RTC register definitions
ARM: mmp: remove unused RTC register definitions
arch/arm/mach-mmp/include/mach/regs-rtc.h | 23 --------
arch/arm/mach-pxa/devices.c | 18 +-----
arch/arm/mach-sa1100/include/mach/SA-1100.h | 34 ------------
drivers/rtc/rtc-sa1100.c | 86 ++++++++++++++++++++---------
4 files changed, 61 insertions(+), 100 deletions(-)
delete mode 100644 arch/arm/mach-mmp/include/mach/regs-rtc.h
--
2.1.0
^ permalink raw reply [flat|nested] 18+ messages in thread
* [rtc-linux] [PATCH v2 1/4] ARM: pxa: add memory resource to RTC device
2015-04-30 20:37 ` Rob Herring
@ 2015-04-30 20:37 ` Rob Herring
-1 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: Russell King, Robert Jarzmik, Alessandro Zummo
Cc: linux-arm-kernel, Arnd Bergmann, Rob Herring, Daniel Mack,
Haojian Zhuang, Eric Miao, rtc-linux
Add the memory resource for the sa1100-rtc device. Since the memory
resource is already present in the pxa_rtc_resources, that makes
sa1100_rtc_resources and pxa_rtc_resources equivalent, so use
pxa_rtc_resources for both devices and remove the duplicate
sa1100_rtc_resources.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Daniel Mack <daniel@zonque.org>
Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
Cc: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: linux-arm-kernel@lists.infradead.org
---
v2:
- Rebase to v4.1-rc1
arch/arm/mach-pxa/devices.c | 18 ++----------------
1 file changed, 2 insertions(+), 16 deletions(-)
diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
index 3543466..b598db6 100644
--- a/arch/arm/mach-pxa/devices.c
+++ b/arch/arm/mach-pxa/devices.c
@@ -439,25 +439,11 @@ struct platform_device pxa_device_rtc = {
.resource = pxa_rtc_resources,
};
-static struct resource sa1100_rtc_resources[] = {
- {
- .start = IRQ_RTC1Hz,
- .end = IRQ_RTC1Hz,
- .name = "rtc 1Hz",
- .flags = IORESOURCE_IRQ,
- }, {
- .start = IRQ_RTCAlrm,
- .end = IRQ_RTCAlrm,
- .name = "rtc alarm",
- .flags = IORESOURCE_IRQ,
- },
-};
-
struct platform_device sa1100_device_rtc = {
.name = "sa1100-rtc",
.id = -1,
- .num_resources = ARRAY_SIZE(sa1100_rtc_resources),
- .resource = sa1100_rtc_resources,
+ .num_resources = ARRAY_SIZE(pxa_rtc_resources),
+ .resource = pxa_rtc_resources,
};
static struct resource pxa_ac97_resources[] = {
--
2.1.0
--
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 1/4] ARM: pxa: add memory resource to RTC device
@ 2015-04-30 20:37 ` Rob Herring
0 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: linux-arm-kernel
Add the memory resource for the sa1100-rtc device. Since the memory
resource is already present in the pxa_rtc_resources, that makes
sa1100_rtc_resources and pxa_rtc_resources equivalent, so use
pxa_rtc_resources for both devices and remove the duplicate
sa1100_rtc_resources.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Daniel Mack <daniel@zonque.org>
Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
Cc: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: linux-arm-kernel at lists.infradead.org
---
v2:
- Rebase to v4.1-rc1
arch/arm/mach-pxa/devices.c | 18 ++----------------
1 file changed, 2 insertions(+), 16 deletions(-)
diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
index 3543466..b598db6 100644
--- a/arch/arm/mach-pxa/devices.c
+++ b/arch/arm/mach-pxa/devices.c
@@ -439,25 +439,11 @@ struct platform_device pxa_device_rtc = {
.resource = pxa_rtc_resources,
};
-static struct resource sa1100_rtc_resources[] = {
- {
- .start = IRQ_RTC1Hz,
- .end = IRQ_RTC1Hz,
- .name = "rtc 1Hz",
- .flags = IORESOURCE_IRQ,
- }, {
- .start = IRQ_RTCAlrm,
- .end = IRQ_RTCAlrm,
- .name = "rtc alarm",
- .flags = IORESOURCE_IRQ,
- },
-};
-
struct platform_device sa1100_device_rtc = {
.name = "sa1100-rtc",
.id = -1,
- .num_resources = ARRAY_SIZE(sa1100_rtc_resources),
- .resource = sa1100_rtc_resources,
+ .num_resources = ARRAY_SIZE(pxa_rtc_resources),
+ .resource = pxa_rtc_resources,
};
static struct resource pxa_ac97_resources[] = {
--
2.1.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [rtc-linux] [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping
2015-04-30 20:37 ` Rob Herring
@ 2015-04-30 20:37 ` Rob Herring
-1 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: Russell King, Robert Jarzmik, Alessandro Zummo
Cc: linux-arm-kernel, Arnd Bergmann, Rob Herring, Daniel Mack,
Haojian Zhuang, Eric Miao, rtc-linux
SA1100 and PXA differ only in register offsets which are currently
hardcoded in a machine specific header. Some arm64 platforms (PXA1928)
have this RTC block as well (and not the PXA270 variant).
Convert the driver to use ioremap and set the register offsets dynamically.
Since we are touching all the register accesses, convert them all to
readl_relaxed/writel_relaxed.
Currently, the rtc-sa1100 and rtc-pxa drivers co-exist as rtc-pxa has a
superset of functionality. This commit makes the drivers one step closer
to being mutually exclusive by using devm_ioremap_resource and claiming
the resource. The sharing of overlapping resources does not work if both
drivers claim the resource. That is not done currently, but will be done
as the drivers are converted to DT and follow proper driver rules.
Likely, the common portion of the 2 drivers will be made into library
functions for the SA1100 and PXA drivers to shared.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: rtc-linux@googlegroups.com
---
v2:
- Rebase to v4.1-rc1
- Use _relaxed accessors
- Summarize discussion about supporting both SA1100 and PXA RTC drivers
drivers/rtc/rtc-sa1100.c | 86 +++++++++++++++++++++++++++++++++---------------
1 file changed, 59 insertions(+), 27 deletions(-)
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c
index b6e1ca0..a21ead5 100644
--- a/drivers/rtc/rtc-sa1100.c
+++ b/drivers/rtc/rtc-sa1100.c
@@ -35,12 +35,10 @@
#include <linux/bitops.h>
#include <linux/io.h>
-#include <mach/hardware.h>
-#include <mach/irqs.h>
-
-#if defined(CONFIG_ARCH_PXA) || defined(CONFIG_ARCH_MMP)
-#include <mach/regs-rtc.h>
-#endif
+#define RTSR_HZE (1 << 3) /* HZ interrupt enable */
+#define RTSR_ALE (1 << 2) /* RTC alarm interrupt enable */
+#define RTSR_HZ (1 << 1) /* HZ rising-edge detected */
+#define RTSR_AL (1 << 0) /* RTC alarm detected */
#define RTC_DEF_DIVIDER (32768 - 1)
#define RTC_DEF_TRIM 0
@@ -48,6 +46,10 @@
struct sa1100_rtc {
spinlock_t lock;
+ void __iomem *rcnr;
+ void __iomem *rtar;
+ void __iomem *rtsr;
+ void __iomem *rttr;
int irq_1hz;
int irq_alarm;
struct rtc_device *rtc;
@@ -63,16 +65,16 @@ static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id)
spin_lock(&info->lock);
- rtsr = RTSR;
+ rtsr = readl_relaxed(info->rtsr);
/* clear interrupt sources */
- RTSR = 0;
+ writel_relaxed(0, info->rtsr);
/* Fix for a nasty initialization problem the in SA11xx RTSR register.
* See also the comments in sa1100_rtc_probe(). */
if (rtsr & (RTSR_ALE | RTSR_HZE)) {
/* This is the original code, before there was the if test
* above. This code does not clear interrupts that were not
* enabled. */
- RTSR = (RTSR_AL | RTSR_HZ) & (rtsr >> 2);
+ writel_relaxed((RTSR_AL | RTSR_HZ) & (rtsr >> 2), info->rtsr);
} else {
/* For some reason, it is possible to enter this routine
* without interruptions enabled, it has been tested with
@@ -81,13 +83,13 @@ static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id)
* This situation leads to an infinite "loop" of interrupt
* routine calling and as a result the processor seems to
* lock on its first call to open(). */
- RTSR = RTSR_AL | RTSR_HZ;
+ writel_relaxed(RTSR_AL | RTSR_HZ, info->rtsr);
}
/* clear alarm interrupt if it has occurred */
if (rtsr & RTSR_AL)
rtsr &= ~RTSR_ALE;
- RTSR = rtsr & (RTSR_ALE | RTSR_HZE);
+ writel_relaxed(rtsr & (RTSR_ALE | RTSR_HZE), info->rtsr);
/* update irq data & counter */
if (rtsr & RTSR_AL)
@@ -135,7 +137,7 @@ static void sa1100_rtc_release(struct device *dev)
struct sa1100_rtc *info = dev_get_drvdata(dev);
spin_lock_irq(&info->lock);
- RTSR = 0;
+ writel_relaxed(0, info->rtsr);
spin_unlock_irq(&info->lock);
free_irq(info->irq_alarm, dev);
@@ -144,39 +146,45 @@ static void sa1100_rtc_release(struct device *dev)
static int sa1100_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
{
+ u32 rtsr;
struct sa1100_rtc *info = dev_get_drvdata(dev);
spin_lock_irq(&info->lock);
+ rtsr = readl_relaxed(info->rtsr);
if (enabled)
- RTSR |= RTSR_ALE;
+ rtsr |= RTSR_ALE;
else
- RTSR &= ~RTSR_ALE;
+ rtsr &= ~RTSR_ALE;
+ writel_relaxed(rtsr, info->rtsr);
spin_unlock_irq(&info->lock);
return 0;
}
static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
{
- rtc_time_to_tm(RCNR, tm);
+ struct sa1100_rtc *info = dev_get_drvdata(dev);
+ rtc_time_to_tm(readl_relaxed(info->rcnr), tm);
return 0;
}
static int sa1100_rtc_set_time(struct device *dev, struct rtc_time *tm)
{
+ struct sa1100_rtc *info = dev_get_drvdata(dev);
unsigned long time;
int ret;
ret = rtc_tm_to_time(tm, &time);
if (ret == 0)
- RCNR = time;
+ writel_relaxed(time, info->rcnr);
return ret;
}
static int sa1100_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
{
u32 rtsr;
+ struct sa1100_rtc *info = dev_get_drvdata(dev);
- rtsr = RTSR;
+ rtsr = readl_relaxed(info->rtsr);
alrm->enabled = (rtsr & RTSR_ALE) ? 1 : 0;
alrm->pending = (rtsr & RTSR_AL) ? 1 : 0;
return 0;
@@ -192,12 +200,13 @@ static int sa1100_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
ret = rtc_tm_to_time(&alrm->time, &time);
if (ret != 0)
goto out;
- RTSR = RTSR & (RTSR_HZE|RTSR_ALE|RTSR_AL);
- RTAR = time;
+ writel_relaxed(readl_relaxed(info->rtsr) &
+ (RTSR_HZE | RTSR_ALE | RTSR_AL), info->rtsr);
+ writel_relaxed(time, info->rtar);
if (alrm->enabled)
- RTSR |= RTSR_ALE;
+ writel_relaxed(readl_relaxed(info->rtsr) | RTSR_ALE, info->rtsr);
else
- RTSR &= ~RTSR_ALE;
+ writel_relaxed(readl_relaxed(info->rtsr) & ~RTSR_ALE, info->rtsr);
out:
spin_unlock_irq(&info->lock);
@@ -206,8 +215,9 @@ out:
static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
{
- seq_printf(seq, "trim/divider\t\t: 0x%08x\n", (u32) RTTR);
- seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", (u32)RTSR);
+ struct sa1100_rtc *info = dev_get_drvdata(dev);
+ seq_printf(seq, "trim/divider\t\t: 0x%08x\n", readl_relaxed(info->rttr));
+ seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", readl_relaxed(info->rtsr));
return 0;
}
@@ -227,6 +237,8 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
{
struct rtc_device *rtc;
struct sa1100_rtc *info;
+ struct resource *iores;
+ void __iomem *base;
int irq_1hz, irq_alarm, ret = 0;
irq_1hz = platform_get_irq_byname(pdev, "rtc 1Hz");
@@ -244,6 +256,26 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
}
info->irq_1hz = irq_1hz;
info->irq_alarm = irq_alarm;
+
+
+ iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ base = devm_ioremap_resource(&pdev->dev, iores);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
+
+ if (IS_ENABLED(CONFIG_ARCH_SA1100) ||
+ of_device_is_compatible(pdev->dev.of_node, "mrvl,sa1100-rtc")) {
+ info->rcnr = base + 0x04;
+ info->rtsr = base + 0x10;
+ info->rtar = base + 0x00;
+ info->rttr = base + 0x08;
+ } else {
+ info->rcnr = base + 0x0;
+ info->rtsr = base + 0x8;
+ info->rtar = base + 0x4;
+ info->rttr = base + 0xc;
+ }
+
spin_lock_init(&info->lock);
platform_set_drvdata(pdev, info);
@@ -257,12 +289,12 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
* If the clock divider is uninitialized then reset it to the
* default value to get the 1Hz clock.
*/
- if (RTTR == 0) {
- RTTR = RTC_DEF_DIVIDER + (RTC_DEF_TRIM << 16);
+ if (readl_relaxed(info->rttr) == 0) {
+ writel_relaxed(RTC_DEF_DIVIDER + (RTC_DEF_TRIM << 16), info->rttr);
dev_warn(&pdev->dev, "warning: "
"initializing default clock divider/trim value\n");
/* The current RTC value probably doesn't make sense either */
- RCNR = 0;
+ writel_relaxed(0, info->rcnr);
}
device_init_wakeup(&pdev->dev, 1);
@@ -298,7 +330,7 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
*
* Notice that clearing bit 1 and 0 is accomplished by writting ONES to
* the corresponding bits in RTSR. */
- RTSR = RTSR_AL | RTSR_HZ;
+ writel_relaxed(RTSR_AL | RTSR_HZ, info->rtsr);
return 0;
err_dev:
--
2.1.0
--
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping
@ 2015-04-30 20:37 ` Rob Herring
0 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: linux-arm-kernel
SA1100 and PXA differ only in register offsets which are currently
hardcoded in a machine specific header. Some arm64 platforms (PXA1928)
have this RTC block as well (and not the PXA270 variant).
Convert the driver to use ioremap and set the register offsets dynamically.
Since we are touching all the register accesses, convert them all to
readl_relaxed/writel_relaxed.
Currently, the rtc-sa1100 and rtc-pxa drivers co-exist as rtc-pxa has a
superset of functionality. This commit makes the drivers one step closer
to being mutually exclusive by using devm_ioremap_resource and claiming
the resource. The sharing of overlapping resources does not work if both
drivers claim the resource. That is not done currently, but will be done
as the drivers are converted to DT and follow proper driver rules.
Likely, the common portion of the 2 drivers will be made into library
functions for the SA1100 and PXA drivers to shared.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: rtc-linux at googlegroups.com
---
v2:
- Rebase to v4.1-rc1
- Use _relaxed accessors
- Summarize discussion about supporting both SA1100 and PXA RTC drivers
drivers/rtc/rtc-sa1100.c | 86 +++++++++++++++++++++++++++++++++---------------
1 file changed, 59 insertions(+), 27 deletions(-)
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c
index b6e1ca0..a21ead5 100644
--- a/drivers/rtc/rtc-sa1100.c
+++ b/drivers/rtc/rtc-sa1100.c
@@ -35,12 +35,10 @@
#include <linux/bitops.h>
#include <linux/io.h>
-#include <mach/hardware.h>
-#include <mach/irqs.h>
-
-#if defined(CONFIG_ARCH_PXA) || defined(CONFIG_ARCH_MMP)
-#include <mach/regs-rtc.h>
-#endif
+#define RTSR_HZE (1 << 3) /* HZ interrupt enable */
+#define RTSR_ALE (1 << 2) /* RTC alarm interrupt enable */
+#define RTSR_HZ (1 << 1) /* HZ rising-edge detected */
+#define RTSR_AL (1 << 0) /* RTC alarm detected */
#define RTC_DEF_DIVIDER (32768 - 1)
#define RTC_DEF_TRIM 0
@@ -48,6 +46,10 @@
struct sa1100_rtc {
spinlock_t lock;
+ void __iomem *rcnr;
+ void __iomem *rtar;
+ void __iomem *rtsr;
+ void __iomem *rttr;
int irq_1hz;
int irq_alarm;
struct rtc_device *rtc;
@@ -63,16 +65,16 @@ static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id)
spin_lock(&info->lock);
- rtsr = RTSR;
+ rtsr = readl_relaxed(info->rtsr);
/* clear interrupt sources */
- RTSR = 0;
+ writel_relaxed(0, info->rtsr);
/* Fix for a nasty initialization problem the in SA11xx RTSR register.
* See also the comments in sa1100_rtc_probe(). */
if (rtsr & (RTSR_ALE | RTSR_HZE)) {
/* This is the original code, before there was the if test
* above. This code does not clear interrupts that were not
* enabled. */
- RTSR = (RTSR_AL | RTSR_HZ) & (rtsr >> 2);
+ writel_relaxed((RTSR_AL | RTSR_HZ) & (rtsr >> 2), info->rtsr);
} else {
/* For some reason, it is possible to enter this routine
* without interruptions enabled, it has been tested with
@@ -81,13 +83,13 @@ static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id)
* This situation leads to an infinite "loop" of interrupt
* routine calling and as a result the processor seems to
* lock on its first call to open(). */
- RTSR = RTSR_AL | RTSR_HZ;
+ writel_relaxed(RTSR_AL | RTSR_HZ, info->rtsr);
}
/* clear alarm interrupt if it has occurred */
if (rtsr & RTSR_AL)
rtsr &= ~RTSR_ALE;
- RTSR = rtsr & (RTSR_ALE | RTSR_HZE);
+ writel_relaxed(rtsr & (RTSR_ALE | RTSR_HZE), info->rtsr);
/* update irq data & counter */
if (rtsr & RTSR_AL)
@@ -135,7 +137,7 @@ static void sa1100_rtc_release(struct device *dev)
struct sa1100_rtc *info = dev_get_drvdata(dev);
spin_lock_irq(&info->lock);
- RTSR = 0;
+ writel_relaxed(0, info->rtsr);
spin_unlock_irq(&info->lock);
free_irq(info->irq_alarm, dev);
@@ -144,39 +146,45 @@ static void sa1100_rtc_release(struct device *dev)
static int sa1100_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
{
+ u32 rtsr;
struct sa1100_rtc *info = dev_get_drvdata(dev);
spin_lock_irq(&info->lock);
+ rtsr = readl_relaxed(info->rtsr);
if (enabled)
- RTSR |= RTSR_ALE;
+ rtsr |= RTSR_ALE;
else
- RTSR &= ~RTSR_ALE;
+ rtsr &= ~RTSR_ALE;
+ writel_relaxed(rtsr, info->rtsr);
spin_unlock_irq(&info->lock);
return 0;
}
static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
{
- rtc_time_to_tm(RCNR, tm);
+ struct sa1100_rtc *info = dev_get_drvdata(dev);
+ rtc_time_to_tm(readl_relaxed(info->rcnr), tm);
return 0;
}
static int sa1100_rtc_set_time(struct device *dev, struct rtc_time *tm)
{
+ struct sa1100_rtc *info = dev_get_drvdata(dev);
unsigned long time;
int ret;
ret = rtc_tm_to_time(tm, &time);
if (ret == 0)
- RCNR = time;
+ writel_relaxed(time, info->rcnr);
return ret;
}
static int sa1100_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
{
u32 rtsr;
+ struct sa1100_rtc *info = dev_get_drvdata(dev);
- rtsr = RTSR;
+ rtsr = readl_relaxed(info->rtsr);
alrm->enabled = (rtsr & RTSR_ALE) ? 1 : 0;
alrm->pending = (rtsr & RTSR_AL) ? 1 : 0;
return 0;
@@ -192,12 +200,13 @@ static int sa1100_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
ret = rtc_tm_to_time(&alrm->time, &time);
if (ret != 0)
goto out;
- RTSR = RTSR & (RTSR_HZE|RTSR_ALE|RTSR_AL);
- RTAR = time;
+ writel_relaxed(readl_relaxed(info->rtsr) &
+ (RTSR_HZE | RTSR_ALE | RTSR_AL), info->rtsr);
+ writel_relaxed(time, info->rtar);
if (alrm->enabled)
- RTSR |= RTSR_ALE;
+ writel_relaxed(readl_relaxed(info->rtsr) | RTSR_ALE, info->rtsr);
else
- RTSR &= ~RTSR_ALE;
+ writel_relaxed(readl_relaxed(info->rtsr) & ~RTSR_ALE, info->rtsr);
out:
spin_unlock_irq(&info->lock);
@@ -206,8 +215,9 @@ out:
static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
{
- seq_printf(seq, "trim/divider\t\t: 0x%08x\n", (u32) RTTR);
- seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", (u32)RTSR);
+ struct sa1100_rtc *info = dev_get_drvdata(dev);
+ seq_printf(seq, "trim/divider\t\t: 0x%08x\n", readl_relaxed(info->rttr));
+ seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", readl_relaxed(info->rtsr));
return 0;
}
@@ -227,6 +237,8 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
{
struct rtc_device *rtc;
struct sa1100_rtc *info;
+ struct resource *iores;
+ void __iomem *base;
int irq_1hz, irq_alarm, ret = 0;
irq_1hz = platform_get_irq_byname(pdev, "rtc 1Hz");
@@ -244,6 +256,26 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
}
info->irq_1hz = irq_1hz;
info->irq_alarm = irq_alarm;
+
+
+ iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ base = devm_ioremap_resource(&pdev->dev, iores);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
+
+ if (IS_ENABLED(CONFIG_ARCH_SA1100) ||
+ of_device_is_compatible(pdev->dev.of_node, "mrvl,sa1100-rtc")) {
+ info->rcnr = base + 0x04;
+ info->rtsr = base + 0x10;
+ info->rtar = base + 0x00;
+ info->rttr = base + 0x08;
+ } else {
+ info->rcnr = base + 0x0;
+ info->rtsr = base + 0x8;
+ info->rtar = base + 0x4;
+ info->rttr = base + 0xc;
+ }
+
spin_lock_init(&info->lock);
platform_set_drvdata(pdev, info);
@@ -257,12 +289,12 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
* If the clock divider is uninitialized then reset it to the
* default value to get the 1Hz clock.
*/
- if (RTTR == 0) {
- RTTR = RTC_DEF_DIVIDER + (RTC_DEF_TRIM << 16);
+ if (readl_relaxed(info->rttr) == 0) {
+ writel_relaxed(RTC_DEF_DIVIDER + (RTC_DEF_TRIM << 16), info->rttr);
dev_warn(&pdev->dev, "warning: "
"initializing default clock divider/trim value\n");
/* The current RTC value probably doesn't make sense either */
- RCNR = 0;
+ writel_relaxed(0, info->rcnr);
}
device_init_wakeup(&pdev->dev, 1);
@@ -298,7 +330,7 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
*
* Notice that clearing bit 1 and 0 is accomplished by writting ONES to
* the corresponding bits in RTSR. */
- RTSR = RTSR_AL | RTSR_HZ;
+ writel_relaxed(RTSR_AL | RTSR_HZ, info->rtsr);
return 0;
err_dev:
--
2.1.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [rtc-linux] [PATCH v2 3/4] ARM: sa1100: remove unused RTC register definitions
2015-04-30 20:37 ` Rob Herring
@ 2015-04-30 20:37 ` Rob Herring
-1 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: Russell King, Robert Jarzmik, Alessandro Zummo
Cc: linux-arm-kernel, Arnd Bergmann, Rob Herring, Daniel Mack,
Haojian Zhuang, Eric Miao, rtc-linux
Now that register definitions have been moved to the driver, we can remove
them from machine specific code.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: linux-arm-kernel@lists.infradead.org
---
v2:
- Rebase to v4.1-rc1
arch/arm/mach-sa1100/include/mach/SA-1100.h | 34 -----------------------------
1 file changed, 34 deletions(-)
diff --git a/arch/arm/mach-sa1100/include/mach/SA-1100.h b/arch/arm/mach-sa1100/include/mach/SA-1100.h
index 0ac6cc0..7972617 100644
--- a/arch/arm/mach-sa1100/include/mach/SA-1100.h
+++ b/arch/arm/mach-sa1100/include/mach/SA-1100.h
@@ -858,40 +858,6 @@
/*
- * Real-Time Clock (RTC) control registers
- *
- * Registers
- * RTAR Real-Time Clock (RTC) Alarm Register (read/write).
- * RCNR Real-Time Clock (RTC) CouNt Register (read/write).
- * RTTR Real-Time Clock (RTC) Trim Register (read/write).
- * RTSR Real-Time Clock (RTC) Status Register (read/write).
- *
- * Clocks
- * frtx, Trtx Frequency, period of the real-time clock crystal
- * (32.768 kHz nominal).
- * frtc, Trtc Frequency, period of the real-time clock counter
- * (1 Hz nominal).
- */
-
-#define RTAR __REG(0x90010000) /* RTC Alarm Reg. */
-#define RCNR __REG(0x90010004) /* RTC CouNt Reg. */
-#define RTTR __REG(0x90010008) /* RTC Trim Reg. */
-#define RTSR __REG(0x90010010) /* RTC Status Reg. */
-
-#define RTTR_C Fld (16, 0) /* clock divider Count - 1 */
-#define RTTR_D Fld (10, 16) /* trim Delete count */
- /* frtc = (1023*(C + 1) - D)*frtx/ */
- /* (1023*(C + 1)^2) */
- /* Trtc = (1023*(C + 1)^2)*Trtx/ */
- /* (1023*(C + 1) - D) */
-
-#define RTSR_AL 0x00000001 /* ALarm detected */
-#define RTSR_HZ 0x00000002 /* 1 Hz clock detected */
-#define RTSR_ALE 0x00000004 /* ALarm interrupt Enable */
-#define RTSR_HZE 0x00000008 /* 1 Hz clock interrupt Enable */
-
-
-/*
* Power Manager (PM) control registers
*
* Registers
--
2.1.0
--
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 3/4] ARM: sa1100: remove unused RTC register definitions
@ 2015-04-30 20:37 ` Rob Herring
0 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: linux-arm-kernel
Now that register definitions have been moved to the driver, we can remove
them from machine specific code.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: linux-arm-kernel at lists.infradead.org
---
v2:
- Rebase to v4.1-rc1
arch/arm/mach-sa1100/include/mach/SA-1100.h | 34 -----------------------------
1 file changed, 34 deletions(-)
diff --git a/arch/arm/mach-sa1100/include/mach/SA-1100.h b/arch/arm/mach-sa1100/include/mach/SA-1100.h
index 0ac6cc0..7972617 100644
--- a/arch/arm/mach-sa1100/include/mach/SA-1100.h
+++ b/arch/arm/mach-sa1100/include/mach/SA-1100.h
@@ -858,40 +858,6 @@
/*
- * Real-Time Clock (RTC) control registers
- *
- * Registers
- * RTAR Real-Time Clock (RTC) Alarm Register (read/write).
- * RCNR Real-Time Clock (RTC) CouNt Register (read/write).
- * RTTR Real-Time Clock (RTC) Trim Register (read/write).
- * RTSR Real-Time Clock (RTC) Status Register (read/write).
- *
- * Clocks
- * frtx, Trtx Frequency, period of the real-time clock crystal
- * (32.768 kHz nominal).
- * frtc, Trtc Frequency, period of the real-time clock counter
- * (1 Hz nominal).
- */
-
-#define RTAR __REG(0x90010000) /* RTC Alarm Reg. */
-#define RCNR __REG(0x90010004) /* RTC CouNt Reg. */
-#define RTTR __REG(0x90010008) /* RTC Trim Reg. */
-#define RTSR __REG(0x90010010) /* RTC Status Reg. */
-
-#define RTTR_C Fld (16, 0) /* clock divider Count - 1 */
-#define RTTR_D Fld (10, 16) /* trim Delete count */
- /* frtc = (1023*(C + 1) - D)*frtx/ */
- /* (1023*(C + 1)^2) */
- /* Trtc = (1023*(C + 1)^2)*Trtx/ */
- /* (1023*(C + 1) - D) */
-
-#define RTSR_AL 0x00000001 /* ALarm detected */
-#define RTSR_HZ 0x00000002 /* 1 Hz clock detected */
-#define RTSR_ALE 0x00000004 /* ALarm interrupt Enable */
-#define RTSR_HZE 0x00000008 /* 1 Hz clock interrupt Enable */
-
-
-/*
* Power Manager (PM) control registers
*
* Registers
--
2.1.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [rtc-linux] [PATCH v2 4/4] ARM: mmp: remove unused RTC register definitions
2015-04-30 20:37 ` Rob Herring
@ 2015-04-30 20:37 ` Rob Herring
-1 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: Russell King, Robert Jarzmik, Alessandro Zummo
Cc: linux-arm-kernel, Arnd Bergmann, Rob Herring, Daniel Mack,
Haojian Zhuang, Eric Miao, rtc-linux
Now that register definitions have been moved to the driver, regs-rtc.h is
no longer used and can be removed.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Eric Miao <eric.y.miao@gmail.com>
Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: linux-arm-kernel@lists.infradead.org
---
v2:
- Rebase to v4.1-rc1
arch/arm/mach-mmp/include/mach/regs-rtc.h | 23 -----------------------
1 file changed, 23 deletions(-)
delete mode 100644 arch/arm/mach-mmp/include/mach/regs-rtc.h
diff --git a/arch/arm/mach-mmp/include/mach/regs-rtc.h b/arch/arm/mach-mmp/include/mach/regs-rtc.h
deleted file mode 100644
index 5bff886..0000000
--- a/arch/arm/mach-mmp/include/mach/regs-rtc.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef __ASM_MACH_REGS_RTC_H
-#define __ASM_MACH_REGS_RTC_H
-
-#include <mach/addr-map.h>
-
-#define RTC_VIRT_BASE (APB_VIRT_BASE + 0x10000)
-#define RTC_REG(x) (*((volatile u32 __iomem *)(RTC_VIRT_BASE + (x))))
-
-/*
- * Real Time Clock
- */
-
-#define RCNR RTC_REG(0x00) /* RTC Count Register */
-#define RTAR RTC_REG(0x04) /* RTC Alarm Register */
-#define RTSR RTC_REG(0x08) /* RTC Status Register */
-#define RTTR RTC_REG(0x0C) /* RTC Timer Trim Register */
-
-#define RTSR_HZE (1 << 3) /* HZ interrupt enable */
-#define RTSR_ALE (1 << 2) /* RTC alarm interrupt enable */
-#define RTSR_HZ (1 << 1) /* HZ rising-edge detected */
-#define RTSR_AL (1 << 0) /* RTC alarm detected */
-
-#endif /* __ASM_MACH_REGS_RTC_H */
--
2.1.0
--
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v2 4/4] ARM: mmp: remove unused RTC register definitions
@ 2015-04-30 20:37 ` Rob Herring
0 siblings, 0 replies; 18+ messages in thread
From: Rob Herring @ 2015-04-30 20:37 UTC (permalink / raw)
To: linux-arm-kernel
Now that register definitions have been moved to the driver, regs-rtc.h is
no longer used and can be removed.
Signed-off-by: Rob Herring <robh@kernel.org>
Cc: Eric Miao <eric.y.miao@gmail.com>
Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: linux-arm-kernel at lists.infradead.org
---
v2:
- Rebase to v4.1-rc1
arch/arm/mach-mmp/include/mach/regs-rtc.h | 23 -----------------------
1 file changed, 23 deletions(-)
delete mode 100644 arch/arm/mach-mmp/include/mach/regs-rtc.h
diff --git a/arch/arm/mach-mmp/include/mach/regs-rtc.h b/arch/arm/mach-mmp/include/mach/regs-rtc.h
deleted file mode 100644
index 5bff886..0000000
--- a/arch/arm/mach-mmp/include/mach/regs-rtc.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef __ASM_MACH_REGS_RTC_H
-#define __ASM_MACH_REGS_RTC_H
-
-#include <mach/addr-map.h>
-
-#define RTC_VIRT_BASE (APB_VIRT_BASE + 0x10000)
-#define RTC_REG(x) (*((volatile u32 __iomem *)(RTC_VIRT_BASE + (x))))
-
-/*
- * Real Time Clock
- */
-
-#define RCNR RTC_REG(0x00) /* RTC Count Register */
-#define RTAR RTC_REG(0x04) /* RTC Alarm Register */
-#define RTSR RTC_REG(0x08) /* RTC Status Register */
-#define RTTR RTC_REG(0x0C) /* RTC Timer Trim Register */
-
-#define RTSR_HZE (1 << 3) /* HZ interrupt enable */
-#define RTSR_ALE (1 << 2) /* RTC alarm interrupt enable */
-#define RTSR_HZ (1 << 1) /* HZ rising-edge detected */
-#define RTSR_AL (1 << 0) /* RTC alarm detected */
-
-#endif /* __ASM_MACH_REGS_RTC_H */
--
2.1.0
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [rtc-linux] Re: [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping
2015-04-30 20:37 ` Rob Herring
@ 2015-05-01 16:13 ` Robert Jarzmik
-1 siblings, 0 replies; 18+ messages in thread
From: Robert Jarzmik @ 2015-05-01 16:13 UTC (permalink / raw)
To: Rob Herring
Cc: Russell King, Alessandro Zummo, linux-arm-kernel, Arnd Bergmann,
Daniel Mack, Haojian Zhuang, Eric Miao, rtc-linux
Rob Herring <robh@kernel.org> writes:
> static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
> {
> - rtc_time_to_tm(RCNR, tm);
> + struct sa1100_rtc *info = dev_get_drvdata(dev);
> + rtc_time_to_tm(readl_relaxed(info->rcnr), tm);
One nitpick here : an empty line between info declaration and code would be
better..
> @@ -206,8 +215,9 @@ out:
>
> static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
> {
> - seq_printf(seq, "trim/divider\t\t: 0x%08x\n", (u32) RTTR);
> - seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", (u32)RTSR);
> + struct sa1100_rtc *info = dev_get_drvdata(dev);
> + seq_printf(seq, "trim/divider\t\t: 0x%08x\n", readl_relaxed(info->rttr));
> + seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", readl_relaxed(info->rtsr));
Ditto.
> @@ -244,6 +256,26 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
> }
> info->irq_1hz = irq_1hz;
> info->irq_alarm = irq_alarm;
> +
> +
Ah here the is one too much. Too bad I had not caught it the first time.
With these 3 small details, you can add my :
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
Cheers.
--
Robert
--
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping
@ 2015-05-01 16:13 ` Robert Jarzmik
0 siblings, 0 replies; 18+ messages in thread
From: Robert Jarzmik @ 2015-05-01 16:13 UTC (permalink / raw)
To: linux-arm-kernel
Rob Herring <robh@kernel.org> writes:
> static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
> {
> - rtc_time_to_tm(RCNR, tm);
> + struct sa1100_rtc *info = dev_get_drvdata(dev);
> + rtc_time_to_tm(readl_relaxed(info->rcnr), tm);
One nitpick here : an empty line between info declaration and code would be
better..
> @@ -206,8 +215,9 @@ out:
>
> static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
> {
> - seq_printf(seq, "trim/divider\t\t: 0x%08x\n", (u32) RTTR);
> - seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", (u32)RTSR);
> + struct sa1100_rtc *info = dev_get_drvdata(dev);
> + seq_printf(seq, "trim/divider\t\t: 0x%08x\n", readl_relaxed(info->rttr));
> + seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", readl_relaxed(info->rtsr));
Ditto.
> @@ -244,6 +256,26 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
> }
> info->irq_1hz = irq_1hz;
> info->irq_alarm = irq_alarm;
> +
> +
Ah here the is one too much. Too bad I had not caught it the first time.
With these 3 small details, you can add my :
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
Cheers.
--
Robert
^ permalink raw reply [flat|nested] 18+ messages in thread
* [rtc-linux] Re: [PATCH v2 1/4] ARM: pxa: add memory resource to RTC device
2015-04-30 20:37 ` Rob Herring
@ 2015-05-01 16:17 ` Robert Jarzmik
-1 siblings, 0 replies; 18+ messages in thread
From: Robert Jarzmik @ 2015-05-01 16:17 UTC (permalink / raw)
To: Rob Herring
Cc: Russell King, Alessandro Zummo, linux-arm-kernel, Arnd Bergmann,
Daniel Mack, Haojian Zhuang, Eric Miao, rtc-linux
Rob Herring <robh@kernel.org> writes:
> Add the memory resource for the sa1100-rtc device. Since the memory
> resource is already present in the pxa_rtc_resources, that makes
> sa1100_rtc_resources and pxa_rtc_resources equivalent, so use
> pxa_rtc_resources for both devices and remove the duplicate
> sa1100_rtc_resources.
>
> Signed-off-by: Rob Herring <robh@kernel.org>
> Cc: Daniel Mack <daniel@zonque.org>
> Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
> Cc: Robert Jarzmik <robert.jarzmik@free.fr>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: linux-arm-kernel@lists.infradead.org
> ---
> v2:
> - Rebase to v4.1-rc1
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
--
Robert
--
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v2 1/4] ARM: pxa: add memory resource to RTC device
@ 2015-05-01 16:17 ` Robert Jarzmik
0 siblings, 0 replies; 18+ messages in thread
From: Robert Jarzmik @ 2015-05-01 16:17 UTC (permalink / raw)
To: linux-arm-kernel
Rob Herring <robh@kernel.org> writes:
> Add the memory resource for the sa1100-rtc device. Since the memory
> resource is already present in the pxa_rtc_resources, that makes
> sa1100_rtc_resources and pxa_rtc_resources equivalent, so use
> pxa_rtc_resources for both devices and remove the duplicate
> sa1100_rtc_resources.
>
> Signed-off-by: Rob Herring <robh@kernel.org>
> Cc: Daniel Mack <daniel@zonque.org>
> Cc: Haojian Zhuang <haojian.zhuang@gmail.com>
> Cc: Robert Jarzmik <robert.jarzmik@free.fr>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: linux-arm-kernel at lists.infradead.org
> ---
> v2:
> - Rebase to v4.1-rc1
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
--
Robert
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [rtc-linux] [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping
2015-04-30 20:37 ` Rob Herring
@ 2015-05-10 10:29 ` Alexandre Belloni
-1 siblings, 0 replies; 18+ messages in thread
From: Alexandre Belloni @ 2015-05-10 10:29 UTC (permalink / raw)
To: Rob Herring
Cc: Russell King, Robert Jarzmik, Alessandro Zummo, linux-arm-kernel,
Arnd Bergmann, Daniel Mack, Haojian Zhuang, Eric Miao, rtc-linux
Hi,
On 30/04/2015 at 15:37:11 -0500, Rob Herring wrote :
> SA1100 and PXA differ only in register offsets which are currently
> hardcoded in a machine specific header. Some arm64 platforms (PXA1928)
> have this RTC block as well (and not the PXA270 variant).
>
> Convert the driver to use ioremap and set the register offsets dynamically.
> Since we are touching all the register accesses, convert them all to
> readl_relaxed/writel_relaxed.
>
> Currently, the rtc-sa1100 and rtc-pxa drivers co-exist as rtc-pxa has a
> superset of functionality. This commit makes the drivers one step closer
> to being mutually exclusive by using devm_ioremap_resource and claiming
> the resource. The sharing of overlapping resources does not work if both
> drivers claim the resource. That is not done currently, but will be done
> as the drivers are converted to DT and follow proper driver rules.
> Likely, the common portion of the 2 drivers will be made into library
> functions for the SA1100 and PXA drivers to shared.
>
> Signed-off-by: Rob Herring <robh@kernel.org>
> Cc: Alessandro Zummo <a.zummo@towertech.it>
> Cc: rtc-linux@googlegroups.com
> ---
> v2:
> - Rebase to v4.1-rc1
> - Use _relaxed accessors
> - Summarize discussion about supporting both SA1100 and PXA RTC drivers
>
> drivers/rtc/rtc-sa1100.c | 86 +++++++++++++++++++++++++++++++++---------------
> 1 file changed, 59 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c
> index b6e1ca0..a21ead5 100644
> --- a/drivers/rtc/rtc-sa1100.c
> +++ b/drivers/rtc/rtc-sa1100.c
> @@ -35,12 +35,10 @@
> #include <linux/bitops.h>
> #include <linux/io.h>
>
> -#include <mach/hardware.h>
> -#include <mach/irqs.h>
> -
> -#if defined(CONFIG_ARCH_PXA) || defined(CONFIG_ARCH_MMP)
> -#include <mach/regs-rtc.h>
> -#endif
> +#define RTSR_HZE (1 << 3) /* HZ interrupt enable */
> +#define RTSR_ALE (1 << 2) /* RTC alarm interrupt enable */
> +#define RTSR_HZ (1 << 1) /* HZ rising-edge detected */
> +#define RTSR_AL (1 << 0) /* RTC alarm detected */
>
While at it, can you use BIT()?
--
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 18+ messages in thread
* [rtc-linux] [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping
@ 2015-05-10 10:29 ` Alexandre Belloni
0 siblings, 0 replies; 18+ messages in thread
From: Alexandre Belloni @ 2015-05-10 10:29 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On 30/04/2015 at 15:37:11 -0500, Rob Herring wrote :
> SA1100 and PXA differ only in register offsets which are currently
> hardcoded in a machine specific header. Some arm64 platforms (PXA1928)
> have this RTC block as well (and not the PXA270 variant).
>
> Convert the driver to use ioremap and set the register offsets dynamically.
> Since we are touching all the register accesses, convert them all to
> readl_relaxed/writel_relaxed.
>
> Currently, the rtc-sa1100 and rtc-pxa drivers co-exist as rtc-pxa has a
> superset of functionality. This commit makes the drivers one step closer
> to being mutually exclusive by using devm_ioremap_resource and claiming
> the resource. The sharing of overlapping resources does not work if both
> drivers claim the resource. That is not done currently, but will be done
> as the drivers are converted to DT and follow proper driver rules.
> Likely, the common portion of the 2 drivers will be made into library
> functions for the SA1100 and PXA drivers to shared.
>
> Signed-off-by: Rob Herring <robh@kernel.org>
> Cc: Alessandro Zummo <a.zummo@towertech.it>
> Cc: rtc-linux at googlegroups.com
> ---
> v2:
> - Rebase to v4.1-rc1
> - Use _relaxed accessors
> - Summarize discussion about supporting both SA1100 and PXA RTC drivers
>
> drivers/rtc/rtc-sa1100.c | 86 +++++++++++++++++++++++++++++++++---------------
> 1 file changed, 59 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c
> index b6e1ca0..a21ead5 100644
> --- a/drivers/rtc/rtc-sa1100.c
> +++ b/drivers/rtc/rtc-sa1100.c
> @@ -35,12 +35,10 @@
> #include <linux/bitops.h>
> #include <linux/io.h>
>
> -#include <mach/hardware.h>
> -#include <mach/irqs.h>
> -
> -#if defined(CONFIG_ARCH_PXA) || defined(CONFIG_ARCH_MMP)
> -#include <mach/regs-rtc.h>
> -#endif
> +#define RTSR_HZE (1 << 3) /* HZ interrupt enable */
> +#define RTSR_ALE (1 << 2) /* RTC alarm interrupt enable */
> +#define RTSR_HZ (1 << 1) /* HZ rising-edge detected */
> +#define RTSR_AL (1 << 0) /* RTC alarm detected */
>
While at it, can you use BIT()?
--
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [rtc-linux] Re: [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping
2015-05-01 16:13 ` Robert Jarzmik
@ 2015-05-10 10:31 ` Alexandre Belloni
-1 siblings, 0 replies; 18+ messages in thread
From: Alexandre Belloni @ 2015-05-10 10:31 UTC (permalink / raw)
To: Robert Jarzmik
Cc: Rob Herring, Russell King, Alessandro Zummo, linux-arm-kernel,
Arnd Bergmann, Daniel Mack, Haojian Zhuang, Eric Miao, rtc-linux
On 01/05/2015 at 18:13:48 +0200, Robert Jarzmik wrote :
> Rob Herring <robh@kernel.org> writes:
>
> > static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
> > {
> > - rtc_time_to_tm(RCNR, tm);
> > + struct sa1100_rtc *info = dev_get_drvdata(dev);
> > + rtc_time_to_tm(readl_relaxed(info->rcnr), tm);
> One nitpick here : an empty line between info declaration and code would be
> better..
>
> > @@ -206,8 +215,9 @@ out:
> >
> > static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
> > {
> > - seq_printf(seq, "trim/divider\t\t: 0x%08x\n", (u32) RTTR);
> > - seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", (u32)RTSR);
> > + struct sa1100_rtc *info = dev_get_drvdata(dev);
> > + seq_printf(seq, "trim/divider\t\t: 0x%08x\n", readl_relaxed(info->rttr));
> > + seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", readl_relaxed(info->rtsr));
> Ditto.
>
> > @@ -244,6 +256,26 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
> > }
> > info->irq_1hz = irq_1hz;
> > info->irq_alarm = irq_alarm;
> > +
> > +
> Ah here the is one too much. Too bad I had not caught it the first time.
>
Those are actually reported by checkpatch --strict
--
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
--
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 18+ messages in thread
* [rtc-linux] Re: [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping
@ 2015-05-10 10:31 ` Alexandre Belloni
0 siblings, 0 replies; 18+ messages in thread
From: Alexandre Belloni @ 2015-05-10 10:31 UTC (permalink / raw)
To: linux-arm-kernel
On 01/05/2015 at 18:13:48 +0200, Robert Jarzmik wrote :
> Rob Herring <robh@kernel.org> writes:
>
> > static int sa1100_rtc_read_time(struct device *dev, struct rtc_time *tm)
> > {
> > - rtc_time_to_tm(RCNR, tm);
> > + struct sa1100_rtc *info = dev_get_drvdata(dev);
> > + rtc_time_to_tm(readl_relaxed(info->rcnr), tm);
> One nitpick here : an empty line between info declaration and code would be
> better..
>
> > @@ -206,8 +215,9 @@ out:
> >
> > static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
> > {
> > - seq_printf(seq, "trim/divider\t\t: 0x%08x\n", (u32) RTTR);
> > - seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", (u32)RTSR);
> > + struct sa1100_rtc *info = dev_get_drvdata(dev);
> > + seq_printf(seq, "trim/divider\t\t: 0x%08x\n", readl_relaxed(info->rttr));
> > + seq_printf(seq, "RTSR\t\t\t: 0x%08x\n", readl_relaxed(info->rtsr));
> Ditto.
>
> > @@ -244,6 +256,26 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
> > }
> > info->irq_1hz = irq_1hz;
> > info->irq_alarm = irq_alarm;
> > +
> > +
> Ah here the is one too much. Too bad I had not caught it the first time.
>
Those are actually reported by checkpatch --strict
--
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2015-05-10 10:31 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-30 20:37 [rtc-linux] [PATCH v2 0/4] SA1100 RTC clean-up for ARM64 Rob Herring
2015-04-30 20:37 ` Rob Herring
2015-04-30 20:37 ` [rtc-linux] [PATCH v2 1/4] ARM: pxa: add memory resource to RTC device Rob Herring
2015-04-30 20:37 ` Rob Herring
2015-05-01 16:17 ` [rtc-linux] " Robert Jarzmik
2015-05-01 16:17 ` Robert Jarzmik
2015-04-30 20:37 ` [rtc-linux] [PATCH v2 2/4] rtc: sa1100: convert to run-time register mapping Rob Herring
2015-04-30 20:37 ` Rob Herring
2015-05-01 16:13 ` [rtc-linux] " Robert Jarzmik
2015-05-01 16:13 ` Robert Jarzmik
2015-05-10 10:31 ` [rtc-linux] " Alexandre Belloni
2015-05-10 10:31 ` Alexandre Belloni
2015-05-10 10:29 ` [rtc-linux] " Alexandre Belloni
2015-05-10 10:29 ` Alexandre Belloni
2015-04-30 20:37 ` [rtc-linux] [PATCH v2 3/4] ARM: sa1100: remove unused RTC register definitions Rob Herring
2015-04-30 20:37 ` Rob Herring
2015-04-30 20:37 ` [rtc-linux] [PATCH v2 4/4] ARM: mmp: " Rob Herring
2015-04-30 20:37 ` Rob Herring
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.