mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration
@ 2017-06-08 18:41 Alexander Kurz
  2017-06-08 18:41 ` [PATCH 2/4] ARM: i.MX6 Wandboard Quad: fix PBL UART MUX Alexander Kurz
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Alexander Kurz @ 2017-06-08 18:41 UTC (permalink / raw)
  To: barebox; +Cc: Alexander Kurz

The hardware requirements to perform a write leveling calibration are
not fulfilled by the Wandboard modules.
IMX6DQRM §44.11.6 "Write leveling Calibration" Note2 states that the first
bit of each data byte group (D0, D8, ..., D56) from memory must be connected
to the same data bus bit on the controller, which is not given on the
Wandboard modules, resulting in unpredictable calib results and breaking the
WBQUAD 2GiB SDRAM setup. Similar restrictions exist for the i.MX6SD.

Remove this calibration and use the MPWLDECTRL defaults.

Signed-off-by: Alexander Kurz <akurz@blala.de>
---
 arch/arm/boards/technexion-wandboard/lowlevel.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm/boards/technexion-wandboard/lowlevel.c b/arch/arm/boards/technexion-wandboard/lowlevel.c
index d3eb9a0..ff5ae6d 100644
--- a/arch/arm/boards/technexion-wandboard/lowlevel.c
+++ b/arch/arm/boards/technexion-wandboard/lowlevel.c
@@ -276,7 +276,6 @@ static unsigned long wandboard_dram_init(void)
 
 	__udelay(100);
 
-	mmdc_do_write_level_calibration();
 	mmdc_do_dqs_calibration();
 #ifdef DEBUG
 	mmdc_print_calibration_results();
-- 
2.1.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 2/4] ARM: i.MX6 Wandboard Quad: fix PBL UART MUX
  2017-06-08 18:41 [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration Alexander Kurz
@ 2017-06-08 18:41 ` Alexander Kurz
  2017-06-08 18:55   ` Andrey Smirnov
  2017-06-08 18:41 ` [PATCH 3/4] ARM: i.MX6 Wandboard: enable Wandboard Quad Alexander Kurz
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Alexander Kurz @ 2017-06-08 18:41 UTC (permalink / raw)
  To: barebox; +Cc: Alexander Kurz

Three variants of the Wandboard exist: WBSOLO, WBDUAL and WBQUAD.
For all variants, the external serial port is connected to UART1 via
PAD_CSI0_DATA10 (TX) and PAD_CSI0_DATA11 (RX). Unfortunately, the IOMUX
register adresses for this mux differ between i.MX6Q (WBQUAD) and others.
Make the UART IOMUX for PBL compatible for WBQUAD.

Signed-off-by: Alexander Kurz <akurz@blala.de>
---
 arch/arm/boards/technexion-wandboard/lowlevel.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/arch/arm/boards/technexion-wandboard/lowlevel.c b/arch/arm/boards/technexion-wandboard/lowlevel.c
