linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v7 00/10] rtc: at91sam9: add DT support
@ 2014-09-23  9:38 Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 01/10] rtc: at91sam9: remove references to mach specific headers Boris BREZILLON
                   ` (9 more replies)
  0 siblings, 10 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

Hello,

This patch series adds DT support to the atmel at91sam9 RTC driver.

It also removes any machine specific inclusions to prepare the migration
to multi platform kernel support, and retain the slow clock to prevent
the CCF from disabling it at the end of boot.
  
Best Regards,

Boris

Changes since v6:
 - fix typos
 - add missing commit messages
 - rework the Kconfig description

Changes since v5:
 - replace 'rtc' by 'rtt' where appropriate
 - fix commit messages

Changes since v4:
 - add a TODO comment to remember removing non DT board support code

Changes since v3:
 - add GPBR DT bindings doc
 - fix a coding style issues
 - add Alexandre's Acked-by
 - change RTT DT bindings

Changes since v2:
 - make use of syscon/regmap to avoid directly requesting/mapping a GPBR
   memory region in the RTT driver

Changes since v1:
 - remove non CCF specific case by adding the appropriate clk_lookup
   entries in arch/arm/mach-at91/<soc-name>.c files


Boris BREZILLON (10):
  rtc: at91sam9: remove references to mach specific headers
  rtc: at91sam9: use standard readl/writel functions instead of raw
    versions
  rtc: at91sam9: replace devm_ioremap by devm_ioremap_resource
  rtc: at91sam9: add DT support
  rtc: at91sam9: make use of syscon/regmap to access GPBR registers
  rtc: at91sam9: rework the Kconfig description
  ARM: at91: add clk_lookup entry for RTT devices
  rtc: at91sam9: use clk API instead of relying on AT91_SLOW_CLOCK
  rtc: at91sam9: add DT bindings documentation
  mfd: syscon: add Atmel GPBR DT bindings documention

 .../devicetree/bindings/mfd/atmel,gpbr.txt         |  15 +++
 .../devicetree/bindings/rtc/atmel,at91sam9-rtc.txt |  23 ++++
 arch/arm/mach-at91/at91sam9260.c                   |   2 +
 arch/arm/mach-at91/at91sam9261.c                   |   2 +
 arch/arm/mach-at91/at91sam9263.c                   |   4 +
 arch/arm/mach-at91/at91sam9g45.c                   |   2 +
 arch/arm/mach-at91/at91sam9rl.c                    |   2 +
 arch/arm/mach-at91/clock.c                         |   2 +-
 arch/arm/mach-at91/clock.h                         |   1 +
 drivers/rtc/Kconfig                                |  20 +--
 drivers/rtc/rtc-at91sam9.c                         | 138 ++++++++++++++++-----
 11 files changed, 172 insertions(+), 39 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mfd/atmel,gpbr.txt
 create mode 100644 Documentation/devicetree/bindings/rtc/atmel,at91sam9-rtc.txt

-- 
1.9.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v7 01/10] rtc: at91sam9: remove references to mach specific headers
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 02/10] rtc: at91sam9: use standard readl/writel functions instead of raw versions Boris BREZILLON
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

In order to support multi platform kernel drivers should not include
machine specific headers.
Copy RTT macros in the driver code and remove any machine specific
headers.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/rtc/rtc-at91sam9.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index 5963743..51f0038 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -22,10 +22,6 @@
 #include <linux/platform_data/atmel.h>
 #include <linux/io.h>
 
-#include <mach/at91_rtt.h>
-#include <mach/cpu.h>
-#include <mach/hardware.h>
-
 /*
  * This driver uses two configurable hardware resources that live in the
  * AT91SAM9 backup power domain (intended to be powered at all times)
@@ -47,6 +43,24 @@
  * registers available, likewise usable for more than "RTC" support.
  */
 
+#define AT91_RTT_MR		0x00			/* Real-time Mode Register */
+#define AT91_RTT_RTPRES		(0xffff << 0)		/* Real-time Timer Prescaler Value */
+#define AT91_RTT_ALMIEN		(1 << 16)		/* Alarm Interrupt Enable */
+#define AT91_RTT_RTTINCIEN	(1 << 17)		/* Real Time Timer Increment Interrupt Enable */
+#define AT91_RTT_RTTRST		(1 << 18)		/* Real Time Timer Restart */
+
+#define AT91_RTT_AR		0x04			/* Real-time Alarm Register */
+#define AT91_RTT_ALMV		(0xffffffff)		/* Alarm Value */
+
+#define AT91_RTT_VR		0x08			/* Real-time Value Register */
+#define AT91_RTT_CRTV		(0xffffffff)		/* Current Real-time Value */
+
+#define AT91_RTT_SR		0x0c			/* Real-time Status Register */
+#define AT91_RTT_ALMS		(1 << 0)		/* Real-time Alarm Status */
+#define AT91_RTT_RTTINC		(1 << 1)		/* Real-time Timer Increment */
+
+#define AT91_SLOW_CLOCK		32768
+
 /*
  * We store ALARM_DISABLED in ALMV to record that no alarm is set.
  * It's also the reset value for that field.
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 02/10] rtc: at91sam9: use standard readl/writel functions instead of raw versions
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 01/10] rtc: at91sam9: remove references to mach specific headers Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 03/10] rtc: at91sam9: replace devm_ioremap by devm_ioremap_resource Boris BREZILLON
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

Raw versions of writel and writel should not be directly used and should
be replaced by their relaxed versions (readl/writel_relaxed), which take
endianness conversion into account.

In this driver we prefer the standard readl/writel function which add the
appropriate memory barrier around the access (the performance penalty is
negligible for this kind of application).

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/rtc/rtc-at91sam9.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index 51f0038..74a9ca0 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -77,14 +77,14 @@ struct sam9_rtc {
 };
 
 #define rtt_readl(rtc, field) \
-	__raw_readl((rtc)->rtt + AT91_RTT_ ## field)
+	readl((rtc)->rtt + AT91_RTT_ ## field)
 #define rtt_writel(rtc, field, val) \
-	__raw_writel((val), (rtc)->rtt + AT91_RTT_ ## field)
+	writel((val), (rtc)->rtt + AT91_RTT_ ## field)
 
 #define gpbr_readl(rtc) \
-	__raw_readl((rtc)->gpbr)
+	readl((rtc)->gpbr)
 #define gpbr_writel(rtc, val) \
-	__raw_writel((val), (rtc)->gpbr)
+	writel((val), (rtc)->gpbr)
 
 /*
  * Read current time and date in RTC
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 03/10] rtc: at91sam9: replace devm_ioremap by devm_ioremap_resource
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 01/10] rtc: at91sam9: remove references to mach specific headers Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 02/10] rtc: at91sam9: use standard readl/writel functions instead of raw versions Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 04/10] rtc: at91sam9: add DT support Boris BREZILLON
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

Replace devm_ioremap calls by devm_ioremap_resource which already check
resource consistency (resource != NULL) and print an error in case of
failure.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/rtc/rtc-at91sam9.c | 29 ++++++++++-------------------
 1 file changed, 10 insertions(+), 19 deletions(-)

diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index 74a9ca0..38a2693 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -306,18 +306,11 @@ static const struct rtc_class_ops at91_rtc_ops = {
  */
 static int at91_rtc_probe(struct platform_device *pdev)
 {
-	struct resource	*r, *r_gpbr;
+	struct resource	*r;
 	struct sam9_rtc	*rtc;
 	int		ret, irq;
 	u32		mr;
 
-	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	r_gpbr = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-	if (!r || !r_gpbr) {
-		dev_err(&pdev->dev, "need 2 ressources\n");
-		return -ENODEV;
-	}
-
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0) {
 		dev_err(&pdev->dev, "failed to get interrupt resource\n");
@@ -335,18 +328,16 @@ static int at91_rtc_probe(struct platform_device *pdev)
 		device_init_wakeup(&pdev->dev, 1);
 
 	platform_set_drvdata(pdev, rtc);
-	rtc->rtt = devm_ioremap(&pdev->dev, r->start, resource_size(r));
-	if (!rtc->rtt) {
-		dev_err(&pdev->dev, "failed to map registers, aborting.\n");
-		return -ENOMEM;
-	}
 
-	rtc->gpbr = devm_ioremap(&pdev->dev, r_gpbr->start,
-				resource_size(r_gpbr));
-	if (!rtc->gpbr) {
-		dev_err(&pdev->dev, "failed to map gpbr registers, aborting.\n");
-		return -ENOMEM;
-	}
+	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	rtc->rtt = devm_ioremap_resource(&pdev->dev, r);
+	if (IS_ERR(rtc->rtt))
+		return PTR_ERR(rtc->rtt);
+
+	r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+	rtc->gpbr = devm_ioremap_resource(&pdev->dev, r);
+	if (IS_ERR(rtc->gpbr))
+		return PTR_ERR(rtc->rtt);
 
 	mr = rtt_readl(rtc, MR);
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 04/10] rtc: at91sam9: add DT support
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
                   ` (2 preceding siblings ...)
  2014-09-23  9:38 ` [PATCH v7 03/10] rtc: at91sam9: replace devm_ioremap by devm_ioremap_resource Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 05/10] rtc: at91sam9: make use of syscon/regmap to access GPBR registers Boris BREZILLON
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

Add of_match_table to the existing driver so that rtt nodes defined in at91
DTs can be attached to this driver.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/rtc/rtc-at91sam9.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index 38a2693..d72c34d 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -445,6 +445,14 @@ static int at91_rtc_resume(struct device *dev)
 
 static SIMPLE_DEV_PM_OPS(at91_rtc_pm_ops, at91_rtc_suspend, at91_rtc_resume);
 
+#ifdef CONFIG_OF
+static const struct of_device_id at91_rtc_dt_ids[] = {
+	{ .compatible = "atmel,at91sam9260-rtt" },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, at91_rtc_dt_ids);
+#endif
+
 static struct platform_driver at91_rtc_driver = {
 	.probe		= at91_rtc_probe,
 	.remove		= at91_rtc_remove,
@@ -453,6 +461,7 @@ static struct platform_driver at91_rtc_driver = {
 		.name	= "rtc-at91sam9",
 		.owner	= THIS_MODULE,
 		.pm	= &at91_rtc_pm_ops,
+		.of_match_table = of_match_ptr(at91_rtc_dt_ids),
 	},
 };
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 05/10] rtc: at91sam9: make use of syscon/regmap to access GPBR registers
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
                   ` (3 preceding siblings ...)
  2014-09-23  9:38 ` [PATCH v7 04/10] rtc: at91sam9: add DT support Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 06/10] rtc: at91sam9: rework the Kconfig description Boris BREZILLON
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

The GPBR registers are not part of the RTT block and thus should not be
defined in the reg property of the rtt node.

Use syscon to provide a proper DT representation and reference the GPBR
syscon device in a new "atmel,rtt-rtc-time-reg" property which store both
the syscon device phandle and the register offset within the GPBR block.

When using non DT boards, we won't be able to retrieve the syscon regmap,
hence we need to create our own regmap using the memory region defined
in the 2nd memory resource assigned to the RTT platform device.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/rtc/Kconfig        |  1 +
 drivers/rtc/rtc-at91sam9.c | 64 +++++++++++++++++++++++++++++++++++++++-------
 2 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index a168e96..7d76da8 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -1081,6 +1081,7 @@ config RTC_DRV_AT91RM9200
 config RTC_DRV_AT91SAM9
 	tristate "AT91SAM9x/AT91CAP9 RTT as RTC"
 	depends on ARCH_AT91 && !(ARCH_AT91RM9200 || ARCH_AT91X40)
+	select MFD_SYSCON
 	help
 	  RTC driver for the Atmel AT91SAM9x and AT91CAP9 internal RTT
 	  (Real Time Timer). These timers are powered by the backup power
diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index d72c34d..be9c28b 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -21,6 +21,8 @@
 #include <linux/slab.h>
 #include <linux/platform_data/atmel.h>
 #include <linux/io.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
 
 /*
  * This driver uses two configurable hardware resources that live in the
@@ -72,7 +74,8 @@ struct sam9_rtc {
 	void __iomem		*rtt;
 	struct rtc_device	*rtcdev;
 	u32			imr;
-	void __iomem		*gpbr;
+	struct regmap		*gpbr;
+	unsigned int		gpbr_offset;
 	int 			irq;
 };
 
@@ -81,10 +84,19 @@ struct sam9_rtc {
 #define rtt_writel(rtc, field, val) \
 	writel((val), (rtc)->rtt + AT91_RTT_ ## field)
 
-#define gpbr_readl(rtc) \
-	readl((rtc)->gpbr)
-#define gpbr_writel(rtc, val) \
-	writel((val), (rtc)->gpbr)
+static inline unsigned int gpbr_readl(struct sam9_rtc *rtc)
+{
+	unsigned int val;
+
+	regmap_read(rtc->gpbr, rtc->gpbr_offset, &val);
+
+	return val;
+}
+
+static inline void gpbr_writel(struct sam9_rtc *rtc, unsigned int val)
+{
+	regmap_write(rtc->gpbr, rtc->gpbr_offset, val);
+}
 
 /*
  * Read current time and date in RTC
@@ -301,6 +313,12 @@ static const struct rtc_class_ops at91_rtc_ops = {
 	.alarm_irq_enable = at91_rtc_alarm_irq_enable,
 };
 
+static struct regmap_config gpbr_regmap_config = {
+	.reg_bits = 32,
+	.val_bits = 32,
+	.reg_stride = 4,
+};
+
 /*
  * Initialize and install RTC driver
  */
@@ -334,10 +352,38 @@ static int at91_rtc_probe(struct platform_device *pdev)
 	if (IS_ERR(rtc->rtt))
 		return PTR_ERR(rtc->rtt);
 
-	r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-	rtc->gpbr = devm_ioremap_resource(&pdev->dev, r);
-	if (IS_ERR(rtc->gpbr))
-		return PTR_ERR(rtc->rtt);
+	if (!pdev->dev.of_node) {
+		/*
+		 * TODO: Remove this code chunk when removing non DT board
+		 * support. Remember to remove the gpbr_regmap_config
+		 * variable too.
+		 */
+		void __iomem *gpbr;
+
+		r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+		gpbr = devm_ioremap_resource(&pdev->dev, r);
+		if (IS_ERR(gpbr))
+			return PTR_ERR(gpbr);
+
+		rtc->gpbr = regmap_init_mmio(NULL, gpbr,
+					     &gpbr_regmap_config);
+	} else {
+		struct of_phandle_args args;
+
+		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
+						"atmel,rtt-rtc-time-reg", 1, 0,
+						&args);
+		if (ret)
+			return ret;
+
+		rtc->gpbr = syscon_node_to_regmap(args.np);
+		rtc->gpbr_offset = args.args[0];
+	}
+
+	if (IS_ERR(rtc->gpbr)) {
+		dev_err(&pdev->dev, "failed to retrieve gpbr regmap, aborting.\n");
+		return -ENOMEM;
+	}
 
 	mr = rtt_readl(rtc, MR);
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 06/10] rtc: at91sam9: rework the Kconfig description
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
                   ` (4 preceding siblings ...)
  2014-09-23  9:38 ` [PATCH v7 05/10] rtc: at91sam9: make use of syscon/regmap to access GPBR registers Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23 10:08   ` Nicolas Ferre
  2014-09-23  9:38 ` [PATCH v7 07/10] ARM: at91: add clk_lookup entry for RTT devices Boris BREZILLON
                   ` (3 subsequent siblings)
  9 siblings, 1 reply; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

Remove all references to AT91CAP9 SoC which has been removed.
Rework the help message to remove any specific references to AT91SAM9 SoCs.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
---
 drivers/rtc/Kconfig | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 7d76da8..455f2c3 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -1079,17 +1079,18 @@ config RTC_DRV_AT91RM9200
 	  this is powered by the backup power supply.
 
 config RTC_DRV_AT91SAM9
-	tristate "AT91SAM9x/AT91CAP9 RTT as RTC"
+	tristate "AT91SAM9 RTT as RTC"
 	depends on ARCH_AT91 && !(ARCH_AT91RM9200 || ARCH_AT91X40)
 	select MFD_SYSCON
 	help
-	  RTC driver for the Atmel AT91SAM9x and AT91CAP9 internal RTT
-	  (Real Time Timer). These timers are powered by the backup power
-	  supply (such as a small coin cell battery), but do not need to
-	  be used as RTCs.
-
-	  (On AT91SAM9rl and AT91SAM9G45 chips you probably want to use the
-	  dedicated RTC module and leave the RTT available for other uses.)
+	  Some AT91SAM9 SoCs provide an RTT (Real Time Timer) block which
+	  can be used as an RTC thanks to the backup power supply (e.g. a
+	  small coin cell battery) which keeps this block and the GPBR
+	  (General Purpose Backup Registers) block powered when the device
+	  is shutdown.
+	  Some AT91SAM9 SoCs provide a real RTC block, on those ones you'd
+	  probably want to use the real RTC block instead of the RTT as an
+	  RTT driver.
 
 config RTC_DRV_AT91SAM9_RTT
 	int
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 07/10] ARM: at91: add clk_lookup entry for RTT devices
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
                   ` (5 preceding siblings ...)
  2014-09-23  9:38 ` [PATCH v7 06/10] rtc: at91sam9: rework the Kconfig description Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 08/10] rtc: at91sam9: use clk API instead of relying on AT91_SLOW_CLOCK Boris BREZILLON
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

First export the clk32k clk.
Then add clk_lookup entries for RTT devices so that rtc-at91sam9 driver
can retrieve and manipulate the slow clk.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 arch/arm/mach-at91/at91sam9260.c | 2 ++
 arch/arm/mach-at91/at91sam9261.c | 2 ++
 arch/arm/mach-at91/at91sam9263.c | 4 ++++
 arch/arm/mach-at91/at91sam9g45.c | 2 ++
 arch/arm/mach-at91/at91sam9rl.c  | 2 ++
 arch/arm/mach-at91/clock.c       | 2 +-
 arch/arm/mach-at91/clock.h       | 1 +
 7 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c
index 3477ba9..a853d4c 100644
--- a/arch/arm/mach-at91/at91sam9260.c
+++ b/arch/arm/mach-at91/at91sam9260.c
@@ -217,6 +217,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID("pclk", "fffbc000.ssc", &ssc_clk),
 	CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260.0", &twi_clk),
 	CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9g20.0", &twi_clk),
+	CLKDEV_CON_DEV_ID(NULL, "rtc-at91sam9.0", &clk32k),
 	/* more usart lookup table for DT entries */
 	CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck),
 	CLKDEV_CON_DEV_ID("usart", "fffb0000.serial", &usart0_clk),
@@ -237,6 +238,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID("mci_clk", "fffa8000.mmc", &mmc_clk),
 	CLKDEV_CON_DEV_ID("spi_clk", "fffc8000.spi", &spi0_clk),
 	CLKDEV_CON_DEV_ID("spi_clk", "fffcc000.spi", &spi1_clk),
+	CLKDEV_CON_DEV_ID(NULL, "fffffd20.rtc", &clk32k),
 	/* fake hclk clock */
 	CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
 	CLKDEV_CON_ID("pioA", &pioA_clk),
diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c
index fb164a5..3f5a299 100644
--- a/arch/arm/mach-at91/at91sam9261.c
+++ b/arch/arm/mach-at91/at91sam9261.c
@@ -192,6 +192,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_ID("pioA", &pioA_clk),
 	CLKDEV_CON_ID("pioB", &pioB_clk),
 	CLKDEV_CON_ID("pioC", &pioC_clk),
+	CLKDEV_CON_DEV_ID(NULL, "rtc-at91sam9.0", &clk32k),
 	/* more lookup table for DT entries */
 	CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck),
 	CLKDEV_CON_DEV_ID("usart", "fffb0000.serial", &usart0_clk),
@@ -209,6 +210,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioA_clk),
 	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioB_clk),
 	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioC_clk),
+	CLKDEV_CON_DEV_ID(NULL, "fffffd20.rtc", &clk32k),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c
index 810fa5f..bef5b96 100644
--- a/arch/arm/mach-at91/at91sam9263.c
+++ b/arch/arm/mach-at91/at91sam9263.c
@@ -201,6 +201,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk),
 	CLKDEV_CON_DEV_ID(NULL, "i2c-at91sam9260.0", &twi_clk),
 	CLKDEV_CON_DEV_ID(NULL, "at91sam9rl-pwm", &pwm_clk),
+	CLKDEV_CON_DEV_ID(NULL, "rtc-at91sam9.0", &clk32k),
+	CLKDEV_CON_DEV_ID(NULL, "rtc-at91sam9.1", &clk32k),
 	/* fake hclk clock */
 	CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),
 	CLKDEV_CON_ID("pioA", &pioA_clk),
@@ -227,6 +229,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioCDE_clk),
 	CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioCDE_clk),
 	CLKDEV_CON_DEV_ID(NULL, "fffb8000.pwm", &pwm_clk),
+	CLKDEV_CON_DEV_ID(NULL, "fffffd20.rtc", &clk32k),
+	CLKDEV_CON_DEV_ID(NULL, "fffffd50.rtc", &clk32k),
 };
 
 static struct clk_lookup usart_clocks_lookups[] = {
diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c
index 9d45496..69fdfcc 100644
--- a/arch/arm/mach-at91/at91sam9g45.c
+++ b/arch/arm/mach-at91/at91sam9g45.c
@@ -253,6 +253,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID(NULL, "atmel_tdes", &aestdessha_clk),
 	CLKDEV_CON_DEV_ID(NULL, "atmel_aes", &aestdessha_clk),
 	CLKDEV_CON_DEV_ID(NULL, "at91sam9rl-pwm", &pwm_clk),
+	CLKDEV_CON_DEV_ID(NULL, "rtc-at91sam9.0", &clk32k),
 	/* more usart lookup table for DT entries */
 	CLKDEV_CON_DEV_ID("usart", "ffffee00.serial", &mck),
 	CLKDEV_CON_DEV_ID("usart", "fff8c000.serial", &usart0_clk),
@@ -279,6 +280,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioC_clk),
 	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioDE_clk),
 	CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioDE_clk),
+	CLKDEV_CON_DEV_ID(NULL, "fffffd20.rtc", &clk32k),
 
 	CLKDEV_CON_ID("pioA", &pioA_clk),
 	CLKDEV_CON_ID("pioB", &pioB_clk),
diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c
index 878d501..a82dc61 100644
--- a/arch/arm/mach-at91/at91sam9rl.c
+++ b/arch/arm/mach-at91/at91sam9rl.c
@@ -205,6 +205,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_ID("pioB", &pioB_clk),
 	CLKDEV_CON_ID("pioC", &pioC_clk),
 	CLKDEV_CON_ID("pioD", &pioD_clk),
+	CLKDEV_CON_DEV_ID(NULL, "rtc-at91sam9.0", &clk32k),
 	/* more lookup table for DT entries */
 	CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck),
 	CLKDEV_CON_DEV_ID("usart", "fffb0000.serial", &usart0_clk),
@@ -223,6 +224,7 @@ static struct clk_lookup periph_clocks_lookups[] = {
 	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioB_clk),
 	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioC_clk),
 	CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioD_clk),
+	CLKDEV_CON_DEV_ID(NULL, "fffffd20.rtc", &clk32k),
 	CLKDEV_CON_ID("adc_clk", &tsc_clk),
 };
 
diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c
index 034529d..f5cfed75 100644
--- a/arch/arm/mach-at91/clock.c
+++ b/arch/arm/mach-at91/clock.c
@@ -115,7 +115,7 @@ static u32 at91_pllb_usb_init;
  * 48 MHz (unless no USB function clocks are needed).  The main clock and
  * both PLLs are turned off to run in "slow clock mode" (system suspend).
  */
-static struct clk clk32k = {
+struct clk clk32k = {
 	.name		= "clk32k",
 	.rate_hz	= AT91_SLOW_CLOCK,
 	.users		= 1,		/* always on */
diff --git a/arch/arm/mach-at91/clock.h b/arch/arm/mach-at91/clock.h
index a98a39b..6eb825a 100644
--- a/arch/arm/mach-at91/clock.h
+++ b/arch/arm/mach-at91/clock.h
@@ -34,6 +34,7 @@ struct clk {
 extern int __init clk_register(struct clk *clk);
 extern struct clk mck;
 extern struct clk utmi_clk;
+extern struct clk clk32k;
 
 #define CLKDEV_CON_ID(_id, _clk)			\
 	{						\
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 08/10] rtc: at91sam9: use clk API instead of relying on AT91_SLOW_CLOCK
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
                   ` (6 preceding siblings ...)
  2014-09-23  9:38 ` [PATCH v7 07/10] ARM: at91: add clk_lookup entry for RTT devices Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23 10:33   ` Johan Hovold
  2014-09-23  9:38 ` [PATCH v7 09/10] rtc: at91sam9: add DT bindings documentation Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 10/10] mfd: syscon: add Atmel GPBR DT bindings documention Boris BREZILLON
  9 siblings, 1 reply; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

The RTT block is using the slow clock which is accessible through the clk
API.
Use the clk API to retrieve, enable and get the slow clk rate instead of
the AT91_SLOW_CLOCK macro (which hardcodes the slow clk rate).
Doing this allows us to reference the clk thus preventing the CCF from
disabling it during the "disable unused" phase.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/rtc/rtc-at91sam9.c | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index be9c28b..d3bbe29 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -23,6 +23,7 @@
 #include <linux/io.h>
 #include <linux/mfd/syscon.h>
 #include <linux/regmap.h>
+#include <linux/clk.h>
 
 /*
  * This driver uses two configurable hardware resources that live in the
@@ -61,8 +62,6 @@
 #define AT91_RTT_ALMS		(1 << 0)		/* Real-time Alarm Status */
 #define AT91_RTT_RTTINC		(1 << 1)		/* Real-time Timer Increment */
 
-#define AT91_SLOW_CLOCK		32768
-
 /*
  * We store ALARM_DISABLED in ALMV to record that no alarm is set.
  * It's also the reset value for that field.
@@ -77,6 +76,7 @@ struct sam9_rtc {
 	struct regmap		*gpbr;
 	unsigned int		gpbr_offset;
 	int 			irq;
+	struct clk		*sclk;
 };
 
 #define rtt_readl(rtc, field) \
@@ -328,6 +328,7 @@ static int at91_rtc_probe(struct platform_device *pdev)
 	struct sam9_rtc	*rtc;
 	int		ret, irq;
 	u32		mr;
+	unsigned int	sclk_rate;
 
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0) {
@@ -385,11 +386,27 @@ static int at91_rtc_probe(struct platform_device *pdev)
 		return -ENOMEM;
 	}
 
+	rtc->sclk = devm_clk_get(&pdev->dev, NULL);
+	if (IS_ERR(rtc->sclk))
+		return PTR_ERR(rtc->sclk);
+
+	sclk_rate = clk_get_rate(rtc->sclk);
+	if (!sclk_rate || sclk_rate > AT91_RTT_RTTRST) {
+		dev_err(&pdev->dev, "Invalid slow clock rate");
+		return -EINVAL;
+	}
+
+	ret = clk_prepare_enable(rtc->sclk);
+	if (ret) {
+		dev_err(&pdev->dev, "Could not enable slow clock");
+		return ret;
+	}
+
 	mr = rtt_readl(rtc, MR);
 
 	/* unless RTT is counting at 1 Hz, re-initialize it */
-	if ((mr & AT91_RTT_RTPRES) != AT91_SLOW_CLOCK) {
-		mr = AT91_RTT_RTTRST | (AT91_SLOW_CLOCK & AT91_RTT_RTPRES);
+	if ((mr & AT91_RTT_RTPRES) != sclk_rate) {
+		mr = AT91_RTT_RTTRST | (sclk_rate & AT91_RTT_RTPRES);
 		gpbr_writel(rtc, 0);
 	}
 
@@ -434,6 +451,9 @@ static int at91_rtc_remove(struct platform_device *pdev)
 	/* disable all interrupts */
 	rtt_writel(rtc, MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));
 
+	if (!IS_ERR(rtc->sclk))
+		clk_disable_unprepare(rtc->sclk);
+
 	return 0;
 }
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 09/10] rtc: at91sam9: add DT bindings documentation
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
                   ` (7 preceding siblings ...)
  2014-09-23  9:38 ` [PATCH v7 08/10] rtc: at91sam9: use clk API instead of relying on AT91_SLOW_CLOCK Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  2014-09-23  9:38 ` [PATCH v7 10/10] mfd: syscon: add Atmel GPBR DT bindings documention Boris BREZILLON
  9 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

Add RTT bindings documentation.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 .../devicetree/bindings/rtc/atmel,at91sam9-rtc.txt | 23 ++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/rtc/atmel,at91sam9-rtc.txt

diff --git a/Documentation/devicetree/bindings/rtc/atmel,at91sam9-rtc.txt b/Documentation/devicetree/bindings/rtc/atmel,at91sam9-rtc.txt
new file mode 100644
index 0000000..f307a1d
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/atmel,at91sam9-rtc.txt
@@ -0,0 +1,23 @@
+Atmel AT91SAM9260 Real Time Timer
+
+Required properties:
+- compatible: should be: "atmel,at91sam9260-rtt"
+- reg: should encode the memory region of the RTT controller
+- interrupts: rtt alarm/event interrupt
+- clocks: should contain one clock pointing to the slow clk
+- atmel,rtt-rtc-time-reg: should encode the GPBR register used to store
+	the time base when the RTT is used as an RTC.
+	The first cell should point to the GPBR node and the second one
+	encode the offset within the GPBR block (or in other words, the
+	GPBR register used to store the time base).
+
+
+Example:
+
+rtt@fffffe00 {
+	compatible = "atmel,at91sam9260-rtt";
+	reg = <0xfffffd20 0x10>;
+	interrupts = <1 4 7>;
+	clocks = <&clk32k>;
+	atmel,rtt-rtc-time-reg = <&gpbr 0x0>;
+};
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v7 10/10] mfd: syscon: add Atmel GPBR DT bindings documention
  2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
                   ` (8 preceding siblings ...)
  2014-09-23  9:38 ` [PATCH v7 09/10] rtc: at91sam9: add DT bindings documentation Boris BREZILLON
@ 2014-09-23  9:38 ` Boris BREZILLON
  9 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23  9:38 UTC (permalink / raw)
  To: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
	devicetree, linux-arm-kernel, linux-kernel, Boris BREZILLON

The GPBR block provides a set of battery-backed registers that can be used
to save data which need to be kept when the system is powered down and
VDD-core is maintained by an external battery.

A typical usage is the RTT block (when used as an RTC) which needs one of
those registers to save the current time.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 Documentation/devicetree/bindings/mfd/atmel,gpbr.txt | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/atmel,gpbr.txt

diff --git a/Documentation/devicetree/bindings/mfd/atmel,gpbr.txt b/Documentation/devicetree/bindings/mfd/atmel,gpbr.txt
new file mode 100644
index 0000000..a285695
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/atmel,gpbr.txt
@@ -0,0 +1,15 @@
+* Device tree bindings for Atmel GPBR (General Purpose Backup Registers)
+
+The GPBR are a set of battery-backed registers.
+
+Required properties:
+- compatible:		"atmel,at91sam9260-gpbr", "syscon"
+- reg:			contains offset/length value of the GPBR memory
+			region.
+
+Example:
+
+gpbr: gpbr@fffffd50 {
+	compatible = "atmel,at91sam9260-gpbr", "syscon";
+	reg = <0xfffffd50 0x10>;
+};
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v7 06/10] rtc: at91sam9: rework the Kconfig description
  2014-09-23  9:38 ` [PATCH v7 06/10] rtc: at91sam9: rework the Kconfig description Boris BREZILLON
@ 2014-09-23 10:08   ` Nicolas Ferre
  2014-09-23 10:11     ` Boris BREZILLON
  2014-09-23 10:39     ` Johan Hovold
  0 siblings, 2 replies; 16+ messages in thread
From: Nicolas Ferre @ 2014-09-23 10:08 UTC (permalink / raw)
  To: Boris BREZILLON, Alexandre Belloni, Alessandro Zummo, rtc-linux,
	Johan Hovold
  Cc: Jean-Christophe Plagniol-Villard, Andrew Victor, Samuel Ortiz,
	Lee Jones, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell,
	Kumar Gala, devicetree, linux-arm-kernel, linux-kernel

On 23/09/2014 11:38, Boris BREZILLON :
> Remove all references to AT91CAP9 SoC which has been removed.
> Rework the help message to remove any specific references to AT91SAM9 SoCs.
> 
> Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
> ---
>  drivers/rtc/Kconfig | 17 +++++++++--------
>  1 file changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
> index 7d76da8..455f2c3 100644
> --- a/drivers/rtc/Kconfig
> +++ b/drivers/rtc/Kconfig
> @@ -1079,17 +1079,18 @@ config RTC_DRV_AT91RM9200
>  	  this is powered by the backup power supply.
>  
>  config RTC_DRV_AT91SAM9
> -	tristate "AT91SAM9x/AT91CAP9 RTT as RTC"
> +	tristate "AT91SAM9 RTT as RTC"
>  	depends on ARCH_AT91 && !(ARCH_AT91RM9200 || ARCH_AT91X40)
>  	select MFD_SYSCON
>  	help
> -	  RTC driver for the Atmel AT91SAM9x and AT91CAP9 internal RTT
> -	  (Real Time Timer). These timers are powered by the backup power
> -	  supply (such as a small coin cell battery), but do not need to
> -	  be used as RTCs.
> -
> -	  (On AT91SAM9rl and AT91SAM9G45 chips you probably want to use the
> -	  dedicated RTC module and leave the RTT available for other uses.)
> +	  Some AT91SAM9 SoCs provide an RTT (Real Time Timer) block which
> +	  can be used as an RTC thanks to the backup power supply (e.g. a
> +	  small coin cell battery) which keeps this block and the GPBR
> +	  (General Purpose Backup Registers) block powered when the device
> +	  is shutdown.
> +	  Some AT91SAM9 SoCs provide a real RTC block, on those ones you'd
> +	  probably want to use the real RTC block instead of the RTT as an
> +	  RTT driver.

You mean:
"instead of the RTT as an RTC"

With that, good description: thanks!

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

So, now we can think of what to do with the series:

- Johan, do you want to "Ack" it?
- may I take it through the arm-soc git tree (likely for the 3.19 dev.
phase).

Your thoughts?

Bye,

>  
>  config RTC_DRV_AT91SAM9_RTT
>  	int
> 


-- 
Nicolas Ferre

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v7 06/10] rtc: at91sam9: rework the Kconfig description
  2014-09-23 10:08   ` Nicolas Ferre
@ 2014-09-23 10:11     ` Boris BREZILLON
  2014-09-23 10:39     ` Johan Hovold
  1 sibling, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23 10:11 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Alexandre Belloni, Alessandro Zummo, rtc-linux, Johan Hovold,
	Jean-Christophe Plagniol-Villard, Andrew Victor, Samuel Ortiz,
	Lee Jones, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell,
	Kumar Gala, devicetree, linux-arm-kernel, linux-kernel

On Tue, 23 Sep 2014 12:08:47 +0200
Nicolas Ferre <nicolas.ferre@atmel.com> wrote:

> On 23/09/2014 11:38, Boris BREZILLON :
> > Remove all references to AT91CAP9 SoC which has been removed.
> > Rework the help message to remove any specific references to AT91SAM9 SoCs.
> > 
> > Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
> > ---
> >  drivers/rtc/Kconfig | 17 +++++++++--------
> >  1 file changed, 9 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
> > index 7d76da8..455f2c3 100644
> > --- a/drivers/rtc/Kconfig
> > +++ b/drivers/rtc/Kconfig
> > @@ -1079,17 +1079,18 @@ config RTC_DRV_AT91RM9200
> >  	  this is powered by the backup power supply.
> >  
> >  config RTC_DRV_AT91SAM9
> > -	tristate "AT91SAM9x/AT91CAP9 RTT as RTC"
> > +	tristate "AT91SAM9 RTT as RTC"
> >  	depends on ARCH_AT91 && !(ARCH_AT91RM9200 || ARCH_AT91X40)
> >  	select MFD_SYSCON
> >  	help
> > -	  RTC driver for the Atmel AT91SAM9x and AT91CAP9 internal RTT
> > -	  (Real Time Timer). These timers are powered by the backup power
> > -	  supply (such as a small coin cell battery), but do not need to
> > -	  be used as RTCs.
> > -
> > -	  (On AT91SAM9rl and AT91SAM9G45 chips you probably want to use the
> > -	  dedicated RTC module and leave the RTT available for other uses.)
> > +	  Some AT91SAM9 SoCs provide an RTT (Real Time Timer) block which
> > +	  can be used as an RTC thanks to the backup power supply (e.g. a
> > +	  small coin cell battery) which keeps this block and the GPBR
> > +	  (General Purpose Backup Registers) block powered when the device
> > +	  is shutdown.
> > +	  Some AT91SAM9 SoCs provide a real RTC block, on those ones you'd
> > +	  probably want to use the real RTC block instead of the RTT as an
> > +	  RTT driver.
> 
> You mean:
> "instead of the RTT as an RTC"

Yep, that's what I meant.

> 
> With that, good description: thanks!
> 
> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> 
> So, now we can think of what to do with the series:
> 
> - Johan, do you want to "Ack" it?
> - may I take it through the arm-soc git tree (likely for the 3.19 dev.
> phase).
> 
> Your thoughts?
> 
> Bye,
> 
> >  
> >  config RTC_DRV_AT91SAM9_RTT
> >  	int
> > 
> 
> 



-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v7 08/10] rtc: at91sam9: use clk API instead of relying on AT91_SLOW_CLOCK
  2014-09-23  9:38 ` [PATCH v7 08/10] rtc: at91sam9: use clk API instead of relying on AT91_SLOW_CLOCK Boris BREZILLON
@ 2014-09-23 10:33   ` Johan Hovold
  2014-09-23 11:05     ` Boris BREZILLON
  0 siblings, 1 reply; 16+ messages in thread
From: Johan Hovold @ 2014-09-23 10:33 UTC (permalink / raw)
  To: Boris BREZILLON
  Cc: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, devicetree,
	linux-arm-kernel, linux-kernel

On Tue, Sep 23, 2014 at 11:38:48AM +0200, Boris BREZILLON wrote:

> @@ -328,6 +328,7 @@ static int at91_rtc_probe(struct platform_device *pdev)
>  	struct sam9_rtc	*rtc;
>  	int		ret, irq;
>  	u32		mr;
> +	unsigned int	sclk_rate;
>  
>  	irq = platform_get_irq(pdev, 0);
>  	if (irq < 0) {
> @@ -385,11 +386,27 @@ static int at91_rtc_probe(struct platform_device *pdev)
>  		return -ENOMEM;
>  	}
>  
> +	rtc->sclk = devm_clk_get(&pdev->dev, NULL);
> +	if (IS_ERR(rtc->sclk))
> +		return PTR_ERR(rtc->sclk);
> +
> +	sclk_rate = clk_get_rate(rtc->sclk);
> +	if (!sclk_rate || sclk_rate > AT91_RTT_RTTRST) {

You probably meant AT91_RTT_RTPRES here.

> +		dev_err(&pdev->dev, "Invalid slow clock rate");
> +		return -EINVAL;
> +	}
> +
> +	ret = clk_prepare_enable(rtc->sclk);
> +	if (ret) {
> +		dev_err(&pdev->dev, "Could not enable slow clock");
> +		return ret;
> +	}
> +
>  	mr = rtt_readl(rtc, MR);
>  
>  	/* unless RTT is counting at 1 Hz, re-initialize it */
> -	if ((mr & AT91_RTT_RTPRES) != AT91_SLOW_CLOCK) {
> -		mr = AT91_RTT_RTTRST | (AT91_SLOW_CLOCK & AT91_RTT_RTPRES);
> +	if ((mr & AT91_RTT_RTPRES) != sclk_rate) {
> +		mr = AT91_RTT_RTTRST | (sclk_rate & AT91_RTT_RTPRES);
>  		gpbr_writel(rtc, 0);
>  	}

Johan

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v7 06/10] rtc: at91sam9: rework the Kconfig description
  2014-09-23 10:08   ` Nicolas Ferre
  2014-09-23 10:11     ` Boris BREZILLON
@ 2014-09-23 10:39     ` Johan Hovold
  1 sibling, 0 replies; 16+ messages in thread
From: Johan Hovold @ 2014-09-23 10:39 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Boris BREZILLON, Alexandre Belloni, Alessandro Zummo, rtc-linux,
	Johan Hovold, Jean-Christophe Plagniol-Villard, Andrew Victor,
	Samuel Ortiz, Lee Jones, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, devicetree, linux-arm-kernel,
	linux-kernel

On Tue, Sep 23, 2014 at 12:08:47PM +0200, Nicolas Ferre wrote:
> On 23/09/2014 11:38, Boris BREZILLON :
> > Remove all references to AT91CAP9 SoC which has been removed.
> > Rework the help message to remove any specific references to AT91SAM9 SoCs.
> > 
> > Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
> > ---
> >  drivers/rtc/Kconfig | 17 +++++++++--------
> >  1 file changed, 9 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
> > index 7d76da8..455f2c3 100644
> > --- a/drivers/rtc/Kconfig
> > +++ b/drivers/rtc/Kconfig
> > @@ -1079,17 +1079,18 @@ config RTC_DRV_AT91RM9200
> >  	  this is powered by the backup power supply.
> >  
> >  config RTC_DRV_AT91SAM9
> > -	tristate "AT91SAM9x/AT91CAP9 RTT as RTC"
> > +	tristate "AT91SAM9 RTT as RTC"
> >  	depends on ARCH_AT91 && !(ARCH_AT91RM9200 || ARCH_AT91X40)
> >  	select MFD_SYSCON
> >  	help
> > -	  RTC driver for the Atmel AT91SAM9x and AT91CAP9 internal RTT
> > -	  (Real Time Timer). These timers are powered by the backup power
> > -	  supply (such as a small coin cell battery), but do not need to
> > -	  be used as RTCs.
> > -
> > -	  (On AT91SAM9rl and AT91SAM9G45 chips you probably want to use the
> > -	  dedicated RTC module and leave the RTT available for other uses.)
> > +	  Some AT91SAM9 SoCs provide an RTT (Real Time Timer) block which
> > +	  can be used as an RTC thanks to the backup power supply (e.g. a
> > +	  small coin cell battery) which keeps this block and the GPBR
> > +	  (General Purpose Backup Registers) block powered when the device
> > +	  is shutdown.
> > +	  Some AT91SAM9 SoCs provide a real RTC block, on those ones you'd
> > +	  probably want to use the real RTC block instead of the RTT as an
> > +	  RTT driver.
> 
> You mean:
> "instead of the RTT as an RTC"

Boris, perhaps you should also update the Kconfig entries for
RTC_DRV_AT91SAM9_RTT and RTC_DRV_AT91SAM9_GPBR to clarify that they are
only used for legacy booting (and otherwise have no effect)?

> With that, good description: thanks!
> 
> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> 
> So, now we can think of what to do with the series:
> 
> - Johan, do you want to "Ack" it?

I had one comment to the slow-clock patch, but feel free to add my

Acked-by: Johan Hovold <johan@kernel.org>

to the whole series.

Thanks,
Johan

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v7 08/10] rtc: at91sam9: use clk API instead of relying on AT91_SLOW_CLOCK
  2014-09-23 10:33   ` Johan Hovold
@ 2014-09-23 11:05     ` Boris BREZILLON
  0 siblings, 0 replies; 16+ messages in thread
From: Boris BREZILLON @ 2014-09-23 11:05 UTC (permalink / raw)
  To: Johan Hovold
  Cc: Nicolas Ferre, Jean-Christophe Plagniol-Villard,
	Alexandre Belloni, Andrew Victor, Alessandro Zummo, rtc-linux,
	Samuel Ortiz, Lee Jones, Johan Hovold, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, devicetree,
	linux-arm-kernel, linux-kernel

On Tue, 23 Sep 2014 12:33:26 +0200
Johan Hovold <johan@kernel.org> wrote:

> On Tue, Sep 23, 2014 at 11:38:48AM +0200, Boris BREZILLON wrote:
> 
> > @@ -328,6 +328,7 @@ static int at91_rtc_probe(struct platform_device *pdev)
> >  	struct sam9_rtc	*rtc;
> >  	int		ret, irq;
> >  	u32		mr;
> > +	unsigned int	sclk_rate;
> >  
> >  	irq = platform_get_irq(pdev, 0);
> >  	if (irq < 0) {
> > @@ -385,11 +386,27 @@ static int at91_rtc_probe(struct platform_device *pdev)
> >  		return -ENOMEM;
> >  	}
> >  
> > +	rtc->sclk = devm_clk_get(&pdev->dev, NULL);
> > +	if (IS_ERR(rtc->sclk))
> > +		return PTR_ERR(rtc->sclk);
> > +
> > +	sclk_rate = clk_get_rate(rtc->sclk);
> > +	if (!sclk_rate || sclk_rate > AT91_RTT_RTTRST) {
> 
> You probably meant AT91_RTT_RTPRES here.

Yes, that's what I meant.
Nice catch!

Thanks,

Boris


-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2014-09-23 11:08 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-23  9:38 [PATCH v7 00/10] rtc: at91sam9: add DT support Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 01/10] rtc: at91sam9: remove references to mach specific headers Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 02/10] rtc: at91sam9: use standard readl/writel functions instead of raw versions Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 03/10] rtc: at91sam9: replace devm_ioremap by devm_ioremap_resource Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 04/10] rtc: at91sam9: add DT support Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 05/10] rtc: at91sam9: make use of syscon/regmap to access GPBR registers Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 06/10] rtc: at91sam9: rework the Kconfig description Boris BREZILLON
2014-09-23 10:08   ` Nicolas Ferre
2014-09-23 10:11     ` Boris BREZILLON
2014-09-23 10:39     ` Johan Hovold
2014-09-23  9:38 ` [PATCH v7 07/10] ARM: at91: add clk_lookup entry for RTT devices Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 08/10] rtc: at91sam9: use clk API instead of relying on AT91_SLOW_CLOCK Boris BREZILLON
2014-09-23 10:33   ` Johan Hovold
2014-09-23 11:05     ` Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 09/10] rtc: at91sam9: add DT bindings documentation Boris BREZILLON
2014-09-23  9:38 ` [PATCH v7 10/10] mfd: syscon: add Atmel GPBR DT bindings documention Boris BREZILLON

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).