All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/10] ARM: at91 cleanups for 4.1 #2
@ 2015-03-16 22:44 ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

Hi,

This patch set finishes the clean up of the mach-at91 directory.

It fixed the remaining two drivers (at91_cf and pata_at91) so that they compile
in a multiplatform configuration.

Then it removes the uneeded headers.


Alexandre Belloni (9):
  ARM: at91/pm: move the standby functions to pm.c
  ARM: at91/pm: move AT91_MEMCTRL_* to pm.h
  ata: at91: use syscon to configure the smc
  ARM: at91: drop sam9_smc.c
  ARM: at91: declare the at91rm9200 memory controller as a syscon
  pcmcia: at91_cf: Use syscon to configure the MC/smc
  ARM: at91/pm: use the atmel-mc syscon defines
  ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
  ARM: at91: remove at91rm9200_sdramc.h

Boris Brezillon (1):
  mfd: syscon: Add Atmel MC (Memory Controller) registers definition

 .../devicetree/bindings/arm/atmel-at91.txt         |   2 +-
 arch/arm/boot/dts/at91rm9200.dtsi                  |   2 +-
 arch/arm/mach-at91/Makefile                        |   5 -
 arch/arm/mach-at91/include/mach/at91_ramc.h        |  32 -----
 arch/arm/mach-at91/include/mach/at91rm9200_mc.h    | 116 -----------------
 arch/arm/mach-at91/include/mach/at91sam9_smc.h     |  98 --------------
 arch/arm/mach-at91/pm.c                            |  91 ++++++++++++-
 arch/arm/mach-at91/pm.h                            | 110 +++-------------
 arch/arm/mach-at91/pm_suspend.S                    |   3 +-
 arch/arm/mach-at91/sam9_smc.c                      | 136 -------------------
 arch/arm/mach-at91/sam9_smc.h                      |  11 --
 drivers/ata/Kconfig                                |   1 -
 drivers/ata/pata_at91.c                            |  92 ++++++++++---
 drivers/pcmcia/Kconfig                             |   1 -
 drivers/pcmcia/at91_cf.c                           |  25 ++--
 include/linux/mfd/syscon/atmel-mc.h                | 144 +++++++++++++++++++++
 include/soc/at91/at91rm9200_sdramc.h               |  63 ---------
 17 files changed, 339 insertions(+), 593 deletions(-)
 delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
 delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h
 delete mode 100644 arch/arm/mach-at91/include/mach/at91sam9_smc.h
 delete mode 100644 arch/arm/mach-at91/sam9_smc.c
 delete mode 100644 arch/arm/mach-at91/sam9_smc.h
 create mode 100644 include/linux/mfd/syscon/atmel-mc.h
 delete mode 100644 include/soc/at91/at91rm9200_sdramc.h

-- 
2.1.0

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

* [PATCH 00/10] ARM: at91 cleanups for 4.1 #2
@ 2015-03-16 22:44 ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

This patch set finishes the clean up of the mach-at91 directory.

It fixed the remaining two drivers (at91_cf and pata_at91) so that they compile
in a multiplatform configuration.

Then it removes the uneeded headers.


Alexandre Belloni (9):
  ARM: at91/pm: move the standby functions to pm.c
  ARM: at91/pm: move AT91_MEMCTRL_* to pm.h
  ata: at91: use syscon to configure the smc
  ARM: at91: drop sam9_smc.c
  ARM: at91: declare the at91rm9200 memory controller as a syscon
  pcmcia: at91_cf: Use syscon to configure the MC/smc
  ARM: at91/pm: use the atmel-mc syscon defines
  ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
  ARM: at91: remove at91rm9200_sdramc.h

Boris Brezillon (1):
  mfd: syscon: Add Atmel MC (Memory Controller) registers definition

 .../devicetree/bindings/arm/atmel-at91.txt         |   2 +-
 arch/arm/boot/dts/at91rm9200.dtsi                  |   2 +-
 arch/arm/mach-at91/Makefile                        |   5 -
 arch/arm/mach-at91/include/mach/at91_ramc.h        |  32 -----
 arch/arm/mach-at91/include/mach/at91rm9200_mc.h    | 116 -----------------
 arch/arm/mach-at91/include/mach/at91sam9_smc.h     |  98 --------------
 arch/arm/mach-at91/pm.c                            |  91 ++++++++++++-
 arch/arm/mach-at91/pm.h                            | 110 +++-------------
 arch/arm/mach-at91/pm_suspend.S                    |   3 +-
 arch/arm/mach-at91/sam9_smc.c                      | 136 -------------------
 arch/arm/mach-at91/sam9_smc.h                      |  11 --
 drivers/ata/Kconfig                                |   1 -
 drivers/ata/pata_at91.c                            |  92 ++++++++++---
 drivers/pcmcia/Kconfig                             |   1 -
 drivers/pcmcia/at91_cf.c                           |  25 ++--
 include/linux/mfd/syscon/atmel-mc.h                | 144 +++++++++++++++++++++
 include/soc/at91/at91rm9200_sdramc.h               |  63 ---------
 17 files changed, 339 insertions(+), 593 deletions(-)
 delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
 delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h
 delete mode 100644 arch/arm/mach-at91/include/mach/at91sam9_smc.h
 delete mode 100644 arch/arm/mach-at91/sam9_smc.c
 delete mode 100644 arch/arm/mach-at91/sam9_smc.h
 create mode 100644 include/linux/mfd/syscon/atmel-mc.h
 delete mode 100644 include/soc/at91/at91rm9200_sdramc.h

-- 
2.1.0

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

* [PATCH 01/10] ARM: at91/pm: move the standby functions to pm.c
  2015-03-16 22:44 ` Alexandre Belloni
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

The standby functions are now only used in pm.c, move them there.

Also, they are not inlined as a pointer to those functions is passed to the
cpuidle driver.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/pm.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/mach-at91/pm.h | 92 -------------------------------------------------
 2 files changed, 89 insertions(+), 92 deletions(-)

diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index f93a735ba327..5062699cbb12 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -222,6 +222,95 @@ static void at91_pm_set_standby(void (*at91_standby)(void))
 		at91_cpuidle_device.dev.platform_data = at91_standby;
 }
 
+/*
+ * The AT91RM9200 goes into self-refresh mode with this command, and will
+ * terminate self-refresh automatically on the next SDRAM access.
+ *
+ * Self-refresh mode is exited as soon as a memory access is made, but we don't
+ * know for sure when that happens. However, we need to restore the low-power
+ * mode if it was enabled before going idle. Restoring low-power mode while
+ * still in self-refresh is "not recommended", but seems to work.
+ */
+static void at91rm9200_standby(void)
+{
+	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
+
+	asm volatile(
+		"b    1f\n\t"
+		".align    5\n\t"
+		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
+		"    str    %0, [%1, %2]\n\t"
+		"    str    %3, [%1, %4]\n\t"
+		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
+		"    str    %5, [%1, %2]"
+		:
+		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
+		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
+		  "r" (lpr));
+}
+
+/* We manage both DDRAM/SDRAM controllers, we need more than one value to
+ * remember.
+ */
+static void at91_ddr_standby(void)
+{
+	/* Those two values allow us to delay self-refresh activation
+	 * to the maximum. */
+	u32 lpr0, lpr1 = 0;
+	u32 saved_lpr0, saved_lpr1 = 0;
+
+	if (at91_ramc_base[1]) {
+		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
+		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
+		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
+	}
+
+	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
+	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
+	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
+
+	/* self-refresh mode now */
+	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
+	if (at91_ramc_base[1])
+		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
+
+	cpu_do_idle();
+
+	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
+	if (at91_ramc_base[1])
+		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
+}
+
+/* We manage both DDRAM/SDRAM controllers, we need more than one value to
+ * remember.
+ */
+static void at91sam9_sdram_standby(void)
+{
+	u32 lpr0, lpr1 = 0;
+	u32 saved_lpr0, saved_lpr1 = 0;
+
+	if (at91_ramc_base[1]) {
+		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
+		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
+		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
+	}
+
+	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
+	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
+	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
+
+	/* self-refresh mode now */
+	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
+	if (at91_ramc_base[1])
+		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
+
+	cpu_do_idle();
+
+	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
+	if (at91_ramc_base[1])
+		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
+}
+
 static const struct of_device_id ramc_ids[] __initconst = {
 	{ .compatible = "atmel,at91rm9200-sdramc", .data = at91rm9200_standby },
 	{ .compatible = "atmel,at91sam9260-sdramc", .data = at91sam9_sdram_standby },
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
index dcacfa1ad3fa..3223967d3460 100644
--- a/arch/arm/mach-at91/pm.h
+++ b/arch/arm/mach-at91/pm.h
@@ -23,96 +23,4 @@
 
 #define	AT91_PM_SLOW_CLOCK	0x01
 
-/*
- * The AT91RM9200 goes into self-refresh mode with this command, and will
- * terminate self-refresh automatically on the next SDRAM access.
- *
- * Self-refresh mode is exited as soon as a memory access is made, but we don't
- * know for sure when that happens. However, we need to restore the low-power
- * mode if it was enabled before going idle. Restoring low-power mode while
- * still in self-refresh is "not recommended", but seems to work.
- */
-
-#ifndef __ASSEMBLY__
-static inline void at91rm9200_standby(void)
-{
-	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
-
-	asm volatile(
-		"b    1f\n\t"
-		".align    5\n\t"
-		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
-		"    str    %0, [%1, %2]\n\t"
-		"    str    %3, [%1, %4]\n\t"
-		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
-		"    str    %5, [%1, %2]"
-		:
-		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
-		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
-		  "r" (lpr));
-}
-
-/* We manage both DDRAM/SDRAM controllers, we need more than one value to
- * remember.
- */
-static inline void at91_ddr_standby(void)
-{
-	/* Those two values allow us to delay self-refresh activation
-	 * to the maximum. */
-	u32 lpr0, lpr1 = 0;
-	u32 saved_lpr0, saved_lpr1 = 0;
-
-	if (at91_ramc_base[1]) {
-		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
-		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
-		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
-	}
-
-	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
-	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
-	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
-
-	/* self-refresh mode now */
-	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
-	if (at91_ramc_base[1])
-		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
-
-	cpu_do_idle();
-
-	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
-	if (at91_ramc_base[1])
-		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
-}
-
-/* We manage both DDRAM/SDRAM controllers, we need more than one value to
- * remember.
- */
-static inline void at91sam9_sdram_standby(void)
-{
-	u32 lpr0, lpr1 = 0;
-	u32 saved_lpr0, saved_lpr1 = 0;
-
-	if (at91_ramc_base[1]) {
-		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
-		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
-		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
-	}
-
-	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
-	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
-	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
-
-	/* self-refresh mode now */
-	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
-	if (at91_ramc_base[1])
-		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
-
-	cpu_do_idle();
-
-	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
-	if (at91_ramc_base[1])
-		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
-}
-
-#endif
 #endif
-- 
2.1.0

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

* [PATCH 01/10] ARM: at91/pm: move the standby functions to pm.c
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

The standby functions are now only used in pm.c, move them there.

Also, they are not inlined as a pointer to those functions is passed to the
cpuidle driver.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/pm.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/mach-at91/pm.h | 92 -------------------------------------------------
 2 files changed, 89 insertions(+), 92 deletions(-)

diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index f93a735ba327..5062699cbb12 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -222,6 +222,95 @@ static void at91_pm_set_standby(void (*at91_standby)(void))
 		at91_cpuidle_device.dev.platform_data = at91_standby;
 }
 
+/*
+ * The AT91RM9200 goes into self-refresh mode with this command, and will
+ * terminate self-refresh automatically on the next SDRAM access.
+ *
+ * Self-refresh mode is exited as soon as a memory access is made, but we don't
+ * know for sure when that happens. However, we need to restore the low-power
+ * mode if it was enabled before going idle. Restoring low-power mode while
+ * still in self-refresh is "not recommended", but seems to work.
+ */
+static void at91rm9200_standby(void)
+{
+	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
+
+	asm volatile(
+		"b    1f\n\t"
+		".align    5\n\t"
+		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
+		"    str    %0, [%1, %2]\n\t"
+		"    str    %3, [%1, %4]\n\t"
+		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
+		"    str    %5, [%1, %2]"
+		:
+		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
+		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
+		  "r" (lpr));
+}
+
+/* We manage both DDRAM/SDRAM controllers, we need more than one value to
+ * remember.
+ */
+static void at91_ddr_standby(void)
+{
+	/* Those two values allow us to delay self-refresh activation
+	 * to the maximum. */
+	u32 lpr0, lpr1 = 0;
+	u32 saved_lpr0, saved_lpr1 = 0;
+
+	if (at91_ramc_base[1]) {
+		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
+		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
+		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
+	}
+
+	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
+	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
+	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
+
+	/* self-refresh mode now */
+	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
+	if (at91_ramc_base[1])
+		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
+
+	cpu_do_idle();
+
+	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
+	if (at91_ramc_base[1])
+		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
+}
+
+/* We manage both DDRAM/SDRAM controllers, we need more than one value to
+ * remember.
+ */
+static void at91sam9_sdram_standby(void)
+{
+	u32 lpr0, lpr1 = 0;
+	u32 saved_lpr0, saved_lpr1 = 0;
+
+	if (at91_ramc_base[1]) {
+		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
+		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
+		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
+	}
+
+	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
+	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
+	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
+
+	/* self-refresh mode now */
+	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
+	if (at91_ramc_base[1])
+		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
+
+	cpu_do_idle();
+
+	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
+	if (at91_ramc_base[1])
+		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
+}
+
 static const struct of_device_id ramc_ids[] __initconst = {
 	{ .compatible = "atmel,at91rm9200-sdramc", .data = at91rm9200_standby },
 	{ .compatible = "atmel,at91sam9260-sdramc", .data = at91sam9_sdram_standby },
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
index dcacfa1ad3fa..3223967d3460 100644
--- a/arch/arm/mach-at91/pm.h
+++ b/arch/arm/mach-at91/pm.h
@@ -23,96 +23,4 @@
 
 #define	AT91_PM_SLOW_CLOCK	0x01
 
-/*
- * The AT91RM9200 goes into self-refresh mode with this command, and will
- * terminate self-refresh automatically on the next SDRAM access.
- *
- * Self-refresh mode is exited as soon as a memory access is made, but we don't
- * know for sure when that happens. However, we need to restore the low-power
- * mode if it was enabled before going idle. Restoring low-power mode while
- * still in self-refresh is "not recommended", but seems to work.
- */
-
-#ifndef __ASSEMBLY__
-static inline void at91rm9200_standby(void)
-{
-	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
-
-	asm volatile(
-		"b    1f\n\t"
-		".align    5\n\t"
-		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
-		"    str    %0, [%1, %2]\n\t"
-		"    str    %3, [%1, %4]\n\t"
-		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
-		"    str    %5, [%1, %2]"
-		:
-		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
-		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
-		  "r" (lpr));
-}
-
-/* We manage both DDRAM/SDRAM controllers, we need more than one value to
- * remember.
- */
-static inline void at91_ddr_standby(void)
-{
-	/* Those two values allow us to delay self-refresh activation
-	 * to the maximum. */
-	u32 lpr0, lpr1 = 0;
-	u32 saved_lpr0, saved_lpr1 = 0;
-
-	if (at91_ramc_base[1]) {
-		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
-		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
-		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
-	}
-
-	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
-	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
-	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
-
-	/* self-refresh mode now */
-	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
-	if (at91_ramc_base[1])
-		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
-
-	cpu_do_idle();
-
-	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
-	if (at91_ramc_base[1])
-		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
-}
-
-/* We manage both DDRAM/SDRAM controllers, we need more than one value to
- * remember.
- */
-static inline void at91sam9_sdram_standby(void)
-{
-	u32 lpr0, lpr1 = 0;
-	u32 saved_lpr0, saved_lpr1 = 0;
-
-	if (at91_ramc_base[1]) {
-		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
-		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
-		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
-	}
-
-	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
-	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
-	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
-
-	/* self-refresh mode now */
-	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
-	if (at91_ramc_base[1])
-		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
-
-	cpu_do_idle();
-
-	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
-	if (at91_ramc_base[1])
-		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
-}
-
-#endif
 #endif
-- 
2.1.0

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

* [PATCH 02/10] ARM: at91/pm: move AT91_MEMCTRL_* to pm.h
  2015-03-16 22:44 ` Alexandre Belloni
  (?)
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Boris Brezillon, Lee Jones, linux-pcmcia, linux-kernel,
	linux-ide, Alexandre Belloni, Tejun Heo,
	Jean-Christophe Plagniol-Villard, linux-arm-kernel

the AT91_MEMCTRL_* defines are only used by the pm code, move them to pm.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/include/mach/at91_ramc.h | 4 ----
 arch/arm/mach-at91/pm.h                     | 4 ++++
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
index e4492b151fee..493bc486e858 100644
--- a/arch/arm/mach-at91/include/mach/at91_ramc.h
+++ b/arch/arm/mach-at91/include/mach/at91_ramc.h
@@ -21,10 +21,6 @@ extern void __iomem *at91_ramc_base[];
 .extern at91_ramc_base
 #endif
 
-#define AT91_MEMCTRL_MC		0
-#define AT91_MEMCTRL_SDRAMC	1
-#define AT91_MEMCTRL_DDRSDR	2
-
 #include <soc/at91/at91rm9200_sdramc.h>
 #include <soc/at91/at91sam9_ddrsdr.h>
 #include <soc/at91/at91sam9_sdramc.h>
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
index 3223967d3460..ecd875a91d52 100644
--- a/arch/arm/mach-at91/pm.h
+++ b/arch/arm/mach-at91/pm.h
@@ -15,6 +15,10 @@
 
 #include <mach/at91_ramc.h>
 
+#define AT91_MEMCTRL_MC		0
+#define AT91_MEMCTRL_SDRAMC	1
+#define AT91_MEMCTRL_DDRSDR	2
+
 #define	AT91_PM_MEMTYPE_MASK	0x0f
 
 #define	AT91_PM_MODE_OFFSET	4
-- 
2.1.0

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

* [PATCH 02/10] ARM: at91/pm: move AT91_MEMCTRL_* to pm.h
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

the AT91_MEMCTRL_* defines are only used by the pm code, move them to pm.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/include/mach/at91_ramc.h | 4 ----
 arch/arm/mach-at91/pm.h                     | 4 ++++
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
index e4492b151fee..493bc486e858 100644
--- a/arch/arm/mach-at91/include/mach/at91_ramc.h
+++ b/arch/arm/mach-at91/include/mach/at91_ramc.h
@@ -21,10 +21,6 @@ extern void __iomem *at91_ramc_base[];
 .extern at91_ramc_base
 #endif
 
-#define AT91_MEMCTRL_MC		0
-#define AT91_MEMCTRL_SDRAMC	1
-#define AT91_MEMCTRL_DDRSDR	2
-
 #include <soc/at91/at91rm9200_sdramc.h>
 #include <soc/at91/at91sam9_ddrsdr.h>
 #include <soc/at91/at91sam9_sdramc.h>
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
index 3223967d3460..ecd875a91d52 100644
--- a/arch/arm/mach-at91/pm.h
+++ b/arch/arm/mach-at91/pm.h
@@ -15,6 +15,10 @@
 
 #include <mach/at91_ramc.h>
 
+#define AT91_MEMCTRL_MC		0
+#define AT91_MEMCTRL_SDRAMC	1
+#define AT91_MEMCTRL_DDRSDR	2
+
 #define	AT91_PM_MEMTYPE_MASK	0x0f
 
 #define	AT91_PM_MODE_OFFSET	4
-- 
2.1.0


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

* [PATCH 02/10] ARM: at91/pm: move AT91_MEMCTRL_* to pm.h
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

the AT91_MEMCTRL_* defines are only used by the pm code, move them to pm.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/include/mach/at91_ramc.h | 4 ----
 arch/arm/mach-at91/pm.h                     | 4 ++++
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
index e4492b151fee..493bc486e858 100644
--- a/arch/arm/mach-at91/include/mach/at91_ramc.h
+++ b/arch/arm/mach-at91/include/mach/at91_ramc.h
@@ -21,10 +21,6 @@ extern void __iomem *at91_ramc_base[];
 .extern at91_ramc_base
 #endif
 
-#define AT91_MEMCTRL_MC		0
-#define AT91_MEMCTRL_SDRAMC	1
-#define AT91_MEMCTRL_DDRSDR	2
-
 #include <soc/at91/at91rm9200_sdramc.h>
 #include <soc/at91/at91sam9_ddrsdr.h>
 #include <soc/at91/at91sam9_sdramc.h>
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
index 3223967d3460..ecd875a91d52 100644
--- a/arch/arm/mach-at91/pm.h
+++ b/arch/arm/mach-at91/pm.h
@@ -15,6 +15,10 @@
 
 #include <mach/at91_ramc.h>
 
+#define AT91_MEMCTRL_MC		0
+#define AT91_MEMCTRL_SDRAMC	1
+#define AT91_MEMCTRL_DDRSDR	2
+
 #define	AT91_PM_MEMTYPE_MASK	0x0f
 
 #define	AT91_PM_MODE_OFFSET	4
-- 
2.1.0

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

* [PATCH 03/10] ata: at91: use syscon to configure the smc
  2015-03-16 22:44 ` Alexandre Belloni
  (?)
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Boris Brezillon, Lee Jones, linux-pcmcia, linux-kernel,
	linux-ide, Alexandre Belloni, Tejun Heo,
	Jean-Christophe Plagniol-Villard, linux-arm-kernel

Use syscon/regmap to configure the smc. This allows to avoid using
at91sam9_smc.h and to compile the driver in a multiplatform configuration.

The driver will still not probe until the proper DT bindings are added.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 drivers/ata/Kconfig     |  1 -
 drivers/ata/pata_at91.c | 92 ++++++++++++++++++++++++++++++++++++++-----------
 2 files changed, 71 insertions(+), 22 deletions(-)

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 5f601553b9b0..a3a13605a9c4 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -835,7 +835,6 @@ config PATA_AT32
 config PATA_AT91
 	tristate "PATA support for AT91SAM9260"
 	depends on ARM && SOC_AT91SAM9
-	depends on !ARCH_MULTIPLATFORM
 	help
 	  This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.
 
diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c
index 9e85937d36a9..ace0a4de3449 100644
--- a/drivers/ata/pata_at91.c
+++ b/drivers/ata/pata_at91.c
@@ -24,11 +24,13 @@
 #include <linux/ata.h>
 #include <linux/clk.h>
 #include <linux/libata.h>
+#include <linux/mfd/syscon.h>
+#include <linux/mfd/syscon/atmel-smc.h>
 #include <linux/platform_device.h>
 #include <linux/ata_platform.h>
 #include <linux/platform_data/atmel.h>
+#include <linux/regmap.h>
 
-#include <mach/at91sam9_smc.h>
 #include <asm/gpio.h>
 
 #define DRV_NAME		"pata_at91"
@@ -57,6 +59,15 @@ struct smc_range {
 	int max;
 };
 
+struct regmap *smc;
+
+struct at91sam9_smc_generic_fields {
+	struct regmap_field *setup;
+	struct regmap_field *pulse;
+	struct regmap_field *cycle;
+	struct regmap_field *mode;
+} fields;
+
 /**
  * adjust_smc_value - adjust value for one of SMC registers.
  * @value: adjusted value
@@ -206,7 +217,6 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
 {
 	int ret = 0;
 	int use_iordy;
-	struct sam9_smc_config smc;
 	unsigned int t6z;         /* data tristate time in ns */
 	unsigned int cycle;       /* SMC Cycle width in MCK ticks */
 	unsigned int setup;       /* SMC Setup width in MCK ticks */
@@ -244,19 +254,21 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
 
 	dev_dbg(dev, "Use IORDY=%u, TDF Cycles=%u\n", use_iordy, tdf_cycles);
 
-	/* SMC Setup Register */
-	smc.nwe_setup = smc.nrd_setup = setup;
-	smc.ncs_write_setup = smc.ncs_read_setup = 0;
-	/* SMC Pulse Register */
-	smc.nwe_pulse = smc.nrd_pulse = pulse;
-	smc.ncs_write_pulse = smc.ncs_read_pulse = cs_pulse;
-	/* SMC Cycle Register */
-	smc.write_cycle = smc.read_cycle = cycle;
-	/* SMC Mode Register*/
-	smc.tdf_cycles = tdf_cycles;
-	smc.mode = info->mode;
-
-	sam9_smc_configure(0, info->cs, &smc);
+	regmap_fields_write(fields.setup, info->cs,
+			    AT91SAM9_SMC_NRDSETUP(setup) |
+			    AT91SAM9_SMC_NWESETUP(setup) |
+			    AT91SAM9_SMC_NCS_NRDSETUP(0) |
+			    AT91SAM9_SMC_NCS_WRSETUP(0));
+	regmap_fields_write(fields.pulse, info->cs,
+			    AT91SAM9_SMC_NRDPULSE(pulse) |
+			    AT91SAM9_SMC_NWEPULSE(pulse) |
+			    AT91SAM9_SMC_NCS_NRDPULSE(cs_pulse) |
+			    AT91SAM9_SMC_NCS_WRPULSE(cs_pulse));
+	regmap_fields_write(fields.cycle, info->cs,
+			    AT91SAM9_SMC_NRDCYCLE(cycle) |
+			    AT91SAM9_SMC_NWECYCLE(cycle));
+	regmap_fields_write(fields.mode, info->cs, info->mode |
+			    AT91_SMC_TDF_(tdf_cycles));
 }
 
 static void pata_at91_set_piomode(struct ata_port *ap, struct ata_device *adev)
@@ -280,21 +292,21 @@ static unsigned int pata_at91_data_xfer_noirq(struct ata_device *dev,
 {
 	struct at91_ide_info *info = dev->link->ap->host->private_data;
 	unsigned int consumed;
+	unsigned int mode;
 	unsigned long flags;
-	struct sam9_smc_config smc;
 
 	local_irq_save(flags);
-	sam9_smc_read_mode(0, info->cs, &smc);
+	regmap_fields_read(fields.mode, info->cs, &mode);
 
 	/* set 16bit mode before writing data */
-	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_16;
-	sam9_smc_write_mode(0, info->cs, &smc);
+	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
+			    AT91_SMC_DBW_16);
 
 	consumed = ata_sff_data_xfer(dev, buf, buflen, rw);
 
 	/* restore 8bit mode after data is written */
-	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_8;
-	sam9_smc_write_mode(0, info->cs, &smc);
+	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
+			    AT91_SMC_DBW_8);
 
 	local_irq_restore(flags);
 	return consumed;
@@ -312,6 +324,36 @@ static struct ata_port_operations pata_at91_port_ops = {
 	.cable_detect	= ata_cable_40wire,
 };
 
+static int at91sam9_smc_fields_init(struct device *dev)
+{
+	struct reg_field field = REG_FIELD(0, 0, 31);
+
+	field.id_size = 8;
+	field.id_offset = AT91SAM9_SMC_GENERIC_BLK_SZ;
+
+	field.reg = AT91SAM9_SMC_SETUP(AT91SAM9_SMC_GENERIC);
+	fields.setup = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.setup))
+		return PTR_ERR(fields.setup);
+
+	field.reg = AT91SAM9_SMC_PULSE(AT91SAM9_SMC_GENERIC);
+	fields.pulse = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.pulse))
+		return PTR_ERR(fields.pulse);
+
+	field.reg = AT91SAM9_SMC_CYCLE(AT91SAM9_SMC_GENERIC);
+	fields.cycle = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.cycle))
+		return PTR_ERR(fields.cycle);
+
+	field.reg = AT91SAM9_SMC_MODE(AT91SAM9_SMC_GENERIC);
+	fields.mode = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.mode))
+		return PTR_ERR(fields.mode);
+
+	return 0;
+}
+
 static int pata_at91_probe(struct platform_device *pdev)
 {
 	struct at91_cf_data *board = dev_get_platdata(&pdev->dev);
@@ -341,6 +383,14 @@ static int pata_at91_probe(struct platform_device *pdev)
 
 	irq = board->irq_pin;
 
+	smc = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "atmel,smc");
+	if (IS_ERR(smc))
+		return PTR_ERR(smc);
+
+	ret = at91sam9_smc_fields_init(dev);
+	if (ret < 0)
+		return ret;
+
 	/* init ata host */
 
 	host = ata_host_alloc(dev, 1);
-- 
2.1.0

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

* [PATCH 03/10] ata: at91: use syscon to configure the smc
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

Use syscon/regmap to configure the smc. This allows to avoid using
at91sam9_smc.h and to compile the driver in a multiplatform configuration.

The driver will still not probe until the proper DT bindings are added.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 drivers/ata/Kconfig     |  1 -
 drivers/ata/pata_at91.c | 92 ++++++++++++++++++++++++++++++++++++++-----------
 2 files changed, 71 insertions(+), 22 deletions(-)

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 5f601553b9b0..a3a13605a9c4 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -835,7 +835,6 @@ config PATA_AT32
 config PATA_AT91
 	tristate "PATA support for AT91SAM9260"
 	depends on ARM && SOC_AT91SAM9
-	depends on !ARCH_MULTIPLATFORM
 	help
 	  This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.
 
diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c
index 9e85937d36a9..ace0a4de3449 100644
--- a/drivers/ata/pata_at91.c
+++ b/drivers/ata/pata_at91.c
@@ -24,11 +24,13 @@
 #include <linux/ata.h>
 #include <linux/clk.h>
 #include <linux/libata.h>
+#include <linux/mfd/syscon.h>
+#include <linux/mfd/syscon/atmel-smc.h>
 #include <linux/platform_device.h>
 #include <linux/ata_platform.h>
 #include <linux/platform_data/atmel.h>
+#include <linux/regmap.h>
 
-#include <mach/at91sam9_smc.h>
 #include <asm/gpio.h>
 
 #define DRV_NAME		"pata_at91"
@@ -57,6 +59,15 @@ struct smc_range {
 	int max;
 };
 
+struct regmap *smc;
+
+struct at91sam9_smc_generic_fields {
+	struct regmap_field *setup;
+	struct regmap_field *pulse;
+	struct regmap_field *cycle;
+	struct regmap_field *mode;
+} fields;
+
 /**
  * adjust_smc_value - adjust value for one of SMC registers.
  * @value: adjusted value
@@ -206,7 +217,6 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
 {
 	int ret = 0;
 	int use_iordy;
-	struct sam9_smc_config smc;
 	unsigned int t6z;         /* data tristate time in ns */
 	unsigned int cycle;       /* SMC Cycle width in MCK ticks */
 	unsigned int setup;       /* SMC Setup width in MCK ticks */
@@ -244,19 +254,21 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
 
 	dev_dbg(dev, "Use IORDY=%u, TDF Cycles=%u\n", use_iordy, tdf_cycles);
 
-	/* SMC Setup Register */
-	smc.nwe_setup = smc.nrd_setup = setup;
-	smc.ncs_write_setup = smc.ncs_read_setup = 0;
-	/* SMC Pulse Register */
-	smc.nwe_pulse = smc.nrd_pulse = pulse;
-	smc.ncs_write_pulse = smc.ncs_read_pulse = cs_pulse;
-	/* SMC Cycle Register */
-	smc.write_cycle = smc.read_cycle = cycle;
-	/* SMC Mode Register*/
-	smc.tdf_cycles = tdf_cycles;
-	smc.mode = info->mode;
-
-	sam9_smc_configure(0, info->cs, &smc);
+	regmap_fields_write(fields.setup, info->cs,
+			    AT91SAM9_SMC_NRDSETUP(setup) |
+			    AT91SAM9_SMC_NWESETUP(setup) |
+			    AT91SAM9_SMC_NCS_NRDSETUP(0) |
+			    AT91SAM9_SMC_NCS_WRSETUP(0));
+	regmap_fields_write(fields.pulse, info->cs,
+			    AT91SAM9_SMC_NRDPULSE(pulse) |
+			    AT91SAM9_SMC_NWEPULSE(pulse) |
+			    AT91SAM9_SMC_NCS_NRDPULSE(cs_pulse) |
+			    AT91SAM9_SMC_NCS_WRPULSE(cs_pulse));
+	regmap_fields_write(fields.cycle, info->cs,
+			    AT91SAM9_SMC_NRDCYCLE(cycle) |
+			    AT91SAM9_SMC_NWECYCLE(cycle));
+	regmap_fields_write(fields.mode, info->cs, info->mode |
+			    AT91_SMC_TDF_(tdf_cycles));
 }
 
 static void pata_at91_set_piomode(struct ata_port *ap, struct ata_device *adev)
@@ -280,21 +292,21 @@ static unsigned int pata_at91_data_xfer_noirq(struct ata_device *dev,
 {
 	struct at91_ide_info *info = dev->link->ap->host->private_data;
 	unsigned int consumed;
+	unsigned int mode;
 	unsigned long flags;
-	struct sam9_smc_config smc;
 
 	local_irq_save(flags);
-	sam9_smc_read_mode(0, info->cs, &smc);
+	regmap_fields_read(fields.mode, info->cs, &mode);
 
 	/* set 16bit mode before writing data */
-	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_16;
-	sam9_smc_write_mode(0, info->cs, &smc);
+	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
+			    AT91_SMC_DBW_16);
 
 	consumed = ata_sff_data_xfer(dev, buf, buflen, rw);
 
 	/* restore 8bit mode after data is written */
-	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_8;
-	sam9_smc_write_mode(0, info->cs, &smc);
+	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
+			    AT91_SMC_DBW_8);
 
 	local_irq_restore(flags);
 	return consumed;
@@ -312,6 +324,36 @@ static struct ata_port_operations pata_at91_port_ops = {
 	.cable_detect	= ata_cable_40wire,
 };
 
+static int at91sam9_smc_fields_init(struct device *dev)
+{
+	struct reg_field field = REG_FIELD(0, 0, 31);
+
+	field.id_size = 8;
+	field.id_offset = AT91SAM9_SMC_GENERIC_BLK_SZ;
+
+	field.reg = AT91SAM9_SMC_SETUP(AT91SAM9_SMC_GENERIC);
+	fields.setup = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.setup))
+		return PTR_ERR(fields.setup);
+
+	field.reg = AT91SAM9_SMC_PULSE(AT91SAM9_SMC_GENERIC);
+	fields.pulse = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.pulse))
+		return PTR_ERR(fields.pulse);
+
+	field.reg = AT91SAM9_SMC_CYCLE(AT91SAM9_SMC_GENERIC);
+	fields.cycle = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.cycle))
+		return PTR_ERR(fields.cycle);
+
+	field.reg = AT91SAM9_SMC_MODE(AT91SAM9_SMC_GENERIC);
+	fields.mode = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.mode))
+		return PTR_ERR(fields.mode);
+
+	return 0;
+}
+
 static int pata_at91_probe(struct platform_device *pdev)
 {
 	struct at91_cf_data *board = dev_get_platdata(&pdev->dev);
@@ -341,6 +383,14 @@ static int pata_at91_probe(struct platform_device *pdev)
 
 	irq = board->irq_pin;
 
+	smc = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "atmel,smc");
+	if (IS_ERR(smc))
+		return PTR_ERR(smc);
+
+	ret = at91sam9_smc_fields_init(dev);
+	if (ret < 0)
+		return ret;
+
 	/* init ata host */
 
 	host = ata_host_alloc(dev, 1);
-- 
2.1.0


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

* [PATCH 03/10] ata: at91: use syscon to configure the smc
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

Use syscon/regmap to configure the smc. This allows to avoid using
at91sam9_smc.h and to compile the driver in a multiplatform configuration.

The driver will still not probe until the proper DT bindings are added.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 drivers/ata/Kconfig     |  1 -
 drivers/ata/pata_at91.c | 92 ++++++++++++++++++++++++++++++++++++++-----------
 2 files changed, 71 insertions(+), 22 deletions(-)

diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 5f601553b9b0..a3a13605a9c4 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -835,7 +835,6 @@ config PATA_AT32
 config PATA_AT91
 	tristate "PATA support for AT91SAM9260"
 	depends on ARM && SOC_AT91SAM9
-	depends on !ARCH_MULTIPLATFORM
 	help
 	  This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.
 
diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c
index 9e85937d36a9..ace0a4de3449 100644
--- a/drivers/ata/pata_at91.c
+++ b/drivers/ata/pata_at91.c
@@ -24,11 +24,13 @@
 #include <linux/ata.h>
 #include <linux/clk.h>
 #include <linux/libata.h>
+#include <linux/mfd/syscon.h>
+#include <linux/mfd/syscon/atmel-smc.h>
 #include <linux/platform_device.h>
 #include <linux/ata_platform.h>
 #include <linux/platform_data/atmel.h>
+#include <linux/regmap.h>
 
-#include <mach/at91sam9_smc.h>
 #include <asm/gpio.h>
 
 #define DRV_NAME		"pata_at91"
@@ -57,6 +59,15 @@ struct smc_range {
 	int max;
 };
 
+struct regmap *smc;
+
+struct at91sam9_smc_generic_fields {
+	struct regmap_field *setup;
+	struct regmap_field *pulse;
+	struct regmap_field *cycle;
+	struct regmap_field *mode;
+} fields;
+
 /**
  * adjust_smc_value - adjust value for one of SMC registers.
  * @value: adjusted value
@@ -206,7 +217,6 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
 {
 	int ret = 0;
 	int use_iordy;
-	struct sam9_smc_config smc;
 	unsigned int t6z;         /* data tristate time in ns */
 	unsigned int cycle;       /* SMC Cycle width in MCK ticks */
 	unsigned int setup;       /* SMC Setup width in MCK ticks */
@@ -244,19 +254,21 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
 
 	dev_dbg(dev, "Use IORDY=%u, TDF Cycles=%u\n", use_iordy, tdf_cycles);
 
-	/* SMC Setup Register */
-	smc.nwe_setup = smc.nrd_setup = setup;
-	smc.ncs_write_setup = smc.ncs_read_setup = 0;
-	/* SMC Pulse Register */
-	smc.nwe_pulse = smc.nrd_pulse = pulse;
-	smc.ncs_write_pulse = smc.ncs_read_pulse = cs_pulse;
-	/* SMC Cycle Register */
-	smc.write_cycle = smc.read_cycle = cycle;
-	/* SMC Mode Register*/
-	smc.tdf_cycles = tdf_cycles;
-	smc.mode = info->mode;
-
-	sam9_smc_configure(0, info->cs, &smc);
+	regmap_fields_write(fields.setup, info->cs,
+			    AT91SAM9_SMC_NRDSETUP(setup) |
+			    AT91SAM9_SMC_NWESETUP(setup) |
+			    AT91SAM9_SMC_NCS_NRDSETUP(0) |
+			    AT91SAM9_SMC_NCS_WRSETUP(0));
+	regmap_fields_write(fields.pulse, info->cs,
+			    AT91SAM9_SMC_NRDPULSE(pulse) |
+			    AT91SAM9_SMC_NWEPULSE(pulse) |
+			    AT91SAM9_SMC_NCS_NRDPULSE(cs_pulse) |
+			    AT91SAM9_SMC_NCS_WRPULSE(cs_pulse));
+	regmap_fields_write(fields.cycle, info->cs,
+			    AT91SAM9_SMC_NRDCYCLE(cycle) |
+			    AT91SAM9_SMC_NWECYCLE(cycle));
+	regmap_fields_write(fields.mode, info->cs, info->mode |
+			    AT91_SMC_TDF_(tdf_cycles));
 }
 
 static void pata_at91_set_piomode(struct ata_port *ap, struct ata_device *adev)
@@ -280,21 +292,21 @@ static unsigned int pata_at91_data_xfer_noirq(struct ata_device *dev,
 {
 	struct at91_ide_info *info = dev->link->ap->host->private_data;
 	unsigned int consumed;
+	unsigned int mode;
 	unsigned long flags;
-	struct sam9_smc_config smc;
 
 	local_irq_save(flags);
-	sam9_smc_read_mode(0, info->cs, &smc);
+	regmap_fields_read(fields.mode, info->cs, &mode);
 
 	/* set 16bit mode before writing data */
-	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_16;
-	sam9_smc_write_mode(0, info->cs, &smc);
+	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
+			    AT91_SMC_DBW_16);
 
 	consumed = ata_sff_data_xfer(dev, buf, buflen, rw);
 
 	/* restore 8bit mode after data is written */
-	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_8;
-	sam9_smc_write_mode(0, info->cs, &smc);
+	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
+			    AT91_SMC_DBW_8);
 
 	local_irq_restore(flags);
 	return consumed;
@@ -312,6 +324,36 @@ static struct ata_port_operations pata_at91_port_ops = {
 	.cable_detect	= ata_cable_40wire,
 };
 
+static int at91sam9_smc_fields_init(struct device *dev)
+{
+	struct reg_field field = REG_FIELD(0, 0, 31);
+
+	field.id_size = 8;
+	field.id_offset = AT91SAM9_SMC_GENERIC_BLK_SZ;
+
+	field.reg = AT91SAM9_SMC_SETUP(AT91SAM9_SMC_GENERIC);
+	fields.setup = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.setup))
+		return PTR_ERR(fields.setup);
+
+	field.reg = AT91SAM9_SMC_PULSE(AT91SAM9_SMC_GENERIC);
+	fields.pulse = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.pulse))
+		return PTR_ERR(fields.pulse);
+
+	field.reg = AT91SAM9_SMC_CYCLE(AT91SAM9_SMC_GENERIC);
+	fields.cycle = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.cycle))
+		return PTR_ERR(fields.cycle);
+
+	field.reg = AT91SAM9_SMC_MODE(AT91SAM9_SMC_GENERIC);
+	fields.mode = devm_regmap_field_alloc(dev, smc, field);
+	if (IS_ERR(fields.mode))
+		return PTR_ERR(fields.mode);
+
+	return 0;
+}
+
 static int pata_at91_probe(struct platform_device *pdev)
 {
 	struct at91_cf_data *board = dev_get_platdata(&pdev->dev);
@@ -341,6 +383,14 @@ static int pata_at91_probe(struct platform_device *pdev)
 
 	irq = board->irq_pin;
 
+	smc = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "atmel,smc");
+	if (IS_ERR(smc))
+		return PTR_ERR(smc);
+
+	ret = at91sam9_smc_fields_init(dev);
+	if (ret < 0)
+		return ret;
+
 	/* init ata host */
 
 	host = ata_host_alloc(dev, 1);
-- 
2.1.0

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

* [PATCH 04/10] ARM: at91: drop sam9_smc.c
  2015-03-16 22:44 ` Alexandre Belloni
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

sam9_smc.c has no users anymore, remove it along with both sam9_smc.h and
mach/at91sam9_smc.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/Makefile                    |   2 -
 arch/arm/mach-at91/include/mach/at91sam9_smc.h |  98 ------------------
 arch/arm/mach-at91/sam9_smc.c                  | 136 -------------------------
 arch/arm/mach-at91/sam9_smc.h                  |  11 --
 4 files changed, 247 deletions(-)
 delete mode 100644 arch/arm/mach-at91/include/mach/at91sam9_smc.h
 delete mode 100644 arch/arm/mach-at91/sam9_smc.c
 delete mode 100644 arch/arm/mach-at91/sam9_smc.h

diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
index 06a4cefd33a0..3586d977e99d 100644
--- a/arch/arm/mach-at91/Makefile
+++ b/arch/arm/mach-at91/Makefile
@@ -6,8 +6,6 @@ asflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
 
 obj-y		:= soc.o
 
-obj-$(CONFIG_SOC_AT91SAM9)	+= sam9_smc.o
-
 # CPU-specific support
 obj-$(CONFIG_SOC_AT91RM9200)	+= at91rm9200.o
 obj-$(CONFIG_SOC_AT91SAM9)	+= at91sam9.o
diff --git a/arch/arm/mach-at91/include/mach/at91sam9_smc.h b/arch/arm/mach-at91/include/mach/at91sam9_smc.h
deleted file mode 100644
index ff54a0ce90e3..000000000000
--- a/arch/arm/mach-at91/include/mach/at91sam9_smc.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91sam9_smc.h
- *
- * Copyright (C) 2007 Andrew Victor
- * Copyright (C) 2007 Atmel Corporation.
- *
- * Static Memory Controllers (SMC) - System peripherals registers.
- * Based on AT91SAM9261 datasheet revision D.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91SAM9_SMC_H
-#define AT91SAM9_SMC_H
-
-#ifndef __ASSEMBLY__
-struct sam9_smc_config {
-	/* Setup register */
-	u8 ncs_read_setup;
-	u8 nrd_setup;
-	u8 ncs_write_setup;
-	u8 nwe_setup;
-
-	/* Pulse register */
-	u8 ncs_read_pulse;
-	u8 nrd_pulse;
-	u8 ncs_write_pulse;
-	u8 nwe_pulse;
-
-	/* Cycle register */
-	u16 read_cycle;
-	u16 write_cycle;
-
-	/* Mode register */
-	u32 mode;
-	u8 tdf_cycles:4;
-};
-
-extern void sam9_smc_configure(int id, int cs, struct sam9_smc_config *config);
-extern void sam9_smc_read(int id, int cs, struct sam9_smc_config *config);
-extern void sam9_smc_read_mode(int id, int cs, struct sam9_smc_config *config);
-extern void sam9_smc_write_mode(int id, int cs, struct sam9_smc_config *config);
-#endif
-
-#define AT91_SMC_SETUP		0x00				/* Setup Register for CS n */
-#define		AT91_SMC_NWESETUP	(0x3f << 0)			/* NWE Setup Length */
-#define			AT91_SMC_NWESETUP_(x)	((x) << 0)
-#define		AT91_SMC_NCS_WRSETUP	(0x3f << 8)			/* NCS Setup Length in Write Access */
-#define			AT91_SMC_NCS_WRSETUP_(x)	((x) << 8)
-#define		AT91_SMC_NRDSETUP	(0x3f << 16)			/* NRD Setup Length */
-#define			AT91_SMC_NRDSETUP_(x)	((x) << 16)
-#define		AT91_SMC_NCS_RDSETUP	(0x3f << 24)			/* NCS Setup Length in Read Access */
-#define			AT91_SMC_NCS_RDSETUP_(x)	((x) << 24)
-
-#define AT91_SMC_PULSE		0x04				/* Pulse Register for CS n */
-#define		AT91_SMC_NWEPULSE	(0x7f <<  0)			/* NWE Pulse Length */
-#define			AT91_SMC_NWEPULSE_(x)	((x) << 0)
-#define		AT91_SMC_NCS_WRPULSE	(0x7f <<  8)			/* NCS Pulse Length in Write Access */
-#define			AT91_SMC_NCS_WRPULSE_(x)((x) << 8)
-#define		AT91_SMC_NRDPULSE	(0x7f << 16)			/* NRD Pulse Length */
-#define			AT91_SMC_NRDPULSE_(x)	((x) << 16)
-#define		AT91_SMC_NCS_RDPULSE	(0x7f << 24)			/* NCS Pulse Length in Read Access */
-#define			AT91_SMC_NCS_RDPULSE_(x)((x) << 24)
-
-#define AT91_SMC_CYCLE		0x08				/* Cycle Register for CS n */
-#define		AT91_SMC_NWECYCLE	(0x1ff << 0 )			/* Total Write Cycle Length */
-#define			AT91_SMC_NWECYCLE_(x)	((x) << 0)
-#define		AT91_SMC_NRDCYCLE	(0x1ff << 16)			/* Total Read Cycle Length */
-#define			AT91_SMC_NRDCYCLE_(x)	((x) << 16)
-
-#define AT91_SMC_MODE		0x0c				/* Mode Register for CS n */
-#define		AT91_SMC_READMODE	(1 <<  0)			/* Read Mode */
-#define		AT91_SMC_WRITEMODE	(1 <<  1)			/* Write Mode */
-#define		AT91_SMC_EXNWMODE	(3 <<  4)			/* NWAIT Mode */
-#define			AT91_SMC_EXNWMODE_DISABLE	(0 << 4)
-#define			AT91_SMC_EXNWMODE_FROZEN	(2 << 4)
-#define			AT91_SMC_EXNWMODE_READY		(3 << 4)
-#define		AT91_SMC_BAT		(1 <<  8)			/* Byte Access Type */
-#define			AT91_SMC_BAT_SELECT		(0 << 8)
-#define			AT91_SMC_BAT_WRITE		(1 << 8)
-#define		AT91_SMC_DBW		(3 << 12)			/* Data Bus Width */
-#define			AT91_SMC_DBW_8			(0 << 12)
-#define			AT91_SMC_DBW_16			(1 << 12)
-#define			AT91_SMC_DBW_32			(2 << 12)
-#define		AT91_SMC_TDF		(0xf << 16)			/* Data Float Time. */
-#define			AT91_SMC_TDF_(x)		((x) << 16)
-#define		AT91_SMC_TDFMODE	(1 << 20)			/* TDF Optimization - Enabled */
-#define		AT91_SMC_PMEN		(1 << 24)			/* Page Mode Enabled */
-#define		AT91_SMC_PS		(3 << 28)			/* Page Size */
-#define			AT91_SMC_PS_4			(0 << 28)
-#define			AT91_SMC_PS_8			(1 << 28)
-#define			AT91_SMC_PS_16			(2 << 28)
-#define			AT91_SMC_PS_32			(3 << 28)
-
-#endif
diff --git a/arch/arm/mach-at91/sam9_smc.c b/arch/arm/mach-at91/sam9_smc.c
deleted file mode 100644
index 826315af6d11..000000000000
--- a/arch/arm/mach-at91/sam9_smc.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * linux/arch/arm/mach-at91/sam9_smc.c
- *
- * Copyright (C) 2008 Andrew Victor
- * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/module.h>
-#include <linux/io.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-
-#include <mach/at91sam9_smc.h>
-
-#include "sam9_smc.h"
-
-
-#define AT91_SMC_CS(id, n)	(smc_base_addr[id] + ((n) * 0x10))
-
-static void __iomem *smc_base_addr[2];
-
-static void sam9_smc_cs_write_mode(void __iomem *base,
-					struct sam9_smc_config *config)
-{
-	__raw_writel(config->mode
-		   | AT91_SMC_TDF_(config->tdf_cycles),
-		   base + AT91_SMC_MODE);
-}
-
-void sam9_smc_write_mode(int id, int cs,
-					struct sam9_smc_config *config)
-{
-	sam9_smc_cs_write_mode(AT91_SMC_CS(id, cs), config);
-}
-EXPORT_SYMBOL_GPL(sam9_smc_write_mode);
-
-static void sam9_smc_cs_configure(void __iomem *base,
-					struct sam9_smc_config *config)
-{
-
-	/* Setup register */
-	__raw_writel(AT91_SMC_NWESETUP_(config->nwe_setup)
-		   | AT91_SMC_NCS_WRSETUP_(config->ncs_write_setup)
-		   | AT91_SMC_NRDSETUP_(config->nrd_setup)
-		   | AT91_SMC_NCS_RDSETUP_(config->ncs_read_setup),
-		   base + AT91_SMC_SETUP);
-
-	/* Pulse register */
-	__raw_writel(AT91_SMC_NWEPULSE_(config->nwe_pulse)
-		   | AT91_SMC_NCS_WRPULSE_(config->ncs_write_pulse)
-		   | AT91_SMC_NRDPULSE_(config->nrd_pulse)
-		   | AT91_SMC_NCS_RDPULSE_(config->ncs_read_pulse),
-		   base + AT91_SMC_PULSE);
-
-	/* Cycle register */
-	__raw_writel(AT91_SMC_NWECYCLE_(config->write_cycle)
-		   | AT91_SMC_NRDCYCLE_(config->read_cycle),
-		   base + AT91_SMC_CYCLE);
-
-	/* Mode register */
-	sam9_smc_cs_write_mode(base, config);
-}
-
-void sam9_smc_configure(int id, int cs,
-					struct sam9_smc_config *config)
-{
-	sam9_smc_cs_configure(AT91_SMC_CS(id, cs), config);
-}
-EXPORT_SYMBOL_GPL(sam9_smc_configure);
-
-static void sam9_smc_cs_read_mode(void __iomem *base,
-					struct sam9_smc_config *config)
-{
-	u32 val = __raw_readl(base + AT91_SMC_MODE);
-
-	config->mode = (val & ~AT91_SMC_NWECYCLE);
-	config->tdf_cycles = (val & AT91_SMC_NWECYCLE) >> 16 ;
-}
-
-void sam9_smc_read_mode(int id, int cs,
-					struct sam9_smc_config *config)
-{
-	sam9_smc_cs_read_mode(AT91_SMC_CS(id, cs), config);
-}
-EXPORT_SYMBOL_GPL(sam9_smc_read_mode);
-
-static void sam9_smc_cs_read(void __iomem *base,
-					struct sam9_smc_config *config)
-{
-	u32 val;
-
-	/* Setup register */
-	val = __raw_readl(base + AT91_SMC_SETUP);
-
-	config->nwe_setup = val & AT91_SMC_NWESETUP;
-	config->ncs_write_setup = (val & AT91_SMC_NCS_WRSETUP) >> 8;
-	config->nrd_setup = (val & AT91_SMC_NRDSETUP) >> 16;
-	config->ncs_read_setup = (val & AT91_SMC_NCS_RDSETUP) >> 24;
-
-	/* Pulse register */
-	val = __raw_readl(base + AT91_SMC_PULSE);
-
-	config->nwe_pulse = val & AT91_SMC_NWEPULSE;
-	config->ncs_write_pulse = (val & AT91_SMC_NCS_WRPULSE) >> 8;
-	config->nrd_pulse = (val & AT91_SMC_NRDPULSE) >> 16;
-	config->ncs_read_pulse = (val & AT91_SMC_NCS_RDPULSE) >> 24;
-
-	/* Cycle register */
-	val = __raw_readl(base + AT91_SMC_CYCLE);
-
-	config->write_cycle = val & AT91_SMC_NWECYCLE;
-	config->read_cycle = (val & AT91_SMC_NRDCYCLE) >> 16;
-
-	/* Mode register */
-	sam9_smc_cs_read_mode(base, config);
-}
-
-void sam9_smc_read(int id, int cs, struct sam9_smc_config *config)
-{
-	sam9_smc_cs_read(AT91_SMC_CS(id, cs), config);
-}
-
-void __init at91sam9_ioremap_smc(int id, u32 addr)
-{
-	if (id > 1) {
-		pr_warn("%s: id > 2\n", __func__);
-		return;
-	}
-	smc_base_addr[id] = ioremap(addr, 512);
-	if (!smc_base_addr[id])
-		pr_warn("Impossible to ioremap smc.%d 0x%x\n", id, addr);
-}
diff --git a/arch/arm/mach-at91/sam9_smc.h b/arch/arm/mach-at91/sam9_smc.h
deleted file mode 100644
index 3e52dcd4a59f..000000000000
--- a/arch/arm/mach-at91/sam9_smc.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * linux/arch/arm/mach-at91/sam9_smc.
- *
- * Copyright (C) 2008 Andrew Victor
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-extern void __init at91sam9_ioremap_smc(int id, u32 addr);
-- 
2.1.0


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

* [PATCH 04/10] ARM: at91: drop sam9_smc.c
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

sam9_smc.c has no users anymore, remove it along with both sam9_smc.h and
mach/at91sam9_smc.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/Makefile                    |   2 -
 arch/arm/mach-at91/include/mach/at91sam9_smc.h |  98 ------------------
 arch/arm/mach-at91/sam9_smc.c                  | 136 -------------------------
 arch/arm/mach-at91/sam9_smc.h                  |  11 --
 4 files changed, 247 deletions(-)
 delete mode 100644 arch/arm/mach-at91/include/mach/at91sam9_smc.h
 delete mode 100644 arch/arm/mach-at91/sam9_smc.c
 delete mode 100644 arch/arm/mach-at91/sam9_smc.h

diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
index 06a4cefd33a0..3586d977e99d 100644
--- a/arch/arm/mach-at91/Makefile
+++ b/arch/arm/mach-at91/Makefile
@@ -6,8 +6,6 @@ asflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
 
 obj-y		:= soc.o
 
-obj-$(CONFIG_SOC_AT91SAM9)	+= sam9_smc.o
-
 # CPU-specific support
 obj-$(CONFIG_SOC_AT91RM9200)	+= at91rm9200.o
 obj-$(CONFIG_SOC_AT91SAM9)	+= at91sam9.o
diff --git a/arch/arm/mach-at91/include/mach/at91sam9_smc.h b/arch/arm/mach-at91/include/mach/at91sam9_smc.h
deleted file mode 100644
index ff54a0ce90e3..000000000000
--- a/arch/arm/mach-at91/include/mach/at91sam9_smc.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91sam9_smc.h
- *
- * Copyright (C) 2007 Andrew Victor
- * Copyright (C) 2007 Atmel Corporation.
- *
- * Static Memory Controllers (SMC) - System peripherals registers.
- * Based on AT91SAM9261 datasheet revision D.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91SAM9_SMC_H
-#define AT91SAM9_SMC_H
-
-#ifndef __ASSEMBLY__
-struct sam9_smc_config {
-	/* Setup register */
-	u8 ncs_read_setup;
-	u8 nrd_setup;
-	u8 ncs_write_setup;
-	u8 nwe_setup;
-
-	/* Pulse register */
-	u8 ncs_read_pulse;
-	u8 nrd_pulse;
-	u8 ncs_write_pulse;
-	u8 nwe_pulse;
-
-	/* Cycle register */
-	u16 read_cycle;
-	u16 write_cycle;
-
-	/* Mode register */
-	u32 mode;
-	u8 tdf_cycles:4;
-};
-
-extern void sam9_smc_configure(int id, int cs, struct sam9_smc_config *config);
-extern void sam9_smc_read(int id, int cs, struct sam9_smc_config *config);
-extern void sam9_smc_read_mode(int id, int cs, struct sam9_smc_config *config);
-extern void sam9_smc_write_mode(int id, int cs, struct sam9_smc_config *config);
-#endif
-
-#define AT91_SMC_SETUP		0x00				/* Setup Register for CS n */
-#define		AT91_SMC_NWESETUP	(0x3f << 0)			/* NWE Setup Length */
-#define			AT91_SMC_NWESETUP_(x)	((x) << 0)
-#define		AT91_SMC_NCS_WRSETUP	(0x3f << 8)			/* NCS Setup Length in Write Access */
-#define			AT91_SMC_NCS_WRSETUP_(x)	((x) << 8)
-#define		AT91_SMC_NRDSETUP	(0x3f << 16)			/* NRD Setup Length */
-#define			AT91_SMC_NRDSETUP_(x)	((x) << 16)
-#define		AT91_SMC_NCS_RDSETUP	(0x3f << 24)			/* NCS Setup Length in Read Access */
-#define			AT91_SMC_NCS_RDSETUP_(x)	((x) << 24)
-
-#define AT91_SMC_PULSE		0x04				/* Pulse Register for CS n */
-#define		AT91_SMC_NWEPULSE	(0x7f <<  0)			/* NWE Pulse Length */
-#define			AT91_SMC_NWEPULSE_(x)	((x) << 0)
-#define		AT91_SMC_NCS_WRPULSE	(0x7f <<  8)			/* NCS Pulse Length in Write Access */
-#define			AT91_SMC_NCS_WRPULSE_(x)((x) << 8)
-#define		AT91_SMC_NRDPULSE	(0x7f << 16)			/* NRD Pulse Length */
-#define			AT91_SMC_NRDPULSE_(x)	((x) << 16)
-#define		AT91_SMC_NCS_RDPULSE	(0x7f << 24)			/* NCS Pulse Length in Read Access */
-#define			AT91_SMC_NCS_RDPULSE_(x)((x) << 24)
-
-#define AT91_SMC_CYCLE		0x08				/* Cycle Register for CS n */
-#define		AT91_SMC_NWECYCLE	(0x1ff << 0 )			/* Total Write Cycle Length */
-#define			AT91_SMC_NWECYCLE_(x)	((x) << 0)
-#define		AT91_SMC_NRDCYCLE	(0x1ff << 16)			/* Total Read Cycle Length */
-#define			AT91_SMC_NRDCYCLE_(x)	((x) << 16)
-
-#define AT91_SMC_MODE		0x0c				/* Mode Register for CS n */
-#define		AT91_SMC_READMODE	(1 <<  0)			/* Read Mode */
-#define		AT91_SMC_WRITEMODE	(1 <<  1)			/* Write Mode */
-#define		AT91_SMC_EXNWMODE	(3 <<  4)			/* NWAIT Mode */
-#define			AT91_SMC_EXNWMODE_DISABLE	(0 << 4)
-#define			AT91_SMC_EXNWMODE_FROZEN	(2 << 4)
-#define			AT91_SMC_EXNWMODE_READY		(3 << 4)
-#define		AT91_SMC_BAT		(1 <<  8)			/* Byte Access Type */
-#define			AT91_SMC_BAT_SELECT		(0 << 8)
-#define			AT91_SMC_BAT_WRITE		(1 << 8)
-#define		AT91_SMC_DBW		(3 << 12)			/* Data Bus Width */
-#define			AT91_SMC_DBW_8			(0 << 12)
-#define			AT91_SMC_DBW_16			(1 << 12)
-#define			AT91_SMC_DBW_32			(2 << 12)
-#define		AT91_SMC_TDF		(0xf << 16)			/* Data Float Time. */
-#define			AT91_SMC_TDF_(x)		((x) << 16)
-#define		AT91_SMC_TDFMODE	(1 << 20)			/* TDF Optimization - Enabled */
-#define		AT91_SMC_PMEN		(1 << 24)			/* Page Mode Enabled */
-#define		AT91_SMC_PS		(3 << 28)			/* Page Size */
-#define			AT91_SMC_PS_4			(0 << 28)
-#define			AT91_SMC_PS_8			(1 << 28)
-#define			AT91_SMC_PS_16			(2 << 28)
-#define			AT91_SMC_PS_32			(3 << 28)
-
-#endif
diff --git a/arch/arm/mach-at91/sam9_smc.c b/arch/arm/mach-at91/sam9_smc.c
deleted file mode 100644
index 826315af6d11..000000000000
--- a/arch/arm/mach-at91/sam9_smc.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * linux/arch/arm/mach-at91/sam9_smc.c
- *
- * Copyright (C) 2008 Andrew Victor
- * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/module.h>
-#include <linux/io.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-
-#include <mach/at91sam9_smc.h>
-
-#include "sam9_smc.h"
-
-
-#define AT91_SMC_CS(id, n)	(smc_base_addr[id] + ((n) * 0x10))
-
-static void __iomem *smc_base_addr[2];
-
-static void sam9_smc_cs_write_mode(void __iomem *base,
-					struct sam9_smc_config *config)
-{
-	__raw_writel(config->mode
-		   | AT91_SMC_TDF_(config->tdf_cycles),
-		   base + AT91_SMC_MODE);
-}
-
-void sam9_smc_write_mode(int id, int cs,
-					struct sam9_smc_config *config)
-{
-	sam9_smc_cs_write_mode(AT91_SMC_CS(id, cs), config);
-}
-EXPORT_SYMBOL_GPL(sam9_smc_write_mode);
-
-static void sam9_smc_cs_configure(void __iomem *base,
-					struct sam9_smc_config *config)
-{
-
-	/* Setup register */
-	__raw_writel(AT91_SMC_NWESETUP_(config->nwe_setup)
-		   | AT91_SMC_NCS_WRSETUP_(config->ncs_write_setup)
-		   | AT91_SMC_NRDSETUP_(config->nrd_setup)
-		   | AT91_SMC_NCS_RDSETUP_(config->ncs_read_setup),
-		   base + AT91_SMC_SETUP);
-
-	/* Pulse register */
-	__raw_writel(AT91_SMC_NWEPULSE_(config->nwe_pulse)
-		   | AT91_SMC_NCS_WRPULSE_(config->ncs_write_pulse)
-		   | AT91_SMC_NRDPULSE_(config->nrd_pulse)
-		   | AT91_SMC_NCS_RDPULSE_(config->ncs_read_pulse),
-		   base + AT91_SMC_PULSE);
-
-	/* Cycle register */
-	__raw_writel(AT91_SMC_NWECYCLE_(config->write_cycle)
-		   | AT91_SMC_NRDCYCLE_(config->read_cycle),
-		   base + AT91_SMC_CYCLE);
-
-	/* Mode register */
-	sam9_smc_cs_write_mode(base, config);
-}
-
-void sam9_smc_configure(int id, int cs,
-					struct sam9_smc_config *config)
-{
-	sam9_smc_cs_configure(AT91_SMC_CS(id, cs), config);
-}
-EXPORT_SYMBOL_GPL(sam9_smc_configure);
-
-static void sam9_smc_cs_read_mode(void __iomem *base,
-					struct sam9_smc_config *config)
-{
-	u32 val = __raw_readl(base + AT91_SMC_MODE);
-
-	config->mode = (val & ~AT91_SMC_NWECYCLE);
-	config->tdf_cycles = (val & AT91_SMC_NWECYCLE) >> 16 ;
-}
-
-void sam9_smc_read_mode(int id, int cs,
-					struct sam9_smc_config *config)
-{
-	sam9_smc_cs_read_mode(AT91_SMC_CS(id, cs), config);
-}
-EXPORT_SYMBOL_GPL(sam9_smc_read_mode);
-
-static void sam9_smc_cs_read(void __iomem *base,
-					struct sam9_smc_config *config)
-{
-	u32 val;
-
-	/* Setup register */
-	val = __raw_readl(base + AT91_SMC_SETUP);
-
-	config->nwe_setup = val & AT91_SMC_NWESETUP;
-	config->ncs_write_setup = (val & AT91_SMC_NCS_WRSETUP) >> 8;
-	config->nrd_setup = (val & AT91_SMC_NRDSETUP) >> 16;
-	config->ncs_read_setup = (val & AT91_SMC_NCS_RDSETUP) >> 24;
-
-	/* Pulse register */
-	val = __raw_readl(base + AT91_SMC_PULSE);
-
-	config->nwe_pulse = val & AT91_SMC_NWEPULSE;
-	config->ncs_write_pulse = (val & AT91_SMC_NCS_WRPULSE) >> 8;
-	config->nrd_pulse = (val & AT91_SMC_NRDPULSE) >> 16;
-	config->ncs_read_pulse = (val & AT91_SMC_NCS_RDPULSE) >> 24;
-
-	/* Cycle register */
-	val = __raw_readl(base + AT91_SMC_CYCLE);
-
-	config->write_cycle = val & AT91_SMC_NWECYCLE;
-	config->read_cycle = (val & AT91_SMC_NRDCYCLE) >> 16;
-
-	/* Mode register */
-	sam9_smc_cs_read_mode(base, config);
-}
-
-void sam9_smc_read(int id, int cs, struct sam9_smc_config *config)
-{
-	sam9_smc_cs_read(AT91_SMC_CS(id, cs), config);
-}
-
-void __init at91sam9_ioremap_smc(int id, u32 addr)
-{
-	if (id > 1) {
-		pr_warn("%s: id > 2\n", __func__);
-		return;
-	}
-	smc_base_addr[id] = ioremap(addr, 512);
-	if (!smc_base_addr[id])
-		pr_warn("Impossible to ioremap smc.%d 0x%x\n", id, addr);
-}
diff --git a/arch/arm/mach-at91/sam9_smc.h b/arch/arm/mach-at91/sam9_smc.h
deleted file mode 100644
index 3e52dcd4a59f..000000000000
--- a/arch/arm/mach-at91/sam9_smc.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * linux/arch/arm/mach-at91/sam9_smc.
- *
- * Copyright (C) 2008 Andrew Victor
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-extern void __init at91sam9_ioremap_smc(int id, u32 addr);
-- 
2.1.0

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

* [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
  2015-03-16 22:44 ` Alexandre Belloni
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

From: Boris Brezillon <boris.brezillon@free-electrons.com>

The at91rm9200 SoC embeds a Memory Controller block which is used to
configure several aspects of the platform:
- AHB/APB Bus behavior
- SDRAM Controller
- EBI (External Bus Interface) and SMC (Static Memory Controller) config

Those registers might be accessed by different drivers, hence we need to
define it as a syscon device.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
 1 file changed, 144 insertions(+)
 create mode 100644 include/linux/mfd/syscon/atmel-mc.h

diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
new file mode 100644
index 000000000000..cb7d9fe89e44
--- /dev/null
+++ b/include/linux/mfd/syscon/atmel-mc.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2005 Ivan Kokshaysky
+ * Copyright (C) SAN People
+ *
+ * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
+ * registers.
+ * Based on AT91RM9200 datasheet revision E.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
+#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
+
+/* Memory Controller */
+#define AT91_MC_RCR			0x00
+#define AT91_MC_RCB			BIT(0)
+
+#define AT91_MC_ASR			0x04
+#define AT91_MC_UNADD			BIT(0)
+#define AT91_MC_MISADD			BIT(1)
+#define AT91_MC_ABTSZ			GENMASK(9, 8)
+#define AT91_MC_ABTSZ_BYTE		(0 << 8)
+#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
+#define AT91_MC_ABTSZ_WORD		(2 << 8)
+#define AT91_MC_ABTTYP			GENMASK(11, 10)
+#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
+#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
+#define AT91_MC_ABTTYP_FETCH		(2 << 10)
+#define AT91_MC_MST(n)			BIT(16 + (n))
+#define AT91_MC_SVMST(n)		BIT(24 + (n))
+
+#define AT91_MC_AASR			0x08
+
+#define AT91_MC_MPR			0x0c
+#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
+
+/* External Bus Interface (EBI) registers */
+#define AT91_MC_EBI_CSA			0x60
+#define AT91_MC_EBI_CS(n)		BIT(x)
+#define AT91_MC_EBI_NUM_CS		8
+
+#define AT91_MC_EBI_CFGR		0x64
+#define AT91_MC_EBI_DBPUC		BIT(0)
+
+/* Static Memory Controller (SMC) registers */
+#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))
+#define AT91_MC_SMC_NWS			GENMASK(6, 0)
+#define AT91_MC_SMC_NWS_(x)		((x) << 0)
+#define AT91_MC_SMC_WSEN		BIT(7)
+#define AT91_MC_SMC_TDF			GENMASK(11, 8)
+#define AT91_MC_SMC_TDF_(x)		((x) << 8)
+#define AT91_MC_SMC_TDF_MAX		0xf
+#define AT91_MC_SMC_BAT			BIT(12)
+#define AT91_MC_SMC_DBW			GENMASK(14, 13)
+#define AT91_MC_SMC_DBW_16		(1 << 13)
+#define AT91_MC_SMC_DBW_8		(2 << 13)
+#define AT91_MC_SMC_DPR			BIT(15)
+#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
+#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
+#define AT91_MC_SMC_ACSS_MAX		3
+#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
+#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
+#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
+#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
+#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
+
+/* SDRAM Controller registers */
+#define AT91_MC_SDRAMC_MR		0x90
+#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
+#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
+#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
+#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
+#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
+#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
+#define AT91_MC_SDRAMC_DBW_16		BIT(4)
+
+#define AT91_MC_SDRAMC_TR		0x94
+#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
+
+#define AT91_MC_SDRAMC_CR		0x98
+#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
+#define AT91_MC_SDRAMC_NC_8		(0 << 0)
+#define AT91_MC_SDRAMC_NC_9		(1 << 0)
+#define AT91_MC_SDRAMC_NC_10		(2 << 0)
+#define AT91_MC_SDRAMC_NC_11		(3 << 0)
+#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
+#define AT91_MC_SDRAMC_NR_11		(0 << 2)
+#define AT91_MC_SDRAMC_NR_12		(1 << 2)
+#define AT91_MC_SDRAMC_NR_13		(2 << 2)
+#define	AT91_MC_SDRAMC_NB		BIT(4)
+#define AT91_MC_SDRAMC_NB_2		(0 << 4)
+#define AT91_MC_SDRAMC_NB_4		(1 << 4)
+#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
+#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
+#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
+#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
+#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
+#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
+#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
+#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
+
+#define AT91_MC_SDRAMC_SRR		0x9c
+#define AT91_MC_SDRAMC_SRCB		BIT(0)
+
+#define AT91_MC_SDRAMC_LPR		0xa0
+#define AT91_MC_SDRAMC_LPCB		BIT(0)
+
+#define AT91_MC_SDRAMC_IER		0xa4
+#define AT91_MC_SDRAMC_IDR		0xa8
+#define AT91_MC_SDRAMC_IMR		0xac
+#define AT91_MC_SDRAMC_ISR		0xb0
+#define AT91_MC_SDRAMC_RES		BIT(0)
+
+/* Burst Flash Controller register */
+#define AT91_MC_BFC_MR			0xc0
+#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
+#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
+#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
+#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
+#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
+#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
+#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
+#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
+#define AT91_MC_BFC_AVL			GENMASK(7,  4)
+#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
+#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
+#define AT91_MC_BFC_PAGES_16		(1 << 8)
+#define AT91_MC_BFC_PAGES_32		(2 << 8)
+#define AT91_MC_BFC_PAGES_64		(3 << 8)
+#define AT91_MC_BFC_PAGES_128		(4 << 8)
+#define AT91_MC_BFC_PAGES_256		(5 << 8)
+#define AT91_MC_BFC_PAGES_512		(6 << 8)
+#define AT91_MC_BFC_PAGES_1024		(7 << 8)
+#define AT91_MC_BFC_OEL			GENMASK(13, 12)
+#define AT91_MC_BFC_BAAEN		BIT(16)
+#define AT91_MC_BFC_BFOEH		BIT(17)
+#define AT91_MC_BFC_MUXEN		BIT(18)
+#define AT91_MC_BFC_RDYEN		BIT(19)
+
+#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */
-- 
2.1.0

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

* [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

From: Boris Brezillon <boris.brezillon@free-electrons.com>

The at91rm9200 SoC embeds a Memory Controller block which is used to
configure several aspects of the platform:
- AHB/APB Bus behavior
- SDRAM Controller
- EBI (External Bus Interface) and SMC (Static Memory Controller) config

Those registers might be accessed by different drivers, hence we need to
define it as a syscon device.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
 1 file changed, 144 insertions(+)
 create mode 100644 include/linux/mfd/syscon/atmel-mc.h

diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
new file mode 100644
index 000000000000..cb7d9fe89e44
--- /dev/null
+++ b/include/linux/mfd/syscon/atmel-mc.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2005 Ivan Kokshaysky
+ * Copyright (C) SAN People
+ *
+ * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
+ * registers.
+ * Based on AT91RM9200 datasheet revision E.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
+#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
+
+/* Memory Controller */
+#define AT91_MC_RCR			0x00
+#define AT91_MC_RCB			BIT(0)
+
+#define AT91_MC_ASR			0x04
+#define AT91_MC_UNADD			BIT(0)
+#define AT91_MC_MISADD			BIT(1)
+#define AT91_MC_ABTSZ			GENMASK(9, 8)
+#define AT91_MC_ABTSZ_BYTE		(0 << 8)
+#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
+#define AT91_MC_ABTSZ_WORD		(2 << 8)
+#define AT91_MC_ABTTYP			GENMASK(11, 10)
+#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
+#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
+#define AT91_MC_ABTTYP_FETCH		(2 << 10)
+#define AT91_MC_MST(n)			BIT(16 + (n))
+#define AT91_MC_SVMST(n)		BIT(24 + (n))
+
+#define AT91_MC_AASR			0x08
+
+#define AT91_MC_MPR			0x0c
+#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
+
+/* External Bus Interface (EBI) registers */
+#define AT91_MC_EBI_CSA			0x60
+#define AT91_MC_EBI_CS(n)		BIT(x)
+#define AT91_MC_EBI_NUM_CS		8
+
+#define AT91_MC_EBI_CFGR		0x64
+#define AT91_MC_EBI_DBPUC		BIT(0)
+
+/* Static Memory Controller (SMC) registers */
+#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))
+#define AT91_MC_SMC_NWS			GENMASK(6, 0)
+#define AT91_MC_SMC_NWS_(x)		((x) << 0)
+#define AT91_MC_SMC_WSEN		BIT(7)
+#define AT91_MC_SMC_TDF			GENMASK(11, 8)
+#define AT91_MC_SMC_TDF_(x)		((x) << 8)
+#define AT91_MC_SMC_TDF_MAX		0xf
+#define AT91_MC_SMC_BAT			BIT(12)
+#define AT91_MC_SMC_DBW			GENMASK(14, 13)
+#define AT91_MC_SMC_DBW_16		(1 << 13)
+#define AT91_MC_SMC_DBW_8		(2 << 13)
+#define AT91_MC_SMC_DPR			BIT(15)
+#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
+#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
+#define AT91_MC_SMC_ACSS_MAX		3
+#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
+#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
+#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
+#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
+#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
+
+/* SDRAM Controller registers */
+#define AT91_MC_SDRAMC_MR		0x90
+#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
+#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
+#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
+#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
+#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
+#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
+#define AT91_MC_SDRAMC_DBW_16		BIT(4)
+
+#define AT91_MC_SDRAMC_TR		0x94
+#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
+
+#define AT91_MC_SDRAMC_CR		0x98
+#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
+#define AT91_MC_SDRAMC_NC_8		(0 << 0)
+#define AT91_MC_SDRAMC_NC_9		(1 << 0)
+#define AT91_MC_SDRAMC_NC_10		(2 << 0)
+#define AT91_MC_SDRAMC_NC_11		(3 << 0)
+#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
+#define AT91_MC_SDRAMC_NR_11		(0 << 2)
+#define AT91_MC_SDRAMC_NR_12		(1 << 2)
+#define AT91_MC_SDRAMC_NR_13		(2 << 2)
+#define	AT91_MC_SDRAMC_NB		BIT(4)
+#define AT91_MC_SDRAMC_NB_2		(0 << 4)
+#define AT91_MC_SDRAMC_NB_4		(1 << 4)
+#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
+#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
+#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
+#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
+#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
+#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
+#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
+#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
+
+#define AT91_MC_SDRAMC_SRR		0x9c
+#define AT91_MC_SDRAMC_SRCB		BIT(0)
+
+#define AT91_MC_SDRAMC_LPR		0xa0
+#define AT91_MC_SDRAMC_LPCB		BIT(0)
+
+#define AT91_MC_SDRAMC_IER		0xa4
+#define AT91_MC_SDRAMC_IDR		0xa8
+#define AT91_MC_SDRAMC_IMR		0xac
+#define AT91_MC_SDRAMC_ISR		0xb0
+#define AT91_MC_SDRAMC_RES		BIT(0)
+
+/* Burst Flash Controller register */
+#define AT91_MC_BFC_MR			0xc0
+#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
+#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
+#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
+#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
+#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
+#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
+#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
+#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
+#define AT91_MC_BFC_AVL			GENMASK(7,  4)
+#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
+#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
+#define AT91_MC_BFC_PAGES_16		(1 << 8)
+#define AT91_MC_BFC_PAGES_32		(2 << 8)
+#define AT91_MC_BFC_PAGES_64		(3 << 8)
+#define AT91_MC_BFC_PAGES_128		(4 << 8)
+#define AT91_MC_BFC_PAGES_256		(5 << 8)
+#define AT91_MC_BFC_PAGES_512		(6 << 8)
+#define AT91_MC_BFC_PAGES_1024		(7 << 8)
+#define AT91_MC_BFC_OEL			GENMASK(13, 12)
+#define AT91_MC_BFC_BAAEN		BIT(16)
+#define AT91_MC_BFC_BFOEH		BIT(17)
+#define AT91_MC_BFC_MUXEN		BIT(18)
+#define AT91_MC_BFC_RDYEN		BIT(19)
+
+#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */
-- 
2.1.0

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

* [PATCH 06/10] ARM: at91: declare the at91rm9200 memory controller as a syscon
  2015-03-16 22:44 ` Alexandre Belloni
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

The at91rm9200 memory controller is not simply an SDRAM controller. It also
controls the EBI (External Bus Interface), the SMC (Static Memory Controller)and
the Burst Flash Controller.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 Documentation/devicetree/bindings/arm/atmel-at91.txt | 2 +-
 arch/arm/boot/dts/at91rm9200.dtsi                    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/arm/atmel-at91.txt b/Documentation/devicetree/bindings/arm/atmel-at91.txt
index 2e99b5b57350..424ac8cbfa08 100644
--- a/Documentation/devicetree/bindings/arm/atmel-at91.txt
+++ b/Documentation/devicetree/bindings/arm/atmel-at91.txt
@@ -98,7 +98,7 @@ Example:
 	};
 
 RAMC SDRAM/DDR Controller required properties:
-- compatible: Should be "atmel,at91rm9200-sdramc",
+- compatible: Should be "atmel,at91rm9200-sdramc", "syscon"
 			"atmel,at91sam9260-sdramc",
 			"atmel,at91sam9g45-ddramc",
 			"atmel,sama5d3-ddramc",
diff --git a/arch/arm/boot/dts/at91rm9200.dtsi b/arch/arm/boot/dts/at91rm9200.dtsi
index 4fb333bd1f85..6d0fa9b87f46 100644
--- a/arch/arm/boot/dts/at91rm9200.dtsi
+++ b/arch/arm/boot/dts/at91rm9200.dtsi
@@ -92,7 +92,7 @@
 			};
 
 			ramc0: ramc@ffffff00 {
-				compatible = "atmel,at91rm9200-sdramc";
+				compatible = "atmel,at91rm9200-sdramc", "syscon";
 				reg = <0xffffff00 0x100>;
 			};
 
-- 
2.1.0

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

* [PATCH 06/10] ARM: at91: declare the at91rm9200 memory controller as a syscon
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

The at91rm9200 memory controller is not simply an SDRAM controller. It also
controls the EBI (External Bus Interface), the SMC (Static Memory Controller)and
the Burst Flash Controller.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 Documentation/devicetree/bindings/arm/atmel-at91.txt | 2 +-
 arch/arm/boot/dts/at91rm9200.dtsi                    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/arm/atmel-at91.txt b/Documentation/devicetree/bindings/arm/atmel-at91.txt
index 2e99b5b57350..424ac8cbfa08 100644
--- a/Documentation/devicetree/bindings/arm/atmel-at91.txt
+++ b/Documentation/devicetree/bindings/arm/atmel-at91.txt
@@ -98,7 +98,7 @@ Example:
 	};
 
 RAMC SDRAM/DDR Controller required properties:
-- compatible: Should be "atmel,at91rm9200-sdramc",
+- compatible: Should be "atmel,at91rm9200-sdramc", "syscon"
 			"atmel,at91sam9260-sdramc",
 			"atmel,at91sam9g45-ddramc",
 			"atmel,sama5d3-ddramc",
diff --git a/arch/arm/boot/dts/at91rm9200.dtsi b/arch/arm/boot/dts/at91rm9200.dtsi
index 4fb333bd1f85..6d0fa9b87f46 100644
--- a/arch/arm/boot/dts/at91rm9200.dtsi
+++ b/arch/arm/boot/dts/at91rm9200.dtsi
@@ -92,7 +92,7 @@
 			};
 
 			ramc0: ramc at ffffff00 {
-				compatible = "atmel,at91rm9200-sdramc";
+				compatible = "atmel,at91rm9200-sdramc", "syscon";
 				reg = <0xffffff00 0x100>;
 			};
 
-- 
2.1.0

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

* [PATCH 07/10] pcmcia: at91_cf: Use syscon to configure the MC/smc
  2015-03-16 22:44 ` Alexandre Belloni
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

Use syscon/regmap to configure the smc part of the memory controller. This
allows to avoid using mach/at91rm9200_mc.h and mach/at91_ramc.h and to compile
the driver in a multiplatform configuration.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 drivers/pcmcia/Kconfig   |  1 -
 drivers/pcmcia/at91_cf.c | 25 ++++++++++++++-----------
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig
index 075d5cd4c5ab..56ff3dc1235e 100644
--- a/drivers/pcmcia/Kconfig
+++ b/drivers/pcmcia/Kconfig
@@ -280,7 +280,6 @@ config AT91_CF
 	tristate "AT91 CompactFlash Controller"
 	depends on PCI
 	depends on PCMCIA && ARCH_AT91
-	depends on !ARCH_MULTIPLATFORM
 	help
 	  Say Y here to support the CompactFlash controller on AT91 chips.
 	  Or choose M to compile the driver as a module named "at91_cf".
diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c
index e7775a41ae5d..87147bcd1655 100644
--- a/drivers/pcmcia/at91_cf.c
+++ b/drivers/pcmcia/at91_cf.c
@@ -20,16 +20,15 @@
 #include <linux/platform_data/atmel.h>
 #include <linux/io.h>
 #include <linux/sizes.h>
+#include <linux/mfd/syscon.h>
+#include <linux/mfd/syscon/atmel-mc.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
+#include <linux/regmap.h>
 
 #include <pcmcia/ss.h>
 
-#include <mach/at91rm9200_mc.h>
-#include <mach/at91_ramc.h>
-
-
 /*
  * A0..A10 work in each range; A23 indicates I/O space;  A25 is CFRNW;
  * some other bit in {A24,A22..A11} is nREG to flag memory access
@@ -40,6 +39,8 @@
 #define	CF_IO_PHYS	(1 << 23)
 #define	CF_MEM_PHYS	(0x017ff800)
 
+struct regmap *mc;
+
 /*--------------------------------------------------------------------------*/
 
 struct at91_cf_socket {
@@ -155,10 +156,7 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
 
 	/*
 	 * Use 16 bit accesses unless/until we need 8-bit i/o space.
-	 */
-	csr = at91_ramc_read(0, AT91_SMC_CSR(cf->board->chipselect)) & ~AT91_SMC_DBW;
-
-	/*
+	 *
 	 * NOTE: this CF controller ignores IOIS16, so we can't really do
 	 * MAP_AUTOSZ.  The 16bit mode allows single byte access on either
 	 * D0-D7 (even addr) or D8-D15 (odd), so it's close enough for many
@@ -169,13 +167,14 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
 	 * CF 3.0 spec table 35 also giving the D8-D15 option.
 	 */
 	if (!(io->flags & (MAP_16BIT | MAP_AUTOSZ))) {
-		csr |= AT91_SMC_DBW_8;
+		csr = AT91_MC_SMC_DBW_8;
 		dev_dbg(&cf->pdev->dev, "8bit i/o bus\n");
 	} else {
-		csr |= AT91_SMC_DBW_16;
+		csr = AT91_MC_SMC_DBW_16;
 		dev_dbg(&cf->pdev->dev, "16bit i/o bus\n");
 	}
-	at91_ramc_write(0, AT91_SMC_CSR(cf->board->chipselect), csr);
+	regmap_update_bits(mc, AT91_MC_SMC_CSR(cf->board->chipselect),
+			   AT91_MC_SMC_DBW, csr);
 
 	io->start = cf->socket.io_offset;
 	io->stop = io->start + SZ_2K - 1;
@@ -236,6 +235,10 @@ static int at91_cf_dt_init(struct platform_device *pdev)
 
 	pdev->dev.platform_data = board;
 
+	mc = syscon_regmap_lookup_by_compatible("atmel,at91rm9200-sdramc");
+	if (IS_ERR(mc))
+		return PTR_ERR(mc);
+
 	return 0;
 }
 #else
-- 
2.1.0

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

* [PATCH 07/10] pcmcia: at91_cf: Use syscon to configure the MC/smc
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

Use syscon/regmap to configure the smc part of the memory controller. This
allows to avoid using mach/at91rm9200_mc.h and mach/at91_ramc.h and to compile
the driver in a multiplatform configuration.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 drivers/pcmcia/Kconfig   |  1 -
 drivers/pcmcia/at91_cf.c | 25 ++++++++++++++-----------
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig
index 075d5cd4c5ab..56ff3dc1235e 100644
--- a/drivers/pcmcia/Kconfig
+++ b/drivers/pcmcia/Kconfig
@@ -280,7 +280,6 @@ config AT91_CF
 	tristate "AT91 CompactFlash Controller"
 	depends on PCI
 	depends on PCMCIA && ARCH_AT91
-	depends on !ARCH_MULTIPLATFORM
 	help
 	  Say Y here to support the CompactFlash controller on AT91 chips.
 	  Or choose M to compile the driver as a module named "at91_cf".
diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c
index e7775a41ae5d..87147bcd1655 100644
--- a/drivers/pcmcia/at91_cf.c
+++ b/drivers/pcmcia/at91_cf.c
@@ -20,16 +20,15 @@
 #include <linux/platform_data/atmel.h>
 #include <linux/io.h>
 #include <linux/sizes.h>
+#include <linux/mfd/syscon.h>
+#include <linux/mfd/syscon/atmel-mc.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
+#include <linux/regmap.h>
 
 #include <pcmcia/ss.h>
 
-#include <mach/at91rm9200_mc.h>
-#include <mach/at91_ramc.h>
-
-
 /*
  * A0..A10 work in each range; A23 indicates I/O space;  A25 is CFRNW;
  * some other bit in {A24,A22..A11} is nREG to flag memory access
@@ -40,6 +39,8 @@
 #define	CF_IO_PHYS	(1 << 23)
 #define	CF_MEM_PHYS	(0x017ff800)
 
+struct regmap *mc;
+
 /*--------------------------------------------------------------------------*/
 
 struct at91_cf_socket {
@@ -155,10 +156,7 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
 
 	/*
 	 * Use 16 bit accesses unless/until we need 8-bit i/o space.
-	 */
-	csr = at91_ramc_read(0, AT91_SMC_CSR(cf->board->chipselect)) & ~AT91_SMC_DBW;
-
-	/*
+	 *
 	 * NOTE: this CF controller ignores IOIS16, so we can't really do
 	 * MAP_AUTOSZ.  The 16bit mode allows single byte access on either
 	 * D0-D7 (even addr) or D8-D15 (odd), so it's close enough for many
@@ -169,13 +167,14 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
 	 * CF 3.0 spec table 35 also giving the D8-D15 option.
 	 */
 	if (!(io->flags & (MAP_16BIT | MAP_AUTOSZ))) {
-		csr |= AT91_SMC_DBW_8;
+		csr = AT91_MC_SMC_DBW_8;
 		dev_dbg(&cf->pdev->dev, "8bit i/o bus\n");
 	} else {
-		csr |= AT91_SMC_DBW_16;
+		csr = AT91_MC_SMC_DBW_16;
 		dev_dbg(&cf->pdev->dev, "16bit i/o bus\n");
 	}
-	at91_ramc_write(0, AT91_SMC_CSR(cf->board->chipselect), csr);
+	regmap_update_bits(mc, AT91_MC_SMC_CSR(cf->board->chipselect),
+			   AT91_MC_SMC_DBW, csr);
 
 	io->start = cf->socket.io_offset;
 	io->stop = io->start + SZ_2K - 1;
@@ -236,6 +235,10 @@ static int at91_cf_dt_init(struct platform_device *pdev)
 
 	pdev->dev.platform_data = board;
 
+	mc = syscon_regmap_lookup_by_compatible("atmel,at91rm9200-sdramc");
+	if (IS_ERR(mc))
+		return PTR_ERR(mc);
+
 	return 0;
 }
 #else
-- 
2.1.0

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

* [PATCH 08/10] ARM: at91/pm: use the atmel-mc syscon defines
  2015-03-16 22:44 ` Alexandre Belloni
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

Use the defines from atmel-mc.h instead of at91rm9200_sdramc.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/include/mach/at91_ramc.h | 2 +-
 arch/arm/mach-at91/pm.c                     | 8 ++++----
 arch/arm/mach-at91/pm_suspend.S             | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
index 493bc486e858..39547496d4b0 100644
--- a/arch/arm/mach-at91/include/mach/at91_ramc.h
+++ b/arch/arm/mach-at91/include/mach/at91_ramc.h
@@ -21,7 +21,7 @@ extern void __iomem *at91_ramc_base[];
 .extern at91_ramc_base
 #endif
 
-#include <soc/at91/at91rm9200_sdramc.h>
+#include <linux/mfd/syscon/atmel-mc.h>
 #include <soc/at91/at91sam9_ddrsdr.h>
 #include <soc/at91/at91sam9_sdramc.h>
 
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index 5062699cbb12..1e184767c3be 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -233,7 +233,7 @@ static void at91_pm_set_standby(void (*at91_standby)(void))
  */
 static void at91rm9200_standby(void)
 {
-	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
+	u32 lpr = at91_ramc_read(0, AT91_MC_SDRAMC_LPR);
 
 	asm volatile(
 		"b    1f\n\t"
@@ -244,8 +244,8 @@ static void at91rm9200_standby(void)
 		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
 		"    str    %5, [%1, %2]"
 		:
-		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
-		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
+		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91_MC_SDRAMC_LPR),
+		  "r" (1), "r" (AT91_MC_SDRAMC_SRR),
 		  "r" (lpr));
 }
 
@@ -414,7 +414,7 @@ void __init at91rm9200_pm_init(void)
 	/*
 	 * AT91RM9200 SDRAM low-power mode cannot be used with self-refresh.
 	 */
-	at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0);
+	at91_ramc_write(0, AT91_MC_SDRAMC_LPR, 0);
 
 	at91_pm_data.uhp_udp_mask = AT91RM9200_PMC_UHP | AT91RM9200_PMC_UDP;
 	at91_pm_data.memctrl = AT91_MEMCTRL_MC;
diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
index bd22b2c8a051..fda4e0164ed7 100644
--- a/arch/arm/mach-at91/pm_suspend.S
+++ b/arch/arm/mach-at91/pm_suspend.S
@@ -216,7 +216,7 @@ ENTRY(at91_sramc_self_refresh)
 
 	/* Active SDRAM self-refresh mode */
 	mov	r3, #1
-	str	r3, [r2, #AT91RM9200_SDRAMC_SRR]
+	str	r3, [r2, #AT91_MC_SDRAMC_SRR]
 	b	exit_sramc_sf
 
 ddrc_sf:
-- 
2.1.0


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

* [PATCH 08/10] ARM: at91/pm: use the atmel-mc syscon defines
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

Use the defines from atmel-mc.h instead of at91rm9200_sdramc.h

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/include/mach/at91_ramc.h | 2 +-
 arch/arm/mach-at91/pm.c                     | 8 ++++----
 arch/arm/mach-at91/pm_suspend.S             | 2 +-
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
index 493bc486e858..39547496d4b0 100644
--- a/arch/arm/mach-at91/include/mach/at91_ramc.h
+++ b/arch/arm/mach-at91/include/mach/at91_ramc.h
@@ -21,7 +21,7 @@ extern void __iomem *at91_ramc_base[];
 .extern at91_ramc_base
 #endif
 
-#include <soc/at91/at91rm9200_sdramc.h>
+#include <linux/mfd/syscon/atmel-mc.h>
 #include <soc/at91/at91sam9_ddrsdr.h>
 #include <soc/at91/at91sam9_sdramc.h>
 
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index 5062699cbb12..1e184767c3be 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -233,7 +233,7 @@ static void at91_pm_set_standby(void (*at91_standby)(void))
  */
 static void at91rm9200_standby(void)
 {
-	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
+	u32 lpr = at91_ramc_read(0, AT91_MC_SDRAMC_LPR);
 
 	asm volatile(
 		"b    1f\n\t"
@@ -244,8 +244,8 @@ static void at91rm9200_standby(void)
 		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
 		"    str    %5, [%1, %2]"
 		:
-		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
-		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
+		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91_MC_SDRAMC_LPR),
+		  "r" (1), "r" (AT91_MC_SDRAMC_SRR),
 		  "r" (lpr));
 }
 
@@ -414,7 +414,7 @@ void __init at91rm9200_pm_init(void)
 	/*
 	 * AT91RM9200 SDRAM low-power mode cannot be used with self-refresh.
 	 */
-	at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0);
+	at91_ramc_write(0, AT91_MC_SDRAMC_LPR, 0);
 
 	at91_pm_data.uhp_udp_mask = AT91RM9200_PMC_UHP | AT91RM9200_PMC_UDP;
 	at91_pm_data.memctrl = AT91_MEMCTRL_MC;
diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
index bd22b2c8a051..fda4e0164ed7 100644
--- a/arch/arm/mach-at91/pm_suspend.S
+++ b/arch/arm/mach-at91/pm_suspend.S
@@ -216,7 +216,7 @@ ENTRY(at91_sramc_self_refresh)
 
 	/* Active SDRAM self-refresh mode */
 	mov	r3, #1
-	str	r3, [r2, #AT91RM9200_SDRAMC_SRR]
+	str	r3, [r2, #AT91_MC_SDRAMC_SRR]
 	b	exit_sramc_sf
 
 ddrc_sf:
-- 
2.1.0

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

* [PATCH 09/10] ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
  2015-03-16 22:44 ` Alexandre Belloni
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

mach/at91_ramc.h and mach/at91rm9200_mc.h are necessary anymore, remove them.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/Makefile                     |   3 -
 arch/arm/mach-at91/include/mach/at91_ramc.h     |  28 ------
 arch/arm/mach-at91/include/mach/at91rm9200_mc.h | 116 ------------------------
 arch/arm/mach-at91/pm.h                         |  14 ++-
 arch/arm/mach-at91/pm_suspend.S                 |   1 -
 5 files changed, 13 insertions(+), 149 deletions(-)
 delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
 delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h

diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
index 3586d977e99d..fa4393ab3e7b 100644
--- a/arch/arm/mach-at91/Makefile
+++ b/arch/arm/mach-at91/Makefile
@@ -1,9 +1,6 @@
 #
 # Makefile for the linux kernel.
 #
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
-asflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
-
 obj-y		:= soc.o
 
 # CPU-specific support
diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
deleted file mode 100644
index 39547496d4b0..000000000000
--- a/arch/arm/mach-at91/include/mach/at91_ramc.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Header file for the Atmel RAM Controller
- *
- * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * Under GPLv2 only
- */
-
-#ifndef __AT91_RAMC_H__
-#define __AT91_RAMC_H__
-
-#ifndef __ASSEMBLY__
-extern void __iomem *at91_ramc_base[];
-
-#define at91_ramc_read(id, field) \
-	__raw_readl(at91_ramc_base[id] + field)
-
-#define at91_ramc_write(id, field, value) \
-	__raw_writel(value, at91_ramc_base[id] + field)
-#else
-.extern at91_ramc_base
-#endif
-
-#include <linux/mfd/syscon/atmel-mc.h>
-#include <soc/at91/at91sam9_ddrsdr.h>
-#include <soc/at91/at91sam9_sdramc.h>
-
-#endif /* __AT91_RAMC_H__ */
diff --git a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h b/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
deleted file mode 100644
index aeaadfb452af..000000000000
--- a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91rm9200_mc.h
- *
- * Copyright (C) 2005 Ivan Kokshaysky
- * Copyright (C) SAN People
- *
- * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals registers.
- * Based on AT91RM9200 datasheet revision E.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91RM9200_MC_H
-#define AT91RM9200_MC_H
-
-/* Memory Controller */
-#define AT91_MC_RCR		0x00			/* MC Remap Control Register */
-#define		AT91_MC_RCB		(1 <<  0)		/* Remap Command Bit */
-
-#define AT91_MC_ASR		0x04			/* MC Abort Status Register */
-#define		AT91_MC_UNADD		(1 <<  0)		/* Undefined Address Abort Status */
-#define		AT91_MC_MISADD		(1 <<  1)		/* Misaligned Address Abort Status */
-#define		AT91_MC_ABTSZ		(3 <<  8)		/* Abort Size Status */
-#define			AT91_MC_ABTSZ_BYTE		(0 << 8)
-#define			AT91_MC_ABTSZ_HALFWORD		(1 << 8)
-#define			AT91_MC_ABTSZ_WORD		(2 << 8)
-#define		AT91_MC_ABTTYP		(3 << 10)		/* Abort Type Status */
-#define			AT91_MC_ABTTYP_DATAREAD		(0 << 10)
-#define			AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
-#define			AT91_MC_ABTTYP_FETCH		(2 << 10)
-#define		AT91_MC_MST0		(1 << 16)		/* ARM920T Abort Source */
-#define		AT91_MC_MST1		(1 << 17)		/* PDC Abort Source */
-#define		AT91_MC_MST2		(1 << 18)		/* UHP Abort Source */
-#define		AT91_MC_MST3		(1 << 19)		/* EMAC Abort Source */
-#define		AT91_MC_SVMST0		(1 << 24)		/* Saved ARM920T Abort Source */
-#define		AT91_MC_SVMST1		(1 << 25)		/* Saved PDC Abort Source */
-#define		AT91_MC_SVMST2		(1 << 26)		/* Saved UHP Abort Source */
-#define		AT91_MC_SVMST3		(1 << 27)		/* Saved EMAC Abort Source */
-
-#define AT91_MC_AASR		0x08			/* MC Abort Address Status Register */
-
-#define AT91_MC_MPR		0x0c			/* MC Master Priority Register */
-#define		AT91_MPR_MSTP0		(7 <<  0)		/* ARM920T Priority */
-#define		AT91_MPR_MSTP1		(7 <<  4)		/* PDC Priority */
-#define		AT91_MPR_MSTP2		(7 <<  8)		/* UHP Priority */
-#define		AT91_MPR_MSTP3		(7 << 12)		/* EMAC Priority */
-
-/* External Bus Interface (EBI) registers */
-#define AT91_EBI_CSA		0x60			/* Chip Select Assignment Register */
-#define		AT91_EBI_CS0A		(1 << 0)		/* Chip Select 0 Assignment */
-#define			AT91_EBI_CS0A_SMC		(0 << 0)
-#define			AT91_EBI_CS0A_BFC		(1 << 0)
-#define		AT91_EBI_CS1A		(1 << 1)		/* Chip Select 1 Assignment */
-#define			AT91_EBI_CS1A_SMC		(0 << 1)
-#define			AT91_EBI_CS1A_SDRAMC		(1 << 1)
-#define		AT91_EBI_CS3A		(1 << 3)		/* Chip Select 2 Assignment */
-#define			AT91_EBI_CS3A_SMC		(0 << 3)
-#define			AT91_EBI_CS3A_SMC_SMARTMEDIA	(1 << 3)
-#define		AT91_EBI_CS4A		(1 << 4)		/* Chip Select 3 Assignment */
-#define			AT91_EBI_CS4A_SMC		(0 << 4)
-#define			AT91_EBI_CS4A_SMC_COMPACTFLASH	(1 << 4)
-#define AT91_EBI_CFGR		(AT91_MC + 0x64)	/* Configuration Register */
-#define		AT91_EBI_DBPUC		(1 << 0)		/* Data Bus Pull-Up Configuration */
-
-/* Static Memory Controller (SMC) registers */
-#define	AT91_SMC_CSR(n)		(0x70 + ((n) * 4))	/* SMC Chip Select Register */
-#define		AT91_SMC_NWS		(0x7f <<  0)		/* Number of Wait States */
-#define			AT91_SMC_NWS_(x)	((x) << 0)
-#define		AT91_SMC_WSEN		(1    <<  7)		/* Wait State Enable */
-#define		AT91_SMC_TDF		(0xf  <<  8)		/* Data Float Time */
-#define			AT91_SMC_TDF_(x)	((x) << 8)
-#define		AT91_SMC_BAT		(1    << 12)		/* Byte Access Type */
-#define		AT91_SMC_DBW		(3    << 13)		/* Data Bus Width */
-#define			AT91_SMC_DBW_16		(1 << 13)
-#define			AT91_SMC_DBW_8		(2 << 13)
-#define		AT91_SMC_DPR		(1 << 15)		/* Data Read Protocol */
-#define		AT91_SMC_ACSS		(3 << 16)		/* Address to Chip Select Setup */
-#define			AT91_SMC_ACSS_STD	(0 << 16)
-#define			AT91_SMC_ACSS_1		(1 << 16)
-#define			AT91_SMC_ACSS_2		(2 << 16)
-#define			AT91_SMC_ACSS_3		(3 << 16)
-#define		AT91_SMC_RWSETUP	(7 << 24)		/* Read & Write Signal Time Setup */
-#define			AT91_SMC_RWSETUP_(x)	((x) << 24)
-#define		AT91_SMC_RWHOLD		(7 << 28)		/* Read & Write Signal Hold Time */
-#define			AT91_SMC_RWHOLD_(x)	((x) << 28)
-
-/* Burst Flash Controller register */
-#define AT91_BFC_MR		0xc0			/* Mode Register */
-#define		AT91_BFC_BFCOM		(3   <<  0)		/* Burst Flash Controller Operating Mode */
-#define			AT91_BFC_BFCOM_DISABLED	(0 << 0)
-#define			AT91_BFC_BFCOM_ASYNC	(1 << 0)
-#define			AT91_BFC_BFCOM_BURST	(2 << 0)
-#define		AT91_BFC_BFCC		(3   <<  2)		/* Burst Flash Controller Clock */
-#define			AT91_BFC_BFCC_MCK	(1 << 2)
-#define			AT91_BFC_BFCC_DIV2	(2 << 2)
-#define			AT91_BFC_BFCC_DIV4	(3 << 2)
-#define		AT91_BFC_AVL		(0xf <<  4)		/* Address Valid Latency */
-#define		AT91_BFC_PAGES		(7   <<  8)		/* Page Size */
-#define			AT91_BFC_PAGES_NO_PAGE	(0 << 8)
-#define			AT91_BFC_PAGES_16	(1 << 8)
-#define			AT91_BFC_PAGES_32	(2 << 8)
-#define			AT91_BFC_PAGES_64	(3 << 8)
-#define			AT91_BFC_PAGES_128	(4 << 8)
-#define			AT91_BFC_PAGES_256	(5 << 8)
-#define			AT91_BFC_PAGES_512	(6 << 8)
-#define			AT91_BFC_PAGES_1024	(7 << 8)
-#define		AT91_BFC_OEL		(3   << 12)		/* Output Enable Latency */
-#define		AT91_BFC_BAAEN		(1   << 16)		/* Burst Address Advance Enable */
-#define		AT91_BFC_BFOEH		(1   << 17)		/* Burst Flash Output Enable Handling */
-#define		AT91_BFC_MUXEN		(1   << 18)		/* Multiplexed Bus Enable */
-#define		AT91_BFC_RDYEN		(1   << 19)		/* Ready Enable Mode */
-
-#endif
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
index ecd875a91d52..3fcf8810f14e 100644
--- a/arch/arm/mach-at91/pm.h
+++ b/arch/arm/mach-at91/pm.h
@@ -13,7 +13,19 @@
 
 #include <asm/proc-fns.h>
 
-#include <mach/at91_ramc.h>
+#include <linux/mfd/syscon/atmel-mc.h>
+#include <soc/at91/at91sam9_ddrsdr.h>
+#include <soc/at91/at91sam9_sdramc.h>
+
+#ifndef __ASSEMBLY__
+extern void __iomem *at91_ramc_base[];
+
+#define at91_ramc_read(id, field) \
+	__raw_readl(at91_ramc_base[id] + field)
+
+#define at91_ramc_write(id, field, value) \
+	__raw_writel(value, at91_ramc_base[id] + field)
+#endif
 
 #define AT91_MEMCTRL_MC		0
 #define AT91_MEMCTRL_SDRAMC	1
diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
index fda4e0164ed7..0d95f488b47a 100644
--- a/arch/arm/mach-at91/pm_suspend.S
+++ b/arch/arm/mach-at91/pm_suspend.S
@@ -13,7 +13,6 @@
  */
 #include <linux/linkage.h>
 #include <linux/clk/at91_pmc.h>
-#include <mach/at91_ramc.h>
 #include "pm.h"
 
 #define	SRAMC_SELF_FRESH_ACTIVE		0x01
-- 
2.1.0

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

* [PATCH 09/10] ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

mach/at91_ramc.h and mach/at91rm9200_mc.h are necessary anymore, remove them.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 arch/arm/mach-at91/Makefile                     |   3 -
 arch/arm/mach-at91/include/mach/at91_ramc.h     |  28 ------
 arch/arm/mach-at91/include/mach/at91rm9200_mc.h | 116 ------------------------
 arch/arm/mach-at91/pm.h                         |  14 ++-
 arch/arm/mach-at91/pm_suspend.S                 |   1 -
 5 files changed, 13 insertions(+), 149 deletions(-)
 delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
 delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h

diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
index 3586d977e99d..fa4393ab3e7b 100644
--- a/arch/arm/mach-at91/Makefile
+++ b/arch/arm/mach-at91/Makefile
@@ -1,9 +1,6 @@
 #
 # Makefile for the linux kernel.
 #
-ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
-asflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
-
 obj-y		:= soc.o
 
 # CPU-specific support
diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
deleted file mode 100644
index 39547496d4b0..000000000000
--- a/arch/arm/mach-at91/include/mach/at91_ramc.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Header file for the Atmel RAM Controller
- *
- * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * Under GPLv2 only
- */
-
-#ifndef __AT91_RAMC_H__
-#define __AT91_RAMC_H__
-
-#ifndef __ASSEMBLY__
-extern void __iomem *at91_ramc_base[];
-
-#define at91_ramc_read(id, field) \
-	__raw_readl(at91_ramc_base[id] + field)
-
-#define at91_ramc_write(id, field, value) \
-	__raw_writel(value, at91_ramc_base[id] + field)
-#else
-.extern at91_ramc_base
-#endif
-
-#include <linux/mfd/syscon/atmel-mc.h>
-#include <soc/at91/at91sam9_ddrsdr.h>
-#include <soc/at91/at91sam9_sdramc.h>
-
-#endif /* __AT91_RAMC_H__ */
diff --git a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h b/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
deleted file mode 100644
index aeaadfb452af..000000000000
--- a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91rm9200_mc.h
- *
- * Copyright (C) 2005 Ivan Kokshaysky
- * Copyright (C) SAN People
- *
- * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals registers.
- * Based on AT91RM9200 datasheet revision E.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91RM9200_MC_H
-#define AT91RM9200_MC_H
-
-/* Memory Controller */
-#define AT91_MC_RCR		0x00			/* MC Remap Control Register */
-#define		AT91_MC_RCB		(1 <<  0)		/* Remap Command Bit */
-
-#define AT91_MC_ASR		0x04			/* MC Abort Status Register */
-#define		AT91_MC_UNADD		(1 <<  0)		/* Undefined Address Abort Status */
-#define		AT91_MC_MISADD		(1 <<  1)		/* Misaligned Address Abort Status */
-#define		AT91_MC_ABTSZ		(3 <<  8)		/* Abort Size Status */
-#define			AT91_MC_ABTSZ_BYTE		(0 << 8)
-#define			AT91_MC_ABTSZ_HALFWORD		(1 << 8)
-#define			AT91_MC_ABTSZ_WORD		(2 << 8)
-#define		AT91_MC_ABTTYP		(3 << 10)		/* Abort Type Status */
-#define			AT91_MC_ABTTYP_DATAREAD		(0 << 10)
-#define			AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
-#define			AT91_MC_ABTTYP_FETCH		(2 << 10)
-#define		AT91_MC_MST0		(1 << 16)		/* ARM920T Abort Source */
-#define		AT91_MC_MST1		(1 << 17)		/* PDC Abort Source */
-#define		AT91_MC_MST2		(1 << 18)		/* UHP Abort Source */
-#define		AT91_MC_MST3		(1 << 19)		/* EMAC Abort Source */
-#define		AT91_MC_SVMST0		(1 << 24)		/* Saved ARM920T Abort Source */
-#define		AT91_MC_SVMST1		(1 << 25)		/* Saved PDC Abort Source */
-#define		AT91_MC_SVMST2		(1 << 26)		/* Saved UHP Abort Source */
-#define		AT91_MC_SVMST3		(1 << 27)		/* Saved EMAC Abort Source */
-
-#define AT91_MC_AASR		0x08			/* MC Abort Address Status Register */
-
-#define AT91_MC_MPR		0x0c			/* MC Master Priority Register */
-#define		AT91_MPR_MSTP0		(7 <<  0)		/* ARM920T Priority */
-#define		AT91_MPR_MSTP1		(7 <<  4)		/* PDC Priority */
-#define		AT91_MPR_MSTP2		(7 <<  8)		/* UHP Priority */
-#define		AT91_MPR_MSTP3		(7 << 12)		/* EMAC Priority */
-
-/* External Bus Interface (EBI) registers */
-#define AT91_EBI_CSA		0x60			/* Chip Select Assignment Register */
-#define		AT91_EBI_CS0A		(1 << 0)		/* Chip Select 0 Assignment */
-#define			AT91_EBI_CS0A_SMC		(0 << 0)
-#define			AT91_EBI_CS0A_BFC		(1 << 0)
-#define		AT91_EBI_CS1A		(1 << 1)		/* Chip Select 1 Assignment */
-#define			AT91_EBI_CS1A_SMC		(0 << 1)
-#define			AT91_EBI_CS1A_SDRAMC		(1 << 1)
-#define		AT91_EBI_CS3A		(1 << 3)		/* Chip Select 2 Assignment */
-#define			AT91_EBI_CS3A_SMC		(0 << 3)
-#define			AT91_EBI_CS3A_SMC_SMARTMEDIA	(1 << 3)
-#define		AT91_EBI_CS4A		(1 << 4)		/* Chip Select 3 Assignment */
-#define			AT91_EBI_CS4A_SMC		(0 << 4)
-#define			AT91_EBI_CS4A_SMC_COMPACTFLASH	(1 << 4)
-#define AT91_EBI_CFGR		(AT91_MC + 0x64)	/* Configuration Register */
-#define		AT91_EBI_DBPUC		(1 << 0)		/* Data Bus Pull-Up Configuration */
-
-/* Static Memory Controller (SMC) registers */
-#define	AT91_SMC_CSR(n)		(0x70 + ((n) * 4))	/* SMC Chip Select Register */
-#define		AT91_SMC_NWS		(0x7f <<  0)		/* Number of Wait States */
-#define			AT91_SMC_NWS_(x)	((x) << 0)
-#define		AT91_SMC_WSEN		(1    <<  7)		/* Wait State Enable */
-#define		AT91_SMC_TDF		(0xf  <<  8)		/* Data Float Time */
-#define			AT91_SMC_TDF_(x)	((x) << 8)
-#define		AT91_SMC_BAT		(1    << 12)		/* Byte Access Type */
-#define		AT91_SMC_DBW		(3    << 13)		/* Data Bus Width */
-#define			AT91_SMC_DBW_16		(1 << 13)
-#define			AT91_SMC_DBW_8		(2 << 13)
-#define		AT91_SMC_DPR		(1 << 15)		/* Data Read Protocol */
-#define		AT91_SMC_ACSS		(3 << 16)		/* Address to Chip Select Setup */
-#define			AT91_SMC_ACSS_STD	(0 << 16)
-#define			AT91_SMC_ACSS_1		(1 << 16)
-#define			AT91_SMC_ACSS_2		(2 << 16)
-#define			AT91_SMC_ACSS_3		(3 << 16)
-#define		AT91_SMC_RWSETUP	(7 << 24)		/* Read & Write Signal Time Setup */
-#define			AT91_SMC_RWSETUP_(x)	((x) << 24)
-#define		AT91_SMC_RWHOLD		(7 << 28)		/* Read & Write Signal Hold Time */
-#define			AT91_SMC_RWHOLD_(x)	((x) << 28)
-
-/* Burst Flash Controller register */
-#define AT91_BFC_MR		0xc0			/* Mode Register */
-#define		AT91_BFC_BFCOM		(3   <<  0)		/* Burst Flash Controller Operating Mode */
-#define			AT91_BFC_BFCOM_DISABLED	(0 << 0)
-#define			AT91_BFC_BFCOM_ASYNC	(1 << 0)
-#define			AT91_BFC_BFCOM_BURST	(2 << 0)
-#define		AT91_BFC_BFCC		(3   <<  2)		/* Burst Flash Controller Clock */
-#define			AT91_BFC_BFCC_MCK	(1 << 2)
-#define			AT91_BFC_BFCC_DIV2	(2 << 2)
-#define			AT91_BFC_BFCC_DIV4	(3 << 2)
-#define		AT91_BFC_AVL		(0xf <<  4)		/* Address Valid Latency */
-#define		AT91_BFC_PAGES		(7   <<  8)		/* Page Size */
-#define			AT91_BFC_PAGES_NO_PAGE	(0 << 8)
-#define			AT91_BFC_PAGES_16	(1 << 8)
-#define			AT91_BFC_PAGES_32	(2 << 8)
-#define			AT91_BFC_PAGES_64	(3 << 8)
-#define			AT91_BFC_PAGES_128	(4 << 8)
-#define			AT91_BFC_PAGES_256	(5 << 8)
-#define			AT91_BFC_PAGES_512	(6 << 8)
-#define			AT91_BFC_PAGES_1024	(7 << 8)
-#define		AT91_BFC_OEL		(3   << 12)		/* Output Enable Latency */
-#define		AT91_BFC_BAAEN		(1   << 16)		/* Burst Address Advance Enable */
-#define		AT91_BFC_BFOEH		(1   << 17)		/* Burst Flash Output Enable Handling */
-#define		AT91_BFC_MUXEN		(1   << 18)		/* Multiplexed Bus Enable */
-#define		AT91_BFC_RDYEN		(1   << 19)		/* Ready Enable Mode */
-
-#endif
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
index ecd875a91d52..3fcf8810f14e 100644
--- a/arch/arm/mach-at91/pm.h
+++ b/arch/arm/mach-at91/pm.h
@@ -13,7 +13,19 @@
 
 #include <asm/proc-fns.h>
 
-#include <mach/at91_ramc.h>
+#include <linux/mfd/syscon/atmel-mc.h>
+#include <soc/at91/at91sam9_ddrsdr.h>
+#include <soc/at91/at91sam9_sdramc.h>
+
+#ifndef __ASSEMBLY__
+extern void __iomem *at91_ramc_base[];
+
+#define at91_ramc_read(id, field) \
+	__raw_readl(at91_ramc_base[id] + field)
+
+#define at91_ramc_write(id, field, value) \
+	__raw_writel(value, at91_ramc_base[id] + field)
+#endif
 
 #define AT91_MEMCTRL_MC		0
 #define AT91_MEMCTRL_SDRAMC	1
diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
index fda4e0164ed7..0d95f488b47a 100644
--- a/arch/arm/mach-at91/pm_suspend.S
+++ b/arch/arm/mach-at91/pm_suspend.S
@@ -13,7 +13,6 @@
  */
 #include <linux/linkage.h>
 #include <linux/clk/at91_pmc.h>
-#include <mach/at91_ramc.h>
 #include "pm.h"
 
 #define	SRAMC_SELF_FRESH_ACTIVE		0x01
-- 
2.1.0

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

* [PATCH 10/10] ARM: at91: remove at91rm9200_sdramc.h
  2015-03-16 22:44 ` Alexandre Belloni
@ 2015-03-16 22:44   ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel, Alexandre Belloni

include/soc/at91/at91rm9200_sdramc.h is replaced by
include/linux/mfd/syscon/atmel-smc.h as this is actually a syscon device.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 include/soc/at91/at91rm9200_sdramc.h | 63 ------------------------------------
 1 file changed, 63 deletions(-)
 delete mode 100644 include/soc/at91/at91rm9200_sdramc.h

diff --git a/include/soc/at91/at91rm9200_sdramc.h b/include/soc/at91/at91rm9200_sdramc.h
deleted file mode 100644
index aa047f458f1b..000000000000
--- a/include/soc/at91/at91rm9200_sdramc.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h
- *
- * Copyright (C) 2005 Ivan Kokshaysky
- * Copyright (C) SAN People
- *
- * Memory Controllers (SDRAMC only) - System peripherals registers.
- * Based on AT91RM9200 datasheet revision E.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91RM9200_SDRAMC_H
-#define AT91RM9200_SDRAMC_H
-
-/* SDRAM Controller registers */
-#define AT91RM9200_SDRAMC_MR		0x90			/* Mode Register */
-#define		AT91RM9200_SDRAMC_MODE	(0xf << 0)		/* Command Mode */
-#define			AT91RM9200_SDRAMC_MODE_NORMAL		(0 << 0)
-#define			AT91RM9200_SDRAMC_MODE_NOP		(1 << 0)
-#define			AT91RM9200_SDRAMC_MODE_PRECHARGE	(2 << 0)
-#define			AT91RM9200_SDRAMC_MODE_LMR		(3 << 0)
-#define			AT91RM9200_SDRAMC_MODE_REFRESH	(4 << 0)
-#define		AT91RM9200_SDRAMC_DBW		(1   << 4)		/* Data Bus Width */
-#define			AT91RM9200_SDRAMC_DBW_32	(0 << 4)
-#define			AT91RM9200_SDRAMC_DBW_16	(1 << 4)
-
-#define AT91RM9200_SDRAMC_TR		0x94			/* Refresh Timer Register */
-#define		AT91RM9200_SDRAMC_COUNT	(0xfff << 0)		/* Refresh Timer Count */
-
-#define AT91RM9200_SDRAMC_CR		0x98			/* Configuration Register */
-#define		AT91RM9200_SDRAMC_NC		(3   <<  0)		/* Number of Column Bits */
-#define			AT91RM9200_SDRAMC_NC_8	(0 << 0)
-#define			AT91RM9200_SDRAMC_NC_9	(1 << 0)
-#define			AT91RM9200_SDRAMC_NC_10	(2 << 0)
-#define			AT91RM9200_SDRAMC_NC_11	(3 << 0)
-#define		AT91RM9200_SDRAMC_NR		(3   <<  2)		/* Number of Row Bits */
-#define			AT91RM9200_SDRAMC_NR_11	(0 << 2)
-#define			AT91RM9200_SDRAMC_NR_12	(1 << 2)
-#define			AT91RM9200_SDRAMC_NR_13	(2 << 2)
-#define		AT91RM9200_SDRAMC_NB		(1   <<  4)		/* Number of Banks */
-#define			AT91RM9200_SDRAMC_NB_2	(0 << 4)
-#define			AT91RM9200_SDRAMC_NB_4	(1 << 4)
-#define		AT91RM9200_SDRAMC_CAS		(3   <<  5)		/* CAS Latency */
-#define			AT91RM9200_SDRAMC_CAS_2	(2 << 5)
-#define		AT91RM9200_SDRAMC_TWR		(0xf <<  7)		/* Write Recovery Delay */
-#define		AT91RM9200_SDRAMC_TRC		(0xf << 11)		/* Row Cycle Delay */
-#define		AT91RM9200_SDRAMC_TRP		(0xf << 15)		/* Row Precharge Delay */
-#define		AT91RM9200_SDRAMC_TRCD	(0xf << 19)		/* Row to Column Delay */
-#define		AT91RM9200_SDRAMC_TRAS	(0xf << 23)		/* Active to Precharge Delay */
-#define		AT91RM9200_SDRAMC_TXSR	(0xf << 27)		/* Exit Self Refresh to Active Delay */
-
-#define AT91RM9200_SDRAMC_SRR		0x9c			/* Self Refresh Register */
-#define AT91RM9200_SDRAMC_LPR		0xa0			/* Low Power Register */
-#define AT91RM9200_SDRAMC_IER		0xa4			/* Interrupt Enable Register */
-#define AT91RM9200_SDRAMC_IDR		0xa8			/* Interrupt Disable Register */
-#define AT91RM9200_SDRAMC_IMR		0xac			/* Interrupt Mask Register */
-#define AT91RM9200_SDRAMC_ISR		0xb0			/* Interrupt Status Register */
-
-#endif
-- 
2.1.0

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

* [PATCH 10/10] ARM: at91: remove at91rm9200_sdramc.h
@ 2015-03-16 22:44   ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-16 22:44 UTC (permalink / raw)
  To: linux-arm-kernel

include/soc/at91/at91rm9200_sdramc.h is replaced by
include/linux/mfd/syscon/atmel-smc.h as this is actually a syscon device.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
---
 include/soc/at91/at91rm9200_sdramc.h | 63 ------------------------------------
 1 file changed, 63 deletions(-)
 delete mode 100644 include/soc/at91/at91rm9200_sdramc.h

diff --git a/include/soc/at91/at91rm9200_sdramc.h b/include/soc/at91/at91rm9200_sdramc.h
deleted file mode 100644
index aa047f458f1b..000000000000
--- a/include/soc/at91/at91rm9200_sdramc.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91rm9200_sdramc.h
- *
- * Copyright (C) 2005 Ivan Kokshaysky
- * Copyright (C) SAN People
- *
- * Memory Controllers (SDRAMC only) - System peripherals registers.
- * Based on AT91RM9200 datasheet revision E.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91RM9200_SDRAMC_H
-#define AT91RM9200_SDRAMC_H
-
-/* SDRAM Controller registers */
-#define AT91RM9200_SDRAMC_MR		0x90			/* Mode Register */
-#define		AT91RM9200_SDRAMC_MODE	(0xf << 0)		/* Command Mode */
-#define			AT91RM9200_SDRAMC_MODE_NORMAL		(0 << 0)
-#define			AT91RM9200_SDRAMC_MODE_NOP		(1 << 0)
-#define			AT91RM9200_SDRAMC_MODE_PRECHARGE	(2 << 0)
-#define			AT91RM9200_SDRAMC_MODE_LMR		(3 << 0)
-#define			AT91RM9200_SDRAMC_MODE_REFRESH	(4 << 0)
-#define		AT91RM9200_SDRAMC_DBW		(1   << 4)		/* Data Bus Width */
-#define			AT91RM9200_SDRAMC_DBW_32	(0 << 4)
-#define			AT91RM9200_SDRAMC_DBW_16	(1 << 4)
-
-#define AT91RM9200_SDRAMC_TR		0x94			/* Refresh Timer Register */
-#define		AT91RM9200_SDRAMC_COUNT	(0xfff << 0)		/* Refresh Timer Count */
-
-#define AT91RM9200_SDRAMC_CR		0x98			/* Configuration Register */
-#define		AT91RM9200_SDRAMC_NC		(3   <<  0)		/* Number of Column Bits */
-#define			AT91RM9200_SDRAMC_NC_8	(0 << 0)
-#define			AT91RM9200_SDRAMC_NC_9	(1 << 0)
-#define			AT91RM9200_SDRAMC_NC_10	(2 << 0)
-#define			AT91RM9200_SDRAMC_NC_11	(3 << 0)
-#define		AT91RM9200_SDRAMC_NR		(3   <<  2)		/* Number of Row Bits */
-#define			AT91RM9200_SDRAMC_NR_11	(0 << 2)
-#define			AT91RM9200_SDRAMC_NR_12	(1 << 2)
-#define			AT91RM9200_SDRAMC_NR_13	(2 << 2)
-#define		AT91RM9200_SDRAMC_NB		(1   <<  4)		/* Number of Banks */
-#define			AT91RM9200_SDRAMC_NB_2	(0 << 4)
-#define			AT91RM9200_SDRAMC_NB_4	(1 << 4)
-#define		AT91RM9200_SDRAMC_CAS		(3   <<  5)		/* CAS Latency */
-#define			AT91RM9200_SDRAMC_CAS_2	(2 << 5)
-#define		AT91RM9200_SDRAMC_TWR		(0xf <<  7)		/* Write Recovery Delay */
-#define		AT91RM9200_SDRAMC_TRC		(0xf << 11)		/* Row Cycle Delay */
-#define		AT91RM9200_SDRAMC_TRP		(0xf << 15)		/* Row Precharge Delay */
-#define		AT91RM9200_SDRAMC_TRCD	(0xf << 19)		/* Row to Column Delay */
-#define		AT91RM9200_SDRAMC_TRAS	(0xf << 23)		/* Active to Precharge Delay */
-#define		AT91RM9200_SDRAMC_TXSR	(0xf << 27)		/* Exit Self Refresh to Active Delay */
-
-#define AT91RM9200_SDRAMC_SRR		0x9c			/* Self Refresh Register */
-#define AT91RM9200_SDRAMC_LPR		0xa0			/* Low Power Register */
-#define AT91RM9200_SDRAMC_IER		0xa4			/* Interrupt Enable Register */
-#define AT91RM9200_SDRAMC_IDR		0xa8			/* Interrupt Disable Register */
-#define AT91RM9200_SDRAMC_IMR		0xac			/* Interrupt Mask Register */
-#define AT91RM9200_SDRAMC_ISR		0xb0			/* Interrupt Status Register */
-
-#endif
-- 
2.1.0

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

* Re: [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
  2015-03-16 22:44   ` Alexandre Belloni
  (?)
@ 2015-03-23  9:57     ` Nicolas Ferre
  -1 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23  9:57 UTC (permalink / raw)
  To: Alexandre Belloni, Lee Jones, Boris Brezillon
  Cc: Jean-Christophe Plagniol-Villard, linux-kernel, Tejun Heo,
	linux-ide, linux-pcmcia, linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> From: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> The at91rm9200 SoC embeds a Memory Controller block which is used to
> configure several aspects of the platform:
> - AHB/APB Bus behavior
> - SDRAM Controller
> - EBI (External Bus Interface) and SMC (Static Memory Controller) config
> 
> Those registers might be accessed by different drivers, hence we need to
> define it as a syscon device.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>

Alexandre, don't you need to Ack this patch at least?


> ---
>  include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 144 insertions(+)
>  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
> 
> diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
> new file mode 100644
> index 000000000000..cb7d9fe89e44
> --- /dev/null
> +++ b/include/linux/mfd/syscon/atmel-mc.h
> @@ -0,0 +1,144 @@
> +/*
> + * Copyright (C) 2005 Ivan Kokshaysky
> + * Copyright (C) SAN People
> + *
> + * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
> + * registers.
> + * Based on AT91RM9200 datasheet revision E.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +
> +/* Memory Controller */
> +#define AT91_MC_RCR			0x00
> +#define AT91_MC_RCB			BIT(0)
> +
> +#define AT91_MC_ASR			0x04
> +#define AT91_MC_UNADD			BIT(0)
> +#define AT91_MC_MISADD			BIT(1)
> +#define AT91_MC_ABTSZ			GENMASK(9, 8)
> +#define AT91_MC_ABTSZ_BYTE		(0 << 8)
> +#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> +#define AT91_MC_ABTSZ_WORD		(2 << 8)
> +#define AT91_MC_ABTTYP			GENMASK(11, 10)
> +#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> +#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> +#define AT91_MC_ABTTYP_FETCH		(2 << 10)
> +#define AT91_MC_MST(n)			BIT(16 + (n))
> +#define AT91_MC_SVMST(n)		BIT(24 + (n))
> +
> +#define AT91_MC_AASR			0x08
> +
> +#define AT91_MC_MPR			0x0c
> +#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
> +
> +/* External Bus Interface (EBI) registers */
> +#define AT91_MC_EBI_CSA			0x60
> +#define AT91_MC_EBI_CS(n)		BIT(x)
> +#define AT91_MC_EBI_NUM_CS		8
> +
> +#define AT91_MC_EBI_CFGR		0x64
> +#define AT91_MC_EBI_DBPUC		BIT(0)
> +
> +/* Static Memory Controller (SMC) registers */
> +#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))
> +#define AT91_MC_SMC_NWS			GENMASK(6, 0)
> +#define AT91_MC_SMC_NWS_(x)		((x) << 0)
> +#define AT91_MC_SMC_WSEN		BIT(7)
> +#define AT91_MC_SMC_TDF			GENMASK(11, 8)
> +#define AT91_MC_SMC_TDF_(x)		((x) << 8)
> +#define AT91_MC_SMC_TDF_MAX		0xf
> +#define AT91_MC_SMC_BAT			BIT(12)
> +#define AT91_MC_SMC_DBW			GENMASK(14, 13)
> +#define AT91_MC_SMC_DBW_16		(1 << 13)
> +#define AT91_MC_SMC_DBW_8		(2 << 13)
> +#define AT91_MC_SMC_DPR			BIT(15)
> +#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
> +#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
> +#define AT91_MC_SMC_ACSS_MAX		3
> +#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
> +#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
> +#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
> +#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
> +#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
> +
> +/* SDRAM Controller registers */
> +#define AT91_MC_SDRAMC_MR		0x90
> +#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
> +#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
> +#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
> +#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
> +#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
> +#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
> +#define AT91_MC_SDRAMC_DBW_16		BIT(4)
> +
> +#define AT91_MC_SDRAMC_TR		0x94
> +#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
> +
> +#define AT91_MC_SDRAMC_CR		0x98
> +#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
> +#define AT91_MC_SDRAMC_NC_8		(0 << 0)
> +#define AT91_MC_SDRAMC_NC_9		(1 << 0)
> +#define AT91_MC_SDRAMC_NC_10		(2 << 0)
> +#define AT91_MC_SDRAMC_NC_11		(3 << 0)
> +#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
> +#define AT91_MC_SDRAMC_NR_11		(0 << 2)
> +#define AT91_MC_SDRAMC_NR_12		(1 << 2)
> +#define AT91_MC_SDRAMC_NR_13		(2 << 2)
> +#define	AT91_MC_SDRAMC_NB		BIT(4)
> +#define AT91_MC_SDRAMC_NB_2		(0 << 4)
> +#define AT91_MC_SDRAMC_NB_4		(1 << 4)
> +#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
> +#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
> +#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
> +#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
> +#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
> +#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
> +#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
> +#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
> +
> +#define AT91_MC_SDRAMC_SRR		0x9c
> +#define AT91_MC_SDRAMC_SRCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_LPR		0xa0
> +#define AT91_MC_SDRAMC_LPCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_IER		0xa4
> +#define AT91_MC_SDRAMC_IDR		0xa8
> +#define AT91_MC_SDRAMC_IMR		0xac
> +#define AT91_MC_SDRAMC_ISR		0xb0
> +#define AT91_MC_SDRAMC_RES		BIT(0)
> +
> +/* Burst Flash Controller register */
> +#define AT91_MC_BFC_MR			0xc0
> +#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
> +#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
> +#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
> +#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
> +#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
> +#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
> +#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
> +#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
> +#define AT91_MC_BFC_AVL			GENMASK(7,  4)
> +#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
> +#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
> +#define AT91_MC_BFC_PAGES_16		(1 << 8)
> +#define AT91_MC_BFC_PAGES_32		(2 << 8)
> +#define AT91_MC_BFC_PAGES_64		(3 << 8)
> +#define AT91_MC_BFC_PAGES_128		(4 << 8)
> +#define AT91_MC_BFC_PAGES_256		(5 << 8)
> +#define AT91_MC_BFC_PAGES_512		(6 << 8)
> +#define AT91_MC_BFC_PAGES_1024		(7 << 8)
> +#define AT91_MC_BFC_OEL			GENMASK(13, 12)
> +#define AT91_MC_BFC_BAAEN		BIT(16)
> +#define AT91_MC_BFC_BFOEH		BIT(17)
> +#define AT91_MC_BFC_MUXEN		BIT(18)
> +#define AT91_MC_BFC_RDYEN		BIT(19)
> +
> +#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */
> 

I'm not a big fan of the use of BIT/GENMASK macros in mix with the <<
operator, but I guess it can be done anyway, so I'm okay:
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

Bye,
-- 
Nicolas Ferre

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

* Re: [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
@ 2015-03-23  9:57     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23  9:57 UTC (permalink / raw)
  To: Alexandre Belloni, Lee Jones, Boris Brezillon
  Cc: Jean-Christophe Plagniol-Villard, linux-kernel, Tejun Heo,
	linux-ide, linux-pcmcia, linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> From: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> The at91rm9200 SoC embeds a Memory Controller block which is used to
> configure several aspects of the platform:
> - AHB/APB Bus behavior
> - SDRAM Controller
> - EBI (External Bus Interface) and SMC (Static Memory Controller) config
> 
> Those registers might be accessed by different drivers, hence we need to
> define it as a syscon device.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>

Alexandre, don't you need to Ack this patch at least?


> ---
>  include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 144 insertions(+)
>  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
> 
> diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
> new file mode 100644
> index 000000000000..cb7d9fe89e44
> --- /dev/null
> +++ b/include/linux/mfd/syscon/atmel-mc.h
> @@ -0,0 +1,144 @@
> +/*
> + * Copyright (C) 2005 Ivan Kokshaysky
> + * Copyright (C) SAN People
> + *
> + * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
> + * registers.
> + * Based on AT91RM9200 datasheet revision E.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +
> +/* Memory Controller */
> +#define AT91_MC_RCR			0x00
> +#define AT91_MC_RCB			BIT(0)
> +
> +#define AT91_MC_ASR			0x04
> +#define AT91_MC_UNADD			BIT(0)
> +#define AT91_MC_MISADD			BIT(1)
> +#define AT91_MC_ABTSZ			GENMASK(9, 8)
> +#define AT91_MC_ABTSZ_BYTE		(0 << 8)
> +#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> +#define AT91_MC_ABTSZ_WORD		(2 << 8)
> +#define AT91_MC_ABTTYP			GENMASK(11, 10)
> +#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> +#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> +#define AT91_MC_ABTTYP_FETCH		(2 << 10)
> +#define AT91_MC_MST(n)			BIT(16 + (n))
> +#define AT91_MC_SVMST(n)		BIT(24 + (n))
> +
> +#define AT91_MC_AASR			0x08
> +
> +#define AT91_MC_MPR			0x0c
> +#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
> +
> +/* External Bus Interface (EBI) registers */
> +#define AT91_MC_EBI_CSA			0x60
> +#define AT91_MC_EBI_CS(n)		BIT(x)
> +#define AT91_MC_EBI_NUM_CS		8
> +
> +#define AT91_MC_EBI_CFGR		0x64
> +#define AT91_MC_EBI_DBPUC		BIT(0)
> +
> +/* Static Memory Controller (SMC) registers */
> +#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))
> +#define AT91_MC_SMC_NWS			GENMASK(6, 0)
> +#define AT91_MC_SMC_NWS_(x)		((x) << 0)
> +#define AT91_MC_SMC_WSEN		BIT(7)
> +#define AT91_MC_SMC_TDF			GENMASK(11, 8)
> +#define AT91_MC_SMC_TDF_(x)		((x) << 8)
> +#define AT91_MC_SMC_TDF_MAX		0xf
> +#define AT91_MC_SMC_BAT			BIT(12)
> +#define AT91_MC_SMC_DBW			GENMASK(14, 13)
> +#define AT91_MC_SMC_DBW_16		(1 << 13)
> +#define AT91_MC_SMC_DBW_8		(2 << 13)
> +#define AT91_MC_SMC_DPR			BIT(15)
> +#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
> +#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
> +#define AT91_MC_SMC_ACSS_MAX		3
> +#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
> +#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
> +#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
> +#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
> +#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
> +
> +/* SDRAM Controller registers */
> +#define AT91_MC_SDRAMC_MR		0x90
> +#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
> +#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
> +#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
> +#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
> +#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
> +#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
> +#define AT91_MC_SDRAMC_DBW_16		BIT(4)
> +
> +#define AT91_MC_SDRAMC_TR		0x94
> +#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
> +
> +#define AT91_MC_SDRAMC_CR		0x98
> +#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
> +#define AT91_MC_SDRAMC_NC_8		(0 << 0)
> +#define AT91_MC_SDRAMC_NC_9		(1 << 0)
> +#define AT91_MC_SDRAMC_NC_10		(2 << 0)
> +#define AT91_MC_SDRAMC_NC_11		(3 << 0)
> +#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
> +#define AT91_MC_SDRAMC_NR_11		(0 << 2)
> +#define AT91_MC_SDRAMC_NR_12		(1 << 2)
> +#define AT91_MC_SDRAMC_NR_13		(2 << 2)
> +#define	AT91_MC_SDRAMC_NB		BIT(4)
> +#define AT91_MC_SDRAMC_NB_2		(0 << 4)
> +#define AT91_MC_SDRAMC_NB_4		(1 << 4)
> +#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
> +#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
> +#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
> +#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
> +#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
> +#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
> +#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
> +#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
> +
> +#define AT91_MC_SDRAMC_SRR		0x9c
> +#define AT91_MC_SDRAMC_SRCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_LPR		0xa0
> +#define AT91_MC_SDRAMC_LPCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_IER		0xa4
> +#define AT91_MC_SDRAMC_IDR		0xa8
> +#define AT91_MC_SDRAMC_IMR		0xac
> +#define AT91_MC_SDRAMC_ISR		0xb0
> +#define AT91_MC_SDRAMC_RES		BIT(0)
> +
> +/* Burst Flash Controller register */
> +#define AT91_MC_BFC_MR			0xc0
> +#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
> +#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
> +#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
> +#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
> +#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
> +#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
> +#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
> +#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
> +#define AT91_MC_BFC_AVL			GENMASK(7,  4)
> +#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
> +#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
> +#define AT91_MC_BFC_PAGES_16		(1 << 8)
> +#define AT91_MC_BFC_PAGES_32		(2 << 8)
> +#define AT91_MC_BFC_PAGES_64		(3 << 8)
> +#define AT91_MC_BFC_PAGES_128		(4 << 8)
> +#define AT91_MC_BFC_PAGES_256		(5 << 8)
> +#define AT91_MC_BFC_PAGES_512		(6 << 8)
> +#define AT91_MC_BFC_PAGES_1024		(7 << 8)
> +#define AT91_MC_BFC_OEL			GENMASK(13, 12)
> +#define AT91_MC_BFC_BAAEN		BIT(16)
> +#define AT91_MC_BFC_BFOEH		BIT(17)
> +#define AT91_MC_BFC_MUXEN		BIT(18)
> +#define AT91_MC_BFC_RDYEN		BIT(19)
> +
> +#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */
> 

I'm not a big fan of the use of BIT/GENMASK macros in mix with the <<
operator, but I guess it can be done anyway, so I'm okay:
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

Bye,
-- 
Nicolas Ferre

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

* [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
@ 2015-03-23  9:57     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23  9:57 UTC (permalink / raw)
  To: linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a ?crit :
> From: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> The at91rm9200 SoC embeds a Memory Controller block which is used to
> configure several aspects of the platform:
> - AHB/APB Bus behavior
> - SDRAM Controller
> - EBI (External Bus Interface) and SMC (Static Memory Controller) config
> 
> Those registers might be accessed by different drivers, hence we need to
> define it as a syscon device.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>

Alexandre, don't you need to Ack this patch at least?


> ---
>  include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 144 insertions(+)
>  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
> 
> diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
> new file mode 100644
> index 000000000000..cb7d9fe89e44
> --- /dev/null
> +++ b/include/linux/mfd/syscon/atmel-mc.h
> @@ -0,0 +1,144 @@
> +/*
> + * Copyright (C) 2005 Ivan Kokshaysky
> + * Copyright (C) SAN People
> + *
> + * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
> + * registers.
> + * Based on AT91RM9200 datasheet revision E.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +
> +/* Memory Controller */
> +#define AT91_MC_RCR			0x00
> +#define AT91_MC_RCB			BIT(0)
> +
> +#define AT91_MC_ASR			0x04
> +#define AT91_MC_UNADD			BIT(0)
> +#define AT91_MC_MISADD			BIT(1)
> +#define AT91_MC_ABTSZ			GENMASK(9, 8)
> +#define AT91_MC_ABTSZ_BYTE		(0 << 8)
> +#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> +#define AT91_MC_ABTSZ_WORD		(2 << 8)
> +#define AT91_MC_ABTTYP			GENMASK(11, 10)
> +#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> +#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> +#define AT91_MC_ABTTYP_FETCH		(2 << 10)
> +#define AT91_MC_MST(n)			BIT(16 + (n))
> +#define AT91_MC_SVMST(n)		BIT(24 + (n))
> +
> +#define AT91_MC_AASR			0x08
> +
> +#define AT91_MC_MPR			0x0c
> +#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
> +
> +/* External Bus Interface (EBI) registers */
> +#define AT91_MC_EBI_CSA			0x60
> +#define AT91_MC_EBI_CS(n)		BIT(x)
> +#define AT91_MC_EBI_NUM_CS		8
> +
> +#define AT91_MC_EBI_CFGR		0x64
> +#define AT91_MC_EBI_DBPUC		BIT(0)
> +
> +/* Static Memory Controller (SMC) registers */
> +#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))
> +#define AT91_MC_SMC_NWS			GENMASK(6, 0)
> +#define AT91_MC_SMC_NWS_(x)		((x) << 0)
> +#define AT91_MC_SMC_WSEN		BIT(7)
> +#define AT91_MC_SMC_TDF			GENMASK(11, 8)
> +#define AT91_MC_SMC_TDF_(x)		((x) << 8)
> +#define AT91_MC_SMC_TDF_MAX		0xf
> +#define AT91_MC_SMC_BAT			BIT(12)
> +#define AT91_MC_SMC_DBW			GENMASK(14, 13)
> +#define AT91_MC_SMC_DBW_16		(1 << 13)
> +#define AT91_MC_SMC_DBW_8		(2 << 13)
> +#define AT91_MC_SMC_DPR			BIT(15)
> +#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
> +#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
> +#define AT91_MC_SMC_ACSS_MAX		3
> +#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
> +#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
> +#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
> +#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
> +#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
> +
> +/* SDRAM Controller registers */
> +#define AT91_MC_SDRAMC_MR		0x90
> +#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
> +#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
> +#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
> +#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
> +#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
> +#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
> +#define AT91_MC_SDRAMC_DBW_16		BIT(4)
> +
> +#define AT91_MC_SDRAMC_TR		0x94
> +#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
> +
> +#define AT91_MC_SDRAMC_CR		0x98
> +#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
> +#define AT91_MC_SDRAMC_NC_8		(0 << 0)
> +#define AT91_MC_SDRAMC_NC_9		(1 << 0)
> +#define AT91_MC_SDRAMC_NC_10		(2 << 0)
> +#define AT91_MC_SDRAMC_NC_11		(3 << 0)
> +#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
> +#define AT91_MC_SDRAMC_NR_11		(0 << 2)
> +#define AT91_MC_SDRAMC_NR_12		(1 << 2)
> +#define AT91_MC_SDRAMC_NR_13		(2 << 2)
> +#define	AT91_MC_SDRAMC_NB		BIT(4)
> +#define AT91_MC_SDRAMC_NB_2		(0 << 4)
> +#define AT91_MC_SDRAMC_NB_4		(1 << 4)
> +#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
> +#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
> +#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
> +#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
> +#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
> +#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
> +#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
> +#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
> +
> +#define AT91_MC_SDRAMC_SRR		0x9c
> +#define AT91_MC_SDRAMC_SRCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_LPR		0xa0
> +#define AT91_MC_SDRAMC_LPCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_IER		0xa4
> +#define AT91_MC_SDRAMC_IDR		0xa8
> +#define AT91_MC_SDRAMC_IMR		0xac
> +#define AT91_MC_SDRAMC_ISR		0xb0
> +#define AT91_MC_SDRAMC_RES		BIT(0)
> +
> +/* Burst Flash Controller register */
> +#define AT91_MC_BFC_MR			0xc0
> +#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
> +#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
> +#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
> +#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
> +#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
> +#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
> +#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
> +#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
> +#define AT91_MC_BFC_AVL			GENMASK(7,  4)
> +#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
> +#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
> +#define AT91_MC_BFC_PAGES_16		(1 << 8)
> +#define AT91_MC_BFC_PAGES_32		(2 << 8)
> +#define AT91_MC_BFC_PAGES_64		(3 << 8)
> +#define AT91_MC_BFC_PAGES_128		(4 << 8)
> +#define AT91_MC_BFC_PAGES_256		(5 << 8)
> +#define AT91_MC_BFC_PAGES_512		(6 << 8)
> +#define AT91_MC_BFC_PAGES_1024		(7 << 8)
> +#define AT91_MC_BFC_OEL			GENMASK(13, 12)
> +#define AT91_MC_BFC_BAAEN		BIT(16)
> +#define AT91_MC_BFC_BFOEH		BIT(17)
> +#define AT91_MC_BFC_MUXEN		BIT(18)
> +#define AT91_MC_BFC_RDYEN		BIT(19)
> +
> +#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */
> 

I'm not a big fan of the use of BIT/GENMASK macros in mix with the <<
operator, but I guess it can be done anyway, so I'm okay:
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

Bye,
-- 
Nicolas Ferre

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

* Re: [PATCH 09/10] ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
  2015-03-16 22:44   ` Alexandre Belloni
  (?)
@ 2015-03-23 10:01     ` Nicolas Ferre
  -1 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:01 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> mach/at91_ramc.h and mach/at91rm9200_mc.h are necessary anymore, remove them.

s/are/aren't/ ?

> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>  arch/arm/mach-at91/Makefile                     |   3 -
>  arch/arm/mach-at91/include/mach/at91_ramc.h     |  28 ------
>  arch/arm/mach-at91/include/mach/at91rm9200_mc.h | 116 ------------------------
>  arch/arm/mach-at91/pm.h                         |  14 ++-
>  arch/arm/mach-at91/pm_suspend.S                 |   1 -
>  5 files changed, 13 insertions(+), 149 deletions(-)
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> 
> diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
> index 3586d977e99d..fa4393ab3e7b 100644
> --- a/arch/arm/mach-at91/Makefile
> +++ b/arch/arm/mach-at91/Makefile
> @@ -1,9 +1,6 @@
>  #
>  # Makefile for the linux kernel.
>  #
> -ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
> -asflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
> -
>  obj-y		:= soc.o
>  
>  # CPU-specific support
> diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
> deleted file mode 100644
> index 39547496d4b0..000000000000
> --- a/arch/arm/mach-at91/include/mach/at91_ramc.h
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/*
> - * Header file for the Atmel RAM Controller
> - *
> - * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> - *
> - * Under GPLv2 only
> - */
> -
> -#ifndef __AT91_RAMC_H__
> -#define __AT91_RAMC_H__
> -
> -#ifndef __ASSEMBLY__
> -extern void __iomem *at91_ramc_base[];
> -
> -#define at91_ramc_read(id, field) \
> -	__raw_readl(at91_ramc_base[id] + field)
> -
> -#define at91_ramc_write(id, field, value) \
> -	__raw_writel(value, at91_ramc_base[id] + field)
> -#else
> -.extern at91_ramc_base
> -#endif
> -
> -#include <linux/mfd/syscon/atmel-mc.h>
> -#include <soc/at91/at91sam9_ddrsdr.h>
> -#include <soc/at91/at91sam9_sdramc.h>
> -
> -#endif /* __AT91_RAMC_H__ */
> diff --git a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h b/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> deleted file mode 100644
> index aeaadfb452af..000000000000
> --- a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> +++ /dev/null
> @@ -1,116 +0,0 @@
> -/*
> - * arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> - *
> - * Copyright (C) 2005 Ivan Kokshaysky
> - * Copyright (C) SAN People
> - *
> - * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals registers.
> - * Based on AT91RM9200 datasheet revision E.
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> - */
> -
> -#ifndef AT91RM9200_MC_H
> -#define AT91RM9200_MC_H
> -
> -/* Memory Controller */
> -#define AT91_MC_RCR		0x00			/* MC Remap Control Register */
> -#define		AT91_MC_RCB		(1 <<  0)		/* Remap Command Bit */
> -
> -#define AT91_MC_ASR		0x04			/* MC Abort Status Register */
> -#define		AT91_MC_UNADD		(1 <<  0)		/* Undefined Address Abort Status */
> -#define		AT91_MC_MISADD		(1 <<  1)		/* Misaligned Address Abort Status */
> -#define		AT91_MC_ABTSZ		(3 <<  8)		/* Abort Size Status */
> -#define			AT91_MC_ABTSZ_BYTE		(0 << 8)
> -#define			AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> -#define			AT91_MC_ABTSZ_WORD		(2 << 8)
> -#define		AT91_MC_ABTTYP		(3 << 10)		/* Abort Type Status */
> -#define			AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> -#define			AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> -#define			AT91_MC_ABTTYP_FETCH		(2 << 10)
> -#define		AT91_MC_MST0		(1 << 16)		/* ARM920T Abort Source */
> -#define		AT91_MC_MST1		(1 << 17)		/* PDC Abort Source */
> -#define		AT91_MC_MST2		(1 << 18)		/* UHP Abort Source */
> -#define		AT91_MC_MST3		(1 << 19)		/* EMAC Abort Source */
> -#define		AT91_MC_SVMST0		(1 << 24)		/* Saved ARM920T Abort Source */
> -#define		AT91_MC_SVMST1		(1 << 25)		/* Saved PDC Abort Source */
> -#define		AT91_MC_SVMST2		(1 << 26)		/* Saved UHP Abort Source */
> -#define		AT91_MC_SVMST3		(1 << 27)		/* Saved EMAC Abort Source */
> -
> -#define AT91_MC_AASR		0x08			/* MC Abort Address Status Register */
> -
> -#define AT91_MC_MPR		0x0c			/* MC Master Priority Register */
> -#define		AT91_MPR_MSTP0		(7 <<  0)		/* ARM920T Priority */
> -#define		AT91_MPR_MSTP1		(7 <<  4)		/* PDC Priority */
> -#define		AT91_MPR_MSTP2		(7 <<  8)		/* UHP Priority */
> -#define		AT91_MPR_MSTP3		(7 << 12)		/* EMAC Priority */
> -
> -/* External Bus Interface (EBI) registers */
> -#define AT91_EBI_CSA		0x60			/* Chip Select Assignment Register */
> -#define		AT91_EBI_CS0A		(1 << 0)		/* Chip Select 0 Assignment */
> -#define			AT91_EBI_CS0A_SMC		(0 << 0)
> -#define			AT91_EBI_CS0A_BFC		(1 << 0)
> -#define		AT91_EBI_CS1A		(1 << 1)		/* Chip Select 1 Assignment */
> -#define			AT91_EBI_CS1A_SMC		(0 << 1)
> -#define			AT91_EBI_CS1A_SDRAMC		(1 << 1)
> -#define		AT91_EBI_CS3A		(1 << 3)		/* Chip Select 2 Assignment */
> -#define			AT91_EBI_CS3A_SMC		(0 << 3)
> -#define			AT91_EBI_CS3A_SMC_SMARTMEDIA	(1 << 3)
> -#define		AT91_EBI_CS4A		(1 << 4)		/* Chip Select 3 Assignment */
> -#define			AT91_EBI_CS4A_SMC		(0 << 4)
> -#define			AT91_EBI_CS4A_SMC_COMPACTFLASH	(1 << 4)
> -#define AT91_EBI_CFGR		(AT91_MC + 0x64)	/* Configuration Register */
> -#define		AT91_EBI_DBPUC		(1 << 0)		/* Data Bus Pull-Up Configuration */
> -
> -/* Static Memory Controller (SMC) registers */
> -#define	AT91_SMC_CSR(n)		(0x70 + ((n) * 4))	/* SMC Chip Select Register */
> -#define		AT91_SMC_NWS		(0x7f <<  0)		/* Number of Wait States */
> -#define			AT91_SMC_NWS_(x)	((x) << 0)
> -#define		AT91_SMC_WSEN		(1    <<  7)		/* Wait State Enable */
> -#define		AT91_SMC_TDF		(0xf  <<  8)		/* Data Float Time */
> -#define			AT91_SMC_TDF_(x)	((x) << 8)
> -#define		AT91_SMC_BAT		(1    << 12)		/* Byte Access Type */
> -#define		AT91_SMC_DBW		(3    << 13)		/* Data Bus Width */
> -#define			AT91_SMC_DBW_16		(1 << 13)
> -#define			AT91_SMC_DBW_8		(2 << 13)
> -#define		AT91_SMC_DPR		(1 << 15)		/* Data Read Protocol */
> -#define		AT91_SMC_ACSS		(3 << 16)		/* Address to Chip Select Setup */
> -#define			AT91_SMC_ACSS_STD	(0 << 16)
> -#define			AT91_SMC_ACSS_1		(1 << 16)
> -#define			AT91_SMC_ACSS_2		(2 << 16)
> -#define			AT91_SMC_ACSS_3		(3 << 16)
> -#define		AT91_SMC_RWSETUP	(7 << 24)		/* Read & Write Signal Time Setup */
> -#define			AT91_SMC_RWSETUP_(x)	((x) << 24)
> -#define		AT91_SMC_RWHOLD		(7 << 28)		/* Read & Write Signal Hold Time */
> -#define			AT91_SMC_RWHOLD_(x)	((x) << 28)
> -
> -/* Burst Flash Controller register */
> -#define AT91_BFC_MR		0xc0			/* Mode Register */
> -#define		AT91_BFC_BFCOM		(3   <<  0)		/* Burst Flash Controller Operating Mode */
> -#define			AT91_BFC_BFCOM_DISABLED	(0 << 0)
> -#define			AT91_BFC_BFCOM_ASYNC	(1 << 0)
> -#define			AT91_BFC_BFCOM_BURST	(2 << 0)
> -#define		AT91_BFC_BFCC		(3   <<  2)		/* Burst Flash Controller Clock */
> -#define			AT91_BFC_BFCC_MCK	(1 << 2)
> -#define			AT91_BFC_BFCC_DIV2	(2 << 2)
> -#define			AT91_BFC_BFCC_DIV4	(3 << 2)
> -#define		AT91_BFC_AVL		(0xf <<  4)		/* Address Valid Latency */
> -#define		AT91_BFC_PAGES		(7   <<  8)		/* Page Size */
> -#define			AT91_BFC_PAGES_NO_PAGE	(0 << 8)
> -#define			AT91_BFC_PAGES_16	(1 << 8)
> -#define			AT91_BFC_PAGES_32	(2 << 8)
> -#define			AT91_BFC_PAGES_64	(3 << 8)
> -#define			AT91_BFC_PAGES_128	(4 << 8)
> -#define			AT91_BFC_PAGES_256	(5 << 8)
> -#define			AT91_BFC_PAGES_512	(6 << 8)
> -#define			AT91_BFC_PAGES_1024	(7 << 8)
> -#define		AT91_BFC_OEL		(3   << 12)		/* Output Enable Latency */
> -#define		AT91_BFC_BAAEN		(1   << 16)		/* Burst Address Advance Enable */
> -#define		AT91_BFC_BFOEH		(1   << 17)		/* Burst Flash Output Enable Handling */
> -#define		AT91_BFC_MUXEN		(1   << 18)		/* Multiplexed Bus Enable */
> -#define		AT91_BFC_RDYEN		(1   << 19)		/* Ready Enable Mode */
> -
> -#endif
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index ecd875a91d52..3fcf8810f14e 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -13,7 +13,19 @@
>  
>  #include <asm/proc-fns.h>
>  
> -#include <mach/at91_ramc.h>
> +#include <linux/mfd/syscon/atmel-mc.h>
> +#include <soc/at91/at91sam9_ddrsdr.h>
> +#include <soc/at91/at91sam9_sdramc.h>
> +
> +#ifndef __ASSEMBLY__
> +extern void __iomem *at91_ramc_base[];
> +
> +#define at91_ramc_read(id, field) \
> +	__raw_readl(at91_ramc_base[id] + field)
> +
> +#define at91_ramc_write(id, field, value) \
> +	__raw_writel(value, at91_ramc_base[id] + field)
> +#endif
>  
>  #define AT91_MEMCTRL_MC		0
>  #define AT91_MEMCTRL_SDRAMC	1
> diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
> index fda4e0164ed7..0d95f488b47a 100644
> --- a/arch/arm/mach-at91/pm_suspend.S
> +++ b/arch/arm/mach-at91/pm_suspend.S
> @@ -13,7 +13,6 @@
>   */
>  #include <linux/linkage.h>
>  #include <linux/clk/at91_pmc.h>
> -#include <mach/at91_ramc.h>
>  #include "pm.h"
>  
>  #define	SRAMC_SELF_FRESH_ACTIVE		0x01
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 09/10] ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
@ 2015-03-23 10:01     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:01 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> mach/at91_ramc.h and mach/at91rm9200_mc.h are necessary anymore, remove them.

s/are/aren't/ ?

> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>  arch/arm/mach-at91/Makefile                     |   3 -
>  arch/arm/mach-at91/include/mach/at91_ramc.h     |  28 ------
>  arch/arm/mach-at91/include/mach/at91rm9200_mc.h | 116 ------------------------
>  arch/arm/mach-at91/pm.h                         |  14 ++-
>  arch/arm/mach-at91/pm_suspend.S                 |   1 -
>  5 files changed, 13 insertions(+), 149 deletions(-)
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> 
> diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
> index 3586d977e99d..fa4393ab3e7b 100644
> --- a/arch/arm/mach-at91/Makefile
> +++ b/arch/arm/mach-at91/Makefile
> @@ -1,9 +1,6 @@
>  #
>  # Makefile for the linux kernel.
>  #
> -ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
> -asflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
> -
>  obj-y		:= soc.o
>  
>  # CPU-specific support
> diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
> deleted file mode 100644
> index 39547496d4b0..000000000000
> --- a/arch/arm/mach-at91/include/mach/at91_ramc.h
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/*
> - * Header file for the Atmel RAM Controller
> - *
> - * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> - *
> - * Under GPLv2 only
> - */
> -
> -#ifndef __AT91_RAMC_H__
> -#define __AT91_RAMC_H__
> -
> -#ifndef __ASSEMBLY__
> -extern void __iomem *at91_ramc_base[];
> -
> -#define at91_ramc_read(id, field) \
> -	__raw_readl(at91_ramc_base[id] + field)
> -
> -#define at91_ramc_write(id, field, value) \
> -	__raw_writel(value, at91_ramc_base[id] + field)
> -#else
> -.extern at91_ramc_base
> -#endif
> -
> -#include <linux/mfd/syscon/atmel-mc.h>
> -#include <soc/at91/at91sam9_ddrsdr.h>
> -#include <soc/at91/at91sam9_sdramc.h>
> -
> -#endif /* __AT91_RAMC_H__ */
> diff --git a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h b/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> deleted file mode 100644
> index aeaadfb452af..000000000000
> --- a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> +++ /dev/null
> @@ -1,116 +0,0 @@
> -/*
> - * arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> - *
> - * Copyright (C) 2005 Ivan Kokshaysky
> - * Copyright (C) SAN People
> - *
> - * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals registers.
> - * Based on AT91RM9200 datasheet revision E.
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> - */
> -
> -#ifndef AT91RM9200_MC_H
> -#define AT91RM9200_MC_H
> -
> -/* Memory Controller */
> -#define AT91_MC_RCR		0x00			/* MC Remap Control Register */
> -#define		AT91_MC_RCB		(1 <<  0)		/* Remap Command Bit */
> -
> -#define AT91_MC_ASR		0x04			/* MC Abort Status Register */
> -#define		AT91_MC_UNADD		(1 <<  0)		/* Undefined Address Abort Status */
> -#define		AT91_MC_MISADD		(1 <<  1)		/* Misaligned Address Abort Status */
> -#define		AT91_MC_ABTSZ		(3 <<  8)		/* Abort Size Status */
> -#define			AT91_MC_ABTSZ_BYTE		(0 << 8)
> -#define			AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> -#define			AT91_MC_ABTSZ_WORD		(2 << 8)
> -#define		AT91_MC_ABTTYP		(3 << 10)		/* Abort Type Status */
> -#define			AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> -#define			AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> -#define			AT91_MC_ABTTYP_FETCH		(2 << 10)
> -#define		AT91_MC_MST0		(1 << 16)		/* ARM920T Abort Source */
> -#define		AT91_MC_MST1		(1 << 17)		/* PDC Abort Source */
> -#define		AT91_MC_MST2		(1 << 18)		/* UHP Abort Source */
> -#define		AT91_MC_MST3		(1 << 19)		/* EMAC Abort Source */
> -#define		AT91_MC_SVMST0		(1 << 24)		/* Saved ARM920T Abort Source */
> -#define		AT91_MC_SVMST1		(1 << 25)		/* Saved PDC Abort Source */
> -#define		AT91_MC_SVMST2		(1 << 26)		/* Saved UHP Abort Source */
> -#define		AT91_MC_SVMST3		(1 << 27)		/* Saved EMAC Abort Source */
> -
> -#define AT91_MC_AASR		0x08			/* MC Abort Address Status Register */
> -
> -#define AT91_MC_MPR		0x0c			/* MC Master Priority Register */
> -#define		AT91_MPR_MSTP0		(7 <<  0)		/* ARM920T Priority */
> -#define		AT91_MPR_MSTP1		(7 <<  4)		/* PDC Priority */
> -#define		AT91_MPR_MSTP2		(7 <<  8)		/* UHP Priority */
> -#define		AT91_MPR_MSTP3		(7 << 12)		/* EMAC Priority */
> -
> -/* External Bus Interface (EBI) registers */
> -#define AT91_EBI_CSA		0x60			/* Chip Select Assignment Register */
> -#define		AT91_EBI_CS0A		(1 << 0)		/* Chip Select 0 Assignment */
> -#define			AT91_EBI_CS0A_SMC		(0 << 0)
> -#define			AT91_EBI_CS0A_BFC		(1 << 0)
> -#define		AT91_EBI_CS1A		(1 << 1)		/* Chip Select 1 Assignment */
> -#define			AT91_EBI_CS1A_SMC		(0 << 1)
> -#define			AT91_EBI_CS1A_SDRAMC		(1 << 1)
> -#define		AT91_EBI_CS3A		(1 << 3)		/* Chip Select 2 Assignment */
> -#define			AT91_EBI_CS3A_SMC		(0 << 3)
> -#define			AT91_EBI_CS3A_SMC_SMARTMEDIA	(1 << 3)
> -#define		AT91_EBI_CS4A		(1 << 4)		/* Chip Select 3 Assignment */
> -#define			AT91_EBI_CS4A_SMC		(0 << 4)
> -#define			AT91_EBI_CS4A_SMC_COMPACTFLASH	(1 << 4)
> -#define AT91_EBI_CFGR		(AT91_MC + 0x64)	/* Configuration Register */
> -#define		AT91_EBI_DBPUC		(1 << 0)		/* Data Bus Pull-Up Configuration */
> -
> -/* Static Memory Controller (SMC) registers */
> -#define	AT91_SMC_CSR(n)		(0x70 + ((n) * 4))	/* SMC Chip Select Register */
> -#define		AT91_SMC_NWS		(0x7f <<  0)		/* Number of Wait States */
> -#define			AT91_SMC_NWS_(x)	((x) << 0)
> -#define		AT91_SMC_WSEN		(1    <<  7)		/* Wait State Enable */
> -#define		AT91_SMC_TDF		(0xf  <<  8)		/* Data Float Time */
> -#define			AT91_SMC_TDF_(x)	((x) << 8)
> -#define		AT91_SMC_BAT		(1    << 12)		/* Byte Access Type */
> -#define		AT91_SMC_DBW		(3    << 13)		/* Data Bus Width */
> -#define			AT91_SMC_DBW_16		(1 << 13)
> -#define			AT91_SMC_DBW_8		(2 << 13)
> -#define		AT91_SMC_DPR		(1 << 15)		/* Data Read Protocol */
> -#define		AT91_SMC_ACSS		(3 << 16)		/* Address to Chip Select Setup */
> -#define			AT91_SMC_ACSS_STD	(0 << 16)
> -#define			AT91_SMC_ACSS_1		(1 << 16)
> -#define			AT91_SMC_ACSS_2		(2 << 16)
> -#define			AT91_SMC_ACSS_3		(3 << 16)
> -#define		AT91_SMC_RWSETUP	(7 << 24)		/* Read & Write Signal Time Setup */
> -#define			AT91_SMC_RWSETUP_(x)	((x) << 24)
> -#define		AT91_SMC_RWHOLD		(7 << 28)		/* Read & Write Signal Hold Time */
> -#define			AT91_SMC_RWHOLD_(x)	((x) << 28)
> -
> -/* Burst Flash Controller register */
> -#define AT91_BFC_MR		0xc0			/* Mode Register */
> -#define		AT91_BFC_BFCOM		(3   <<  0)		/* Burst Flash Controller Operating Mode */
> -#define			AT91_BFC_BFCOM_DISABLED	(0 << 0)
> -#define			AT91_BFC_BFCOM_ASYNC	(1 << 0)
> -#define			AT91_BFC_BFCOM_BURST	(2 << 0)
> -#define		AT91_BFC_BFCC		(3   <<  2)		/* Burst Flash Controller Clock */
> -#define			AT91_BFC_BFCC_MCK	(1 << 2)
> -#define			AT91_BFC_BFCC_DIV2	(2 << 2)
> -#define			AT91_BFC_BFCC_DIV4	(3 << 2)
> -#define		AT91_BFC_AVL		(0xf <<  4)		/* Address Valid Latency */
> -#define		AT91_BFC_PAGES		(7   <<  8)		/* Page Size */
> -#define			AT91_BFC_PAGES_NO_PAGE	(0 << 8)
> -#define			AT91_BFC_PAGES_16	(1 << 8)
> -#define			AT91_BFC_PAGES_32	(2 << 8)
> -#define			AT91_BFC_PAGES_64	(3 << 8)
> -#define			AT91_BFC_PAGES_128	(4 << 8)
> -#define			AT91_BFC_PAGES_256	(5 << 8)
> -#define			AT91_BFC_PAGES_512	(6 << 8)
> -#define			AT91_BFC_PAGES_1024	(7 << 8)
> -#define		AT91_BFC_OEL		(3   << 12)		/* Output Enable Latency */
> -#define		AT91_BFC_BAAEN		(1   << 16)		/* Burst Address Advance Enable */
> -#define		AT91_BFC_BFOEH		(1   << 17)		/* Burst Flash Output Enable Handling */
> -#define		AT91_BFC_MUXEN		(1   << 18)		/* Multiplexed Bus Enable */
> -#define		AT91_BFC_RDYEN		(1   << 19)		/* Ready Enable Mode */
> -
> -#endif
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index ecd875a91d52..3fcf8810f14e 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -13,7 +13,19 @@
>  
>  #include <asm/proc-fns.h>
>  
> -#include <mach/at91_ramc.h>
> +#include <linux/mfd/syscon/atmel-mc.h>
> +#include <soc/at91/at91sam9_ddrsdr.h>
> +#include <soc/at91/at91sam9_sdramc.h>
> +
> +#ifndef __ASSEMBLY__
> +extern void __iomem *at91_ramc_base[];
> +
> +#define at91_ramc_read(id, field) \
> +	__raw_readl(at91_ramc_base[id] + field)
> +
> +#define at91_ramc_write(id, field, value) \
> +	__raw_writel(value, at91_ramc_base[id] + field)
> +#endif
>  
>  #define AT91_MEMCTRL_MC		0
>  #define AT91_MEMCTRL_SDRAMC	1
> diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
> index fda4e0164ed7..0d95f488b47a 100644
> --- a/arch/arm/mach-at91/pm_suspend.S
> +++ b/arch/arm/mach-at91/pm_suspend.S
> @@ -13,7 +13,6 @@
>   */
>  #include <linux/linkage.h>
>  #include <linux/clk/at91_pmc.h>
> -#include <mach/at91_ramc.h>
>  #include "pm.h"
>  
>  #define	SRAMC_SELF_FRESH_ACTIVE		0x01
> 


-- 
Nicolas Ferre

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

* [PATCH 09/10] ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
@ 2015-03-23 10:01     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:01 UTC (permalink / raw)
  To: linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a ?crit :
> mach/at91_ramc.h and mach/at91rm9200_mc.h are necessary anymore, remove them.

s/are/aren't/ ?

> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>  arch/arm/mach-at91/Makefile                     |   3 -
>  arch/arm/mach-at91/include/mach/at91_ramc.h     |  28 ------
>  arch/arm/mach-at91/include/mach/at91rm9200_mc.h | 116 ------------------------
>  arch/arm/mach-at91/pm.h                         |  14 ++-
>  arch/arm/mach-at91/pm_suspend.S                 |   1 -
>  5 files changed, 13 insertions(+), 149 deletions(-)
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> 
> diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
> index 3586d977e99d..fa4393ab3e7b 100644
> --- a/arch/arm/mach-at91/Makefile
> +++ b/arch/arm/mach-at91/Makefile
> @@ -1,9 +1,6 @@
>  #
>  # Makefile for the linux kernel.
>  #
> -ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
> -asflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
> -
>  obj-y		:= soc.o
>  
>  # CPU-specific support
> diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
> deleted file mode 100644
> index 39547496d4b0..000000000000
> --- a/arch/arm/mach-at91/include/mach/at91_ramc.h
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/*
> - * Header file for the Atmel RAM Controller
> - *
> - * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> - *
> - * Under GPLv2 only
> - */
> -
> -#ifndef __AT91_RAMC_H__
> -#define __AT91_RAMC_H__
> -
> -#ifndef __ASSEMBLY__
> -extern void __iomem *at91_ramc_base[];
> -
> -#define at91_ramc_read(id, field) \
> -	__raw_readl(at91_ramc_base[id] + field)
> -
> -#define at91_ramc_write(id, field, value) \
> -	__raw_writel(value, at91_ramc_base[id] + field)
> -#else
> -.extern at91_ramc_base
> -#endif
> -
> -#include <linux/mfd/syscon/atmel-mc.h>
> -#include <soc/at91/at91sam9_ddrsdr.h>
> -#include <soc/at91/at91sam9_sdramc.h>
> -
> -#endif /* __AT91_RAMC_H__ */
> diff --git a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h b/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> deleted file mode 100644
> index aeaadfb452af..000000000000
> --- a/arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> +++ /dev/null
> @@ -1,116 +0,0 @@
> -/*
> - * arch/arm/mach-at91/include/mach/at91rm9200_mc.h
> - *
> - * Copyright (C) 2005 Ivan Kokshaysky
> - * Copyright (C) SAN People
> - *
> - * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals registers.
> - * Based on AT91RM9200 datasheet revision E.
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> - */
> -
> -#ifndef AT91RM9200_MC_H
> -#define AT91RM9200_MC_H
> -
> -/* Memory Controller */
> -#define AT91_MC_RCR		0x00			/* MC Remap Control Register */
> -#define		AT91_MC_RCB		(1 <<  0)		/* Remap Command Bit */
> -
> -#define AT91_MC_ASR		0x04			/* MC Abort Status Register */
> -#define		AT91_MC_UNADD		(1 <<  0)		/* Undefined Address Abort Status */
> -#define		AT91_MC_MISADD		(1 <<  1)		/* Misaligned Address Abort Status */
> -#define		AT91_MC_ABTSZ		(3 <<  8)		/* Abort Size Status */
> -#define			AT91_MC_ABTSZ_BYTE		(0 << 8)
> -#define			AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> -#define			AT91_MC_ABTSZ_WORD		(2 << 8)
> -#define		AT91_MC_ABTTYP		(3 << 10)		/* Abort Type Status */
> -#define			AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> -#define			AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> -#define			AT91_MC_ABTTYP_FETCH		(2 << 10)
> -#define		AT91_MC_MST0		(1 << 16)		/* ARM920T Abort Source */
> -#define		AT91_MC_MST1		(1 << 17)		/* PDC Abort Source */
> -#define		AT91_MC_MST2		(1 << 18)		/* UHP Abort Source */
> -#define		AT91_MC_MST3		(1 << 19)		/* EMAC Abort Source */
> -#define		AT91_MC_SVMST0		(1 << 24)		/* Saved ARM920T Abort Source */
> -#define		AT91_MC_SVMST1		(1 << 25)		/* Saved PDC Abort Source */
> -#define		AT91_MC_SVMST2		(1 << 26)		/* Saved UHP Abort Source */
> -#define		AT91_MC_SVMST3		(1 << 27)		/* Saved EMAC Abort Source */
> -
> -#define AT91_MC_AASR		0x08			/* MC Abort Address Status Register */
> -
> -#define AT91_MC_MPR		0x0c			/* MC Master Priority Register */
> -#define		AT91_MPR_MSTP0		(7 <<  0)		/* ARM920T Priority */
> -#define		AT91_MPR_MSTP1		(7 <<  4)		/* PDC Priority */
> -#define		AT91_MPR_MSTP2		(7 <<  8)		/* UHP Priority */
> -#define		AT91_MPR_MSTP3		(7 << 12)		/* EMAC Priority */
> -
> -/* External Bus Interface (EBI) registers */
> -#define AT91_EBI_CSA		0x60			/* Chip Select Assignment Register */
> -#define		AT91_EBI_CS0A		(1 << 0)		/* Chip Select 0 Assignment */
> -#define			AT91_EBI_CS0A_SMC		(0 << 0)
> -#define			AT91_EBI_CS0A_BFC		(1 << 0)
> -#define		AT91_EBI_CS1A		(1 << 1)		/* Chip Select 1 Assignment */
> -#define			AT91_EBI_CS1A_SMC		(0 << 1)
> -#define			AT91_EBI_CS1A_SDRAMC		(1 << 1)
> -#define		AT91_EBI_CS3A		(1 << 3)		/* Chip Select 2 Assignment */
> -#define			AT91_EBI_CS3A_SMC		(0 << 3)
> -#define			AT91_EBI_CS3A_SMC_SMARTMEDIA	(1 << 3)
> -#define		AT91_EBI_CS4A		(1 << 4)		/* Chip Select 3 Assignment */
> -#define			AT91_EBI_CS4A_SMC		(0 << 4)
> -#define			AT91_EBI_CS4A_SMC_COMPACTFLASH	(1 << 4)
> -#define AT91_EBI_CFGR		(AT91_MC + 0x64)	/* Configuration Register */
> -#define		AT91_EBI_DBPUC		(1 << 0)		/* Data Bus Pull-Up Configuration */
> -
> -/* Static Memory Controller (SMC) registers */
> -#define	AT91_SMC_CSR(n)		(0x70 + ((n) * 4))	/* SMC Chip Select Register */
> -#define		AT91_SMC_NWS		(0x7f <<  0)		/* Number of Wait States */
> -#define			AT91_SMC_NWS_(x)	((x) << 0)
> -#define		AT91_SMC_WSEN		(1    <<  7)		/* Wait State Enable */
> -#define		AT91_SMC_TDF		(0xf  <<  8)		/* Data Float Time */
> -#define			AT91_SMC_TDF_(x)	((x) << 8)
> -#define		AT91_SMC_BAT		(1    << 12)		/* Byte Access Type */
> -#define		AT91_SMC_DBW		(3    << 13)		/* Data Bus Width */
> -#define			AT91_SMC_DBW_16		(1 << 13)
> -#define			AT91_SMC_DBW_8		(2 << 13)
> -#define		AT91_SMC_DPR		(1 << 15)		/* Data Read Protocol */
> -#define		AT91_SMC_ACSS		(3 << 16)		/* Address to Chip Select Setup */
> -#define			AT91_SMC_ACSS_STD	(0 << 16)
> -#define			AT91_SMC_ACSS_1		(1 << 16)
> -#define			AT91_SMC_ACSS_2		(2 << 16)
> -#define			AT91_SMC_ACSS_3		(3 << 16)
> -#define		AT91_SMC_RWSETUP	(7 << 24)		/* Read & Write Signal Time Setup */
> -#define			AT91_SMC_RWSETUP_(x)	((x) << 24)
> -#define		AT91_SMC_RWHOLD		(7 << 28)		/* Read & Write Signal Hold Time */
> -#define			AT91_SMC_RWHOLD_(x)	((x) << 28)
> -
> -/* Burst Flash Controller register */
> -#define AT91_BFC_MR		0xc0			/* Mode Register */
> -#define		AT91_BFC_BFCOM		(3   <<  0)		/* Burst Flash Controller Operating Mode */
> -#define			AT91_BFC_BFCOM_DISABLED	(0 << 0)
> -#define			AT91_BFC_BFCOM_ASYNC	(1 << 0)
> -#define			AT91_BFC_BFCOM_BURST	(2 << 0)
> -#define		AT91_BFC_BFCC		(3   <<  2)		/* Burst Flash Controller Clock */
> -#define			AT91_BFC_BFCC_MCK	(1 << 2)
> -#define			AT91_BFC_BFCC_DIV2	(2 << 2)
> -#define			AT91_BFC_BFCC_DIV4	(3 << 2)
> -#define		AT91_BFC_AVL		(0xf <<  4)		/* Address Valid Latency */
> -#define		AT91_BFC_PAGES		(7   <<  8)		/* Page Size */
> -#define			AT91_BFC_PAGES_NO_PAGE	(0 << 8)
> -#define			AT91_BFC_PAGES_16	(1 << 8)
> -#define			AT91_BFC_PAGES_32	(2 << 8)
> -#define			AT91_BFC_PAGES_64	(3 << 8)
> -#define			AT91_BFC_PAGES_128	(4 << 8)
> -#define			AT91_BFC_PAGES_256	(5 << 8)
> -#define			AT91_BFC_PAGES_512	(6 << 8)
> -#define			AT91_BFC_PAGES_1024	(7 << 8)
> -#define		AT91_BFC_OEL		(3   << 12)		/* Output Enable Latency */
> -#define		AT91_BFC_BAAEN		(1   << 16)		/* Burst Address Advance Enable */
> -#define		AT91_BFC_BFOEH		(1   << 17)		/* Burst Flash Output Enable Handling */
> -#define		AT91_BFC_MUXEN		(1   << 18)		/* Multiplexed Bus Enable */
> -#define		AT91_BFC_RDYEN		(1   << 19)		/* Ready Enable Mode */
> -
> -#endif
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index ecd875a91d52..3fcf8810f14e 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -13,7 +13,19 @@
>  
>  #include <asm/proc-fns.h>
>  
> -#include <mach/at91_ramc.h>
> +#include <linux/mfd/syscon/atmel-mc.h>
> +#include <soc/at91/at91sam9_ddrsdr.h>
> +#include <soc/at91/at91sam9_sdramc.h>
> +
> +#ifndef __ASSEMBLY__
> +extern void __iomem *at91_ramc_base[];
> +
> +#define at91_ramc_read(id, field) \
> +	__raw_readl(at91_ramc_base[id] + field)
> +
> +#define at91_ramc_write(id, field, value) \
> +	__raw_writel(value, at91_ramc_base[id] + field)
> +#endif
>  
>  #define AT91_MEMCTRL_MC		0
>  #define AT91_MEMCTRL_SDRAMC	1
> diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
> index fda4e0164ed7..0d95f488b47a 100644
> --- a/arch/arm/mach-at91/pm_suspend.S
> +++ b/arch/arm/mach-at91/pm_suspend.S
> @@ -13,7 +13,6 @@
>   */
>  #include <linux/linkage.h>
>  #include <linux/clk/at91_pmc.h>
> -#include <mach/at91_ramc.h>
>  #include "pm.h"
>  
>  #define	SRAMC_SELF_FRESH_ACTIVE		0x01
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 03/10] ata: at91: use syscon to configure the smc
  2015-03-16 22:44   ` Alexandre Belloni
  (?)
@ 2015-03-23 10:11     ` Nicolas Ferre
  -1 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:11 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> Use syscon/regmap to configure the smc. This allows to avoid using
> at91sam9_smc.h and to compile the driver in a multiplatform configuration.
> 
> The driver will still not probe until the proper DT bindings are added.

Alexandre, just for the record, can you describe the DT node that will
match this?
Is it one that will be added to
Documentation/devicetree/bindings/mfd/atmel-smc.txt?

...

> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>  drivers/ata/Kconfig     |  1 -
>  drivers/ata/pata_at91.c | 92 ++++++++++++++++++++++++++++++++++++++-----------
>  2 files changed, 71 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
> index 5f601553b9b0..a3a13605a9c4 100644
> --- a/drivers/ata/Kconfig
> +++ b/drivers/ata/Kconfig
> @@ -835,7 +835,6 @@ config PATA_AT32
>  config PATA_AT91
>  	tristate "PATA support for AT91SAM9260"
>  	depends on ARM && SOC_AT91SAM9
> -	depends on !ARCH_MULTIPLATFORM
>  	help
>  	  This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.
>  
> diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c
> index 9e85937d36a9..ace0a4de3449 100644
> --- a/drivers/ata/pata_at91.c
> +++ b/drivers/ata/pata_at91.c
> @@ -24,11 +24,13 @@
>  #include <linux/ata.h>
>  #include <linux/clk.h>
>  #include <linux/libata.h>
> +#include <linux/mfd/syscon.h>
> +#include <linux/mfd/syscon/atmel-smc.h>
>  #include <linux/platform_device.h>
>  #include <linux/ata_platform.h>
>  #include <linux/platform_data/atmel.h>
> +#include <linux/regmap.h>
>  
> -#include <mach/at91sam9_smc.h>
>  #include <asm/gpio.h>
>  
>  #define DRV_NAME		"pata_at91"
> @@ -57,6 +59,15 @@ struct smc_range {
>  	int max;
>  };
>  
> +struct regmap *smc;
> +
> +struct at91sam9_smc_generic_fields {
> +	struct regmap_field *setup;
> +	struct regmap_field *pulse;
> +	struct regmap_field *cycle;
> +	struct regmap_field *mode;
> +} fields;
> +
>  /**
>   * adjust_smc_value - adjust value for one of SMC registers.
>   * @value: adjusted value
> @@ -206,7 +217,6 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
>  {
>  	int ret = 0;
>  	int use_iordy;
> -	struct sam9_smc_config smc;
>  	unsigned int t6z;         /* data tristate time in ns */
>  	unsigned int cycle;       /* SMC Cycle width in MCK ticks */
>  	unsigned int setup;       /* SMC Setup width in MCK ticks */
> @@ -244,19 +254,21 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
>  
>  	dev_dbg(dev, "Use IORDY=%u, TDF Cycles=%u\n", use_iordy, tdf_cycles);
>  
> -	/* SMC Setup Register */
> -	smc.nwe_setup = smc.nrd_setup = setup;
> -	smc.ncs_write_setup = smc.ncs_read_setup = 0;
> -	/* SMC Pulse Register */
> -	smc.nwe_pulse = smc.nrd_pulse = pulse;
> -	smc.ncs_write_pulse = smc.ncs_read_pulse = cs_pulse;
> -	/* SMC Cycle Register */
> -	smc.write_cycle = smc.read_cycle = cycle;
> -	/* SMC Mode Register*/
> -	smc.tdf_cycles = tdf_cycles;
> -	smc.mode = info->mode;
> -
> -	sam9_smc_configure(0, info->cs, &smc);
> +	regmap_fields_write(fields.setup, info->cs,
> +			    AT91SAM9_SMC_NRDSETUP(setup) |
> +			    AT91SAM9_SMC_NWESETUP(setup) |
> +			    AT91SAM9_SMC_NCS_NRDSETUP(0) |
> +			    AT91SAM9_SMC_NCS_WRSETUP(0));
> +	regmap_fields_write(fields.pulse, info->cs,
> +			    AT91SAM9_SMC_NRDPULSE(pulse) |
> +			    AT91SAM9_SMC_NWEPULSE(pulse) |
> +			    AT91SAM9_SMC_NCS_NRDPULSE(cs_pulse) |
> +			    AT91SAM9_SMC_NCS_WRPULSE(cs_pulse));
> +	regmap_fields_write(fields.cycle, info->cs,
> +			    AT91SAM9_SMC_NRDCYCLE(cycle) |
> +			    AT91SAM9_SMC_NWECYCLE(cycle));
> +	regmap_fields_write(fields.mode, info->cs, info->mode |
> +			    AT91_SMC_TDF_(tdf_cycles));
>  }
>  
>  static void pata_at91_set_piomode(struct ata_port *ap, struct ata_device *adev)
> @@ -280,21 +292,21 @@ static unsigned int pata_at91_data_xfer_noirq(struct ata_device *dev,
>  {
>  	struct at91_ide_info *info = dev->link->ap->host->private_data;
>  	unsigned int consumed;
> +	unsigned int mode;
>  	unsigned long flags;
> -	struct sam9_smc_config smc;
>  
>  	local_irq_save(flags);
> -	sam9_smc_read_mode(0, info->cs, &smc);
> +	regmap_fields_read(fields.mode, info->cs, &mode);
>  
>  	/* set 16bit mode before writing data */
> -	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_16;
> -	sam9_smc_write_mode(0, info->cs, &smc);
> +	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
> +			    AT91_SMC_DBW_16);
>  
>  	consumed = ata_sff_data_xfer(dev, buf, buflen, rw);
>  
>  	/* restore 8bit mode after data is written */
> -	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_8;
> -	sam9_smc_write_mode(0, info->cs, &smc);
> +	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
> +			    AT91_SMC_DBW_8);
>  
>  	local_irq_restore(flags);
>  	return consumed;
> @@ -312,6 +324,36 @@ static struct ata_port_operations pata_at91_port_ops = {
>  	.cable_detect	= ata_cable_40wire,
>  };
>  
> +static int at91sam9_smc_fields_init(struct device *dev)
> +{
> +	struct reg_field field = REG_FIELD(0, 0, 31);
> +
> +	field.id_size = 8;
> +	field.id_offset = AT91SAM9_SMC_GENERIC_BLK_SZ;
> +
> +	field.reg = AT91SAM9_SMC_SETUP(AT91SAM9_SMC_GENERIC);
> +	fields.setup = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.setup))
> +		return PTR_ERR(fields.setup);
> +
> +	field.reg = AT91SAM9_SMC_PULSE(AT91SAM9_SMC_GENERIC);
> +	fields.pulse = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.pulse))
> +		return PTR_ERR(fields.pulse);
> +
> +	field.reg = AT91SAM9_SMC_CYCLE(AT91SAM9_SMC_GENERIC);
> +	fields.cycle = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.cycle))
> +		return PTR_ERR(fields.cycle);
> +
> +	field.reg = AT91SAM9_SMC_MODE(AT91SAM9_SMC_GENERIC);
> +	fields.mode = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.mode))
> +		return PTR_ERR(fields.mode);
> +
> +	return 0;
> +}
> +
>  static int pata_at91_probe(struct platform_device *pdev)
>  {
>  	struct at91_cf_data *board = dev_get_platdata(&pdev->dev);
> @@ -341,6 +383,14 @@ static int pata_at91_probe(struct platform_device *pdev)
>  
>  	irq = board->irq_pin;
>  
> +	smc = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "atmel,smc");

... yes, regarding this string "atmel,smc": what will it match?

Thanks, bye.

> +	if (IS_ERR(smc))
> +		return PTR_ERR(smc);
> +
> +	ret = at91sam9_smc_fields_init(dev);
> +	if (ret < 0)
> +		return ret;
> +
>  	/* init ata host */
>  
>  	host = ata_host_alloc(dev, 1);
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 03/10] ata: at91: use syscon to configure the smc
@ 2015-03-23 10:11     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:11 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> Use syscon/regmap to configure the smc. This allows to avoid using
> at91sam9_smc.h and to compile the driver in a multiplatform configuration.
> 
> The driver will still not probe until the proper DT bindings are added.

Alexandre, just for the record, can you describe the DT node that will
match this?
Is it one that will be added to
Documentation/devicetree/bindings/mfd/atmel-smc.txt?

...

> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>  drivers/ata/Kconfig     |  1 -
>  drivers/ata/pata_at91.c | 92 ++++++++++++++++++++++++++++++++++++++-----------
>  2 files changed, 71 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
> index 5f601553b9b0..a3a13605a9c4 100644
> --- a/drivers/ata/Kconfig
> +++ b/drivers/ata/Kconfig
> @@ -835,7 +835,6 @@ config PATA_AT32
>  config PATA_AT91
>  	tristate "PATA support for AT91SAM9260"
>  	depends on ARM && SOC_AT91SAM9
> -	depends on !ARCH_MULTIPLATFORM
>  	help
>  	  This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.
>  
> diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c
> index 9e85937d36a9..ace0a4de3449 100644
> --- a/drivers/ata/pata_at91.c
> +++ b/drivers/ata/pata_at91.c
> @@ -24,11 +24,13 @@
>  #include <linux/ata.h>
>  #include <linux/clk.h>
>  #include <linux/libata.h>
> +#include <linux/mfd/syscon.h>
> +#include <linux/mfd/syscon/atmel-smc.h>
>  #include <linux/platform_device.h>
>  #include <linux/ata_platform.h>
>  #include <linux/platform_data/atmel.h>
> +#include <linux/regmap.h>
>  
> -#include <mach/at91sam9_smc.h>
>  #include <asm/gpio.h>
>  
>  #define DRV_NAME		"pata_at91"
> @@ -57,6 +59,15 @@ struct smc_range {
>  	int max;
>  };
>  
> +struct regmap *smc;
> +
> +struct at91sam9_smc_generic_fields {
> +	struct regmap_field *setup;
> +	struct regmap_field *pulse;
> +	struct regmap_field *cycle;
> +	struct regmap_field *mode;
> +} fields;
> +
>  /**
>   * adjust_smc_value - adjust value for one of SMC registers.
>   * @value: adjusted value
> @@ -206,7 +217,6 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
>  {
>  	int ret = 0;
>  	int use_iordy;
> -	struct sam9_smc_config smc;
>  	unsigned int t6z;         /* data tristate time in ns */
>  	unsigned int cycle;       /* SMC Cycle width in MCK ticks */
>  	unsigned int setup;       /* SMC Setup width in MCK ticks */
> @@ -244,19 +254,21 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
>  
>  	dev_dbg(dev, "Use IORDY=%u, TDF Cycles=%u\n", use_iordy, tdf_cycles);
>  
> -	/* SMC Setup Register */
> -	smc.nwe_setup = smc.nrd_setup = setup;
> -	smc.ncs_write_setup = smc.ncs_read_setup = 0;
> -	/* SMC Pulse Register */
> -	smc.nwe_pulse = smc.nrd_pulse = pulse;
> -	smc.ncs_write_pulse = smc.ncs_read_pulse = cs_pulse;
> -	/* SMC Cycle Register */
> -	smc.write_cycle = smc.read_cycle = cycle;
> -	/* SMC Mode Register*/
> -	smc.tdf_cycles = tdf_cycles;
> -	smc.mode = info->mode;
> -
> -	sam9_smc_configure(0, info->cs, &smc);
> +	regmap_fields_write(fields.setup, info->cs,
> +			    AT91SAM9_SMC_NRDSETUP(setup) |
> +			    AT91SAM9_SMC_NWESETUP(setup) |
> +			    AT91SAM9_SMC_NCS_NRDSETUP(0) |
> +			    AT91SAM9_SMC_NCS_WRSETUP(0));
> +	regmap_fields_write(fields.pulse, info->cs,
> +			    AT91SAM9_SMC_NRDPULSE(pulse) |
> +			    AT91SAM9_SMC_NWEPULSE(pulse) |
> +			    AT91SAM9_SMC_NCS_NRDPULSE(cs_pulse) |
> +			    AT91SAM9_SMC_NCS_WRPULSE(cs_pulse));
> +	regmap_fields_write(fields.cycle, info->cs,
> +			    AT91SAM9_SMC_NRDCYCLE(cycle) |
> +			    AT91SAM9_SMC_NWECYCLE(cycle));
> +	regmap_fields_write(fields.mode, info->cs, info->mode |
> +			    AT91_SMC_TDF_(tdf_cycles));
>  }
>  
>  static void pata_at91_set_piomode(struct ata_port *ap, struct ata_device *adev)
> @@ -280,21 +292,21 @@ static unsigned int pata_at91_data_xfer_noirq(struct ata_device *dev,
>  {
>  	struct at91_ide_info *info = dev->link->ap->host->private_data;
>  	unsigned int consumed;
> +	unsigned int mode;
>  	unsigned long flags;
> -	struct sam9_smc_config smc;
>  
>  	local_irq_save(flags);
> -	sam9_smc_read_mode(0, info->cs, &smc);
> +	regmap_fields_read(fields.mode, info->cs, &mode);
>  
>  	/* set 16bit mode before writing data */
> -	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_16;
> -	sam9_smc_write_mode(0, info->cs, &smc);
> +	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
> +			    AT91_SMC_DBW_16);
>  
>  	consumed = ata_sff_data_xfer(dev, buf, buflen, rw);
>  
>  	/* restore 8bit mode after data is written */
> -	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_8;
> -	sam9_smc_write_mode(0, info->cs, &smc);
> +	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
> +			    AT91_SMC_DBW_8);
>  
>  	local_irq_restore(flags);
>  	return consumed;
> @@ -312,6 +324,36 @@ static struct ata_port_operations pata_at91_port_ops = {
>  	.cable_detect	= ata_cable_40wire,
>  };
>  
> +static int at91sam9_smc_fields_init(struct device *dev)
> +{
> +	struct reg_field field = REG_FIELD(0, 0, 31);
> +
> +	field.id_size = 8;
> +	field.id_offset = AT91SAM9_SMC_GENERIC_BLK_SZ;
> +
> +	field.reg = AT91SAM9_SMC_SETUP(AT91SAM9_SMC_GENERIC);
> +	fields.setup = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.setup))
> +		return PTR_ERR(fields.setup);
> +
> +	field.reg = AT91SAM9_SMC_PULSE(AT91SAM9_SMC_GENERIC);
> +	fields.pulse = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.pulse))
> +		return PTR_ERR(fields.pulse);
> +
> +	field.reg = AT91SAM9_SMC_CYCLE(AT91SAM9_SMC_GENERIC);
> +	fields.cycle = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.cycle))
> +		return PTR_ERR(fields.cycle);
> +
> +	field.reg = AT91SAM9_SMC_MODE(AT91SAM9_SMC_GENERIC);
> +	fields.mode = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.mode))
> +		return PTR_ERR(fields.mode);
> +
> +	return 0;
> +}
> +
>  static int pata_at91_probe(struct platform_device *pdev)
>  {
>  	struct at91_cf_data *board = dev_get_platdata(&pdev->dev);
> @@ -341,6 +383,14 @@ static int pata_at91_probe(struct platform_device *pdev)
>  
>  	irq = board->irq_pin;
>  
> +	smc = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "atmel,smc");

... yes, regarding this string "atmel,smc": what will it match?

Thanks, bye.

> +	if (IS_ERR(smc))
> +		return PTR_ERR(smc);
> +
> +	ret = at91sam9_smc_fields_init(dev);
> +	if (ret < 0)
> +		return ret;
> +
>  	/* init ata host */
>  
>  	host = ata_host_alloc(dev, 1);
> 


-- 
Nicolas Ferre

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

* [PATCH 03/10] ata: at91: use syscon to configure the smc
@ 2015-03-23 10:11     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:11 UTC (permalink / raw)
  To: linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a ?crit :
> Use syscon/regmap to configure the smc. This allows to avoid using
> at91sam9_smc.h and to compile the driver in a multiplatform configuration.
> 
> The driver will still not probe until the proper DT bindings are added.

Alexandre, just for the record, can you describe the DT node that will
match this?
Is it one that will be added to
Documentation/devicetree/bindings/mfd/atmel-smc.txt?

...

> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>  drivers/ata/Kconfig     |  1 -
>  drivers/ata/pata_at91.c | 92 ++++++++++++++++++++++++++++++++++++++-----------
>  2 files changed, 71 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
> index 5f601553b9b0..a3a13605a9c4 100644
> --- a/drivers/ata/Kconfig
> +++ b/drivers/ata/Kconfig
> @@ -835,7 +835,6 @@ config PATA_AT32
>  config PATA_AT91
>  	tristate "PATA support for AT91SAM9260"
>  	depends on ARM && SOC_AT91SAM9
> -	depends on !ARCH_MULTIPLATFORM
>  	help
>  	  This option enables support for IDE devices on the Atmel AT91SAM9260 SoC.
>  
> diff --git a/drivers/ata/pata_at91.c b/drivers/ata/pata_at91.c
> index 9e85937d36a9..ace0a4de3449 100644
> --- a/drivers/ata/pata_at91.c
> +++ b/drivers/ata/pata_at91.c
> @@ -24,11 +24,13 @@
>  #include <linux/ata.h>
>  #include <linux/clk.h>
>  #include <linux/libata.h>
> +#include <linux/mfd/syscon.h>
> +#include <linux/mfd/syscon/atmel-smc.h>
>  #include <linux/platform_device.h>
>  #include <linux/ata_platform.h>
>  #include <linux/platform_data/atmel.h>
> +#include <linux/regmap.h>
>  
> -#include <mach/at91sam9_smc.h>
>  #include <asm/gpio.h>
>  
>  #define DRV_NAME		"pata_at91"
> @@ -57,6 +59,15 @@ struct smc_range {
>  	int max;
>  };
>  
> +struct regmap *smc;
> +
> +struct at91sam9_smc_generic_fields {
> +	struct regmap_field *setup;
> +	struct regmap_field *pulse;
> +	struct regmap_field *cycle;
> +	struct regmap_field *mode;
> +} fields;
> +
>  /**
>   * adjust_smc_value - adjust value for one of SMC registers.
>   * @value: adjusted value
> @@ -206,7 +217,6 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
>  {
>  	int ret = 0;
>  	int use_iordy;
> -	struct sam9_smc_config smc;
>  	unsigned int t6z;         /* data tristate time in ns */
>  	unsigned int cycle;       /* SMC Cycle width in MCK ticks */
>  	unsigned int setup;       /* SMC Setup width in MCK ticks */
> @@ -244,19 +254,21 @@ static void set_smc_timing(struct device *dev, struct ata_device *adev,
>  
>  	dev_dbg(dev, "Use IORDY=%u, TDF Cycles=%u\n", use_iordy, tdf_cycles);
>  
> -	/* SMC Setup Register */
> -	smc.nwe_setup = smc.nrd_setup = setup;
> -	smc.ncs_write_setup = smc.ncs_read_setup = 0;
> -	/* SMC Pulse Register */
> -	smc.nwe_pulse = smc.nrd_pulse = pulse;
> -	smc.ncs_write_pulse = smc.ncs_read_pulse = cs_pulse;
> -	/* SMC Cycle Register */
> -	smc.write_cycle = smc.read_cycle = cycle;
> -	/* SMC Mode Register*/
> -	smc.tdf_cycles = tdf_cycles;
> -	smc.mode = info->mode;
> -
> -	sam9_smc_configure(0, info->cs, &smc);
> +	regmap_fields_write(fields.setup, info->cs,
> +			    AT91SAM9_SMC_NRDSETUP(setup) |
> +			    AT91SAM9_SMC_NWESETUP(setup) |
> +			    AT91SAM9_SMC_NCS_NRDSETUP(0) |
> +			    AT91SAM9_SMC_NCS_WRSETUP(0));
> +	regmap_fields_write(fields.pulse, info->cs,
> +			    AT91SAM9_SMC_NRDPULSE(pulse) |
> +			    AT91SAM9_SMC_NWEPULSE(pulse) |
> +			    AT91SAM9_SMC_NCS_NRDPULSE(cs_pulse) |
> +			    AT91SAM9_SMC_NCS_WRPULSE(cs_pulse));
> +	regmap_fields_write(fields.cycle, info->cs,
> +			    AT91SAM9_SMC_NRDCYCLE(cycle) |
> +			    AT91SAM9_SMC_NWECYCLE(cycle));
> +	regmap_fields_write(fields.mode, info->cs, info->mode |
> +			    AT91_SMC_TDF_(tdf_cycles));
>  }
>  
>  static void pata_at91_set_piomode(struct ata_port *ap, struct ata_device *adev)
> @@ -280,21 +292,21 @@ static unsigned int pata_at91_data_xfer_noirq(struct ata_device *dev,
>  {
>  	struct at91_ide_info *info = dev->link->ap->host->private_data;
>  	unsigned int consumed;
> +	unsigned int mode;
>  	unsigned long flags;
> -	struct sam9_smc_config smc;
>  
>  	local_irq_save(flags);
> -	sam9_smc_read_mode(0, info->cs, &smc);
> +	regmap_fields_read(fields.mode, info->cs, &mode);
>  
>  	/* set 16bit mode before writing data */
> -	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_16;
> -	sam9_smc_write_mode(0, info->cs, &smc);
> +	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
> +			    AT91_SMC_DBW_16);
>  
>  	consumed = ata_sff_data_xfer(dev, buf, buflen, rw);
>  
>  	/* restore 8bit mode after data is written */
> -	smc.mode = (smc.mode & ~AT91_SMC_DBW) | AT91_SMC_DBW_8;
> -	sam9_smc_write_mode(0, info->cs, &smc);
> +	regmap_fields_write(fields.mode, info->cs, (mode & ~AT91_SMC_DBW) |
> +			    AT91_SMC_DBW_8);
>  
>  	local_irq_restore(flags);
>  	return consumed;
> @@ -312,6 +324,36 @@ static struct ata_port_operations pata_at91_port_ops = {
>  	.cable_detect	= ata_cable_40wire,
>  };
>  
> +static int at91sam9_smc_fields_init(struct device *dev)
> +{
> +	struct reg_field field = REG_FIELD(0, 0, 31);
> +
> +	field.id_size = 8;
> +	field.id_offset = AT91SAM9_SMC_GENERIC_BLK_SZ;
> +
> +	field.reg = AT91SAM9_SMC_SETUP(AT91SAM9_SMC_GENERIC);
> +	fields.setup = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.setup))
> +		return PTR_ERR(fields.setup);
> +
> +	field.reg = AT91SAM9_SMC_PULSE(AT91SAM9_SMC_GENERIC);
> +	fields.pulse = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.pulse))
> +		return PTR_ERR(fields.pulse);
> +
> +	field.reg = AT91SAM9_SMC_CYCLE(AT91SAM9_SMC_GENERIC);
> +	fields.cycle = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.cycle))
> +		return PTR_ERR(fields.cycle);
> +
> +	field.reg = AT91SAM9_SMC_MODE(AT91SAM9_SMC_GENERIC);
> +	fields.mode = devm_regmap_field_alloc(dev, smc, field);
> +	if (IS_ERR(fields.mode))
> +		return PTR_ERR(fields.mode);
> +
> +	return 0;
> +}
> +
>  static int pata_at91_probe(struct platform_device *pdev)
>  {
>  	struct at91_cf_data *board = dev_get_platdata(&pdev->dev);
> @@ -341,6 +383,14 @@ static int pata_at91_probe(struct platform_device *pdev)
>  
>  	irq = board->irq_pin;
>  
> +	smc = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "atmel,smc");

... yes, regarding this string "atmel,smc": what will it match?

Thanks, bye.

> +	if (IS_ERR(smc))
> +		return PTR_ERR(smc);
> +
> +	ret = at91sam9_smc_fields_init(dev);
> +	if (ret < 0)
> +		return ret;
> +
>  	/* init ata host */
>  
>  	host = ata_host_alloc(dev, 1);
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 00/10] ARM: at91 cleanups for 4.1 #2
  2015-03-16 22:44 ` Alexandre Belloni
  (?)
@ 2015-03-23 10:14   ` Nicolas Ferre
  -1 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:14 UTC (permalink / raw)
  To: Alexandre Belloni, Lee Jones
  Cc: Boris Brezillon, Jean-Christophe Plagniol-Villard, linux-kernel,
	Tejun Heo, linux-ide, linux-pcmcia, linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> Hi,
> 
> This patch set finishes the clean up of the mach-at91 directory.
> 
> It fixed the remaining two drivers (at91_cf and pata_at91) so that they compile
> in a multiplatform configuration.
> 
> Then it removes the uneeded headers.
> 
> 
> Alexandre Belloni (9):
>   ARM: at91/pm: move the standby functions to pm.c
>   ARM: at91/pm: move AT91_MEMCTRL_* to pm.h

Ok, I only take the first 2 patches of this series for now.

The rest looks good as well, but I need more insight and the review from
Lee to go forward.

Thanks, bye.


>   ata: at91: use syscon to configure the smc
>   ARM: at91: drop sam9_smc.c
>   ARM: at91: declare the at91rm9200 memory controller as a syscon
>   pcmcia: at91_cf: Use syscon to configure the MC/smc
>   ARM: at91/pm: use the atmel-mc syscon defines
>   ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
>   ARM: at91: remove at91rm9200_sdramc.h
> 
> Boris Brezillon (1):
>   mfd: syscon: Add Atmel MC (Memory Controller) registers definition
> 
>  .../devicetree/bindings/arm/atmel-at91.txt         |   2 +-
>  arch/arm/boot/dts/at91rm9200.dtsi                  |   2 +-
>  arch/arm/mach-at91/Makefile                        |   5 -
>  arch/arm/mach-at91/include/mach/at91_ramc.h        |  32 -----
>  arch/arm/mach-at91/include/mach/at91rm9200_mc.h    | 116 -----------------
>  arch/arm/mach-at91/include/mach/at91sam9_smc.h     |  98 --------------
>  arch/arm/mach-at91/pm.c                            |  91 ++++++++++++-
>  arch/arm/mach-at91/pm.h                            | 110 +++-------------
>  arch/arm/mach-at91/pm_suspend.S                    |   3 +-
>  arch/arm/mach-at91/sam9_smc.c                      | 136 -------------------
>  arch/arm/mach-at91/sam9_smc.h                      |  11 --
>  drivers/ata/Kconfig                                |   1 -
>  drivers/ata/pata_at91.c                            |  92 ++++++++++---
>  drivers/pcmcia/Kconfig                             |   1 -
>  drivers/pcmcia/at91_cf.c                           |  25 ++--
>  include/linux/mfd/syscon/atmel-mc.h                | 144 +++++++++++++++++++++
>  include/soc/at91/at91rm9200_sdramc.h               |  63 ---------
>  17 files changed, 339 insertions(+), 593 deletions(-)
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91sam9_smc.h
>  delete mode 100644 arch/arm/mach-at91/sam9_smc.c
>  delete mode 100644 arch/arm/mach-at91/sam9_smc.h
>  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
>  delete mode 100644 include/soc/at91/at91rm9200_sdramc.h
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 00/10] ARM: at91 cleanups for 4.1 #2
@ 2015-03-23 10:14   ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:14 UTC (permalink / raw)
  To: Alexandre Belloni, Lee Jones
  Cc: Boris Brezillon, Jean-Christophe Plagniol-Villard, linux-kernel,
	Tejun Heo, linux-ide, linux-pcmcia, linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> Hi,
> 
> This patch set finishes the clean up of the mach-at91 directory.
> 
> It fixed the remaining two drivers (at91_cf and pata_at91) so that they compile
> in a multiplatform configuration.
> 
> Then it removes the uneeded headers.
> 
> 
> Alexandre Belloni (9):
>   ARM: at91/pm: move the standby functions to pm.c
>   ARM: at91/pm: move AT91_MEMCTRL_* to pm.h

Ok, I only take the first 2 patches of this series for now.

The rest looks good as well, but I need more insight and the review from
Lee to go forward.

Thanks, bye.


>   ata: at91: use syscon to configure the smc
>   ARM: at91: drop sam9_smc.c
>   ARM: at91: declare the at91rm9200 memory controller as a syscon
>   pcmcia: at91_cf: Use syscon to configure the MC/smc
>   ARM: at91/pm: use the atmel-mc syscon defines
>   ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
>   ARM: at91: remove at91rm9200_sdramc.h
> 
> Boris Brezillon (1):
>   mfd: syscon: Add Atmel MC (Memory Controller) registers definition
> 
>  .../devicetree/bindings/arm/atmel-at91.txt         |   2 +-
>  arch/arm/boot/dts/at91rm9200.dtsi                  |   2 +-
>  arch/arm/mach-at91/Makefile                        |   5 -
>  arch/arm/mach-at91/include/mach/at91_ramc.h        |  32 -----
>  arch/arm/mach-at91/include/mach/at91rm9200_mc.h    | 116 -----------------
>  arch/arm/mach-at91/include/mach/at91sam9_smc.h     |  98 --------------
>  arch/arm/mach-at91/pm.c                            |  91 ++++++++++++-
>  arch/arm/mach-at91/pm.h                            | 110 +++-------------
>  arch/arm/mach-at91/pm_suspend.S                    |   3 +-
>  arch/arm/mach-at91/sam9_smc.c                      | 136 -------------------
>  arch/arm/mach-at91/sam9_smc.h                      |  11 --
>  drivers/ata/Kconfig                                |   1 -
>  drivers/ata/pata_at91.c                            |  92 ++++++++++---
>  drivers/pcmcia/Kconfig                             |   1 -
>  drivers/pcmcia/at91_cf.c                           |  25 ++--
>  include/linux/mfd/syscon/atmel-mc.h                | 144 +++++++++++++++++++++
>  include/soc/at91/at91rm9200_sdramc.h               |  63 ---------
>  17 files changed, 339 insertions(+), 593 deletions(-)
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91sam9_smc.h
>  delete mode 100644 arch/arm/mach-at91/sam9_smc.c
>  delete mode 100644 arch/arm/mach-at91/sam9_smc.h
>  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
>  delete mode 100644 include/soc/at91/at91rm9200_sdramc.h
> 


-- 
Nicolas Ferre

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

* [PATCH 00/10] ARM: at91 cleanups for 4.1 #2
@ 2015-03-23 10:14   ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:14 UTC (permalink / raw)
  To: linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a ?crit :
> Hi,
> 
> This patch set finishes the clean up of the mach-at91 directory.
> 
> It fixed the remaining two drivers (at91_cf and pata_at91) so that they compile
> in a multiplatform configuration.
> 
> Then it removes the uneeded headers.
> 
> 
> Alexandre Belloni (9):
>   ARM: at91/pm: move the standby functions to pm.c
>   ARM: at91/pm: move AT91_MEMCTRL_* to pm.h

Ok, I only take the first 2 patches of this series for now.

The rest looks good as well, but I need more insight and the review from
Lee to go forward.

Thanks, bye.


>   ata: at91: use syscon to configure the smc
>   ARM: at91: drop sam9_smc.c
>   ARM: at91: declare the at91rm9200 memory controller as a syscon
>   pcmcia: at91_cf: Use syscon to configure the MC/smc
>   ARM: at91/pm: use the atmel-mc syscon defines
>   ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h
>   ARM: at91: remove at91rm9200_sdramc.h
> 
> Boris Brezillon (1):
>   mfd: syscon: Add Atmel MC (Memory Controller) registers definition
> 
>  .../devicetree/bindings/arm/atmel-at91.txt         |   2 +-
>  arch/arm/boot/dts/at91rm9200.dtsi                  |   2 +-
>  arch/arm/mach-at91/Makefile                        |   5 -
>  arch/arm/mach-at91/include/mach/at91_ramc.h        |  32 -----
>  arch/arm/mach-at91/include/mach/at91rm9200_mc.h    | 116 -----------------
>  arch/arm/mach-at91/include/mach/at91sam9_smc.h     |  98 --------------
>  arch/arm/mach-at91/pm.c                            |  91 ++++++++++++-
>  arch/arm/mach-at91/pm.h                            | 110 +++-------------
>  arch/arm/mach-at91/pm_suspend.S                    |   3 +-
>  arch/arm/mach-at91/sam9_smc.c                      | 136 -------------------
>  arch/arm/mach-at91/sam9_smc.h                      |  11 --
>  drivers/ata/Kconfig                                |   1 -
>  drivers/ata/pata_at91.c                            |  92 ++++++++++---
>  drivers/pcmcia/Kconfig                             |   1 -
>  drivers/pcmcia/at91_cf.c                           |  25 ++--
>  include/linux/mfd/syscon/atmel-mc.h                | 144 +++++++++++++++++++++
>  include/soc/at91/at91rm9200_sdramc.h               |  63 ---------
>  17 files changed, 339 insertions(+), 593 deletions(-)
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91_ramc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91rm9200_mc.h
>  delete mode 100644 arch/arm/mach-at91/include/mach/at91sam9_smc.h
>  delete mode 100644 arch/arm/mach-at91/sam9_smc.c
>  delete mode 100644 arch/arm/mach-at91/sam9_smc.h
>  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
>  delete mode 100644 include/soc/at91/at91rm9200_sdramc.h
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 01/10] ARM: at91/pm: move the standby functions to pm.c
  2015-03-16 22:44   ` Alexandre Belloni
  (?)
@ 2015-03-23 10:14     ` Nicolas Ferre
  -1 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:14 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> The standby functions are now only used in pm.c, move them there.
> 
> Also, they are not inlined as a pointer to those functions is passed to the
> cpuidle driver.
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
>  arch/arm/mach-at91/pm.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
>  arch/arm/mach-at91/pm.h | 92 -------------------------------------------------
>  2 files changed, 89 insertions(+), 92 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
> index f93a735ba327..5062699cbb12 100644
> --- a/arch/arm/mach-at91/pm.c
> +++ b/arch/arm/mach-at91/pm.c
> @@ -222,6 +222,95 @@ static void at91_pm_set_standby(void (*at91_standby)(void))
>  		at91_cpuidle_device.dev.platform_data = at91_standby;
>  }
>  
> +/*
> + * The AT91RM9200 goes into self-refresh mode with this command, and will
> + * terminate self-refresh automatically on the next SDRAM access.
> + *
> + * Self-refresh mode is exited as soon as a memory access is made, but we don't
> + * know for sure when that happens. However, we need to restore the low-power
> + * mode if it was enabled before going idle. Restoring low-power mode while
> + * still in self-refresh is "not recommended", but seems to work.
> + */
> +static void at91rm9200_standby(void)
> +{
> +	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
> +
> +	asm volatile(
> +		"b    1f\n\t"
> +		".align    5\n\t"
> +		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
> +		"    str    %0, [%1, %2]\n\t"
> +		"    str    %3, [%1, %4]\n\t"
> +		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
> +		"    str    %5, [%1, %2]"
> +		:
> +		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
> +		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
> +		  "r" (lpr));
> +}
> +
> +/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> + * remember.
> + */
> +static void at91_ddr_standby(void)
> +{
> +	/* Those two values allow us to delay self-refresh activation
> +	 * to the maximum. */
> +	u32 lpr0, lpr1 = 0;
> +	u32 saved_lpr0, saved_lpr1 = 0;
> +
> +	if (at91_ramc_base[1]) {
> +		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
> +		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
> +		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> +	}
> +
> +	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
> +	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
> +	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> +
> +	/* self-refresh mode now */
> +	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
> +
> +	cpu_do_idle();
> +
> +	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
> +}
> +
> +/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> + * remember.
> + */
> +static void at91sam9_sdram_standby(void)
> +{
> +	u32 lpr0, lpr1 = 0;
> +	u32 saved_lpr0, saved_lpr1 = 0;
> +
> +	if (at91_ramc_base[1]) {
> +		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
> +		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
> +		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> +	}
> +
> +	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
> +	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
> +	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> +
> +	/* self-refresh mode now */
> +	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
> +
> +	cpu_do_idle();
> +
> +	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
> +}
> +
>  static const struct of_device_id ramc_ids[] __initconst = {
>  	{ .compatible = "atmel,at91rm9200-sdramc", .data = at91rm9200_standby },
>  	{ .compatible = "atmel,at91sam9260-sdramc", .data = at91sam9_sdram_standby },
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index dcacfa1ad3fa..3223967d3460 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -23,96 +23,4 @@
>  
>  #define	AT91_PM_SLOW_CLOCK	0x01
>  
> -/*
> - * The AT91RM9200 goes into self-refresh mode with this command, and will
> - * terminate self-refresh automatically on the next SDRAM access.
> - *
> - * Self-refresh mode is exited as soon as a memory access is made, but we don't
> - * know for sure when that happens. However, we need to restore the low-power
> - * mode if it was enabled before going idle. Restoring low-power mode while
> - * still in self-refresh is "not recommended", but seems to work.
> - */
> -
> -#ifndef __ASSEMBLY__
> -static inline void at91rm9200_standby(void)
> -{
> -	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
> -
> -	asm volatile(
> -		"b    1f\n\t"
> -		".align    5\n\t"
> -		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
> -		"    str    %0, [%1, %2]\n\t"
> -		"    str    %3, [%1, %4]\n\t"
> -		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
> -		"    str    %5, [%1, %2]"
> -		:
> -		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
> -		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
> -		  "r" (lpr));
> -}
> -
> -/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> - * remember.
> - */
> -static inline void at91_ddr_standby(void)
> -{
> -	/* Those two values allow us to delay self-refresh activation
> -	 * to the maximum. */
> -	u32 lpr0, lpr1 = 0;
> -	u32 saved_lpr0, saved_lpr1 = 0;
> -
> -	if (at91_ramc_base[1]) {
> -		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
> -		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
> -		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> -	}
> -
> -	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
> -	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
> -	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> -
> -	/* self-refresh mode now */
> -	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
> -
> -	cpu_do_idle();
> -
> -	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
> -}
> -
> -/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> - * remember.
> - */
> -static inline void at91sam9_sdram_standby(void)
> -{
> -	u32 lpr0, lpr1 = 0;
> -	u32 saved_lpr0, saved_lpr1 = 0;
> -
> -	if (at91_ramc_base[1]) {
> -		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
> -		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
> -		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> -	}
> -
> -	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
> -	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
> -	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> -
> -	/* self-refresh mode now */
> -	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
> -
> -	cpu_do_idle();
> -
> -	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
> -}
> -
> -#endif
>  #endif
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 01/10] ARM: at91/pm: move the standby functions to pm.c
@ 2015-03-23 10:14     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:14 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> The standby functions are now only used in pm.c, move them there.
> 
> Also, they are not inlined as a pointer to those functions is passed to the
> cpuidle driver.
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
>  arch/arm/mach-at91/pm.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
>  arch/arm/mach-at91/pm.h | 92 -------------------------------------------------
>  2 files changed, 89 insertions(+), 92 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
> index f93a735ba327..5062699cbb12 100644
> --- a/arch/arm/mach-at91/pm.c
> +++ b/arch/arm/mach-at91/pm.c
> @@ -222,6 +222,95 @@ static void at91_pm_set_standby(void (*at91_standby)(void))
>  		at91_cpuidle_device.dev.platform_data = at91_standby;
>  }
>  
> +/*
> + * The AT91RM9200 goes into self-refresh mode with this command, and will
> + * terminate self-refresh automatically on the next SDRAM access.
> + *
> + * Self-refresh mode is exited as soon as a memory access is made, but we don't
> + * know for sure when that happens. However, we need to restore the low-power
> + * mode if it was enabled before going idle. Restoring low-power mode while
> + * still in self-refresh is "not recommended", but seems to work.
> + */
> +static void at91rm9200_standby(void)
> +{
> +	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
> +
> +	asm volatile(
> +		"b    1f\n\t"
> +		".align    5\n\t"
> +		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
> +		"    str    %0, [%1, %2]\n\t"
> +		"    str    %3, [%1, %4]\n\t"
> +		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
> +		"    str    %5, [%1, %2]"
> +		:
> +		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
> +		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
> +		  "r" (lpr));
> +}
> +
> +/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> + * remember.
> + */
> +static void at91_ddr_standby(void)
> +{
> +	/* Those two values allow us to delay self-refresh activation
> +	 * to the maximum. */
> +	u32 lpr0, lpr1 = 0;
> +	u32 saved_lpr0, saved_lpr1 = 0;
> +
> +	if (at91_ramc_base[1]) {
> +		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
> +		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
> +		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> +	}
> +
> +	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
> +	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
> +	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> +
> +	/* self-refresh mode now */
> +	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
> +
> +	cpu_do_idle();
> +
> +	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
> +}
> +
> +/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> + * remember.
> + */
> +static void at91sam9_sdram_standby(void)
> +{
> +	u32 lpr0, lpr1 = 0;
> +	u32 saved_lpr0, saved_lpr1 = 0;
> +
> +	if (at91_ramc_base[1]) {
> +		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
> +		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
> +		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> +	}
> +
> +	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
> +	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
> +	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> +
> +	/* self-refresh mode now */
> +	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
> +
> +	cpu_do_idle();
> +
> +	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
> +}
> +
>  static const struct of_device_id ramc_ids[] __initconst = {
>  	{ .compatible = "atmel,at91rm9200-sdramc", .data = at91rm9200_standby },
>  	{ .compatible = "atmel,at91sam9260-sdramc", .data = at91sam9_sdram_standby },
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index dcacfa1ad3fa..3223967d3460 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -23,96 +23,4 @@
>  
>  #define	AT91_PM_SLOW_CLOCK	0x01
>  
> -/*
> - * The AT91RM9200 goes into self-refresh mode with this command, and will
> - * terminate self-refresh automatically on the next SDRAM access.
> - *
> - * Self-refresh mode is exited as soon as a memory access is made, but we don't
> - * know for sure when that happens. However, we need to restore the low-power
> - * mode if it was enabled before going idle. Restoring low-power mode while
> - * still in self-refresh is "not recommended", but seems to work.
> - */
> -
> -#ifndef __ASSEMBLY__
> -static inline void at91rm9200_standby(void)
> -{
> -	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
> -
> -	asm volatile(
> -		"b    1f\n\t"
> -		".align    5\n\t"
> -		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
> -		"    str    %0, [%1, %2]\n\t"
> -		"    str    %3, [%1, %4]\n\t"
> -		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
> -		"    str    %5, [%1, %2]"
> -		:
> -		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
> -		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
> -		  "r" (lpr));
> -}
> -
> -/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> - * remember.
> - */
> -static inline void at91_ddr_standby(void)
> -{
> -	/* Those two values allow us to delay self-refresh activation
> -	 * to the maximum. */
> -	u32 lpr0, lpr1 = 0;
> -	u32 saved_lpr0, saved_lpr1 = 0;
> -
> -	if (at91_ramc_base[1]) {
> -		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
> -		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
> -		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> -	}
> -
> -	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
> -	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
> -	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> -
> -	/* self-refresh mode now */
> -	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
> -
> -	cpu_do_idle();
> -
> -	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
> -}
> -
> -/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> - * remember.
> - */
> -static inline void at91sam9_sdram_standby(void)
> -{
> -	u32 lpr0, lpr1 = 0;
> -	u32 saved_lpr0, saved_lpr1 = 0;
> -
> -	if (at91_ramc_base[1]) {
> -		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
> -		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
> -		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> -	}
> -
> -	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
> -	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
> -	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> -
> -	/* self-refresh mode now */
> -	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
> -
> -	cpu_do_idle();
> -
> -	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
> -}
> -
> -#endif
>  #endif
> 


-- 
Nicolas Ferre

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

* [PATCH 01/10] ARM: at91/pm: move the standby functions to pm.c
@ 2015-03-23 10:14     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:14 UTC (permalink / raw)
  To: linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a ?crit :
> The standby functions are now only used in pm.c, move them there.
> 
> Also, they are not inlined as a pointer to those functions is passed to the
> cpuidle driver.
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
>  arch/arm/mach-at91/pm.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
>  arch/arm/mach-at91/pm.h | 92 -------------------------------------------------
>  2 files changed, 89 insertions(+), 92 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
> index f93a735ba327..5062699cbb12 100644
> --- a/arch/arm/mach-at91/pm.c
> +++ b/arch/arm/mach-at91/pm.c
> @@ -222,6 +222,95 @@ static void at91_pm_set_standby(void (*at91_standby)(void))
>  		at91_cpuidle_device.dev.platform_data = at91_standby;
>  }
>  
> +/*
> + * The AT91RM9200 goes into self-refresh mode with this command, and will
> + * terminate self-refresh automatically on the next SDRAM access.
> + *
> + * Self-refresh mode is exited as soon as a memory access is made, but we don't
> + * know for sure when that happens. However, we need to restore the low-power
> + * mode if it was enabled before going idle. Restoring low-power mode while
> + * still in self-refresh is "not recommended", but seems to work.
> + */
> +static void at91rm9200_standby(void)
> +{
> +	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
> +
> +	asm volatile(
> +		"b    1f\n\t"
> +		".align    5\n\t"
> +		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
> +		"    str    %0, [%1, %2]\n\t"
> +		"    str    %3, [%1, %4]\n\t"
> +		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
> +		"    str    %5, [%1, %2]"
> +		:
> +		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
> +		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
> +		  "r" (lpr));
> +}
> +
> +/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> + * remember.
> + */
> +static void at91_ddr_standby(void)
> +{
> +	/* Those two values allow us to delay self-refresh activation
> +	 * to the maximum. */
> +	u32 lpr0, lpr1 = 0;
> +	u32 saved_lpr0, saved_lpr1 = 0;
> +
> +	if (at91_ramc_base[1]) {
> +		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
> +		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
> +		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> +	}
> +
> +	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
> +	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
> +	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> +
> +	/* self-refresh mode now */
> +	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
> +
> +	cpu_do_idle();
> +
> +	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
> +}
> +
> +/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> + * remember.
> + */
> +static void at91sam9_sdram_standby(void)
> +{
> +	u32 lpr0, lpr1 = 0;
> +	u32 saved_lpr0, saved_lpr1 = 0;
> +
> +	if (at91_ramc_base[1]) {
> +		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
> +		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
> +		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> +	}
> +
> +	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
> +	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
> +	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> +
> +	/* self-refresh mode now */
> +	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
> +
> +	cpu_do_idle();
> +
> +	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
> +	if (at91_ramc_base[1])
> +		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
> +}
> +
>  static const struct of_device_id ramc_ids[] __initconst = {
>  	{ .compatible = "atmel,at91rm9200-sdramc", .data = at91rm9200_standby },
>  	{ .compatible = "atmel,at91sam9260-sdramc", .data = at91sam9_sdram_standby },
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index dcacfa1ad3fa..3223967d3460 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -23,96 +23,4 @@
>  
>  #define	AT91_PM_SLOW_CLOCK	0x01
>  
> -/*
> - * The AT91RM9200 goes into self-refresh mode with this command, and will
> - * terminate self-refresh automatically on the next SDRAM access.
> - *
> - * Self-refresh mode is exited as soon as a memory access is made, but we don't
> - * know for sure when that happens. However, we need to restore the low-power
> - * mode if it was enabled before going idle. Restoring low-power mode while
> - * still in self-refresh is "not recommended", but seems to work.
> - */
> -
> -#ifndef __ASSEMBLY__
> -static inline void at91rm9200_standby(void)
> -{
> -	u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
> -
> -	asm volatile(
> -		"b    1f\n\t"
> -		".align    5\n\t"
> -		"1:  mcr    p15, 0, %0, c7, c10, 4\n\t"
> -		"    str    %0, [%1, %2]\n\t"
> -		"    str    %3, [%1, %4]\n\t"
> -		"    mcr    p15, 0, %0, c7, c0, 4\n\t"
> -		"    str    %5, [%1, %2]"
> -		:
> -		: "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
> -		  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
> -		  "r" (lpr));
> -}
> -
> -/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> - * remember.
> - */
> -static inline void at91_ddr_standby(void)
> -{
> -	/* Those two values allow us to delay self-refresh activation
> -	 * to the maximum. */
> -	u32 lpr0, lpr1 = 0;
> -	u32 saved_lpr0, saved_lpr1 = 0;
> -
> -	if (at91_ramc_base[1]) {
> -		saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
> -		lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
> -		lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> -	}
> -
> -	saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
> -	lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
> -	lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
> -
> -	/* self-refresh mode now */
> -	at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
> -
> -	cpu_do_idle();
> -
> -	at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
> -}
> -
> -/* We manage both DDRAM/SDRAM controllers, we need more than one value to
> - * remember.
> - */
> -static inline void at91sam9_sdram_standby(void)
> -{
> -	u32 lpr0, lpr1 = 0;
> -	u32 saved_lpr0, saved_lpr1 = 0;
> -
> -	if (at91_ramc_base[1]) {
> -		saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR);
> -		lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB;
> -		lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> -	}
> -
> -	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR);
> -	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB;
> -	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH;
> -
> -	/* self-refresh mode now */
> -	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1);
> -
> -	cpu_do_idle();
> -
> -	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0);
> -	if (at91_ramc_base[1])
> -		at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1);
> -}
> -
> -#endif
>  #endif
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 02/10] ARM: at91/pm: move AT91_MEMCTRL_* to pm.h
  2015-03-16 22:44   ` Alexandre Belloni
  (?)
@ 2015-03-23 10:15     ` Nicolas Ferre
  -1 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:15 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> the AT91_MEMCTRL_* defines are only used by the pm code, move them to pm.h
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
>  arch/arm/mach-at91/include/mach/at91_ramc.h | 4 ----
>  arch/arm/mach-at91/pm.h                     | 4 ++++
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
> index e4492b151fee..493bc486e858 100644
> --- a/arch/arm/mach-at91/include/mach/at91_ramc.h
> +++ b/arch/arm/mach-at91/include/mach/at91_ramc.h
> @@ -21,10 +21,6 @@ extern void __iomem *at91_ramc_base[];
>  .extern at91_ramc_base
>  #endif
>  
> -#define AT91_MEMCTRL_MC		0
> -#define AT91_MEMCTRL_SDRAMC	1
> -#define AT91_MEMCTRL_DDRSDR	2
> -
>  #include <soc/at91/at91rm9200_sdramc.h>
>  #include <soc/at91/at91sam9_ddrsdr.h>
>  #include <soc/at91/at91sam9_sdramc.h>
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index 3223967d3460..ecd875a91d52 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -15,6 +15,10 @@
>  
>  #include <mach/at91_ramc.h>
>  
> +#define AT91_MEMCTRL_MC		0
> +#define AT91_MEMCTRL_SDRAMC	1
> +#define AT91_MEMCTRL_DDRSDR	2
> +
>  #define	AT91_PM_MEMTYPE_MASK	0x0f
>  
>  #define	AT91_PM_MODE_OFFSET	4
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 02/10] ARM: at91/pm: move AT91_MEMCTRL_* to pm.h
@ 2015-03-23 10:15     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:15 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> the AT91_MEMCTRL_* defines are only used by the pm code, move them to pm.h
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
>  arch/arm/mach-at91/include/mach/at91_ramc.h | 4 ----
>  arch/arm/mach-at91/pm.h                     | 4 ++++
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
> index e4492b151fee..493bc486e858 100644
> --- a/arch/arm/mach-at91/include/mach/at91_ramc.h
> +++ b/arch/arm/mach-at91/include/mach/at91_ramc.h
> @@ -21,10 +21,6 @@ extern void __iomem *at91_ramc_base[];
>  .extern at91_ramc_base
>  #endif
>  
> -#define AT91_MEMCTRL_MC		0
> -#define AT91_MEMCTRL_SDRAMC	1
> -#define AT91_MEMCTRL_DDRSDR	2
> -
>  #include <soc/at91/at91rm9200_sdramc.h>
>  #include <soc/at91/at91sam9_ddrsdr.h>
>  #include <soc/at91/at91sam9_sdramc.h>
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index 3223967d3460..ecd875a91d52 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -15,6 +15,10 @@
>  
>  #include <mach/at91_ramc.h>
>  
> +#define AT91_MEMCTRL_MC		0
> +#define AT91_MEMCTRL_SDRAMC	1
> +#define AT91_MEMCTRL_DDRSDR	2
> +
>  #define	AT91_PM_MEMTYPE_MASK	0x0f
>  
>  #define	AT91_PM_MODE_OFFSET	4
> 


-- 
Nicolas Ferre

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

* [PATCH 02/10] ARM: at91/pm: move AT91_MEMCTRL_* to pm.h
@ 2015-03-23 10:15     ` Nicolas Ferre
  0 siblings, 0 replies; 48+ messages in thread
From: Nicolas Ferre @ 2015-03-23 10:15 UTC (permalink / raw)
  To: linux-arm-kernel

Le 16/03/2015 23:44, Alexandre Belloni a ?crit :
> the AT91_MEMCTRL_* defines are only used by the pm code, move them to pm.h
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
>  arch/arm/mach-at91/include/mach/at91_ramc.h | 4 ----
>  arch/arm/mach-at91/pm.h                     | 4 ++++
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/mach-at91/include/mach/at91_ramc.h b/arch/arm/mach-at91/include/mach/at91_ramc.h
> index e4492b151fee..493bc486e858 100644
> --- a/arch/arm/mach-at91/include/mach/at91_ramc.h
> +++ b/arch/arm/mach-at91/include/mach/at91_ramc.h
> @@ -21,10 +21,6 @@ extern void __iomem *at91_ramc_base[];
>  .extern at91_ramc_base
>  #endif
>  
> -#define AT91_MEMCTRL_MC		0
> -#define AT91_MEMCTRL_SDRAMC	1
> -#define AT91_MEMCTRL_DDRSDR	2
> -
>  #include <soc/at91/at91rm9200_sdramc.h>
>  #include <soc/at91/at91sam9_ddrsdr.h>
>  #include <soc/at91/at91sam9_sdramc.h>
> diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h
> index 3223967d3460..ecd875a91d52 100644
> --- a/arch/arm/mach-at91/pm.h
> +++ b/arch/arm/mach-at91/pm.h
> @@ -15,6 +15,10 @@
>  
>  #include <mach/at91_ramc.h>
>  
> +#define AT91_MEMCTRL_MC		0
> +#define AT91_MEMCTRL_SDRAMC	1
> +#define AT91_MEMCTRL_DDRSDR	2
> +
>  #define	AT91_PM_MEMTYPE_MASK	0x0f
>  
>  #define	AT91_PM_MODE_OFFSET	4
> 


-- 
Nicolas Ferre

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

* Re: [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
  2015-03-16 22:44   ` Alexandre Belloni
@ 2015-03-23 12:31     ` Lee Jones
  -1 siblings, 0 replies; 48+ messages in thread
From: Lee Jones @ 2015-03-23 12:31 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Nicolas Ferre, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

On Mon, 16 Mar 2015, Alexandre Belloni wrote:

> From: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> The at91rm9200 SoC embeds a Memory Controller block which is used to
> configure several aspects of the platform:
> - AHB/APB Bus behavior
> - SDRAM Controller
> - EBI (External Bus Interface) and SMC (Static Memory Controller) config
> 
> Those registers might be accessed by different drivers, hence we need to
> define it as a syscon device.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>  include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 144 insertions(+)
>  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
> 
> diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
> new file mode 100644
> index 000000000000..cb7d9fe89e44
> --- /dev/null
> +++ b/include/linux/mfd/syscon/atmel-mc.h
> @@ -0,0 +1,144 @@
> +/*
> + * Copyright (C) 2005 Ivan Kokshaysky
> + * Copyright (C) SAN People
> + *
> + * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
> + * registers.
> + * Based on AT91RM9200 datasheet revision E.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +
> +/* Memory Controller */
> +#define AT91_MC_RCR			0x00
> +#define AT91_MC_RCB			BIT(0)
> +
> +#define AT91_MC_ASR			0x04
> +#define AT91_MC_UNADD			BIT(0)
> +#define AT91_MC_MISADD			BIT(1)
> +#define AT91_MC_ABTSZ			GENMASK(9, 8)
> +#define AT91_MC_ABTSZ_BYTE		(0 << 8)
> +#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> +#define AT91_MC_ABTSZ_WORD		(2 << 8)
> +#define AT91_MC_ABTTYP			GENMASK(11, 10)
> +#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> +#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> +#define AT91_MC_ABTTYP_FETCH		(2 << 10)
> +#define AT91_MC_MST(n)			BIT(16 + (n))
> +#define AT91_MC_SVMST(n)		BIT(24 + (n))
> +
> +#define AT91_MC_AASR			0x08
> +
> +#define AT91_MC_MPR			0x0c
> +#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
> +
> +/* External Bus Interface (EBI) registers */
> +#define AT91_MC_EBI_CSA			0x60
> +#define AT91_MC_EBI_CS(n)		BIT(x)
> +#define AT91_MC_EBI_NUM_CS		8
> +
> +#define AT91_MC_EBI_CFGR		0x64
> +#define AT91_MC_EBI_DBPUC		BIT(0)
> +
> +/* Static Memory Controller (SMC) registers */
> +#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))

Nit: Tab here.

> +#define AT91_MC_SMC_NWS			GENMASK(6, 0)
> +#define AT91_MC_SMC_NWS_(x)		((x) << 0)
> +#define AT91_MC_SMC_WSEN		BIT(7)
> +#define AT91_MC_SMC_TDF			GENMASK(11, 8)
> +#define AT91_MC_SMC_TDF_(x)		((x) << 8)
> +#define AT91_MC_SMC_TDF_MAX		0xf
> +#define AT91_MC_SMC_BAT			BIT(12)
> +#define AT91_MC_SMC_DBW			GENMASK(14, 13)
> +#define AT91_MC_SMC_DBW_16		(1 << 13)
> +#define AT91_MC_SMC_DBW_8		(2 << 13)
> +#define AT91_MC_SMC_DPR			BIT(15)
> +#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
> +#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
> +#define AT91_MC_SMC_ACSS_MAX		3
> +#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
> +#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
> +#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
> +#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
> +#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
> +
> +/* SDRAM Controller registers */
> +#define AT91_MC_SDRAMC_MR		0x90
> +#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
> +#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
> +#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
> +#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
> +#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
> +#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
> +#define AT91_MC_SDRAMC_DBW_16		BIT(4)
> +
> +#define AT91_MC_SDRAMC_TR		0x94
> +#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
> +
> +#define AT91_MC_SDRAMC_CR		0x98
> +#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
> +#define AT91_MC_SDRAMC_NC_8		(0 << 0)
> +#define AT91_MC_SDRAMC_NC_9		(1 << 0)
> +#define AT91_MC_SDRAMC_NC_10		(2 << 0)
> +#define AT91_MC_SDRAMC_NC_11		(3 << 0)
> +#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
> +#define AT91_MC_SDRAMC_NR_11		(0 << 2)
> +#define AT91_MC_SDRAMC_NR_12		(1 << 2)
> +#define AT91_MC_SDRAMC_NR_13		(2 << 2)
> +#define	AT91_MC_SDRAMC_NB		BIT(4)

Nit: Tab here.

> +#define AT91_MC_SDRAMC_NB_2		(0 << 4)
> +#define AT91_MC_SDRAMC_NB_4		(1 << 4)
> +#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
> +#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
> +#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
> +#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
> +#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
> +#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
> +#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
> +#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
> +
> +#define AT91_MC_SDRAMC_SRR		0x9c
> +#define AT91_MC_SDRAMC_SRCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_LPR		0xa0
> +#define AT91_MC_SDRAMC_LPCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_IER		0xa4
> +#define AT91_MC_SDRAMC_IDR		0xa8
> +#define AT91_MC_SDRAMC_IMR		0xac
> +#define AT91_MC_SDRAMC_ISR		0xb0
> +#define AT91_MC_SDRAMC_RES		BIT(0)
> +
> +/* Burst Flash Controller register */
> +#define AT91_MC_BFC_MR			0xc0
> +#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
> +#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
> +#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
> +#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
> +#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
> +#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
> +#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
> +#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
> +#define AT91_MC_BFC_AVL			GENMASK(7,  4)
> +#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
> +#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
> +#define AT91_MC_BFC_PAGES_16		(1 << 8)
> +#define AT91_MC_BFC_PAGES_32		(2 << 8)
> +#define AT91_MC_BFC_PAGES_64		(3 << 8)
> +#define AT91_MC_BFC_PAGES_128		(4 << 8)
> +#define AT91_MC_BFC_PAGES_256		(5 << 8)
> +#define AT91_MC_BFC_PAGES_512		(6 << 8)
> +#define AT91_MC_BFC_PAGES_1024		(7 << 8)
> +#define AT91_MC_BFC_OEL			GENMASK(13, 12)
> +#define AT91_MC_BFC_BAAEN		BIT(16)
> +#define AT91_MC_BFC_BFOEH		BIT(17)
> +#define AT91_MC_BFC_MUXEN		BIT(18)
> +#define AT91_MC_BFC_RDYEN		BIT(19)
> +
> +#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */

Once fixed, you can apply my:

Acked-by: Lee Jones <lee.jones@linaro.org>


-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
@ 2015-03-23 12:31     ` Lee Jones
  0 siblings, 0 replies; 48+ messages in thread
From: Lee Jones @ 2015-03-23 12:31 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, 16 Mar 2015, Alexandre Belloni wrote:

> From: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> The at91rm9200 SoC embeds a Memory Controller block which is used to
> configure several aspects of the platform:
> - AHB/APB Bus behavior
> - SDRAM Controller
> - EBI (External Bus Interface) and SMC (Static Memory Controller) config
> 
> Those registers might be accessed by different drivers, hence we need to
> define it as a syscon device.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>  include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 144 insertions(+)
>  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
> 
> diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
> new file mode 100644
> index 000000000000..cb7d9fe89e44
> --- /dev/null
> +++ b/include/linux/mfd/syscon/atmel-mc.h
> @@ -0,0 +1,144 @@
> +/*
> + * Copyright (C) 2005 Ivan Kokshaysky
> + * Copyright (C) SAN People
> + *
> + * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
> + * registers.
> + * Based on AT91RM9200 datasheet revision E.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + */
> +
> +#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
> +
> +/* Memory Controller */
> +#define AT91_MC_RCR			0x00
> +#define AT91_MC_RCB			BIT(0)
> +
> +#define AT91_MC_ASR			0x04
> +#define AT91_MC_UNADD			BIT(0)
> +#define AT91_MC_MISADD			BIT(1)
> +#define AT91_MC_ABTSZ			GENMASK(9, 8)
> +#define AT91_MC_ABTSZ_BYTE		(0 << 8)
> +#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> +#define AT91_MC_ABTSZ_WORD		(2 << 8)
> +#define AT91_MC_ABTTYP			GENMASK(11, 10)
> +#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> +#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> +#define AT91_MC_ABTTYP_FETCH		(2 << 10)
> +#define AT91_MC_MST(n)			BIT(16 + (n))
> +#define AT91_MC_SVMST(n)		BIT(24 + (n))
> +
> +#define AT91_MC_AASR			0x08
> +
> +#define AT91_MC_MPR			0x0c
> +#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
> +
> +/* External Bus Interface (EBI) registers */
> +#define AT91_MC_EBI_CSA			0x60
> +#define AT91_MC_EBI_CS(n)		BIT(x)
> +#define AT91_MC_EBI_NUM_CS		8
> +
> +#define AT91_MC_EBI_CFGR		0x64
> +#define AT91_MC_EBI_DBPUC		BIT(0)
> +
> +/* Static Memory Controller (SMC) registers */
> +#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))

Nit: Tab here.

> +#define AT91_MC_SMC_NWS			GENMASK(6, 0)
> +#define AT91_MC_SMC_NWS_(x)		((x) << 0)
> +#define AT91_MC_SMC_WSEN		BIT(7)
> +#define AT91_MC_SMC_TDF			GENMASK(11, 8)
> +#define AT91_MC_SMC_TDF_(x)		((x) << 8)
> +#define AT91_MC_SMC_TDF_MAX		0xf
> +#define AT91_MC_SMC_BAT			BIT(12)
> +#define AT91_MC_SMC_DBW			GENMASK(14, 13)
> +#define AT91_MC_SMC_DBW_16		(1 << 13)
> +#define AT91_MC_SMC_DBW_8		(2 << 13)
> +#define AT91_MC_SMC_DPR			BIT(15)
> +#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
> +#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
> +#define AT91_MC_SMC_ACSS_MAX		3
> +#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
> +#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
> +#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
> +#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
> +#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
> +
> +/* SDRAM Controller registers */
> +#define AT91_MC_SDRAMC_MR		0x90
> +#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
> +#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
> +#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
> +#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
> +#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
> +#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
> +#define AT91_MC_SDRAMC_DBW_16		BIT(4)
> +
> +#define AT91_MC_SDRAMC_TR		0x94
> +#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
> +
> +#define AT91_MC_SDRAMC_CR		0x98
> +#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
> +#define AT91_MC_SDRAMC_NC_8		(0 << 0)
> +#define AT91_MC_SDRAMC_NC_9		(1 << 0)
> +#define AT91_MC_SDRAMC_NC_10		(2 << 0)
> +#define AT91_MC_SDRAMC_NC_11		(3 << 0)
> +#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
> +#define AT91_MC_SDRAMC_NR_11		(0 << 2)
> +#define AT91_MC_SDRAMC_NR_12		(1 << 2)
> +#define AT91_MC_SDRAMC_NR_13		(2 << 2)
> +#define	AT91_MC_SDRAMC_NB		BIT(4)

Nit: Tab here.

> +#define AT91_MC_SDRAMC_NB_2		(0 << 4)
> +#define AT91_MC_SDRAMC_NB_4		(1 << 4)
> +#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
> +#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
> +#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
> +#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
> +#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
> +#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
> +#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
> +#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
> +
> +#define AT91_MC_SDRAMC_SRR		0x9c
> +#define AT91_MC_SDRAMC_SRCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_LPR		0xa0
> +#define AT91_MC_SDRAMC_LPCB		BIT(0)
> +
> +#define AT91_MC_SDRAMC_IER		0xa4
> +#define AT91_MC_SDRAMC_IDR		0xa8
> +#define AT91_MC_SDRAMC_IMR		0xac
> +#define AT91_MC_SDRAMC_ISR		0xb0
> +#define AT91_MC_SDRAMC_RES		BIT(0)
> +
> +/* Burst Flash Controller register */
> +#define AT91_MC_BFC_MR			0xc0
> +#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
> +#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
> +#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
> +#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
> +#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
> +#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
> +#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
> +#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
> +#define AT91_MC_BFC_AVL			GENMASK(7,  4)
> +#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
> +#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
> +#define AT91_MC_BFC_PAGES_16		(1 << 8)
> +#define AT91_MC_BFC_PAGES_32		(2 << 8)
> +#define AT91_MC_BFC_PAGES_64		(3 << 8)
> +#define AT91_MC_BFC_PAGES_128		(4 << 8)
> +#define AT91_MC_BFC_PAGES_256		(5 << 8)
> +#define AT91_MC_BFC_PAGES_512		(6 << 8)
> +#define AT91_MC_BFC_PAGES_1024		(7 << 8)
> +#define AT91_MC_BFC_OEL			GENMASK(13, 12)
> +#define AT91_MC_BFC_BAAEN		BIT(16)
> +#define AT91_MC_BFC_BFOEH		BIT(17)
> +#define AT91_MC_BFC_MUXEN		BIT(18)
> +#define AT91_MC_BFC_RDYEN		BIT(19)
> +
> +#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */

Once fixed, you can apply my:

Acked-by: Lee Jones <lee.jones@linaro.org>


-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
  2015-03-23  9:57     ` Nicolas Ferre
@ 2015-03-23 14:47       ` Lee Jones
  -1 siblings, 0 replies; 48+ messages in thread
From: Lee Jones @ 2015-03-23 14:47 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Alexandre Belloni, Boris Brezillon,
	Jean-Christophe Plagniol-Villard, linux-kernel, Tejun Heo,
	linux-ide, linux-pcmcia, linux-arm-kernel

On Mon, 23 Mar 2015, Nicolas Ferre wrote:

> Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> > From: Boris Brezillon <boris.brezillon@free-electrons.com>
> > 
> > The at91rm9200 SoC embeds a Memory Controller block which is used to
> > configure several aspects of the platform:
> > - AHB/APB Bus behavior
> > - SDRAM Controller
> > - EBI (External Bus Interface) and SMC (Static Memory Controller) config
> > 
> > Those registers might be accessed by different drivers, hence we need to
> > define it as a syscon device.
> > 
> > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> Alexandre, don't you need to Ack this patch at least?

If he is submitting, he needs his SoB.

> > ---
> >  include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
> >  1 file changed, 144 insertions(+)
> >  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
> > 
> > diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
> > new file mode 100644
> > index 000000000000..cb7d9fe89e44
> > --- /dev/null
> > +++ b/include/linux/mfd/syscon/atmel-mc.h
> > @@ -0,0 +1,144 @@
> > +/*
> > + * Copyright (C) 2005 Ivan Kokshaysky
> > + * Copyright (C) SAN People
> > + *
> > + * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
> > + * registers.
> > + * Based on AT91RM9200 datasheet revision E.
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License as published by
> > + * the Free Software Foundation; either version 2 of the License, or
> > + * (at your option) any later version.
> > + */
> > +
> > +#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
> > +#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
> > +
> > +/* Memory Controller */
> > +#define AT91_MC_RCR			0x00
> > +#define AT91_MC_RCB			BIT(0)
> > +
> > +#define AT91_MC_ASR			0x04
> > +#define AT91_MC_UNADD			BIT(0)
> > +#define AT91_MC_MISADD			BIT(1)
> > +#define AT91_MC_ABTSZ			GENMASK(9, 8)
> > +#define AT91_MC_ABTSZ_BYTE		(0 << 8)
> > +#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> > +#define AT91_MC_ABTSZ_WORD		(2 << 8)
> > +#define AT91_MC_ABTTYP			GENMASK(11, 10)
> > +#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> > +#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> > +#define AT91_MC_ABTTYP_FETCH		(2 << 10)
> > +#define AT91_MC_MST(n)			BIT(16 + (n))
> > +#define AT91_MC_SVMST(n)		BIT(24 + (n))
> > +
> > +#define AT91_MC_AASR			0x08
> > +
> > +#define AT91_MC_MPR			0x0c
> > +#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
> > +
> > +/* External Bus Interface (EBI) registers */
> > +#define AT91_MC_EBI_CSA			0x60
> > +#define AT91_MC_EBI_CS(n)		BIT(x)
> > +#define AT91_MC_EBI_NUM_CS		8
> > +
> > +#define AT91_MC_EBI_CFGR		0x64
> > +#define AT91_MC_EBI_DBPUC		BIT(0)
> > +
> > +/* Static Memory Controller (SMC) registers */
> > +#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))
> > +#define AT91_MC_SMC_NWS			GENMASK(6, 0)
> > +#define AT91_MC_SMC_NWS_(x)		((x) << 0)
> > +#define AT91_MC_SMC_WSEN		BIT(7)
> > +#define AT91_MC_SMC_TDF			GENMASK(11, 8)
> > +#define AT91_MC_SMC_TDF_(x)		((x) << 8)
> > +#define AT91_MC_SMC_TDF_MAX		0xf
> > +#define AT91_MC_SMC_BAT			BIT(12)
> > +#define AT91_MC_SMC_DBW			GENMASK(14, 13)
> > +#define AT91_MC_SMC_DBW_16		(1 << 13)
> > +#define AT91_MC_SMC_DBW_8		(2 << 13)
> > +#define AT91_MC_SMC_DPR			BIT(15)
> > +#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
> > +#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
> > +#define AT91_MC_SMC_ACSS_MAX		3
> > +#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
> > +#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
> > +#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
> > +#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
> > +#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
> > +
> > +/* SDRAM Controller registers */
> > +#define AT91_MC_SDRAMC_MR		0x90
> > +#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
> > +#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
> > +#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
> > +#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
> > +#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
> > +#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
> > +#define AT91_MC_SDRAMC_DBW_16		BIT(4)
> > +
> > +#define AT91_MC_SDRAMC_TR		0x94
> > +#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
> > +
> > +#define AT91_MC_SDRAMC_CR		0x98
> > +#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
> > +#define AT91_MC_SDRAMC_NC_8		(0 << 0)
> > +#define AT91_MC_SDRAMC_NC_9		(1 << 0)
> > +#define AT91_MC_SDRAMC_NC_10		(2 << 0)
> > +#define AT91_MC_SDRAMC_NC_11		(3 << 0)
> > +#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
> > +#define AT91_MC_SDRAMC_NR_11		(0 << 2)
> > +#define AT91_MC_SDRAMC_NR_12		(1 << 2)
> > +#define AT91_MC_SDRAMC_NR_13		(2 << 2)
> > +#define	AT91_MC_SDRAMC_NB		BIT(4)
> > +#define AT91_MC_SDRAMC_NB_2		(0 << 4)
> > +#define AT91_MC_SDRAMC_NB_4		(1 << 4)
> > +#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
> > +#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
> > +#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
> > +#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
> > +#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
> > +#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
> > +#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
> > +#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
> > +
> > +#define AT91_MC_SDRAMC_SRR		0x9c
> > +#define AT91_MC_SDRAMC_SRCB		BIT(0)
> > +
> > +#define AT91_MC_SDRAMC_LPR		0xa0
> > +#define AT91_MC_SDRAMC_LPCB		BIT(0)
> > +
> > +#define AT91_MC_SDRAMC_IER		0xa4
> > +#define AT91_MC_SDRAMC_IDR		0xa8
> > +#define AT91_MC_SDRAMC_IMR		0xac
> > +#define AT91_MC_SDRAMC_ISR		0xb0
> > +#define AT91_MC_SDRAMC_RES		BIT(0)
> > +
> > +/* Burst Flash Controller register */
> > +#define AT91_MC_BFC_MR			0xc0
> > +#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
> > +#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
> > +#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
> > +#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
> > +#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
> > +#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
> > +#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
> > +#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
> > +#define AT91_MC_BFC_AVL			GENMASK(7,  4)
> > +#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
> > +#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
> > +#define AT91_MC_BFC_PAGES_16		(1 << 8)
> > +#define AT91_MC_BFC_PAGES_32		(2 << 8)
> > +#define AT91_MC_BFC_PAGES_64		(3 << 8)
> > +#define AT91_MC_BFC_PAGES_128		(4 << 8)
> > +#define AT91_MC_BFC_PAGES_256		(5 << 8)
> > +#define AT91_MC_BFC_PAGES_512		(6 << 8)
> > +#define AT91_MC_BFC_PAGES_1024		(7 << 8)
> > +#define AT91_MC_BFC_OEL			GENMASK(13, 12)
> > +#define AT91_MC_BFC_BAAEN		BIT(16)
> > +#define AT91_MC_BFC_BFOEH		BIT(17)
> > +#define AT91_MC_BFC_MUXEN		BIT(18)
> > +#define AT91_MC_BFC_RDYEN		BIT(19)
> > +
> > +#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */
> > 
> 
> I'm not a big fan of the use of BIT/GENMASK macros in mix with the <<
> operator, but I guess it can be done anyway, so I'm okay:
> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

Please ensure Nicolas' Ack is applied to your next submission.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition
@ 2015-03-23 14:47       ` Lee Jones
  0 siblings, 0 replies; 48+ messages in thread
From: Lee Jones @ 2015-03-23 14:47 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, 23 Mar 2015, Nicolas Ferre wrote:

> Le 16/03/2015 23:44, Alexandre Belloni a ?crit :
> > From: Boris Brezillon <boris.brezillon@free-electrons.com>
> > 
> > The at91rm9200 SoC embeds a Memory Controller block which is used to
> > configure several aspects of the platform:
> > - AHB/APB Bus behavior
> > - SDRAM Controller
> > - EBI (External Bus Interface) and SMC (Static Memory Controller) config
> > 
> > Those registers might be accessed by different drivers, hence we need to
> > define it as a syscon device.
> > 
> > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> Alexandre, don't you need to Ack this patch at least?

If he is submitting, he needs his SoB.

> > ---
> >  include/linux/mfd/syscon/atmel-mc.h | 144 ++++++++++++++++++++++++++++++++++++
> >  1 file changed, 144 insertions(+)
> >  create mode 100644 include/linux/mfd/syscon/atmel-mc.h
> > 
> > diff --git a/include/linux/mfd/syscon/atmel-mc.h b/include/linux/mfd/syscon/atmel-mc.h
> > new file mode 100644
> > index 000000000000..cb7d9fe89e44
> > --- /dev/null
> > +++ b/include/linux/mfd/syscon/atmel-mc.h
> > @@ -0,0 +1,144 @@
> > +/*
> > + * Copyright (C) 2005 Ivan Kokshaysky
> > + * Copyright (C) SAN People
> > + *
> > + * Memory Controllers (MC, EBI, SMC, SDRAMC, BFC) - System peripherals
> > + * registers.
> > + * Based on AT91RM9200 datasheet revision E.
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License as published by
> > + * the Free Software Foundation; either version 2 of the License, or
> > + * (at your option) any later version.
> > + */
> > +
> > +#ifndef _LINUX_MFD_SYSCON_ATMEL_MC_H_
> > +#define _LINUX_MFD_SYSCON_ATMEL_MC_H_
> > +
> > +/* Memory Controller */
> > +#define AT91_MC_RCR			0x00
> > +#define AT91_MC_RCB			BIT(0)
> > +
> > +#define AT91_MC_ASR			0x04
> > +#define AT91_MC_UNADD			BIT(0)
> > +#define AT91_MC_MISADD			BIT(1)
> > +#define AT91_MC_ABTSZ			GENMASK(9, 8)
> > +#define AT91_MC_ABTSZ_BYTE		(0 << 8)
> > +#define AT91_MC_ABTSZ_HALFWORD		(1 << 8)
> > +#define AT91_MC_ABTSZ_WORD		(2 << 8)
> > +#define AT91_MC_ABTTYP			GENMASK(11, 10)
> > +#define AT91_MC_ABTTYP_DATAREAD		(0 << 10)
> > +#define AT91_MC_ABTTYP_DATAWRITE	(1 << 10)
> > +#define AT91_MC_ABTTYP_FETCH		(2 << 10)
> > +#define AT91_MC_MST(n)			BIT(16 + (n))
> > +#define AT91_MC_SVMST(n)		BIT(24 + (n))
> > +
> > +#define AT91_MC_AASR			0x08
> > +
> > +#define AT91_MC_MPR			0x0c
> > +#define AT91_MPR_MSTP(n)		GENMASK(2 + ((x) * 4), ((x) * 4))
> > +
> > +/* External Bus Interface (EBI) registers */
> > +#define AT91_MC_EBI_CSA			0x60
> > +#define AT91_MC_EBI_CS(n)		BIT(x)
> > +#define AT91_MC_EBI_NUM_CS		8
> > +
> > +#define AT91_MC_EBI_CFGR		0x64
> > +#define AT91_MC_EBI_DBPUC		BIT(0)
> > +
> > +/* Static Memory Controller (SMC) registers */
> > +#define	AT91_MC_SMC_CSR(n)		(0x70 + ((n) * 4))
> > +#define AT91_MC_SMC_NWS			GENMASK(6, 0)
> > +#define AT91_MC_SMC_NWS_(x)		((x) << 0)
> > +#define AT91_MC_SMC_WSEN		BIT(7)
> > +#define AT91_MC_SMC_TDF			GENMASK(11, 8)
> > +#define AT91_MC_SMC_TDF_(x)		((x) << 8)
> > +#define AT91_MC_SMC_TDF_MAX		0xf
> > +#define AT91_MC_SMC_BAT			BIT(12)
> > +#define AT91_MC_SMC_DBW			GENMASK(14, 13)
> > +#define AT91_MC_SMC_DBW_16		(1 << 13)
> > +#define AT91_MC_SMC_DBW_8		(2 << 13)
> > +#define AT91_MC_SMC_DPR			BIT(15)
> > +#define AT91_MC_SMC_ACSS		GENMASK(17, 16)
> > +#define AT91_MC_SMC_ACSS_(x)		((x) << 16)
> > +#define AT91_MC_SMC_ACSS_MAX		3
> > +#define AT91_MC_SMC_RWSETUP		GENMASK(26, 24)
> > +#define AT91_MC_SMC_RWSETUP_(x)		((x) << 24)
> > +#define AT91_MC_SMC_RWHOLD		GENMASK(30, 28)
> > +#define AT91_MC_SMC_RWHOLD_(x)		((x) << 28)
> > +#define AT91_MC_SMC_RWHOLDSETUP_MAX	7
> > +
> > +/* SDRAM Controller registers */
> > +#define AT91_MC_SDRAMC_MR		0x90
> > +#define AT91_MC_SDRAMC_MODE		GENMASK(3, 0)
> > +#define AT91_MC_SDRAMC_MODE_NORMAL	(0 << 0)
> > +#define AT91_MC_SDRAMC_MODE_NOP		(1 << 0)
> > +#define AT91_MC_SDRAMC_MODE_PRECHARGE	(2 << 0)
> > +#define AT91_MC_SDRAMC_MODE_LMR		(3 << 0)
> > +#define AT91_MC_SDRAMC_MODE_REFRESH	(4 << 0)
> > +#define AT91_MC_SDRAMC_DBW_16		BIT(4)
> > +
> > +#define AT91_MC_SDRAMC_TR		0x94
> > +#define AT91_MC_SDRAMC_COUNT		GENMASK(11, 0)
> > +
> > +#define AT91_MC_SDRAMC_CR		0x98
> > +#define AT91_MC_SDRAMC_NC		GENMASK(1, 0)
> > +#define AT91_MC_SDRAMC_NC_8		(0 << 0)
> > +#define AT91_MC_SDRAMC_NC_9		(1 << 0)
> > +#define AT91_MC_SDRAMC_NC_10		(2 << 0)
> > +#define AT91_MC_SDRAMC_NC_11		(3 << 0)
> > +#define AT91_MC_SDRAMC_NR		GENMASK(3, 2)
> > +#define AT91_MC_SDRAMC_NR_11		(0 << 2)
> > +#define AT91_MC_SDRAMC_NR_12		(1 << 2)
> > +#define AT91_MC_SDRAMC_NR_13		(2 << 2)
> > +#define	AT91_MC_SDRAMC_NB		BIT(4)
> > +#define AT91_MC_SDRAMC_NB_2		(0 << 4)
> > +#define AT91_MC_SDRAMC_NB_4		(1 << 4)
> > +#define AT91_MC_SDRAMC_CAS		GENMASK(6, 5)
> > +#define AT91_MC_SDRAMC_CAS_2		(2 << 5)
> > +#define AT91_MC_SDRAMC_TWR		GENMASK(10,  7)
> > +#define AT91_MC_SDRAMC_TRC		GENMASK(14, 11)
> > +#define AT91_MC_SDRAMC_TRP		GENMASK(18, 15)
> > +#define AT91_MC_SDRAMC_TRCD		GENMASK(22, 19)
> > +#define AT91_MC_SDRAMC_TRAS		GENMASK(26, 23)
> > +#define AT91_MC_SDRAMC_TXSR		GENMASK(30, 27)
> > +
> > +#define AT91_MC_SDRAMC_SRR		0x9c
> > +#define AT91_MC_SDRAMC_SRCB		BIT(0)
> > +
> > +#define AT91_MC_SDRAMC_LPR		0xa0
> > +#define AT91_MC_SDRAMC_LPCB		BIT(0)
> > +
> > +#define AT91_MC_SDRAMC_IER		0xa4
> > +#define AT91_MC_SDRAMC_IDR		0xa8
> > +#define AT91_MC_SDRAMC_IMR		0xac
> > +#define AT91_MC_SDRAMC_ISR		0xb0
> > +#define AT91_MC_SDRAMC_RES		BIT(0)
> > +
> > +/* Burst Flash Controller register */
> > +#define AT91_MC_BFC_MR			0xc0
> > +#define AT91_MC_BFC_BFCOM		GENMASK(1, 0)
> > +#define AT91_MC_BFC_BFCOM_DISABLED	(0 << 0)
> > +#define AT91_MC_BFC_BFCOM_ASYNC		(1 << 0)
> > +#define AT91_MC_BFC_BFCOM_BURST		(2 << 0)
> > +#define AT91_MC_BFC_BFCC		GENMASK(3, 2)
> > +#define AT91_MC_BFC_BFCC_MCK		(1 << 2)
> > +#define AT91_MC_BFC_BFCC_DIV2		(2 << 2)
> > +#define AT91_MC_BFC_BFCC_DIV4		(3 << 2)
> > +#define AT91_MC_BFC_AVL			GENMASK(7,  4)
> > +#define AT91_MC_BFC_PAGES		GENMASK(10, 8)
> > +#define AT91_MC_BFC_PAGES_NO_PAGE	(0 << 8)
> > +#define AT91_MC_BFC_PAGES_16		(1 << 8)
> > +#define AT91_MC_BFC_PAGES_32		(2 << 8)
> > +#define AT91_MC_BFC_PAGES_64		(3 << 8)
> > +#define AT91_MC_BFC_PAGES_128		(4 << 8)
> > +#define AT91_MC_BFC_PAGES_256		(5 << 8)
> > +#define AT91_MC_BFC_PAGES_512		(6 << 8)
> > +#define AT91_MC_BFC_PAGES_1024		(7 << 8)
> > +#define AT91_MC_BFC_OEL			GENMASK(13, 12)
> > +#define AT91_MC_BFC_BAAEN		BIT(16)
> > +#define AT91_MC_BFC_BFOEH		BIT(17)
> > +#define AT91_MC_BFC_MUXEN		BIT(18)
> > +#define AT91_MC_BFC_RDYEN		BIT(19)
> > +
> > +#endif /* _LINUX_MFD_SYSCON_ATMEL_MC_H_ */
> > 
> 
> I'm not a big fan of the use of BIT/GENMASK macros in mix with the <<
> operator, but I guess it can be done anyway, so I'm okay:
> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

Please ensure Nicolas' Ack is applied to your next submission.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH 03/10] ata: at91: use syscon to configure the smc
  2015-03-23 10:11     ` Nicolas Ferre
@ 2015-03-23 16:38       ` Alexandre Belloni
  -1 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-23 16:38 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Lee Jones, Boris Brezillon, Jean-Christophe Plagniol-Villard,
	linux-kernel, Tejun Heo, linux-ide, linux-pcmcia,
	linux-arm-kernel

On 23/03/2015 at 11:11:35 +0100, Nicolas Ferre wrote :
> Le 16/03/2015 23:44, Alexandre Belloni a écrit :
> > Use syscon/regmap to configure the smc. This allows to avoid using
> > at91sam9_smc.h and to compile the driver in a multiplatform configuration.
> > 
> > The driver will still not probe until the proper DT bindings are added.
> 
> Alexandre, just for the record, can you describe the DT node that will
> match this?
> Is it one that will be added to
> Documentation/devicetree/bindings/mfd/atmel-smc.txt?
> 

I believe it should be documented when the full binding will be defined.
This binding will include a mandatory property:
 atmel,smc: phandle to the smc

and will look like:
 atmel,smc = <&smc>;


-- 
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

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

* [PATCH 03/10] ata: at91: use syscon to configure the smc
@ 2015-03-23 16:38       ` Alexandre Belloni
  0 siblings, 0 replies; 48+ messages in thread
From: Alexandre Belloni @ 2015-03-23 16:38 UTC (permalink / raw)
  To: linux-arm-kernel

On 23/03/2015 at 11:11:35 +0100, Nicolas Ferre wrote :
> Le 16/03/2015 23:44, Alexandre Belloni a ?crit :
> > Use syscon/regmap to configure the smc. This allows to avoid using
> > at91sam9_smc.h and to compile the driver in a multiplatform configuration.
> > 
> > The driver will still not probe until the proper DT bindings are added.
> 
> Alexandre, just for the record, can you describe the DT node that will
> match this?
> Is it one that will be added to
> Documentation/devicetree/bindings/mfd/atmel-smc.txt?
> 

I believe it should be documented when the full binding will be defined.
This binding will include a mandatory property:
 atmel,smc: phandle to the smc

and will look like:
 atmel,smc = <&smc>;


-- 
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

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

end of thread, other threads:[~2015-03-23 16:39 UTC | newest]

Thread overview: 48+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-16 22:44 [PATCH 00/10] ARM: at91 cleanups for 4.1 #2 Alexandre Belloni
2015-03-16 22:44 ` Alexandre Belloni
2015-03-16 22:44 ` [PATCH 01/10] ARM: at91/pm: move the standby functions to pm.c Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-23 10:14   ` Nicolas Ferre
2015-03-23 10:14     ` Nicolas Ferre
2015-03-23 10:14     ` Nicolas Ferre
2015-03-16 22:44 ` [PATCH 02/10] ARM: at91/pm: move AT91_MEMCTRL_* to pm.h Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-23 10:15   ` Nicolas Ferre
2015-03-23 10:15     ` Nicolas Ferre
2015-03-23 10:15     ` Nicolas Ferre
2015-03-16 22:44 ` [PATCH 03/10] ata: at91: use syscon to configure the smc Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-23 10:11   ` Nicolas Ferre
2015-03-23 10:11     ` Nicolas Ferre
2015-03-23 10:11     ` Nicolas Ferre
2015-03-23 16:38     ` Alexandre Belloni
2015-03-23 16:38       ` Alexandre Belloni
2015-03-16 22:44 ` [PATCH 04/10] ARM: at91: drop sam9_smc.c Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-16 22:44 ` [PATCH 05/10] mfd: syscon: Add Atmel MC (Memory Controller) registers definition Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-23  9:57   ` Nicolas Ferre
2015-03-23  9:57     ` Nicolas Ferre
2015-03-23  9:57     ` Nicolas Ferre
2015-03-23 14:47     ` Lee Jones
2015-03-23 14:47       ` Lee Jones
2015-03-23 12:31   ` Lee Jones
2015-03-23 12:31     ` Lee Jones
2015-03-16 22:44 ` [PATCH 06/10] ARM: at91: declare the at91rm9200 memory controller as a syscon Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-16 22:44 ` [PATCH 07/10] pcmcia: at91_cf: Use syscon to configure the MC/smc Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-16 22:44 ` [PATCH 08/10] ARM: at91/pm: use the atmel-mc syscon defines Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-16 22:44 ` [PATCH 09/10] ARM: at91: remove mach/at91_ramc.h and mach/at91rm9200_mc.h Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-23 10:01   ` Nicolas Ferre
2015-03-23 10:01     ` Nicolas Ferre
2015-03-23 10:01     ` Nicolas Ferre
2015-03-16 22:44 ` [PATCH 10/10] ARM: at91: remove at91rm9200_sdramc.h Alexandre Belloni
2015-03-16 22:44   ` Alexandre Belloni
2015-03-23 10:14 ` [PATCH 00/10] ARM: at91 cleanups for 4.1 #2 Nicolas Ferre
2015-03-23 10:14   ` Nicolas Ferre
2015-03-23 10:14   ` Nicolas Ferre

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.