index ff5ae6d..9aae429 100644
--- a/arch/arm/boards/technexion-wandboard/lowlevel.c
+++ b/arch/arm/boards/technexion-wandboard/lowlevel.c
@@ -285,11 +285,25 @@ static unsigned long wandboard_dram_init(void)
 
 static void setup_uart(void)
 {
+	int cpu_type = __imx6_cpu_type();
 	void __iomem *iomuxbase = (void *)MX6_IOMUXC_BASE_ADDR;
 
-	/* mux the uart */
-	writel(0x00000003, iomuxbase + 0x4c);
-	writel(0x00000000, iomuxbase + 0x8fc);
+	/* mux UART1 TX on PAD_CSI0_DATA10 */
+	switch (cpu_type) {
+	case IMX6_CPUTYPE_IMX6S:
+	case IMX6_CPUTYPE_IMX6DL:
+		writel(0x00000003, iomuxbase + 0x4c);
+		writel(0x0001b0b1, iomuxbase + 0x360);
+		writel(0x00000000, iomuxbase + 0x8fc);
+		break;
+	case IMX6_CPUTYPE_IMX6Q:
+		writel(0x00000003, iomuxbase + 0x280);
+		writel(0x0001b0b1, iomuxbase + 0x650);
+		writel(0x00000001, iomuxbase + 0x920);
+		break;
+	default:
+		return;
+	}
 
 	imx6_ungate_all_peripherals();
 	imx6_uart_setup((void *)MX6_UART1_BASE_ADDR);
-- 
2.1.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 3/4] ARM: i.MX6 Wandboard: enable Wandboard Quad
  2017-06-08 18:41 [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration Alexander Kurz
  2017-06-08 18:41 ` [PATCH 2/4] ARM: i.MX6 Wandboard Quad: fix PBL UART MUX Alexander Kurz
@ 2017-06-08 18:41 ` Alexander Kurz
  2017-06-08 18:41 ` [PATCH 4/4] ARM: i.MX6 Wandboard: add Documentation Alexander Kurz
  2017-06-13  7:27 ` [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration Sascha Hauer
  3 siblings, 0 replies; 6+ messages in thread
From: Alexander Kurz @ 2017-06-08 18:41 UTC (permalink / raw)
  To: barebox; +Cc: Alexander Kurz

Extend the DT compatibility check to actually use the Wandboard Quad.

Signed-off-by: Alexander Kurz <akurz@blala.de>
---
 arch/arm/boards/technexion-wandboard/board.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm/boards/technexion-wandboard/board.c b/arch/arm/boards/technexion-wandboard/board.c
index e7b51cc..2e1f625 100644
--- a/arch/arm/boards/technexion-wandboard/board.c
+++ b/arch/arm/boards/technexion-wandboard/board.c
@@ -63,7 +63,8 @@ static int ar8031_phy_fixup(struct phy_device *dev)
 
 static int wandboard_device_init(void)
 {
-	if (!of_machine_is_compatible("wand,imx6dl-wandboard"))
+	if (!of_machine_is_compatible("wand,imx6dl-wandboard") &&
+	    !of_machine_is_compatible("wand,imx6q-wandboard"))
 		return 0;
 
 	phy_register_fixup_for_uid(PHY_ID_AR8031, AR_PHY_ID_MASK, ar8031_phy_fixup);
-- 
2.1.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 4/4] ARM: i.MX6 Wandboard: add Documentation
  2017-06-08 18:41 [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration Alexander Kurz
  2017-06-08 18:41 ` [PATCH 2/4] ARM: i.MX6 Wandboard Quad: fix PBL UART MUX Alexander Kurz
  2017-06-08 18:41 ` [PATCH 3/4] ARM: i.MX6 Wandboard: enable Wandboard Quad Alexander Kurz
@ 2017-06-08 18:41 ` Alexander Kurz
  2017-06-13  7:27 ` [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration Sascha Hauer
  3 siblings, 0 replies; 6+ messages in thread
From: Alexander Kurz @ 2017-06-08 18:41 UTC (permalink / raw)
  To: barebox; +Cc: Alexander Kurz

Signed-off-by: Alexander Kurz <akurz@blala.de>
---
 Documentation/boards/imx/Wandboard.rst | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 Documentation/boards/imx/Wandboard.rst

diff --git a/Documentation/boards/imx/Wandboard.rst b/Documentation/boards/imx/Wandboard.rst
new file mode 100644
index 0000000..574318a
--- /dev/null
+++ b/Documentation/boards/imx/Wandboard.rst
@@ -0,0 +1,21 @@
+Wandboard
+=========
+
+The Wandboard is a carrier board available with three different
+System-on-Module options, the Wandboard Solo (i.MX6S, 512MiB DDR3),
+the Wandboard Dual (i.MX6DL, 1GiB DDR3) and Wandboard Quad (i.MX6Q, 2GiB DDR3).
+
+The device boots from the SD card slot on the System-on-Module board, it
+will not boot from the slot on the carrier board.
+
+To boot barebox on any wandboard, build imx_v7_defconfig
+and copy the barebox imx-image to the i.MX boot location of a SD card, e.g.
+dd bs=1024 skip=1 seek=1 if=images/barebox-imx6-wandboard.img of=/dev/mmcblk0
+
+Only one image exists, supporting all three Wandboard variants, barebox will
+detect the Wandboard variant depending on the SoC variant.
+This image is only usable for SD-boot. It will not boot via imx-usb-loader.
+
+Connect to the serial port using a null-modem cable to get console access.
+
+For further documentation, including board schematics see http://wandboard.org/
-- 
2.1.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 2/4] ARM: i.MX6 Wandboard Quad: fix PBL UART MUX
  2017-06-08 18:41 ` [PATCH 2/4] ARM: i.MX6 Wandboard Quad: fix PBL UART MUX Alexander Kurz
@ 2017-06-08 18:55   ` Andrey Smirnov
  0 siblings, 0 replies; 6+ messages in thread
From: Andrey Smirnov @ 2017-06-08 18:55 UTC (permalink / raw)
  To: Alexander Kurz; +Cc: barebox

On Thu, Jun 8, 2017 at 11:41 AM, Alexander Kurz <akurz@blala.de> wrote:
> Three variants of the Wandboard exist: WBSOLO, WBDUAL and WBQUAD.
> For all variants, the external serial port is connected to UART1 via
> PAD_CSI0_DATA10 (TX) and PAD_CSI0_DATA11 (RX). Unfortunately, the IOMUX
> register adresses for this mux differ between i.MX6Q (WBQUAD) and others.
> Make the UART IOMUX for PBL compatible for WBQUAD.
>
> Signed-off-by: Alexander Kurz <akurz@blala.de>
> ---
>  arch/arm/boards/technexion-wandboard/lowlevel.c | 20 +++++++++++++++++---
>  1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/boards/technexion-wandboard/lowlevel.c b/arch/arm/boards/technexion-wandboard/lowlevel.c
> index ff5ae6d..9aae429 100644
> --- a/arch/arm/boards/technexion-wandboard/lowlevel.c
> +++ b/arch/arm/boards/technexion-wandboard/lowlevel.c
> @@ -285,11 +285,25 @@ static unsigned long wandboard_dram_init(void)
>
>  static void setup_uart(void)
>  {
> +       int cpu_type = __imx6_cpu_type();
>         void __iomem *iomuxbase = (void *)MX6_IOMUXC_BASE_ADDR;
>
> -       /* mux the uart */
> -       writel(0x00000003, iomuxbase + 0x4c);
> -       writel(0x00000000, iomuxbase + 0x8fc);
> +       /* mux UART1 TX on PAD_CSI0_DATA10 */
> +       switch (cpu_type) {
> +       case IMX6_CPUTYPE_IMX6S:
> +       case IMX6_CPUTYPE_IMX6DL:
> +               writel(0x00000003, iomuxbase + 0x4c);
> +               writel(0x0001b0b1, iomuxbase + 0x360);
> +               writel(0x00000000, iomuxbase + 0x8fc);
> +               break;
> +       case IMX6_CPUTYPE_IMX6Q:
> +               writel(0x00000003, iomuxbase + 0x280);
> +               writel(0x0001b0b1, iomuxbase + 0x650);
> +               writel(0x00000001, iomuxbase + 0x920);

Just as a suggestion, you can use imx_setup_pad from
arch/arm/mach-imx/include/mach/iomux-v3.h
which would allow you to use pre-defined "pad" constants as opposed to
the magic numbers.

See arch/arm/boards/freescale-mx6-sabresd/lowlevel.c for example.

Thanks,
Andrey Smirnov

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration
  2017-06-08 18:41 [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration Alexander Kurz
                   ` (2 preceding siblings ...)
  2017-06-08 18:41 ` [PATCH 4/4] ARM: i.MX6 Wandboard: add Documentation Alexander Kurz
@ 2017-06-13  7:27 ` Sascha Hauer
  3 siblings, 0 replies; 6+ messages in thread
From: Sascha Hauer @ 2017-06-13  7:27 UTC (permalink / raw)
  To: Alexander Kurz; +Cc: barebox

On Thu, Jun 08, 2017 at 08:41:34PM +0200, Alexander Kurz wrote:
> The hardware requirements to perform a write leveling calibration are
> not fulfilled by the Wandboard modules.
> IMX6DQRM §44.11.6 "Write leveling Calibration" Note2 states that the first
> bit of each data byte group (D0, D8, ..., D56) from memory must be connected
> to the same data bus bit on the controller, which is not given on the
> Wandboard modules, resulting in unpredictable calib results and breaking the
> WBQUAD 2GiB SDRAM setup. Similar restrictions exist for the i.MX6SD.
> 
> Remove this calibration and use the MPWLDECTRL defaults.
> 
> Signed-off-by: Alexander Kurz <akurz@blala.de>

Applied, thanks

Sascha

> ---
>  arch/arm/boards/technexion-wandboard/lowlevel.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/arch/arm/boards/technexion-wandboard/lowlevel.c b/arch/arm/boards/technexion-wandboard/lowlevel.c
> index d3eb9a0..ff5ae6d 100644
> --- a/arch/arm/boards/technexion-wandboard/lowlevel.c
> +++ b/arch/arm/boards/technexion-wandboard/lowlevel.c
> @@ -276,7 +276,6 @@ static unsigned long wandboard_dram_init(void)
>  
>  	__udelay(100);
>  
> -	mmdc_do_write_level_calibration();
>  	mmdc_do_dqs_calibration();
>  #ifdef DEBUG
>  	mmdc_print_calibration_results();
> -- 
> 2.1.4
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

end of thread, other threads:[~2017-06-13  7:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-08 18:41 [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration Alexander Kurz
2017-06-08 18:41 ` [PATCH 2/4] ARM: i.MX6 Wandboard Quad: fix PBL UART MUX Alexander Kurz
2017-06-08 18:55   ` Andrey Smirnov
2017-06-08 18:41 ` [PATCH 3/4] ARM: i.MX6 Wandboard: enable Wandboard Quad Alexander Kurz
2017-06-08 18:41 ` [PATCH 4/4] ARM: i.MX6 Wandboard: add Documentation Alexander Kurz
2017-06-13  7:27 ` [PATCH 1/4] ARM: i.MX6 Wandboard: dont do MMDC Write Leveling Calibration Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox