All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments
@ 2013-07-30 21:37 Marek Vasut
  2013-07-30 21:37 ` [U-Boot] [PATCH 01/11] dma: apbh: Add special circular mode for LCD Marek Vasut
                   ` (10 more replies)
  0 siblings, 11 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

This patchset implements support for two boards which I have. They have
some specific hardware requirements, so they are a nice benchmark for
U-Boot on MXS. The patchset can be broken into two parts:

First six patches add support for SanDisk Sansa Fuze+ and Creative X-Fi3,
both boards based on STMP3780. Note that the i.MX23 is a rebranded STMP3780
with updated BootROM.

The second part, consisting of five patches, adds smaller 4x6 font pulled
from Linux kernel and fixes CFB console to handle this font correctly.

NOTE: This patchset depends on http://patchwork.ozlabs.org/patch/263488/ ,
      which will hopefully be applied shortly.

Marek Vasut (11):
  dma: apbh: Add special circular mode for LCD
  video: Allocate the MXSFB framebuffer aligned
  video: Add System-Mode configuration hook into mxsfb
  video: Implement continuous screen refresh for SmartLCD into mxsfb
  ARM: mxs: Add Creative ZEN XFi3 board
  ARM: mxs: Add SanDisk Sansa Fuze+ board
  video: Encapsulate font in video_font_data.h
  video: Add small 4x6 font from Linux
  video: Fix cfb_console for 4-bit wide font
  ARM: mxs: Enable 4x6 font for X-Fi3
  ARM: mxs: Enable 4x6 font for Fuze+

 MAINTAINERS                              |    2 +
 arch/arm/include/asm/imx-common/dma.h    |    2 +
 arch/powerpc/cpu/mpc8xx/video.c          |    1 -
 board/creative/xfi3/Makefile             |   47 +
 board/creative/xfi3/spl_boot.c           |  150 +++
 board/creative/xfi3/xfi3.c               |  221 +++
 board/sandisk/sansa_fuze_plus/Makefile   |   47 +
 board/sandisk/sansa_fuze_plus/sfp.c      |  386 ++++++
 board/sandisk/sansa_fuze_plus/spl_boot.c |  155 +++
 boards.cfg                               |    2 +
 common/lcd.c                             |    1 -
 drivers/dma/apbh_dma.c                   |   22 +
 drivers/video/cfb_console.c              |   22 +-
 drivers/video/mxsfb.c                    |   45 +-
 drivers/video/sed156x.c                  |    1 -
 include/configs/sansa_fuze_plus.h        |   84 ++
 include/configs/xfi3.h                   |   83 ++
 include/video_font.h                     |    9 +-
 include/video_font_4x6.h                 | 2154 ++++++++++++++++++++++++++++++
 include/video_font_data.h                |    5 +
 20 files changed, 3430 insertions(+), 9 deletions(-)
 create mode 100644 board/creative/xfi3/Makefile
 create mode 100644 board/creative/xfi3/spl_boot.c
 create mode 100644 board/creative/xfi3/xfi3.c
 create mode 100644 board/sandisk/sansa_fuze_plus/Makefile
 create mode 100644 board/sandisk/sansa_fuze_plus/sfp.c
 create mode 100644 board/sandisk/sansa_fuze_plus/spl_boot.c
 create mode 100644 include/configs/sansa_fuze_plus.h
 create mode 100644 include/configs/xfi3.h
 create mode 100644 include/video_font_4x6.h

Cc: Anatolij Gustschin <agust@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
-- 
1.7.10.4

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

* [U-Boot] [PATCH 01/11] dma: apbh: Add special circular mode for LCD
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-08-09 19:50   ` Anatolij Gustschin
  2013-07-30 21:37 ` [U-Boot] [PATCH 02/11] video: Allocate the MXSFB framebuffer aligned Marek Vasut
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

Add special function that executes a specially crafted circular
DMA descriptor. The function doesn't wait for the descriptor to
finish the transfer, since the descritor never finishes. This is
useful when operating a SmartLCD through the LCDIF interface, as
the LCDIF does not give us any means to have continuous refresh
of the SmartLCD. Instead, the RUN bit in the LCDIF CTRL register
must be triggered manually. This can be worked around by starting
an DMA transfer which continuously sets the RUN bit. This function
allows starting exactly such transfer.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 arch/arm/include/asm/imx-common/dma.h |    2 ++
 drivers/dma/apbh_dma.c                |   22 ++++++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/arch/arm/include/asm/imx-common/dma.h b/arch/arm/include/asm/imx-common/dma.h
index cb74528..435aa94 100644
--- a/arch/arm/include/asm/imx-common/dma.h
+++ b/arch/arm/include/asm/imx-common/dma.h
@@ -174,4 +174,6 @@ void mxs_dma_init(void);
 int mxs_dma_init_channel(int chan);
 int mxs_dma_release(int chan);
 
+void mxs_dma_circ_start(int chan, struct mxs_dma_desc *pdesc);
+
 #endif	/* __DMA_H__ */
diff --git a/drivers/dma/apbh_dma.c b/drivers/dma/apbh_dma.c
index 510cb28..f55fbc5 100644
--- a/drivers/dma/apbh_dma.c
+++ b/drivers/dma/apbh_dma.c
@@ -557,6 +557,28 @@ int mxs_dma_go(int chan)
 }
 
 /*
+ * Execute a continuously running circular DMA descriptor.
+ * NOTE: This is not intended for general use, but rather
+ *	 for the LCD driver in Smart-LCD mode. It allows
+ *	 continuous triggering of the RUN bit there.
+ */
+void mxs_dma_circ_start(int chan, struct mxs_dma_desc *pdesc)
+{
+	struct mxs_apbh_regs *apbh_regs =
+		(struct mxs_apbh_regs *)MXS_APBH_BASE;
+
+	mxs_dma_flush_desc(pdesc);
+
+	mxs_dma_enable_irq(chan, 1);
+
+	writel(mxs_dma_cmd_address(pdesc),
+		&apbh_regs->ch[chan].hw_apbh_ch_nxtcmdar);
+	writel(1, &apbh_regs->ch[chan].hw_apbh_ch_sema);
+	writel(1 << (chan + APBH_CTRL0_CLKGATE_CHANNEL_OFFSET),
+		&apbh_regs->hw_apbh_ctrl0_clr);
+}
+
+/*
  * Initialize the DMA hardware
  */
 void mxs_dma_init(void)
-- 
1.7.10.4

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

* [U-Boot] [PATCH 02/11] video: Allocate the MXSFB framebuffer aligned
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
  2013-07-30 21:37 ` [U-Boot] [PATCH 01/11] dma: apbh: Add special circular mode for LCD Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-08-09 19:50   ` Anatolij Gustschin
  2013-07-30 21:37 ` [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb Marek Vasut
                   ` (8 subsequent siblings)
  10 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

Allocate the framebuffer aligned so it can be flushed
and the flush_dcache_range() function won't complain.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 drivers/video/mxsfb.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
index b0f7ef8..dbc63a6 100644
--- a/drivers/video/mxsfb.c
+++ b/drivers/video/mxsfb.c
@@ -174,7 +174,8 @@ void *video_hw_init(void)
 	panel.memSize = mode.xres * mode.yres * panel.gdfBytesPP;
 
 	/* Allocate framebuffer */
-	fb = malloc(panel.memSize);
+	fb = memalign(ARCH_DMA_MINALIGN,
+		      roundup(panel.memSize, ARCH_DMA_MINALIGN));
 	if (!fb) {
 		printf("MXSFB: Error allocating framebuffer!\n");
 		return NULL;
-- 
1.7.10.4

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
  2013-07-30 21:37 ` [U-Boot] [PATCH 01/11] dma: apbh: Add special circular mode for LCD Marek Vasut
  2013-07-30 21:37 ` [U-Boot] [PATCH 02/11] video: Allocate the MXSFB framebuffer aligned Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-07-30 21:46   ` Otavio Salvador
                     ` (2 more replies)
  2013-07-30 21:37 ` [U-Boot] [PATCH 04/11] video: Implement continuous screen refresh for SmartLCD " Marek Vasut
                   ` (7 subsequent siblings)
  10 siblings, 3 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

Add hook that allow configuring SmartLCD attached the MXS LCDIF
controller operating in System-Mode. This hook can be overriden
by a platform-specific SmartLCD programming routine, which writes
the SmartLCD specific values into it's registers.

Also, this patch makes sure the SYNC signals are off for the
SmartLCD case.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 drivers/video/mxsfb.c |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
index dbc63a6..78709dd 100644
--- a/drivers/video/mxsfb.c
+++ b/drivers/video/mxsfb.c
@@ -34,6 +34,17 @@
 
 static GraphicDevice panel;
 
+/**
+ * mxsfb_system_setup() - Fine-tune LCDIF configuration
+ *
+ * This function is used to adjust the LCDIF configuration. This is usually
+ * needed when driving the controller in System-Mode to operate an 8080 or
+ * 6800 connected SmartLCD.
+ */
+__weak void mxsfb_system_setup(void)
+{
+}
+
 /*
  * DENX M28EVK:
  * setenv videomode
@@ -88,6 +99,9 @@ static void mxs_lcd_init(GraphicDevice *panel,
 
 	writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
 		&regs->hw_lcdif_ctrl1);
+
+	mxsfb_system_setup();
+
 	writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) | mode->xres,
 		&regs->hw_lcdif_transfer_count);
 
@@ -115,8 +129,10 @@ static void mxs_lcd_init(GraphicDevice *panel,
 	/* Flush FIFO first */
 	writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
 
+#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM
 	/* Sync signals ON */
 	setbits_le32(&regs->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON);
+#endif
 
 	/* FIFO cleared */
 	writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_clr);
-- 
1.7.10.4

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

* [U-Boot] [PATCH 04/11] video: Implement continuous screen refresh for SmartLCD into mxsfb
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
                   ` (2 preceding siblings ...)
  2013-07-30 21:37 ` [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-08-09 19:51   ` Anatolij Gustschin
  2013-07-30 21:37 ` [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board Marek Vasut
                   ` (6 subsequent siblings)
  10 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

The LCDIF interface doesn't give us any means to do continuous refresh
when driving a SmartLCD. To work this around, we produce a special
circular DMA descriptor, which only writes the HW_LCDIF_CTRL0 register
and sets the RUN bit.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 drivers/video/mxsfb.c |   26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
index 78709dd..98d5264 100644
--- a/drivers/video/mxsfb.c
+++ b/drivers/video/mxsfb.c
@@ -28,11 +28,14 @@
 #include <asm/errno.h>
 #include <asm/io.h>
 
+#include <asm/imx-common/dma.h>
+
 #include "videomodes.h"
 
 #define	PS2KHZ(ps)	(1000000000UL / (ps))
 
 static GraphicDevice panel;
+struct mxs_dma_desc desc;
 
 /**
  * mxsfb_system_setup() - Fine-tune LCDIF configuration
@@ -207,5 +210,28 @@ void *video_hw_init(void)
 	/* Start framebuffer */
 	mxs_lcd_init(&panel, &mode, bpp);
 
+#ifdef CONFIG_VIDEO_MXS_MODE_SYSTEM
+	/*
+	 * If the LCD runs in system mode, the LCD refresh has to be triggered
+	 * manually by setting the RUN bit in HW_LCDIF_CTRL register. To avoid
+	 * having to set this bit manually after every single change in the
+	 * framebuffer memory, we set up specially crafted circular DMA, which
+	 * sets the RUN bit, then waits until it gets cleared and repeats this
+	 * infinitelly. This way, we get smooth continuous updates of the LCD.
+	 */
+	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
+
+	memset(&desc, 0, sizeof(struct mxs_dma_desc));
+	desc.address = (dma_addr_t)&desc;
+	desc.cmd.data = MXS_DMA_DESC_COMMAND_NO_DMAXFER | MXS_DMA_DESC_CHAIN |
+			MXS_DMA_DESC_WAIT4END |
+			(1 << MXS_DMA_DESC_PIO_WORDS_OFFSET);
+	desc.cmd.pio_words[0] = readl(&regs->hw_lcdif_ctrl) | LCDIF_CTRL_RUN;
+	desc.cmd.next = (uint32_t)&desc.cmd;
+
+	/* Execute the DMA chain. */
+	mxs_dma_circ_start(MXS_DMA_CHANNEL_AHB_APBH_LCDIF, &desc);
+#endif
+
 	return (void *)&panel;
 }
-- 
1.7.10.4

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
                   ` (3 preceding siblings ...)
  2013-07-30 21:37 ` [U-Boot] [PATCH 04/11] video: Implement continuous screen refresh for SmartLCD " Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-07-30 21:49   ` Otavio Salvador
                     ` (3 more replies)
  2013-07-30 21:37 ` [U-Boot] [PATCH 06/11] ARM: mxs: Add SanDisk Sansa Fuze+ board Marek Vasut
                   ` (5 subsequent siblings)
  10 siblings, 4 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

Add STMP3780-based XFi3 board. This board is a small PMP device
sporting a CPU which was later rebranded to i.MX233 . Currently
supported is USB gadget mode and both external SD and internal
Phison SD-NAND bridge .

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 MAINTAINERS                    |    1 +
 board/creative/xfi3/Makefile   |   47 +++++++++
 board/creative/xfi3/spl_boot.c |  150 +++++++++++++++++++++++++++
 board/creative/xfi3/xfi3.c     |  221 ++++++++++++++++++++++++++++++++++++++++
 boards.cfg                     |    1 +
 include/configs/xfi3.h         |   82 +++++++++++++++
 6 files changed, 502 insertions(+)
 create mode 100644 board/creative/xfi3/Makefile
 create mode 100644 board/creative/xfi3/spl_boot.c
 create mode 100644 board/creative/xfi3/xfi3.c
 create mode 100644 include/configs/xfi3.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 0a900dc..84c1f61 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -968,6 +968,7 @@ Marek Vasut <marek.vasut@gmail.com>
 	vpac270		xscale/pxa
 	zipitz2		xscale/pxa
 	mx23_olinuxino	i.MX23
+	xfi3		i.MX23
 	m28evk		i.MX28
 	sc_sps_1	i.MX28
 	m53evk		i.MX53
diff --git a/board/creative/xfi3/Makefile b/board/creative/xfi3/Makefile
new file mode 100644
index 0000000..c793bfb
--- /dev/null
+++ b/board/creative/xfi3/Makefile
@@ -0,0 +1,47 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB	= $(obj)lib$(BOARD).o
+
+ifndef	CONFIG_SPL_BUILD
+COBJS	:= xfi3.o
+else
+COBJS	:= spl_boot.o
+endif
+
+SRCS	:= $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(COBJS))
+
+$(LIB):	$(obj).depend $(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/creative/xfi3/spl_boot.c b/board/creative/xfi3/spl_boot.c
new file mode 100644
index 0000000..2d7cb4e
--- /dev/null
+++ b/board/creative/xfi3/spl_boot.c
@@ -0,0 +1,150 @@
+/*
+ * Creative ZEN X-Fi3 setup
+ *
+ * Copyright (C) 2013 Marek Vasut <marex@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/io.h>
+#include <asm/arch/iomux-mx23.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+#define	MUX_CONFIG_EMI	(MXS_PAD_1V8 | MXS_PAD_12MA | MXS_PAD_PULLUP)
+#define	MUX_CONFIG_SSP	(MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
+#define	MUX_CONFIG_LCD	(MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+
+const iomux_cfg_t iomux_setup[] = {
+	/* EMI */
+	MX23_PAD_EMI_D00__EMI_D00 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D01__EMI_D01 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D02__EMI_D02 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D03__EMI_D03 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D04__EMI_D04 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D05__EMI_D05 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D06__EMI_D06 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D07__EMI_D07 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D08__EMI_D08 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D09__EMI_D09 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D10__EMI_D10 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D11__EMI_D11 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D12__EMI_D12 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D13__EMI_D13 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D14__EMI_D14 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D15__EMI_D15 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CLKN__EMI_CLKN | MUX_CONFIG_EMI,
+
+	MX23_PAD_EMI_A00__EMI_A00 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A01__EMI_A01 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A02__EMI_A02 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A03__EMI_A03 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A04__EMI_A04 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A05__EMI_A05 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A06__EMI_A06 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A07__EMI_A07 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A08__EMI_A08 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A09__EMI_A09 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A10__EMI_A10 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A11__EMI_A11 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A12__EMI_A12 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
+
+	MX23_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
+
+	MX23_PAD_LCD_D00__LCD_D00 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D01__LCD_D01 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D02__LCD_D02 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D03__LCD_D03 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D04__LCD_D04 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D05__LCD_D05 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D06__LCD_D06 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D07__LCD_D07 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D08__LCD_D08 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D09__LCD_D09 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_RESET__LCD_RESET | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_RS__LCD_RS | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_WR__LCD_WR | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_CS__LCD_CS | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_ENABLE__LCD_ENABLE | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_VSYNC__LCD_VSYNC | MUX_CONFIG_LCD,
+
+	MX23_PAD_SSP1_CMD__SSP1_CMD | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DETECT__GPIO_2_1 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DATA0__SSP1_DATA0 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DATA1__SSP1_DATA1 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DATA2__SSP1_DATA2 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DATA3__SSP1_DATA3 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_SCK__SSP1_SCK | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D07__GPIO_0_7 | MUX_CONFIG_SSP,
+
+	MX23_PAD_GPMI_D00__SSP2_DATA0 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D01__SSP2_DATA1 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D02__SSP2_DATA2 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D03__SSP2_DATA3 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_RDY1__SSP2_CMD | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_WRN__SSP2_SCK | MUX_CONFIG_SSP,
+
+	/* PWM -- FIXME */
+	MX23_PAD_PWM2__GPIO_1_28 | MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP,
+};
+
+void mxs_adjust_memory_params(uint32_t *dram_vals)
+{
+	/* mDDR configuration values */
+	const uint32_t regs[] = {
+		0x01010001, 0x00010000, 0x01000000, 0x00000001,
+		0x00010101, 0x00000001, 0x00010000, 0x01000001,
+		0x01010000, 0x00000001, 0x07000200, 0x04070203,
+		0x02020002, 0x06070a02, 0x0d000201, 0x0305000d,
+		0x02080800, 0x19330f0a, 0x1f1f1c00, 0x020a1313,
+		0x03061323, 0x0000000a, 0x00080008, 0x00200020,
+		0x00200020, 0x00200020, 0x000003f7, 0x00000000,
+		0x00000000, 0x00000000, 0x00000020, 0x00000000,
+		0x001023cd, 0x20410010, 0x00006665, 0x00000000,
+		0x00000101, 0x00000001, 0x00000000, 0x00000000,
+	};
+	memcpy(dram_vals, regs, sizeof(regs));
+}
+
+void board_init_ll(void)
+{
+	mxs_common_spl_init(iomux_setup, ARRAY_SIZE(iomux_setup));
+}
diff --git a/board/creative/xfi3/xfi3.c b/board/creative/xfi3/xfi3.c
new file mode 100644
index 0000000..8ab7746
--- /dev/null
+++ b/board/creative/xfi3/xfi3.c
@@ -0,0 +1,221 @@
+/*
+ * Creative ZEN X-Fi3 board
+ *
+ * Copyright (C) 2013 Marek Vasut <marex@denx.de>
+ *
+ * Hardware investigation done by:
+ *
+ * Amaury Pouly <amaury.pouly@gmail.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <asm/arch/iomux-mx23.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/sys_proto.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Functions
+ */
+int board_early_init_f(void)
+{
+	/* IO0 clock at 480MHz */
+	mxs_set_ioclk(MXC_IOCLK0, 480000);
+
+	/* SSP0 clock at 96MHz */
+	mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
+
+	return 0;
+}
+
+int dram_init(void)
+{
+	return mxs_dram_init();
+}
+
+#ifdef	CONFIG_CMD_MMC
+static int xfi3_mmc_cd(int id)
+{
+	switch (id) {
+	case 0:
+		/* The SSP_DETECT is inverted on this board. */
+		return gpio_get_value(MX23_PAD_SSP1_DETECT__GPIO_2_1);
+	case 1:
+		/* Phison bridge always present */
+		return 1;
+	default:
+		return 0;
+	}
+}
+
+int board_mmc_init(bd_t *bis)
+{
+	int ret;
+
+	/* MicroSD slot */
+	gpio_direction_input(MX23_PAD_SSP1_DETECT__GPIO_2_1);
+	gpio_direction_output(MX23_PAD_GPMI_D07__GPIO_0_7, 0);
+	ret = mxsmmc_initialize(bis, 0, NULL, xfi3_mmc_cd);
+	if (ret)
+		return ret;
+
+	/* Phison SD-NAND bridge */
+	ret = mxsmmc_initialize(bis, 1, NULL, xfi3_mmc_cd);
+
+	return ret;
+}
+#endif
+
+#ifdef CONFIG_VIDEO_MXS
+static int mxsfb_write_byte(uint32_t payload, const unsigned int data)
+{
+	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
+	const unsigned int timeout = 0x10000;
+
+	if (mxs_wait_mask_clr(&regs->hw_lcdif_ctrl_reg, LCDIF_CTRL_RUN,
+			      timeout))
+		return -ETIMEDOUT;
+
+	writel((1 << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
+		(1 << LCDIF_TRANSFER_COUNT_H_COUNT_OFFSET),
+		&regs->hw_lcdif_transfer_count);
+
+	writel(LCDIF_CTRL_DATA_SELECT | LCDIF_CTRL_RUN,
+		&regs->hw_lcdif_ctrl_clr);
+
+	if (data)
+		writel(LCDIF_CTRL_DATA_SELECT, &regs->hw_lcdif_ctrl_set);
+
+	writel(LCDIF_CTRL_RUN, &regs->hw_lcdif_ctrl_set);
+
+	if (mxs_wait_mask_clr(&regs->hw_lcdif_lcdif_stat_reg, 1 << 29,
+			      timeout))
+		return -ETIMEDOUT;
+
+	writel(payload, &regs->hw_lcdif_data);
+	return mxs_wait_mask_clr(&regs->hw_lcdif_ctrl_reg, LCDIF_CTRL_RUN,
+				 timeout);
+}
+
+static void mxsfb_write_register(uint32_t reg, uint32_t data)
+{
+	mxsfb_write_byte(reg, 0);
+	mxsfb_write_byte(data, 1);
+}
+
+void mxsfb_system_setup(void)
+{
+	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
+
+	/* Switch the LCDIF into System-Mode */
+	writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DOTCLK_MODE |
+		LCDIF_CTRL_BYPASS_COUNT, &regs->hw_lcdif_ctrl_clr);
+
+	/* Restart the SmartLCD controller */
+	mdelay(50);
+	writel(1, &regs->hw_lcdif_ctrl1_set);
+	mdelay(50);
+	writel(1, &regs->hw_lcdif_ctrl1_clr);
+	mdelay(50);
+	writel(1, &regs->hw_lcdif_ctrl1_set);
+	mdelay(50);
+
+	/* Program the SmartLCD controller */
+	writel(LCDIF_CTRL1_RECOVER_ON_UNDERFLOW, &regs->hw_lcdif_ctrl1_set);
+
+	writel(0x03030202, &regs->hw_lcdif_timing);
+
+	mxsfb_write_register(1, 0x01c);
+
+	mxsfb_write_register(2, 0x100);
+	/* 0x30 flips the LCD */
+	mxsfb_write_register(3, 0x1038);
+	mxsfb_write_register(8, 0x808);
+	/* This can possibly contain 0x111 */
+	mxsfb_write_register(0xc, 0x0);
+	mxsfb_write_register(0xf, 0xc01);
+	mxsfb_write_register(0x20, 0);
+	mxsfb_write_register(0x21, 0);
+	mdelay(30);
+	mxsfb_write_register(0x10, 0xa00);
+	mxsfb_write_register(0x11, 0x1038);
+	mdelay(30);
+	mxsfb_write_register(0x12, 0x1010);
+	mxsfb_write_register(0x13, 0x50);
+	mxsfb_write_register(0x14, 0x4f58);
+	mxsfb_write_register(0x30, 0);
+	mxsfb_write_register(0x31, 0xdb);
+	mxsfb_write_register(0x32, 0);
+	mxsfb_write_register(0x33, 0);
+	mxsfb_write_register(0x34, 0xdb);
+	mxsfb_write_register(0x35, 0);
+	mxsfb_write_register(0x36, 0xaf);
+	mxsfb_write_register(0x37, 0);
+	mxsfb_write_register(0x38, 0xdb);
+	mxsfb_write_register(0x39, 0);
+	mxsfb_write_register(0x50, 0);
+	mxsfb_write_register(0x51, 0x705);
+	mxsfb_write_register(0x52, 0xe0a);
+	mxsfb_write_register(0x53, 0x300);
+	mxsfb_write_register(0x54, 0xa0e);
+	mxsfb_write_register(0x55, 0x507);
+	mxsfb_write_register(0x56, 0);
+	mxsfb_write_register(0x57, 3);
+	mxsfb_write_register(0x58, 0x90a);
+	mxsfb_write_register(0x59, 0xa09);
+	mdelay(30);
+	mxsfb_write_register(7, 0x1017);
+	mdelay(40);
+	mxsfb_write_register(0x36, 0xaf);
+	mxsfb_write_register(0x37, 0);
+	mxsfb_write_register(0x38, 0xdb);
+	mxsfb_write_register(0x39, 0);
+	mxsfb_write_register(0x20, 0);
+	mxsfb_write_register(0x21, 0);
+	/* Turn on Framebuffer Upload Mode */
+	mxsfb_write_byte(0x22, 0);
+
+	writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DATA_SELECT,
+		&regs->hw_lcdif_ctrl_set);
+}
+#endif
+
+int board_init(void)
+{
+	/* Adress of boot parameters */
+	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
+
+	/* Turn on PWM backlight */
+	gpio_direction_output(MX23_PAD_PWM2__GPIO_1_28, 1);
+
+	return 0;
+}
+
+int board_eth_init(bd_t *bis)
+{
+	usb_eth_initialize(bis);
+	return 0;
+}
diff --git a/boards.cfg b/boards.cfg
index f919c53..85e0c35 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -198,6 +198,7 @@ zmx25                        arm         arm926ejs   zmx25               syteco
 imx27lite                    arm         arm926ejs   imx27lite           logicpd        mx27
 magnesium                    arm         arm926ejs   imx27lite           logicpd        mx27
 mx23_olinuxino               arm         arm926ejs   mx23_olinuxino      olimex         mxs		mx23_olinuxino
+xfi3                         arm         arm926ejs   xfi3                creative       mxs		xfi3
 apx4devkit                   arm         arm926ejs   apx4devkit          bluegiga       mxs		apx4devkit
 mx23evk                      arm         arm926ejs   mx23evk             freescale      mxs		mx23evk
 m28evk                       arm         arm926ejs   m28evk              denx           mxs		m28evk
diff --git a/include/configs/xfi3.h b/include/configs/xfi3.h
new file mode 100644
index 0000000..10facd9
--- /dev/null
+++ b/include/configs/xfi3.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2013 Marek Vasut <marex@denx.de>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#ifndef __CONFIGS_XFI3_H__
+#define __CONFIGS_XFI3_H__
+
+/* System configurations */
+#define CONFIG_MX23				/* i.MX23 SoC */
+#define CONFIG_MACH_TYPE	0xffffffff
+
+/* U-Boot Commands */
+#define CONFIG_SYS_NO_FLASH
+#include <config_cmd_default.h>
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DOS_PARTITION
+
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_GPIO
+#define CONFIG_CMD_MMC
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_USB
+#define CONFIG_VIDEO
+
+/* Memory configuration */
+#define CONFIG_NR_DRAM_BANKS		1		/* 1 bank of DRAM */
+#define PHYS_SDRAM_1			0x40000000	/* Base address */
+#define PHYS_SDRAM_1_SIZE		0x08000000	/* Max 128 MB RAM */
+#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1
+
+/* Environment */
+#define CONFIG_ENV_SIZE			(16 * 1024)
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_OVERWRITE
+
+/* Booting Linux */
+#define CONFIG_BOOTDELAY	3
+#define CONFIG_BOOTFILE		"uImage"
+#define CONFIG_BOOTARGS		"console=ttyAMA0,115200n8 "
+#define CONFIG_LOADADDR		0x42000000
+#define CONFIG_SYS_LOAD_ADDR	CONFIG_LOADADDR
+
+/* LCD */
+#ifdef CONFIG_VIDEO
+#define CONFIG_VIDEO_MXS_MODE_SYSTEM
+#define CONFIG_SYS_BLACK_IN_WRITE
+#define LCD_BPP	LCD_COLOR16
+#endif
+
+/* USB */
+#ifdef CONFIG_CMD_USB
+#define CONFIG_EHCI_MXS_PORT0
+#define CONFIG_USB_MAX_CONTROLLER_COUNT 1
+
+#define CONFIG_MV_UDC		/* ChipIdea CI13xxx UDC */
+#define CONFIG_USB_GADGET_DUALSPEED
+
+#define CONFIG_USB_ETHER
+#define CONFIG_USB_ETH_CDC
+#define CONFIG_NETCONSOLE
+#endif
+
+/* The rest of the configuration is shared */
+#include <configs/mxs.h>
+
+#endif	/* __CONFIGS_XFI3_H__ */
-- 
1.7.10.4

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

* [U-Boot] [PATCH 06/11] ARM: mxs: Add SanDisk Sansa Fuze+ board
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
                   ` (4 preceding siblings ...)
  2013-07-30 21:37 ` [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-07-31 19:32   ` Wolfgang Denk
  2013-07-30 21:37 ` [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h Marek Vasut
                   ` (4 subsequent siblings)
  10 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

Add STMP3780-based Sansa Fuze+ board. This board is a small PMP
device sporting a CPU which was later rebranded to i.MX233 .
Currently supported is USB gadget mode and MMC .

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 MAINTAINERS                              |    1 +
 board/sandisk/sansa_fuze_plus/Makefile   |   47 ++++
 board/sandisk/sansa_fuze_plus/sfp.c      |  386 ++++++++++++++++++++++++++++++
 board/sandisk/sansa_fuze_plus/spl_boot.c |  155 ++++++++++++
 boards.cfg                               |    1 +
 include/configs/sansa_fuze_plus.h        |   83 +++++++
 6 files changed, 673 insertions(+)
 create mode 100644 board/sandisk/sansa_fuze_plus/Makefile
 create mode 100644 board/sandisk/sansa_fuze_plus/sfp.c
 create mode 100644 board/sandisk/sansa_fuze_plus/spl_boot.c
 create mode 100644 include/configs/sansa_fuze_plus.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 84c1f61..750d6ec 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -969,6 +969,7 @@ Marek Vasut <marek.vasut@gmail.com>
 	zipitz2		xscale/pxa
 	mx23_olinuxino	i.MX23
 	xfi3		i.MX23
+	sansa_fuze_plus	i.MX23
 	m28evk		i.MX28
 	sc_sps_1	i.MX28
 	m53evk		i.MX53
diff --git a/board/sandisk/sansa_fuze_plus/Makefile b/board/sandisk/sansa_fuze_plus/Makefile
new file mode 100644
index 0000000..5e46e4c
--- /dev/null
+++ b/board/sandisk/sansa_fuze_plus/Makefile
@@ -0,0 +1,47 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB	= $(obj)lib$(BOARD).o
+
+ifndef	CONFIG_SPL_BUILD
+COBJS	:= sfp.o
+else
+COBJS	:= spl_boot.o
+endif
+
+SRCS	:= $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(COBJS))
+
+$(LIB):	$(obj).depend $(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/sandisk/sansa_fuze_plus/sfp.c b/board/sandisk/sansa_fuze_plus/sfp.c
new file mode 100644
index 0000000..a854c7f
--- /dev/null
+++ b/board/sandisk/sansa_fuze_plus/sfp.c
@@ -0,0 +1,386 @@
+/*
+ * SanDisk Sansa Fuze Plus board
+ *
+ * Copyright (C) 2013 Marek Vasut <marex@denx.de>
+ *
+ * Hardware investigation done by:
+ *
+ * Amaury Pouly <amaury.pouly@gmail.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <asm/arch/iomux-mx23.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/sys_proto.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Functions
+ */
+int board_early_init_f(void)
+{
+	/* IO0 clock at 480MHz */
+	mxs_set_ioclk(MXC_IOCLK0, 480000);
+
+	/* SSP0 clock at 96MHz */
+	mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
+
+	return 0;
+}
+
+int dram_init(void)
+{
+	return mxs_dram_init();
+}
+
+#ifdef	CONFIG_CMD_MMC
+static int xfi3_mmc_cd(int id)
+{
+	switch (id) {
+	case 0:
+		/* The SSP_DETECT is inverted on this board. */
+		return gpio_get_value(MX23_PAD_SSP1_DETECT__GPIO_2_1);
+	case 1:
+		/* Internal eMMC always present */
+		return 1;
+	default:
+		return 0;
+	}
+}
+
+int board_mmc_init(bd_t *bis)
+{
+	int ret;
+
+	/* MicroSD slot */
+	gpio_direction_input(MX23_PAD_SSP1_DETECT__GPIO_2_1);
+	gpio_direction_output(MX23_PAD_GPMI_D08__GPIO_0_8, 0);
+	ret = mxsmmc_initialize(bis, 0, NULL, xfi3_mmc_cd);
+	if (ret)
+		return ret;
+
+	/* Internal eMMC */
+	gpio_direction_output(MX23_PAD_PWM3__GPIO_1_29, 0);
+	ret = mxsmmc_initialize(bis, 1, NULL, xfi3_mmc_cd);
+
+	return ret;
+}
+#endif
+
+#ifdef CONFIG_VIDEO_MXS
+#define	MUX_CONFIG_LCD	(MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+const iomux_cfg_t iomux_lcd_gpio[] = {
+	MX23_PAD_LCD_D00__GPIO_1_0 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D01__GPIO_1_1 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D02__GPIO_1_2 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D03__GPIO_1_3 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D04__GPIO_1_4 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D05__GPIO_1_5 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D06__GPIO_1_6 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D07__GPIO_1_7 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D08__GPIO_1_8 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D09__GPIO_1_9 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D10__GPIO_1_10 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D11__GPIO_1_11 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D12__GPIO_1_12 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D13__GPIO_1_13 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D14__GPIO_1_14 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D15__GPIO_1_15 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D16__GPIO_1_16 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D17__GPIO_1_17 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_RESET__GPIO_1_18 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_RS__GPIO_1_19 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_WR__GPIO_1_20 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_CS__GPIO_1_21 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_ENABLE__GPIO_1_23 | MUX_CONFIG_LCD,
+};
+
+const iomux_cfg_t iomux_lcd_lcd[] = {
+	MX23_PAD_LCD_D00__LCD_D00 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D01__LCD_D01 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D02__LCD_D02 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D03__LCD_D03 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D04__LCD_D04 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D05__LCD_D05 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D06__LCD_D06 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D07__LCD_D07 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D08__LCD_D08 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D09__LCD_D09 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_RESET__LCD_RESET | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_RS__LCD_RS | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_WR__LCD_WR | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_CS__LCD_CS | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_ENABLE__LCD_ENABLE | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_VSYNC__LCD_VSYNC | MUX_CONFIG_LCD,
+};
+
+static int mxsfb_read_register(uint32_t reg, uint32_t *value)
+{
+	iomux_cfg_t mux;
+	uint32_t val = 0;
+	int i;
+
+	/* Mangle the register offset. */
+	reg = ((reg & 0xff) << 1) | (((reg >> 8) & 0xff) << 10);
+
+	/*
+	 * The SmartLCD interface on MX233 can only do WRITE operation
+	 * via the LCDIF controller. Implement the READ operation by
+	 * fiddling with bits.
+	 */
+	mxs_iomux_setup_multiple_pads(iomux_lcd_gpio,
+		ARRAY_SIZE(iomux_lcd_gpio));
+
+	gpio_direction_output(MX23_PAD_LCD_RS__GPIO_1_19, 1);
+	gpio_direction_output(MX23_PAD_LCD_CS__GPIO_1_21, 1);
+	gpio_direction_output(MX23_PAD_LCD_WR__GPIO_1_20, 1);
+	gpio_direction_output(MX23_PAD_LCD_ENABLE__GPIO_1_23, 1);
+
+	for (i = 0; i < 18; i++) {
+		mux = MXS_IOMUX_PAD_NAKED(1, i, PAD_MUXSEL_GPIO);
+		gpio_direction_output(mux, 0);
+	}
+
+	udelay(2);
+	gpio_direction_output(MX23_PAD_LCD_RS__GPIO_1_19, 0);
+	udelay(1);
+	gpio_direction_output(MX23_PAD_LCD_CS__GPIO_1_21, 0);
+	udelay(1);
+	gpio_direction_output(MX23_PAD_LCD_WR__GPIO_1_20, 0);
+	udelay(1);
+
+	for (i = 0; i < 18; i++) {
+		mux = MXS_IOMUX_PAD_NAKED(1, i, PAD_MUXSEL_GPIO);
+		gpio_direction_output(mux, (reg >> i) & 1);
+	}
+	udelay(1);
+
+	gpio_direction_output(MX23_PAD_LCD_WR__GPIO_1_20, 1);
+	udelay(3);
+
+	for (i = 0; i < 18; i++) {
+		mux = MXS_IOMUX_PAD_NAKED(1, i, PAD_MUXSEL_GPIO);
+		gpio_direction_input(mux);
+	}
+	udelay(2);
+
+	gpio_direction_output(MX23_PAD_LCD_ENABLE__GPIO_1_23, 0);
+	udelay(1);
+	gpio_direction_output(MX23_PAD_LCD_RS__GPIO_1_19, 1);
+	udelay(1);
+	gpio_direction_output(MX23_PAD_LCD_ENABLE__GPIO_1_23, 1);
+	udelay(3);
+	gpio_direction_output(MX23_PAD_LCD_ENABLE__GPIO_1_23, 0);
+	udelay(2);
+
+	for (i = 0; i < 18; i++) {
+		mux = MXS_IOMUX_PAD_NAKED(1, i, PAD_MUXSEL_GPIO);
+		val |= !!gpio_get_value(mux) << i;
+	}
+	udelay(1);
+
+	gpio_direction_output(MX23_PAD_LCD_ENABLE__GPIO_1_23, 1);
+	udelay(1);
+	gpio_direction_output(MX23_PAD_LCD_CS__GPIO_1_21, 1);
+	udelay(1);
+
+	mxs_iomux_setup_multiple_pads(iomux_lcd_lcd,
+		ARRAY_SIZE(iomux_lcd_lcd));
+
+	/* Demangle the register value. */
+	*value = ((val >> 1) & 0xff) | ((val >> 2) & 0xff00);
+
+	writel(val, 0x2000);
+	return 0;
+}
+
+static int mxsfb_write_byte(uint32_t payload, const unsigned int data)
+{
+	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
+	const unsigned int timeout = 0x10000;
+
+	/* What is going on here I do not know. FIXME */
+	payload = ((payload & 0xff) << 1) | (((payload >> 8) & 0xff) << 10);
+
+	if (mxs_wait_mask_clr(&regs->hw_lcdif_ctrl_reg, LCDIF_CTRL_RUN,
+			      timeout))
+		return -ETIMEDOUT;
+
+	writel((1 << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
+		(1 << LCDIF_TRANSFER_COUNT_H_COUNT_OFFSET),
+		&regs->hw_lcdif_transfer_count);
+
+	writel(LCDIF_CTRL_DATA_SELECT | LCDIF_CTRL_RUN,
+		&regs->hw_lcdif_ctrl_clr);
+
+	if (data)
+		writel(LCDIF_CTRL_DATA_SELECT, &regs->hw_lcdif_ctrl_set);
+
+	writel(LCDIF_CTRL_RUN, &regs->hw_lcdif_ctrl_set);
+
+	if (mxs_wait_mask_clr(&regs->hw_lcdif_lcdif_stat_reg, 1 << 29,
+			      timeout))
+		return -ETIMEDOUT;
+
+	writel(payload, &regs->hw_lcdif_data);
+	return mxs_wait_mask_clr(&regs->hw_lcdif_ctrl_reg, LCDIF_CTRL_RUN,
+				 timeout);
+}
+
+static void mxsfb_write_register(uint32_t reg, uint32_t data)
+{
+	mxsfb_write_byte(reg, 0);
+	mxsfb_write_byte(data, 1);
+}
+
+void mxsfb_system_setup(void)
+{
+	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
+	uint32_t id;
+
+	/* Switch the LCDIF into System-Mode */
+	writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DOTCLK_MODE |
+		LCDIF_CTRL_BYPASS_COUNT, &regs->hw_lcdif_ctrl_clr);
+
+	/* To program the LCD, switch to 18bit bus + 18bit data. */
+	clrsetbits_le32(&regs->hw_lcdif_ctrl,
+		LCDIF_CTRL_WORD_LENGTH_MASK | LCDIF_CTRL_LCD_DATABUS_WIDTH_MASK,
+		LCDIF_CTRL_WORD_LENGTH_18BIT |
+		LCDIF_CTRL_LCD_DATABUS_WIDTH_18BIT);
+
+	mxsfb_read_register(0, &id);
+	writel(id, 0x2004);
+
+	/* Restart the SmartLCD controller */
+	mdelay(50);
+	writel(1, &regs->hw_lcdif_ctrl1_set);
+	mdelay(50);
+	writel(1, &regs->hw_lcdif_ctrl1_clr);
+	mdelay(50);
+	writel(1, &regs->hw_lcdif_ctrl1_set);
+	mdelay(50);
+
+	/* Program the SmartLCD controller */
+	writel(LCDIF_CTRL1_RECOVER_ON_UNDERFLOW, &regs->hw_lcdif_ctrl1_set);
+
+	writel(0x02020201, &regs->hw_lcdif_timing);
+
+	/* Write the register payload. */
+	mxsfb_write_register(0xe5, 0x78f0);
+	mxsfb_write_register(0xe3, 0x3008);
+	mxsfb_write_register(0xe7, 0x12);
+	mxsfb_write_register(0xef, 0x1231);
+	mxsfb_write_register(0, 1);
+	mxsfb_write_register(1, 0x100);
+	mxsfb_write_register(2, 0x700);
+	mxsfb_write_register(3, 0x1030);
+	mxsfb_write_register(4, 0);
+	mxsfb_write_register(8, 0x207);
+	mxsfb_write_register(9, 0);
+	mxsfb_write_register(0xa, 0);
+	mxsfb_write_register(0xc, 0);
+	mxsfb_write_register(0xd, 0);
+	mxsfb_write_register(0xf, 0);
+	mxsfb_write_register(0x10, 0);
+	mxsfb_write_register(0x11, 7);
+	mxsfb_write_register(0x12, 0);
+	mxsfb_write_register(0x13, 0);
+	mdelay(20);
+	mxsfb_write_register(0x10, 0x1290);
+	mxsfb_write_register(0x11, 7);
+	mdelay(50);
+	mxsfb_write_register(0x12, 0x19);
+	mdelay(50);
+	mxsfb_write_register(0x13, 0x1700);
+	mxsfb_write_register(0x29, 0x14);
+	mdelay(50);
+	mxsfb_write_register(0x20, 0);
+	mxsfb_write_register(0x21, 0);
+	mxsfb_write_register(0x30, 0x504);
+	mxsfb_write_register(0x31, 7);
+	mxsfb_write_register(0x32, 6);
+	mxsfb_write_register(0x35, 0x106);
+	mxsfb_write_register(0x36, 0x202);
+	mxsfb_write_register(0x37, 0x504);
+	mxsfb_write_register(0x38, 0x500);
+	mxsfb_write_register(0x39, 0x706);
+	mxsfb_write_register(0x3c, 0x204);
+	mxsfb_write_register(0x3d, 0x202);
+	mxsfb_write_register(0x50, 0);
+	mxsfb_write_register(0x51, 0xef);
+	mxsfb_write_register(0x52, 0);
+	mxsfb_write_register(0x53, 0x13f);
+	mxsfb_write_register(0x60, 0xa700);
+	mxsfb_write_register(0x61, 1);
+	mxsfb_write_register(0x6a, 0);
+	mxsfb_write_register(0x2b, 0xd);
+	mdelay(50);
+	mxsfb_write_register(0x90, 0x11);
+	mxsfb_write_register(0x92, 0x600);
+	mxsfb_write_register(0x93, 3);
+	mxsfb_write_register(0x95, 0x110);
+	mxsfb_write_register(0x97, 0);
+	mxsfb_write_register(0x98, 0);
+	mxsfb_write_register(7, 0x173);
+
+	/* Turn on Framebuffer Upload Mode */
+	mxsfb_write_byte(0x22, 0);
+
+	writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DATA_SELECT,
+		&regs->hw_lcdif_ctrl_set);
+
+	/* Operate the framebuffer in 16bit mode. */
+	clrsetbits_le32(&regs->hw_lcdif_ctrl,
+		LCDIF_CTRL_WORD_LENGTH_MASK | LCDIF_CTRL_LCD_DATABUS_WIDTH_MASK,
+		LCDIF_CTRL_WORD_LENGTH_16BIT |
+		LCDIF_CTRL_LCD_DATABUS_WIDTH_18BIT);
+}
+#endif
+
+int board_init(void)
+{
+	/* Adress of boot parameters */
+	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
+
+	/* Turn on PWM backlight */
+	gpio_direction_output(MX23_PAD_PWM2__GPIO_1_28, 1);
+
+	return 0;
+}
+
+int board_eth_init(bd_t *bis)
+{
+	usb_eth_initialize(bis);
+	return 0;
+}
diff --git a/board/sandisk/sansa_fuze_plus/spl_boot.c b/board/sandisk/sansa_fuze_plus/spl_boot.c
new file mode 100644
index 0000000..0f6240f
--- /dev/null
+++ b/board/sandisk/sansa_fuze_plus/spl_boot.c
@@ -0,0 +1,155 @@
+/*
+ * Creative ZEN X-Fi3 setup
+ *
+ * Copyright (C) 2013 Marek Vasut <marex@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/io.h>
+#include <asm/arch/iomux-mx23.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+#define	MUX_CONFIG_EMI	(MXS_PAD_1V8 | MXS_PAD_12MA | MXS_PAD_PULLUP)
+#define	MUX_CONFIG_SSP	(MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_PULLUP)
+#define	MUX_CONFIG_LCD	(MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+
+const iomux_cfg_t iomux_setup[] = {
+	/* EMI */
+	MX23_PAD_EMI_D00__EMI_D00 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D01__EMI_D01 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D02__EMI_D02 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D03__EMI_D03 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D04__EMI_D04 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D05__EMI_D05 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D06__EMI_D06 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D07__EMI_D07 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D08__EMI_D08 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D09__EMI_D09 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D10__EMI_D10 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D11__EMI_D11 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D12__EMI_D12 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D13__EMI_D13 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D14__EMI_D14 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_D15__EMI_D15 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CLKN__EMI_CLKN | MUX_CONFIG_EMI,
+
+	MX23_PAD_EMI_A00__EMI_A00 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A01__EMI_A01 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A02__EMI_A02 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A03__EMI_A03 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A04__EMI_A04 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A05__EMI_A05 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A06__EMI_A06 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A07__EMI_A07 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A08__EMI_A08 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A09__EMI_A09 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A10__EMI_A10 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A11__EMI_A11 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_A12__EMI_A12 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
+
+	MX23_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
+	MX23_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
+
+	MX23_PAD_LCD_D00__LCD_D00 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D01__LCD_D01 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D02__LCD_D02 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D03__LCD_D03 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D04__LCD_D04 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D05__LCD_D05 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D06__LCD_D06 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D07__LCD_D07 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D08__LCD_D08 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D09__LCD_D09 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_RESET__LCD_RESET | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_RS__LCD_RS | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_WR__LCD_WR | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_CS__LCD_CS | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_ENABLE__LCD_ENABLE | MUX_CONFIG_LCD,
+	MX23_PAD_LCD_VSYNC__LCD_VSYNC | MUX_CONFIG_LCD,
+
+	MX23_PAD_SSP1_CMD__SSP1_CMD | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DETECT__GPIO_2_1 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DATA0__SSP1_DATA0 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DATA1__SSP1_DATA1 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DATA2__SSP1_DATA2 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_DATA3__SSP1_DATA3 | MUX_CONFIG_SSP,
+	MX23_PAD_SSP1_SCK__SSP1_SCK | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D08__GPIO_0_8 | MUX_CONFIG_SSP,
+
+	MX23_PAD_GPMI_D00__SSP2_DATA0 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D01__SSP2_DATA1 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D02__SSP2_DATA2 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D03__SSP2_DATA3 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D04__SSP2_DATA4 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D05__SSP2_DATA5 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D06__SSP2_DATA6 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_D07__SSP2_DATA7 | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_RDY1__SSP2_CMD | MUX_CONFIG_SSP,
+	MX23_PAD_GPMI_WRN__SSP2_SCK | (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL),
+	MX23_PAD_PWM3__GPIO_1_29 | MUX_CONFIG_SSP,
+
+	/* PWM -- FIXME */
+	MX23_PAD_PWM2__GPIO_1_28 | MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP,
+};
+
+void mxs_adjust_memory_params(uint32_t *dram_vals)
+{
+	/* mDDR configuration values */
+	const uint32_t regs[] = {
+		0x01010001, 0x00010000, 0x01000000, 0x00000001,
+		0x00010101, 0x00000001, 0x00010000, 0x01000001,
+		0x01010000, 0x00000001, 0x07000200, 0x04070203,
+		0x02020002, 0x06070a02, 0x0d000201, 0x0305000d,
+		0x02080800, 0x19330f0a, 0x1f1f1c00, 0x020a1313,
+		0x03061323, 0x0000000a, 0x00080008, 0x00200020,
+		0x00200020, 0x00200020, 0x000003f7, 0x00000000,
+		0x00000000, 0x00000000, 0x00000020, 0x00000000,
+		0x001023cd, 0x20410010, 0x00006665, 0x00000000,
+		0x00000101, 0x00000001, 0x00000000, 0x00000000,
+	};
+	memcpy(dram_vals, regs, sizeof(regs));
+}
+
+void board_init_ll(void)
+{
+	mxs_common_spl_init(iomux_setup, ARRAY_SIZE(iomux_setup));
+}
diff --git a/boards.cfg b/boards.cfg
index 85e0c35..8b97b23 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -199,6 +199,7 @@ imx27lite                    arm         arm926ejs   imx27lite           logicpd
 magnesium                    arm         arm926ejs   imx27lite           logicpd        mx27
 mx23_olinuxino               arm         arm926ejs   mx23_olinuxino      olimex         mxs		mx23_olinuxino
 xfi3                         arm         arm926ejs   xfi3                creative       mxs		xfi3
+sansa_fuze_plus              arm         arm926ejs   sansa_fuze_plus     sandisk        mxs		sansa_fuze_plus
 apx4devkit                   arm         arm926ejs   apx4devkit          bluegiga       mxs		apx4devkit
 mx23evk                      arm         arm926ejs   mx23evk             freescale      mxs		mx23evk
 m28evk                       arm         arm926ejs   m28evk              denx           mxs		m28evk
diff --git a/include/configs/sansa_fuze_plus.h b/include/configs/sansa_fuze_plus.h
new file mode 100644
index 0000000..05d282d
--- /dev/null
+++ b/include/configs/sansa_fuze_plus.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2013 Marek Vasut <marex@denx.de>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#ifndef __CONFIGS_SANSA_FUZE_PLUS_H__
+#define __CONFIGS_SANSA_FUZE_PLUS_H__
+
+/* System configurations */
+#define CONFIG_MX23				/* i.MX23 SoC */
+#define CONFIG_MACH_TYPE	0xffffffff
+
+/* U-Boot Commands */
+#define CONFIG_SYS_NO_FLASH
+#include <config_cmd_default.h>
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DOS_PARTITION
+
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_GPIO
+#define CONFIG_CMD_MMC
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_USB
+#define CONFIG_VIDEO
+#define CONFIG_CMD_MEMTEST
+
+/* Memory configuration */
+#define CONFIG_NR_DRAM_BANKS		1		/* 1 bank of DRAM */
+#define PHYS_SDRAM_1			0x40000000	/* Base address */
+#define PHYS_SDRAM_1_SIZE		0x08000000	/* Max 128 MB RAM */
+#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1
+
+/* Environment */
+#define CONFIG_ENV_SIZE			(16 * 1024)
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_OVERWRITE
+
+/* Booting Linux */
+#define CONFIG_BOOTDELAY	3
+#define CONFIG_BOOTFILE		"uImage"
+#define CONFIG_BOOTARGS		"console=ttyAMA0,115200n8 "
+#define CONFIG_LOADADDR		0x42000000
+#define CONFIG_SYS_LOAD_ADDR	CONFIG_LOADADDR
+
+/* LCD */
+#ifdef CONFIG_VIDEO
+#define CONFIG_VIDEO_MXS_MODE_SYSTEM
+#define CONFIG_SYS_BLACK_IN_WRITE
+#define LCD_BPP	LCD_COLOR16
+#endif
+
+/* USB */
+#ifdef CONFIG_CMD_USB
+#define CONFIG_EHCI_MXS_PORT0
+#define CONFIG_USB_MAX_CONTROLLER_COUNT 1
+
+#define CONFIG_MV_UDC		/* ChipIdea CI13xxx UDC */
+#define CONFIG_USB_GADGET_DUALSPEED
+
+#define CONFIG_USB_ETHER
+#define CONFIG_USB_ETH_CDC
+#define CONFIG_NETCONSOLE
+#endif
+
+/* The rest of the configuration is shared */
+#include <configs/mxs.h>
+
+#endif	/* __CONFIGS_SANSA_FUZE_PLUS_H__ */
-- 
1.7.10.4

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

* [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
                   ` (5 preceding siblings ...)
  2013-07-30 21:37 ` [U-Boot] [PATCH 06/11] ARM: mxs: Add SanDisk Sansa Fuze+ board Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-08-10  7:19   ` Anatolij Gustschin
  2013-08-12 20:43   ` Anatolij Gustschin
  2013-07-30 21:37 ` [U-Boot] [PATCH 08/11] video: Add small 4x6 font from Linux Marek Vasut
                   ` (3 subsequent siblings)
  10 siblings, 2 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

This patch moves all the font configuration values into video_font_data.h
so they are all in the right place with the font. The video_font.h now only
includes video_font_data.h and will allow us to select and include different
font once more fonts are added.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
---
 arch/powerpc/cpu/mpc8xx/video.c |    1 -
 common/lcd.c                    |    1 -
 drivers/video/cfb_console.c     |    1 -
 drivers/video/sed156x.c         |    1 -
 include/video_font.h            |    5 +----
 include/video_font_data.h       |    5 +++++
 6 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/cpu/mpc8xx/video.c b/arch/powerpc/cpu/mpc8xx/video.c
index 1bbf4cc..7725c67 100644
--- a/arch/powerpc/cpu/mpc8xx/video.c
+++ b/arch/powerpc/cpu/mpc8xx/video.c
@@ -125,7 +125,6 @@ DECLARE_GLOBAL_DATA_PTR;
 /************************************************************************/
 
 #include <video_font.h>			/* Get font data, width and height */
-#include <video_font_data.h>
 
 #ifdef CONFIG_VIDEO_LOGO
 #include <video_logo.h>			/* Get logo data, width and height */
diff --git a/common/lcd.c b/common/lcd.c
index 50ea4d6..c886641 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -67,7 +67,6 @@
 /* ** FONT DATA								*/
 /************************************************************************/
 #include <video_font.h>		/* Get font data, width and height	*/
-#include <video_font_data.h>
 
 /************************************************************************/
 /* ** LOGO DATA								*/
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
index e384b71..edac91c 100644
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -213,7 +213,6 @@
 #include <linux/types.h>
 #include <stdio_dev.h>
 #include <video_font.h>
-#include <video_font_data.h>
 
 #if defined(CONFIG_CMD_DATE)
 #include <rtc.h>
diff --git a/drivers/video/sed156x.c b/drivers/video/sed156x.c
index a610b74..707250d 100644
--- a/drivers/video/sed156x.c
+++ b/drivers/video/sed156x.c
@@ -41,7 +41,6 @@
 
 /* include the font data */
 #include <video_font.h>
-#include <video_font_data.h>
 
 #if VIDEO_FONT_WIDTH != 8 || VIDEO_FONT_HEIGHT != 16
 #error Expecting VIDEO_FONT_WIDTH == 8 && VIDEO_FONT_HEIGHT == 16
diff --git a/include/video_font.h b/include/video_font.h
index 47957c4..bbe62a3 100644
--- a/include/video_font.h
+++ b/include/video_font.h
@@ -24,9 +24,6 @@
 #ifndef _VIDEO_FONT_
 #define _VIDEO_FONT_
 
-#define VIDEO_FONT_CHARS	256
-#define VIDEO_FONT_WIDTH	8
-#define VIDEO_FONT_HEIGHT	16
-#define VIDEO_FONT_SIZE		(VIDEO_FONT_CHARS * VIDEO_FONT_HEIGHT)
+#include <video_font_data.h>
 
 #endif /* _VIDEO_FONT_ */
diff --git a/include/video_font_data.h b/include/video_font_data.h
index c7a8b9b..f9e30aa 100644
--- a/include/video_font_data.h
+++ b/include/video_font_data.h
@@ -24,6 +24,11 @@
 #ifndef _VIDEO_FONT_DATA_
 #define _VIDEO_FONT_DATA_
 
+#define VIDEO_FONT_CHARS	256
+#define VIDEO_FONT_WIDTH	8
+#define VIDEO_FONT_HEIGHT	16
+#define VIDEO_FONT_SIZE		(VIDEO_FONT_CHARS * VIDEO_FONT_HEIGHT)
+
 static unsigned char video_fontdata[VIDEO_FONT_SIZE] = {
 
 	/* 0 0x00 '^@' */
-- 
1.7.10.4

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

* [U-Boot] [PATCH 08/11] video: Add small 4x6 font from Linux
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
                   ` (6 preceding siblings ...)
  2013-07-30 21:37 ` [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-08-12 20:44   ` Anatolij Gustschin
  2013-07-30 21:37 ` [U-Boot] [PATCH 09/11] video: Fix cfb_console for 4-bit wide font Marek Vasut
                   ` (2 subsequent siblings)
  10 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

This font is based on Linux drivers/video/console/font_mini_4x6.c as of commit:

commit bcfbeecea11c15e243f076d37d637c2598aff4fe
Author: Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
Date:   Sun Aug 12 15:05:10 2012 +0000

    drivers: console: font_: Change a glyph from "broken bar" to "vertical line"

I removed these lines as they are useless in U-Boot:
  #include <linux/font.h>
  #define FONTDATAMAX 1536
  Whole "const struct font_desc font_mini_4x6" block

This patch also adds a new configuration option to select this smaller font,
CONFIG_VIDEO_FONT_4X6 , but this is disabled by default. The default setting
is the regular "large" font.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
---
 include/video_font.h     |    4 +
 include/video_font_4x6.h | 2154 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 2158 insertions(+)
 create mode 100644 include/video_font_4x6.h

diff --git a/include/video_font.h b/include/video_font.h
index bbe62a3..ffc045f 100644
--- a/include/video_font.h
+++ b/include/video_font.h
@@ -24,6 +24,10 @@
 #ifndef _VIDEO_FONT_
 #define _VIDEO_FONT_
 
+#ifdef CONFIG_VIDEO_FONT_4X6
+#include <video_font_4x6.h>
+#else
 #include <video_font_data.h>
+#endif
 
 #endif /* _VIDEO_FONT_ */
diff --git a/include/video_font_4x6.h b/include/video_font_4x6.h
new file mode 100644
index 0000000..d1778d5
--- /dev/null
+++ b/include/video_font_4x6.h
@@ -0,0 +1,2154 @@
+
+/* Hand composed "Minuscule" 4x6 font, with binary data generated using
+ * Perl stub.
+ *
+ * Use 'perl -x mini_4x6.c < mini_4x6.c > new_version.c' to regenerate
+ * binary data.
+ *
+ * Created by Kenneth Albanowski.
+ * No rights reserved, released to the public domain.
+ *
+ * Version 1.0
+ */
+
+/*
+
+#!/usr/bin/perl -pn
+
+s{((0x)?[0-9a-fA-F]+)(.*\[([\*\ ]{4})\])}{
+
+	($num,$pat,$bits) = ($1,$3,$4);
+	
+	$bits =~ s/([^\s0])|(.)/ defined($1) + 0 /ge;
+	
+	$num = ord(pack("B8", $bits));
+	$num |= $num >> 4;
+	$num = sprintf("0x%.2x", $num);
+	
+	#print "$num,$pat,$bits\n";
+	
+	$num . $pat;
+}ge;
+
+__END__;
+*/
+
+/* Note: binary data consists of one byte for each row of each character top
+   to bottom, character 0 to character 255, six bytes per character. Each
+   byte contains the same four character bits in both nybbles.
+   MSBit to LSBit = left to right.
+ */
+
+#ifndef _VIDEO_FONT_DATA_
+#define _VIDEO_FONT_DATA_
+
+#define VIDEO_FONT_CHARS	256
+#define VIDEO_FONT_WIDTH	4
+#define VIDEO_FONT_HEIGHT	6
+#define VIDEO_FONT_SIZE		(VIDEO_FONT_CHARS * VIDEO_FONT_HEIGHT)
+
+static unsigned char video_fontdata[VIDEO_FONT_SIZE] = {
+
+	/*{*/
+	  	/*   Char 0: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 1: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 2: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 3: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 4: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 5: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 6: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 7: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 8: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 9: ' '  */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 10: '' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 11: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 12: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 13: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 14: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 15: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 16: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 17: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 18: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 19: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 20: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 21: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 22: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 23: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 24: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 25: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 26: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 27: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 28: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 29: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 30: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 31: ' ' */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 32: ' ' */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 33: '!' */
+	0x44,	/*=  [ *  ]       */
+	0x44,	/*=  [ *  ]       */
+	0x44,	/*=  [ *  ]       */
+	0x00,	/*=  [    ]       */
+	0x44,	/*=  [ *  ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 34: '"' */
+	0xaa,	/*=  [* * ]       */
+	0xaa,	/*=  [* * ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 35: '#' */
+	0xaa,	/*=  [* * ]       */
+	0xff,	/*=  [****]       */
+	0xff,	/*=  [****]       */
+	0xaa,	/*=  [* * ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 36: '$' */
+	0x44,	/*=  [ *  ]       */
+	0x66,	/*=  [ ** ]       */
+	0xee,	/*=  [*** ]       */
+	0xcc,	/*=  [**  ]       */
+	0x44,	/*=  [ *  ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 37: '%' */
+	0xaa,	/*=  [* * ]       */
+	0x22,	/*=  [  * ]       */
+	0x44,	/*=  [ *  ]       */
+	0x88,	/*=  [*   ]       */
+	0xaa,	/*=  [* * ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 38: '&' */
+	0x66,	/*=  [ ** ]       */
+	0x99,	/*=  [*  *]       */
+	0x66,	/*=  [ ** ]       */
+	0xaa,	/*=  [* * ]       */
+	0xdd,	/*=  [** *]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 39: ''' */
+	0x22,	/*=  [  * ]       */
+	0x44,	/*=  [ *  ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 40: '(' */
+	0x22,	/*=  [  * ]       */
+	0x44,	/*=  [ *  ]       */
+	0x44,	/*=  [ *  ]       */
+	0x44,	/*=  [ *  ]       */
+	0x22,	/*=  [  * ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 41: ')' */
+	0x44,	/*=  [ *  ]       */
+	0x22,	/*=  [  * ]       */
+	0x22,	/*=  [  * ]       */
+	0x22,	/*=  [  * ]       */
+	0x44,	/*=  [ *  ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 42: '*' */
+	0x00,	/*=  [    ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 43: '+' */
+	0x00,	/*=  [    ]       */
+	0x44,	/*=  [ *  ]       */
+	0xee,	/*=  [*** ]       */
+	0x44,	/*=  [ *  ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 44: ',' */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x44,	/*=  [ *  ]       */
+	0x88,	/*=  [*   ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 45: '-' */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0xee,	/*=  [*** ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 46: '.' */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	0x44,	/*=  [ *  ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 47: '/' */
+	0x00,	/*=  [    ]       */
+	0x22,	/*=  [  * ]       */
+	0x44,	/*=  [ *  ]       */
+	0x88,	/*=  [*   ]       */
+	0x00,	/*=  [    ]       */
+	0x00,	/*=  [    ]       */
+	/*}*/
+	/*{*/
+	  	/*   Char 48: '0'   */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/
+	  	/*   Char 49: '1'   */
+	0x44,	/*=   [ *  ]        */
+	0xcc,	/*=   [**  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/
+	  	/*   Char 50: '2'   */
+	0xcc,	/*=   [**  ]        */
+	0x22,	/*=   [  * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/
+	  	/*   Char 51: '3'   */
+	0xee,	/*=   [*** ]        */
+	0x22,	/*=   [  * ]        */
+	0x66,	/*=   [ ** ]        */
+	0x22,	/*=   [  * ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 52: '4'   */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 53: '5'   */
+	0xee,	/*=   [*** ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0x22,	/*=   [  * ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 54: '6'   */
+	0xee,	/*=   [*** ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 55: '7'   */
+	0xee,	/*=   [*** ]        */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 56: '8'   */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 57: '9'   */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 58: ':'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 59: ';'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0x88,	/*=   [*   ]        */
+	/*}*/
+	/*{*/ 	/*   Char 60: '<'   */
+	0x22,	/*=   [  * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x88,	/*=   [*   ]        */
+	0x44,	/*=   [ *  ]        */
+	0x22,	/*=   [  * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 61: '='   */
+	0x00,	/*=   [    ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 62: '>'   */
+	0x88,	/*=   [*   ]        */
+	0x44,	/*=   [ *  ]        */
+	0x22,	/*=   [  * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x88,	/*=   [*   ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 63: '?'   */
+	0xee,	/*=   [*** ]        */
+	0x22,	/*=   [  * ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 64: '@'   */
+	0x44,	/*=   [ *  ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x88,	/*=   [*   ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 65: 'A'   */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 66: 'B'   */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xcc,	/*=   [**  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 67: 'C'   */
+	0x66,	/*=   [ ** ]        */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 68: 'D'   */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xcc,	/*=   [**  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 69: 'E'   */
+	0xee,	/*=   [*** ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 70: 'F'   */
+	0xee,	/*=   [*** ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 71: 'G'   */
+	0x66,	/*=   [ ** ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 72: 'H'   */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 73: 'I'   */
+	0xee,	/*=   [*** ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 74: 'J'   */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 75: 'K'   */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 76: 'L'   */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 77: 'M'   */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 78: 'N'   */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 79: 'O'   */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 80: 'P'   */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xcc,	/*=   [**  ]        */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 81: 'Q'   */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 82: 'R'   */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 83: 'S'   */
+	0x66,	/*=   [ ** ]        */
+	0x88,	/*=   [*   ]        */
+	0x44,	/*=   [ *  ]        */
+	0x22,	/*=   [  * ]        */
+	0xcc,	/*=   [**  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 84: 'T'   */
+	0xee,	/*=   [*** ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 85: 'U'   */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 86: 'V'   */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 87: 'W'   */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 88: 'X'   */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 89: 'Y'   */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 90: 'Z'   */
+	0xee,	/*=   [*** ]        */
+	0x22,	/*=   [  * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x88,	/*=   [*   ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 91: '['   */
+	0x66,	/*=   [ ** ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 92: '\'   */
+	0x00,	/*=   [    ]        */
+	0x88,	/*=   [*   ]        */
+	0x44,	/*=   [ *  ]        */
+	0x22,	/*=   [  * ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 93: ']'   */
+	0x66,	/*=   [ ** ]        */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 94: '^'   */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 95: '_'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xff,	/*=   [****]        */
+	/*}*/
+	/*{*/ 	/*   Char 96: '`'   */
+	0x88,	/*=   [*   ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 97: 'a'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x66,	/*=   [ ** ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 98: 'b'   */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xcc,	/*=   [**  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 99: 'c'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x66,	/*=   [ ** ]        */
+	0x88,	/*=   [*   ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 100: 'd'   */
+	0x22,	/*=   [  * ]        */
+	0x22,	/*=   [  * ]        */
+	0x66,	/*=   [ ** ]        */
+	0xaa,	/*=   [* * ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 101: 'e'   */
+	0x00,	/*=   [    ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x88,	/*=   [*   ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 102: 'f'   */
+	0x22,	/*=   [  * ]        */
+	0x44,	/*=   [ *  ]        */
+	0xee,	/*=   [*** ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 103: 'g'   */
+	0x00,	/*=   [    ]        */
+	0x66,	/*=   [ ** ]        */
+	0xaa,	/*=   [* * ]        */
+	0x66,	/*=   [ ** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 104: 'h'   */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 105: 'i'   */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 106: 'j'   */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x88,	/*=   [*   ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 107: 'k'   */
+	0x00,	/*=   [    ]        */
+	0x88,	/*=   [*   ]        */
+	0xaa,	/*=   [* * ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 108: 'l'   */
+	0x00,	/*=   [    ]        */
+	0xcc,	/*=   [**  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 109: 'm'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 110: 'n'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 111: 'o'   */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 112: 'p'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xcc,	/*=   [**  ]        */
+	0x88,	/*=   [*   ]        */
+	/*}*/
+	/*{*/ 	/*   Char 113: 'q'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x66,	/*=   [ ** ]        */
+	0xaa,	/*=   [* * ]        */
+	0x66,	/*=   [ ** ]        */
+	0x22,	/*=   [  * ]        */
+	/*}*/
+	/*{*/ 	/*   Char 114: 'r'   */
+	0x00,	/*=   [    ]        */
+	0xcc,	/*=   [**  ]        */
+	0xaa,	/*=   [* * ]        */
+	0x88,	/*=   [*   ]        */
+	0x88,	/*=   [*   ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 115: 's'   */
+	0x00,	/*=   [    ]        */
+	0x66,	/*=   [ ** ]        */
+	0xcc,	/*=   [**  ]        */
+	0x22,	/*=   [  * ]        */
+	0xcc,	/*=   [**  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 116: 't'   */
+	0x00,	/*=   [    ]        */
+	0x44,	/*=   [ *  ]        */
+	0xee,	/*=   [*** ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 117: 'u'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 118: 'v'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 119: 'w'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 120: 'x'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xaa,	/*=   [* * ]        */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 121: 'y'   */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x22,	/*=   [  * ]        */
+	0xcc,	/*=   [**  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 122: 'z' */
+	0x00,	/*=   [    ]        */
+	0xee,	/*=   [*** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xcc,	/*=   [**  ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 123: '{' */
+	0x22,	/*=   [  * ]        */
+	0x44,	/*=   [ *  ]        */
+	0xcc,	/*=   [**  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x22,	/*=   [  * ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 124: '|' */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 125: '}' */
+	0x88,	/*=   [*   ]        */
+	0x44,	/*=   [ *  ]        */
+	0x66,	/*=   [ ** ]        */
+	0x44,	/*=   [ *  ]        */
+	0x88,	/*=   [*   ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 126: '~' */
+	0x55,	/*=   [ * *]        */
+	0xaa,	/*=   [* * ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 127: '\x7f' */
+	0x44,	/*=   [ *  ]        */
+	0xaa,	/*=   [* * ]        */
+	0xaa,	/*=   [* * ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 128:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 129:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 130:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 131:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 132:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 133:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 134:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 135:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 136:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 137:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 138:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 139:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 140:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 141:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 142:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 143:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 144:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 145:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 146:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 147:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 148:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 149:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 150:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 151:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 152:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 153:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 154:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 155:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 156:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 157:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 158:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 159:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 160:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 161:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 162:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 163:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 164:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 165:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 166:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 167:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 168:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 169:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 170:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 171:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 172:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 173:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 174:  */
+	0x00,	/*=   [    ]        */
+	0x66,	/*=   [ ** ]        */
+	0xcc,	/*=   [**  ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 175:  */
+	0x00,	/*=   [    ]        */
+	0xcc,	/*=   [**  ]        */
+	0x66,	/*=   [ ** ]        */
+	0xcc,	/*=   [**  ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 176:  */
+	0x88,	/*=   [*   ]        */
+	0x22,	/*=   [  * ]        */
+	0x88,	/*=   [*   ]        */
+	0x22,	/*=   [  * ]        */
+	0x88,	/*=   [*   ]        */
+	0x22,	/*=   [  * ]        */
+	/*}*/
+	/*{*/ 	/*   Char 177:  */
+	0xaa,	/*=   [* * ]        */
+	0x55,	/*=   [ * *]        */
+	0xaa,	/*=   [* * ]        */
+	0x55,	/*=   [ * *]        */
+	0xaa,	/*=   [* * ]        */
+	0x55,	/*=   [ * *]        */
+	/*}*/
+	/*{*/ 	/*   Char 178:  */
+	0xdd,	/*=   [** *]        */
+	0xbb,	/*=   [* **]        */
+	0xdd,	/*=   [** *]        */
+	0xbb,	/*=   [* **]        */
+	0xdd,	/*=   [** *]        */
+	0xbb,	/*=   [* **]        */
+	/*}*/
+	/*{*/ 	/*   Char 179:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 180:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xcc,	/*=   [**  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 181:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xcc,	/*=   [**  ]        */
+	0xcc,	/*=   [**  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 182:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xee,	/*=   [*** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 183:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xee,	/*=   [*** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 184:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xcc,	/*=   [**  ]        */
+	0xcc,	/*=   [**  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 185:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 186:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 187:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 188:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 189:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 190:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xcc,	/*=   [**  ]        */
+	0xcc,	/*=   [**  ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 191:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xcc,	/*=   [**  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 192:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x77,	/*=   [ ***]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 193:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xff,	/*=   [****]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 194:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xff,	/*=   [****]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 195:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x77,	/*=   [ ***]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 196:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xff,	/*=   [****]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 197:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xff,	/*=   [****]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 198:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x77,	/*=   [ ***]        */
+	0x77,	/*=   [ ***]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 199:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x77,	/*=   [ ***]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 200:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x77,	/*=   [ ***]        */
+	0x77,	/*=   [ ***]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 201:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x77,	/*=   [ ***]        */
+	0x77,	/*=   [ ***]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 202:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 203:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 204:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x77,	/*=   [ ***]        */
+	0x77,	/*=   [ ***]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 205:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 206:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 207:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 208:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xff,	/*=   [****]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 209:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 210:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xff,	/*=   [****]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 211:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x77,	/*=   [ ***]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 212:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x77,	/*=   [ ***]        */
+	0x77,	/*=   [ ***]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 213:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x77,	/*=   [ ***]        */
+	0x77,	/*=   [ ***]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 214:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x77,	/*=   [ ***]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 215:  */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0xff,	/*=   [****]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	/*}*/
+	/*{*/ 	/*   Char 216:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 217:  */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0xcc,	/*=   [**  ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 218:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x77,	/*=   [ ***]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	0x44,	/*=   [ *  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 219:  */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	/*}*/
+	/*{*/ 	/*   Char 220:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	/*}*/
+	/*{*/ 	/*   Char 221:  */
+	0xcc,	/*=   [**  ]        */
+	0xcc,	/*=   [**  ]        */
+	0xcc,	/*=   [**  ]        */
+	0xcc,	/*=   [**  ]        */
+	0xcc,	/*=   [**  ]        */
+	0xcc,	/*=   [**  ]        */
+	/*}*/
+	/*{*/ 	/*   Char 222:  */
+	0x33,	/*=   [  **]        */
+	0x33,	/*=   [  **]        */
+	0x33,	/*=   [  **]        */
+	0x33,	/*=   [  **]        */
+	0x33,	/*=   [  **]        */
+	0x33,	/*=   [  **]        */
+	/*}*/
+	/*{*/ 	/*   Char 223:  */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0xff,	/*=   [****]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 224:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 225:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 226:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 227:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 228:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 229:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 230:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 231:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 232:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 233:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 234:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 235:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 236:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 237:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 238:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 239:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 240:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 241:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 242:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 243:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 244:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 245:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 246:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 247:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 248:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 249:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 250:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 251:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 252:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 253:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 254:  */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	0x66,	/*=   [ ** ]        */
+	0x66,	/*=   [ ** ]        */
+	0x00,	/*=   [    ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+	/*{*/ 	/*   Char 255:  */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0xee,	/*=   [*** ]        */
+	0x00,	/*=   [    ]        */
+	/*}*/
+};
+
+#endif
-- 
1.7.10.4

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

* [U-Boot] [PATCH 09/11] video: Fix cfb_console for 4-bit wide font
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
                   ` (7 preceding siblings ...)
  2013-07-30 21:37 ` [U-Boot] [PATCH 08/11] video: Add small 4x6 font from Linux Marek Vasut
@ 2013-07-30 21:37 ` Marek Vasut
  2013-08-10  7:24   ` Anatolij Gustschin
  2013-07-30 21:38 ` [U-Boot] [PATCH 10/11] ARM: mxs: Enable 4x6 font for X-Fi3 Marek Vasut
  2013-07-30 21:38 ` [U-Boot] [PATCH 11/11] ARM: mxs: Enable 4x6 font for Fuze+ Marek Vasut
  10 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:37 UTC (permalink / raw)
  To: u-boot

The cfb_console can't handle 4-bit wide font properly, since with
4-bit wide font, all 8 bits are drawn. Unbreak the video_drawchars()
function to correctly render 4-bits only on such fonts.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Anatolij Gustschin <agust@denx.de>
---
 drivers/video/cfb_console.c |   21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
index edac91c..9110eb5 100644
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -467,6 +467,10 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
 				((u32 *) dest)[0] =
 					(video_font_draw_table8[bits >> 4] &
 					 eorx) ^ bgx;
+
+				if (VIDEO_FONT_WIDTH == 4)
+					continue;
+
 				((u32 *) dest)[1] =
 					(video_font_draw_table8[bits & 15] &
 					 eorx) ^ bgx;
@@ -492,6 +496,10 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
 					SHORTSWAP32((video_font_draw_table15
 						     [bits >> 4 & 3] & eorx) ^
 						    bgx);
+
+				if (VIDEO_FONT_WIDTH == 4)
+					continue;
+
 				((u32 *) dest)[2] =
 					SHORTSWAP32((video_font_draw_table15
 						     [bits >> 2 & 3] & eorx) ^
@@ -522,6 +530,10 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
 					SHORTSWAP32((video_font_draw_table16
 						     [bits >> 4 & 3] & eorx) ^
 						    bgx);
+
+				if (VIDEO_FONT_WIDTH == 4)
+					continue;
+
 				((u32 *) dest)[2] =
 					SHORTSWAP32((video_font_draw_table16
 						     [bits >> 2 & 3] & eorx) ^
@@ -556,6 +568,11 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
 				((u32 *) dest)[3] =
 					SWAP32((video_font_draw_table32
 						[bits >> 4][3] & eorx) ^ bgx);
+
+
+				if (VIDEO_FONT_WIDTH == 4)
+					continue;
+
 				((u32 *) dest)[4] =
 					SWAP32((video_font_draw_table32
 						[bits & 15][0] & eorx) ^ bgx);
@@ -591,6 +608,10 @@ static void video_drawchars(int xx, int yy, unsigned char *s, int count)
 				((u32 *) dest)[2] =
 					(video_font_draw_table24[bits >> 4][2]
 					 & eorx) ^ bgx;
+
+				if (VIDEO_FONT_WIDTH == 4)
+					continue;
+
 				((u32 *) dest)[3] =
 					(video_font_draw_table24[bits & 15][0]
 					 & eorx) ^ bgx;
-- 
1.7.10.4

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

* [U-Boot] [PATCH 10/11] ARM: mxs: Enable 4x6 font for X-Fi3
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
                   ` (8 preceding siblings ...)
  2013-07-30 21:37 ` [U-Boot] [PATCH 09/11] video: Fix cfb_console for 4-bit wide font Marek Vasut
@ 2013-07-30 21:38 ` Marek Vasut
  2013-07-31 15:01   ` Stefano Babic
  2013-07-30 21:38 ` [U-Boot] [PATCH 11/11] ARM: mxs: Enable 4x6 font for Fuze+ Marek Vasut
  10 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:38 UTC (permalink / raw)
  To: u-boot

This device has a very small screen and thus can benefit from using
smaller font. Enable it.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 include/configs/xfi3.h |    1 +
 1 file changed, 1 insertion(+)

diff --git a/include/configs/xfi3.h b/include/configs/xfi3.h
index 10facd9..18467f6 100644
--- a/include/configs/xfi3.h
+++ b/include/configs/xfi3.h
@@ -58,6 +58,7 @@
 
 /* LCD */
 #ifdef CONFIG_VIDEO
+#define CONFIG_VIDEO_FONT_4X6
 #define CONFIG_VIDEO_MXS_MODE_SYSTEM
 #define CONFIG_SYS_BLACK_IN_WRITE
 #define LCD_BPP	LCD_COLOR16
-- 
1.7.10.4

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

* [U-Boot] [PATCH 11/11] ARM: mxs: Enable 4x6 font for Fuze+
  2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
                   ` (9 preceding siblings ...)
  2013-07-30 21:38 ` [U-Boot] [PATCH 10/11] ARM: mxs: Enable 4x6 font for X-Fi3 Marek Vasut
@ 2013-07-30 21:38 ` Marek Vasut
  10 siblings, 0 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 21:38 UTC (permalink / raw)
  To: u-boot

This device has a very small screen and thus can benefit from using
smaller font. Enable it.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Stefano Babic <sbabic@denx.de>
---
 include/configs/sansa_fuze_plus.h |    1 +
 1 file changed, 1 insertion(+)

diff --git a/include/configs/sansa_fuze_plus.h b/include/configs/sansa_fuze_plus.h
index 05d282d..d950034 100644
--- a/include/configs/sansa_fuze_plus.h
+++ b/include/configs/sansa_fuze_plus.h
@@ -59,6 +59,7 @@
 
 /* LCD */
 #ifdef CONFIG_VIDEO
+#define CONFIG_VIDEO_FONT_4X6
 #define CONFIG_VIDEO_MXS_MODE_SYSTEM
 #define CONFIG_SYS_BLACK_IN_WRITE
 #define LCD_BPP	LCD_COLOR16
-- 
1.7.10.4

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-30 21:37 ` [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb Marek Vasut
@ 2013-07-30 21:46   ` Otavio Salvador
  2013-07-30 22:45     ` Marek Vasut
  2013-07-31 13:19   ` Stefano Babic
  2013-08-09 19:51   ` Anatolij Gustschin
  2 siblings, 1 reply; 45+ messages in thread
From: Otavio Salvador @ 2013-07-30 21:46 UTC (permalink / raw)
  To: u-boot

On Tue, Jul 30, 2013 at 6:37 PM, Marek Vasut <marex@denx.de> wrote:
> Add hook that allow configuring SmartLCD attached the MXS LCDIF
> controller operating in System-Mode. This hook can be overriden
> by a platform-specific SmartLCD programming routine, which writes
> the SmartLCD specific values into it's registers.
>
> Also, this patch makes sure the SYNC signals are off for the
> SmartLCD case.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  drivers/video/mxsfb.c |   16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
>
> diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
> index dbc63a6..78709dd 100644
> --- a/drivers/video/mxsfb.c
> +++ b/drivers/video/mxsfb.c
> @@ -34,6 +34,17 @@
>
>  static GraphicDevice panel;
>
> +/**
> + * mxsfb_system_setup() - Fine-tune LCDIF configuration
> + *
> + * This function is used to adjust the LCDIF configuration. This is usually
> + * needed when driving the controller in System-Mode to operate an 8080 or
> + * 6800 connected SmartLCD.
> + */
> +__weak void mxsfb_system_setup(void)
> +{
> +}
> +
>  /*
>   * DENX M28EVK:
>   * setenv videomode
> @@ -88,6 +99,9 @@ static void mxs_lcd_init(GraphicDevice *panel,
>
>         writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
>                 &regs->hw_lcdif_ctrl1);
> +
> +       mxsfb_system_setup();
> +
>         writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) | mode->xres,
>                 &regs->hw_lcdif_transfer_count);
>
> @@ -115,8 +129,10 @@ static void mxs_lcd_init(GraphicDevice *panel,
>         /* Flush FIFO first */
>         writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
>
> +#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM

Mode system or System mode?

>         /* Sync signals ON */
>         setbits_le32(&regs->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON);
> +#endif
>
>         /* FIFO cleared */
>         writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_clr);
> --
> 1.7.10.4
>



--
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 21:37 ` [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board Marek Vasut
@ 2013-07-30 21:49   ` Otavio Salvador
  2013-07-30 22:46     ` Marek Vasut
  2013-07-31  5:59   ` Heiko Schocher
                     ` (2 subsequent siblings)
  3 siblings, 1 reply; 45+ messages in thread
From: Otavio Salvador @ 2013-07-30 21:49 UTC (permalink / raw)
  To: u-boot

On Tue, Jul 30, 2013 at 6:37 PM, Marek Vasut <marex@denx.de> wrote:
> Add STMP3780-based XFi3 board. This board is a small PMP device
> sporting a CPU which was later rebranded to i.MX233 . Currently
> supported is USB gadget mode and both external SD and internal
> Phison SD-NAND bridge .
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  MAINTAINERS                    |    1 +
>  board/creative/xfi3/Makefile   |   47 +++++++++
>  board/creative/xfi3/spl_boot.c |  150 +++++++++++++++++++++++++++
>  board/creative/xfi3/xfi3.c     |  221 ++++++++++++++++++++++++++++++++++++++++
>  boards.cfg                     |    1 +
>  include/configs/xfi3.h         |   82 +++++++++++++++
>  6 files changed, 502 insertions(+)
>  create mode 100644 board/creative/xfi3/Makefile
>  create mode 100644 board/creative/xfi3/spl_boot.c
>  create mode 100644 board/creative/xfi3/xfi3.c
>  create mode 100644 include/configs/xfi3.h
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 0a900dc..84c1f61 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -968,6 +968,7 @@ Marek Vasut <marek.vasut@gmail.com>
>         vpac270         xscale/pxa
>         zipitz2         xscale/pxa
>         mx23_olinuxino  i.MX23
> +       xfi3            i.MX23
>         m28evk          i.MX28
>         sc_sps_1        i.MX28
>         m53evk          i.MX53
> diff --git a/board/creative/xfi3/Makefile b/board/creative/xfi3/Makefile
> new file mode 100644
> index 0000000..c793bfb
> --- /dev/null
> +++ b/board/creative/xfi3/Makefile
> @@ -0,0 +1,47 @@
> +#
> +# (C) Copyright 2000-2006
> +# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> +#
> +# See file CREDITS for list of people who contributed to this
> +# project.
> +#
> +# 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.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> +# MA 02111-1307 USA
> +#
> +
> +include $(TOPDIR)/config.mk
> +
> +LIB    = $(obj)lib$(BOARD).o
> +
> +ifndef CONFIG_SPL_BUILD
> +COBJS  := xfi3.o
> +else
> +COBJS  := spl_boot.o
> +endif
> +
> +SRCS   := $(COBJS:.o=.c)
> +OBJS   := $(addprefix $(obj),$(COBJS))
> +
> +$(LIB):        $(obj).depend $(OBJS)
> +       $(call cmd_link_o_target, $(OBJS))
> +
> +#########################################################################
> +
> +# defines $(obj).depend target
> +include $(SRCTREE)/rules.mk
> +
> +sinclude $(obj).depend
> +
> +#########################################################################
> diff --git a/board/creative/xfi3/spl_boot.c b/board/creative/xfi3/spl_boot.c
> new file mode 100644
> index 0000000..2d7cb4e
> --- /dev/null
> +++ b/board/creative/xfi3/spl_boot.c
> @@ -0,0 +1,150 @@
> +/*
> + * Creative ZEN X-Fi3 setup
> + *
> + * Copyright (C) 2013 Marek Vasut <marex@denx.de>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <config.h>
> +#include <asm/io.h>
> +#include <asm/arch/iomux-mx23.h>
> +#include <asm/arch/imx-regs.h>
> +#include <asm/arch/sys_proto.h>
> +
> +#define        MUX_CONFIG_EMI  (MXS_PAD_1V8 | MXS_PAD_12MA | MXS_PAD_PULLUP)
> +#define        MUX_CONFIG_SSP  (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
> +#define        MUX_CONFIG_LCD  (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
> +
> +const iomux_cfg_t iomux_setup[] = {
> +       /* EMI */
> +       MX23_PAD_EMI_D00__EMI_D00 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D01__EMI_D01 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D02__EMI_D02 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D03__EMI_D03 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D04__EMI_D04 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D05__EMI_D05 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D06__EMI_D06 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D07__EMI_D07 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D08__EMI_D08 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D09__EMI_D09 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D10__EMI_D10 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D11__EMI_D11 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D12__EMI_D12 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D13__EMI_D13 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D14__EMI_D14 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_D15__EMI_D15 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_CLKN__EMI_CLKN | MUX_CONFIG_EMI,
> +
> +       MX23_PAD_EMI_A00__EMI_A00 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A01__EMI_A01 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A02__EMI_A02 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A03__EMI_A03 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A04__EMI_A04 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A05__EMI_A05 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A06__EMI_A06 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A07__EMI_A07 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A08__EMI_A08 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A09__EMI_A09 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A10__EMI_A10 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A11__EMI_A11 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_A12__EMI_A12 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
> +
> +       MX23_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
> +       MX23_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
> +
> +       MX23_PAD_LCD_D00__LCD_D00 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D01__LCD_D01 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D02__LCD_D02 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D03__LCD_D03 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D04__LCD_D04 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D05__LCD_D05 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D06__LCD_D06 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D07__LCD_D07 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D08__LCD_D08 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D09__LCD_D09 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_RESET__LCD_RESET | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_RS__LCD_RS | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_WR__LCD_WR | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_CS__LCD_CS | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_ENABLE__LCD_ENABLE | MUX_CONFIG_LCD,
> +       MX23_PAD_LCD_VSYNC__LCD_VSYNC | MUX_CONFIG_LCD,
> +
> +       MX23_PAD_SSP1_CMD__SSP1_CMD | MUX_CONFIG_SSP,
> +       MX23_PAD_SSP1_DETECT__GPIO_2_1 | MUX_CONFIG_SSP,
> +       MX23_PAD_SSP1_DATA0__SSP1_DATA0 | MUX_CONFIG_SSP,
> +       MX23_PAD_SSP1_DATA1__SSP1_DATA1 | MUX_CONFIG_SSP,
> +       MX23_PAD_SSP1_DATA2__SSP1_DATA2 | MUX_CONFIG_SSP,
> +       MX23_PAD_SSP1_DATA3__SSP1_DATA3 | MUX_CONFIG_SSP,
> +       MX23_PAD_SSP1_SCK__SSP1_SCK | MUX_CONFIG_SSP,
> +       MX23_PAD_GPMI_D07__GPIO_0_7 | MUX_CONFIG_SSP,
> +
> +       MX23_PAD_GPMI_D00__SSP2_DATA0 | MUX_CONFIG_SSP,
> +       MX23_PAD_GPMI_D01__SSP2_DATA1 | MUX_CONFIG_SSP,
> +       MX23_PAD_GPMI_D02__SSP2_DATA2 | MUX_CONFIG_SSP,
> +       MX23_PAD_GPMI_D03__SSP2_DATA3 | MUX_CONFIG_SSP,
> +       MX23_PAD_GPMI_RDY1__SSP2_CMD | MUX_CONFIG_SSP,
> +       MX23_PAD_GPMI_WRN__SSP2_SCK | MUX_CONFIG_SSP,
> +
> +       /* PWM -- FIXME */
> +       MX23_PAD_PWM2__GPIO_1_28 | MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP,
> +};
> +
> +void mxs_adjust_memory_params(uint32_t *dram_vals)
> +{
> +       /* mDDR configuration values */
> +       const uint32_t regs[] = {
> +               0x01010001, 0x00010000, 0x01000000, 0x00000001,
> +               0x00010101, 0x00000001, 0x00010000, 0x01000001,
> +               0x01010000, 0x00000001, 0x07000200, 0x04070203,
> +               0x02020002, 0x06070a02, 0x0d000201, 0x0305000d,
> +               0x02080800, 0x19330f0a, 0x1f1f1c00, 0x020a1313,
> +               0x03061323, 0x0000000a, 0x00080008, 0x00200020,
> +               0x00200020, 0x00200020, 0x000003f7, 0x00000000,
> +               0x00000000, 0x00000000, 0x00000020, 0x00000000,
> +               0x001023cd, 0x20410010, 0x00006665, 0x00000000,
> +               0x00000101, 0x00000001, 0x00000000, 0x00000000,
> +       };
> +       memcpy(dram_vals, regs, sizeof(regs));
> +}
> +
> +void board_init_ll(void)
> +{
> +       mxs_common_spl_init(iomux_setup, ARRAY_SIZE(iomux_setup));
> +}
> diff --git a/board/creative/xfi3/xfi3.c b/board/creative/xfi3/xfi3.c
> new file mode 100644
> index 0000000..8ab7746
> --- /dev/null
> +++ b/board/creative/xfi3/xfi3.c
> @@ -0,0 +1,221 @@
> +/*
> + * Creative ZEN X-Fi3 board
> + *
> + * Copyright (C) 2013 Marek Vasut <marex@denx.de>
> + *
> + * Hardware investigation done by:
> + *
> + * Amaury Pouly <amaury.pouly@gmail.com>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <errno.h>
> +#include <asm/gpio.h>
> +#include <asm/io.h>
> +#include <asm/arch/iomux-mx23.h>
> +#include <asm/arch/imx-regs.h>
> +#include <asm/arch/clock.h>
> +#include <asm/arch/sys_proto.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +/*
> + * Functions
> + */
> +int board_early_init_f(void)
> +{
> +       /* IO0 clock at 480MHz */
> +       mxs_set_ioclk(MXC_IOCLK0, 480000);
> +
> +       /* SSP0 clock at 96MHz */
> +       mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
> +
> +       return 0;
> +}
> +
> +int dram_init(void)
> +{
> +       return mxs_dram_init();
> +}
> +
> +#ifdef CONFIG_CMD_MMC
> +static int xfi3_mmc_cd(int id)
> +{
> +       switch (id) {
> +       case 0:
> +               /* The SSP_DETECT is inverted on this board. */
> +               return gpio_get_value(MX23_PAD_SSP1_DETECT__GPIO_2_1);
> +       case 1:
> +               /* Phison bridge always present */
> +               return 1;
> +       default:
> +               return 0;
> +       }
> +}
> +
> +int board_mmc_init(bd_t *bis)
> +{
> +       int ret;
> +
> +       /* MicroSD slot */
> +       gpio_direction_input(MX23_PAD_SSP1_DETECT__GPIO_2_1);
> +       gpio_direction_output(MX23_PAD_GPMI_D07__GPIO_0_7, 0);
> +       ret = mxsmmc_initialize(bis, 0, NULL, xfi3_mmc_cd);
> +       if (ret)
> +               return ret;
> +
> +       /* Phison SD-NAND bridge */
> +       ret = mxsmmc_initialize(bis, 1, NULL, xfi3_mmc_cd);
> +
> +       return ret;
> +}
> +#endif
> +
> +#ifdef CONFIG_VIDEO_MXS
> +static int mxsfb_write_byte(uint32_t payload, const unsigned int data)
> +{
> +       struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
> +       const unsigned int timeout = 0x10000;
> +
> +       if (mxs_wait_mask_clr(&regs->hw_lcdif_ctrl_reg, LCDIF_CTRL_RUN,
> +                             timeout))
> +               return -ETIMEDOUT;
> +
> +       writel((1 << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
> +               (1 << LCDIF_TRANSFER_COUNT_H_COUNT_OFFSET),
> +               &regs->hw_lcdif_transfer_count);
> +
> +       writel(LCDIF_CTRL_DATA_SELECT | LCDIF_CTRL_RUN,
> +               &regs->hw_lcdif_ctrl_clr);
> +
> +       if (data)
> +               writel(LCDIF_CTRL_DATA_SELECT, &regs->hw_lcdif_ctrl_set);
> +
> +       writel(LCDIF_CTRL_RUN, &regs->hw_lcdif_ctrl_set);
> +
> +       if (mxs_wait_mask_clr(&regs->hw_lcdif_lcdif_stat_reg, 1 << 29,
> +                             timeout))
> +               return -ETIMEDOUT;
> +
> +       writel(payload, &regs->hw_lcdif_data);
> +       return mxs_wait_mask_clr(&regs->hw_lcdif_ctrl_reg, LCDIF_CTRL_RUN,
> +                                timeout);
> +}
> +
> +static void mxsfb_write_register(uint32_t reg, uint32_t data)
> +{
> +       mxsfb_write_byte(reg, 0);
> +       mxsfb_write_byte(data, 1);
> +}
> +
> +void mxsfb_system_setup(void)
> +{
> +       struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
> +
> +       /* Switch the LCDIF into System-Mode */
> +       writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DOTCLK_MODE |
> +               LCDIF_CTRL_BYPASS_COUNT, &regs->hw_lcdif_ctrl_clr);
> +
> +       /* Restart the SmartLCD controller */
> +       mdelay(50);
> +       writel(1, &regs->hw_lcdif_ctrl1_set);
> +       mdelay(50);
> +       writel(1, &regs->hw_lcdif_ctrl1_clr);
> +       mdelay(50);
> +       writel(1, &regs->hw_lcdif_ctrl1_set);
> +       mdelay(50);
> +
> +       /* Program the SmartLCD controller */
> +       writel(LCDIF_CTRL1_RECOVER_ON_UNDERFLOW, &regs->hw_lcdif_ctrl1_set);
> +
> +       writel(0x03030202, &regs->hw_lcdif_timing);
> +
> +       mxsfb_write_register(1, 0x01c);
> +
> +       mxsfb_write_register(2, 0x100);
> +       /* 0x30 flips the LCD */
> +       mxsfb_write_register(3, 0x1038);
> +       mxsfb_write_register(8, 0x808);
> +       /* This can possibly contain 0x111 */
> +       mxsfb_write_register(0xc, 0x0);
> +       mxsfb_write_register(0xf, 0xc01);
> +       mxsfb_write_register(0x20, 0);
> +       mxsfb_write_register(0x21, 0);
> +       mdelay(30);
> +       mxsfb_write_register(0x10, 0xa00);
> +       mxsfb_write_register(0x11, 0x1038);
> +       mdelay(30);
> +       mxsfb_write_register(0x12, 0x1010);
> +       mxsfb_write_register(0x13, 0x50);
> +       mxsfb_write_register(0x14, 0x4f58);
> +       mxsfb_write_register(0x30, 0);
> +       mxsfb_write_register(0x31, 0xdb);
> +       mxsfb_write_register(0x32, 0);
> +       mxsfb_write_register(0x33, 0);
> +       mxsfb_write_register(0x34, 0xdb);
> +       mxsfb_write_register(0x35, 0);
> +       mxsfb_write_register(0x36, 0xaf);
> +       mxsfb_write_register(0x37, 0);
> +       mxsfb_write_register(0x38, 0xdb);
> +       mxsfb_write_register(0x39, 0);
> +       mxsfb_write_register(0x50, 0);
> +       mxsfb_write_register(0x51, 0x705);
> +       mxsfb_write_register(0x52, 0xe0a);
> +       mxsfb_write_register(0x53, 0x300);
> +       mxsfb_write_register(0x54, 0xa0e);
> +       mxsfb_write_register(0x55, 0x507);
> +       mxsfb_write_register(0x56, 0);
> +       mxsfb_write_register(0x57, 3);
> +       mxsfb_write_register(0x58, 0x90a);
> +       mxsfb_write_register(0x59, 0xa09);
> +       mdelay(30);
> +       mxsfb_write_register(7, 0x1017);
> +       mdelay(40);
> +       mxsfb_write_register(0x36, 0xaf);
> +       mxsfb_write_register(0x37, 0);
> +       mxsfb_write_register(0x38, 0xdb);
> +       mxsfb_write_register(0x39, 0);
> +       mxsfb_write_register(0x20, 0);
> +       mxsfb_write_register(0x21, 0);
> +       /* Turn on Framebuffer Upload Mode */
> +       mxsfb_write_byte(0x22, 0);

Where does those values come from?

> +       writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DATA_SELECT,
> +               &regs->hw_lcdif_ctrl_set);
> +}
> +#endif
> +
> +int board_init(void)
> +{
> +       /* Adress of boot parameters */
> +       gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
> +
> +       /* Turn on PWM backlight */
> +       gpio_direction_output(MX23_PAD_PWM2__GPIO_1_28, 1);
> +
> +       return 0;
> +}
> +
> +int board_eth_init(bd_t *bis)
> +{
> +       usb_eth_initialize(bis);
> +       return 0;
> +}
> diff --git a/boards.cfg b/boards.cfg
> index f919c53..85e0c35 100644
> --- a/boards.cfg
> +++ b/boards.cfg
> @@ -198,6 +198,7 @@ zmx25                        arm         arm926ejs   zmx25               syteco
>  imx27lite                    arm         arm926ejs   imx27lite           logicpd        mx27
>  magnesium                    arm         arm926ejs   imx27lite           logicpd        mx27
>  mx23_olinuxino               arm         arm926ejs   mx23_olinuxino      olimex         mxs            mx23_olinuxino
> +xfi3                         arm         arm926ejs   xfi3                creative       mxs            xfi3
>  apx4devkit                   arm         arm926ejs   apx4devkit          bluegiga       mxs            apx4devkit
>  mx23evk                      arm         arm926ejs   mx23evk             freescale      mxs            mx23evk
>  m28evk                       arm         arm926ejs   m28evk              denx           mxs            m28evk
> diff --git a/include/configs/xfi3.h b/include/configs/xfi3.h
> new file mode 100644
> index 0000000..10facd9
> --- /dev/null
> +++ b/include/configs/xfi3.h
> @@ -0,0 +1,82 @@
> +/*
> + * Copyright (C) 2013 Marek Vasut <marex@denx.de>
> + *
> + * 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +#ifndef __CONFIGS_XFI3_H__
> +#define __CONFIGS_XFI3_H__
> +
> +/* System configurations */
> +#define CONFIG_MX23                            /* i.MX23 SoC */
> +#define CONFIG_MACH_TYPE       0xffffffff
> +
> +/* U-Boot Commands */
> +#define CONFIG_SYS_NO_FLASH
> +#include <config_cmd_default.h>
> +#define CONFIG_DISPLAY_CPUINFO
> +#define CONFIG_DOS_PARTITION
> +
> +#define CONFIG_CMD_CACHE
> +#define CONFIG_CMD_EXT2
> +#define CONFIG_CMD_FAT
> +#define CONFIG_CMD_GPIO
> +#define CONFIG_CMD_MMC
> +#define CONFIG_CMD_PING
> +#define CONFIG_CMD_USB
> +#define CONFIG_VIDEO
> +
> +/* Memory configuration */
> +#define CONFIG_NR_DRAM_BANKS           1               /* 1 bank of DRAM */
> +#define PHYS_SDRAM_1                   0x40000000      /* Base address */
> +#define PHYS_SDRAM_1_SIZE              0x08000000      /* Max 128 MB RAM */
> +#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
> +
> +/* Environment */
> +#define CONFIG_ENV_SIZE                        (16 * 1024)
> +#define CONFIG_ENV_IS_NOWHERE
> +#define CONFIG_ENV_OVERWRITE
> +
> +/* Booting Linux */
> +#define CONFIG_BOOTDELAY       3
> +#define CONFIG_BOOTFILE                "uImage"
> +#define CONFIG_BOOTARGS                "console=ttyAMA0,115200n8 "
> +#define CONFIG_LOADADDR                0x42000000
> +#define CONFIG_SYS_LOAD_ADDR   CONFIG_LOADADDR
> +
> +/* LCD */
> +#ifdef CONFIG_VIDEO
> +#define CONFIG_VIDEO_MXS_MODE_SYSTEM
> +#define CONFIG_SYS_BLACK_IN_WRITE
> +#define LCD_BPP        LCD_COLOR16
> +#endif
> +
> +/* USB */
> +#ifdef CONFIG_CMD_USB
> +#define CONFIG_EHCI_MXS_PORT0
> +#define CONFIG_USB_MAX_CONTROLLER_COUNT 1
> +
> +#define CONFIG_MV_UDC          /* ChipIdea CI13xxx UDC */
> +#define CONFIG_USB_GADGET_DUALSPEED
> +
> +#define CONFIG_USB_ETHER
> +#define CONFIG_USB_ETH_CDC
> +#define CONFIG_NETCONSOLE
> +#endif
> +
> +/* The rest of the configuration is shared */
> +#include <configs/mxs.h>
> +
> +#endif /* __CONFIGS_XFI3_H__ */
> --
> 1.7.10.4
>



--
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-30 21:46   ` Otavio Salvador
@ 2013-07-30 22:45     ` Marek Vasut
  2013-07-30 22:48       ` Otavio Salvador
  0 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 22:45 UTC (permalink / raw)
  To: u-boot

Dear Otavio Salvador,

> On Tue, Jul 30, 2013 at 6:37 PM, Marek Vasut <marex@denx.de> wrote:
> > Add hook that allow configuring SmartLCD attached the MXS LCDIF
> > controller operating in System-Mode. This hook can be overriden
> > by a platform-specific SmartLCD programming routine, which writes
> > the SmartLCD specific values into it's registers.
> > 
> > Also, this patch makes sure the SYNC signals are off for the
> > SmartLCD case.
> > 
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Anatolij Gustschin <agust@denx.de>
> > Cc: Fabio Estevam <fabio.estevam@freescale.com>
> > Cc: Otavio Salvador <otavio@ossystems.com.br>
> > Cc: Stefano Babic <sbabic@denx.de>
> > ---
> > 
> >  drivers/video/mxsfb.c |   16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> > 
> > diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
> > index dbc63a6..78709dd 100644
> > --- a/drivers/video/mxsfb.c
> > +++ b/drivers/video/mxsfb.c
> > @@ -34,6 +34,17 @@
> > 
> >  static GraphicDevice panel;
> > 
> > +/**
> > + * mxsfb_system_setup() - Fine-tune LCDIF configuration
> > + *
> > + * This function is used to adjust the LCDIF configuration. This is
> > usually + * needed when driving the controller in System-Mode to operate
> > an 8080 or + * 6800 connected SmartLCD.
> > + */
> > +__weak void mxsfb_system_setup(void)
> > +{
> > +}
> > +
> > 
> >  /*
> >  
> >   * DENX M28EVK:
> >   * setenv videomode
> > 
> > @@ -88,6 +99,9 @@ static void mxs_lcd_init(GraphicDevice *panel,
> > 
> >         writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
> >         
> >                 &regs->hw_lcdif_ctrl1);
> > 
> > +
> > +       mxsfb_system_setup();
> > +
> > 
> >         writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
> >         mode->xres,
> >         
> >                 &regs->hw_lcdif_transfer_count);
> > 
> > @@ -115,8 +129,10 @@ static void mxs_lcd_init(GraphicDevice *panel,
> > 
> >         /* Flush FIFO first */
> >         writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
> > 
> > +#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM
> 
> Mode system or System mode?

This is a name of configuration macro, CONFIG_VIDEO_MXS_MODE_SYSTEM . Otherwise 
I do not understand what you are asking about.

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 21:49   ` Otavio Salvador
@ 2013-07-30 22:46     ` Marek Vasut
  2013-07-30 22:49       ` Otavio Salvador
  0 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 22:46 UTC (permalink / raw)
  To: u-boot

Dear Otavio Salvador,

[...]

> > +       mxsfb_write_register(0x36, 0xaf);
> > +       mxsfb_write_register(0x37, 0);
> > +       mxsfb_write_register(0x38, 0xdb);
> > +       mxsfb_write_register(0x39, 0);
> > +       mxsfb_write_register(0x20, 0);
> > +       mxsfb_write_register(0x21, 0);
> > +       /* Turn on Framebuffer Upload Mode */
> > +       mxsfb_write_byte(0x22, 0);
> 
> Where does those values come from?

The panel datasheet and from Amaury.

[...]

It'd be nice if you learnt to cut down the email to the relevant part only when 
replying.

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-30 22:45     ` Marek Vasut
@ 2013-07-30 22:48       ` Otavio Salvador
  2013-07-30 23:31         ` Marek Vasut
  0 siblings, 1 reply; 45+ messages in thread
From: Otavio Salvador @ 2013-07-30 22:48 UTC (permalink / raw)
  To: u-boot

On Tue, Jul 30, 2013 at 7:45 PM, Marek Vasut <marex@denx.de> wrote:
> Dear Otavio Salvador,
>
>> On Tue, Jul 30, 2013 at 6:37 PM, Marek Vasut <marex@denx.de> wrote:
>> > Add hook that allow configuring SmartLCD attached the MXS LCDIF
>> > controller operating in System-Mode. This hook can be overriden
>> > by a platform-specific SmartLCD programming routine, which writes
>> > the SmartLCD specific values into it's registers.
>> >
>> > Also, this patch makes sure the SYNC signals are off for the
>> > SmartLCD case.
>> >
>> > Signed-off-by: Marek Vasut <marex@denx.de>
>> > Cc: Anatolij Gustschin <agust@denx.de>
>> > Cc: Fabio Estevam <fabio.estevam@freescale.com>
>> > Cc: Otavio Salvador <otavio@ossystems.com.br>
>> > Cc: Stefano Babic <sbabic@denx.de>
>> > ---
>> >
>> >  drivers/video/mxsfb.c |   16 ++++++++++++++++
>> >  1 file changed, 16 insertions(+)
>> >
>> > diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
>> > index dbc63a6..78709dd 100644
>> > --- a/drivers/video/mxsfb.c
>> > +++ b/drivers/video/mxsfb.c
>> > @@ -34,6 +34,17 @@
>> >
>> >  static GraphicDevice panel;
>> >
>> > +/**
>> > + * mxsfb_system_setup() - Fine-tune LCDIF configuration
>> > + *
>> > + * This function is used to adjust the LCDIF configuration. This is
>> > usually + * needed when driving the controller in System-Mode to operate
>> > an 8080 or + * 6800 connected SmartLCD.
>> > + */
>> > +__weak void mxsfb_system_setup(void)
>> > +{
>> > +}
>> > +
>> >
>> >  /*
>> >
>> >   * DENX M28EVK:
>> >   * setenv videomode
>> >
>> > @@ -88,6 +99,9 @@ static void mxs_lcd_init(GraphicDevice *panel,
>> >
>> >         writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
>> >
>> >                 &regs->hw_lcdif_ctrl1);
>> >
>> > +
>> > +       mxsfb_system_setup();
>> > +
>> >
>> >         writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
>> >         mode->xres,
>> >
>> >                 &regs->hw_lcdif_transfer_count);
>> >
>> > @@ -115,8 +129,10 @@ static void mxs_lcd_init(GraphicDevice *panel,
>> >
>> >         /* Flush FIFO first */
>> >         writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
>> >
>> > +#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM
>>
>> Mode system or System mode?
>
> This is a name of configuration macro, CONFIG_VIDEO_MXS_MODE_SYSTEM . Otherwise
> I do not understand what you are asking about.

I got this but accordingly to your commitlog it should be
CONFIG_VIDEO_MXS_SYSTEM_MODE to match the description. Any reason to
not use this name?

--
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 22:46     ` Marek Vasut
@ 2013-07-30 22:49       ` Otavio Salvador
  2013-07-30 23:36         ` Marek Vasut
  0 siblings, 1 reply; 45+ messages in thread
From: Otavio Salvador @ 2013-07-30 22:49 UTC (permalink / raw)
  To: u-boot

On Tue, Jul 30, 2013 at 7:46 PM, Marek Vasut <marex@denx.de> wrote:
> Dear Otavio Salvador,
>
> [...]
>
>> > +       mxsfb_write_register(0x36, 0xaf);
>> > +       mxsfb_write_register(0x37, 0);
>> > +       mxsfb_write_register(0x38, 0xdb);
>> > +       mxsfb_write_register(0x39, 0);
>> > +       mxsfb_write_register(0x20, 0);
>> > +       mxsfb_write_register(0x21, 0);
>> > +       /* Turn on Framebuffer Upload Mode */
>> > +       mxsfb_write_byte(0x22, 0);
>>
>> Where does those values come from?
>
> The panel datasheet and from Amaury.
>
> [...]
>
> It'd be nice if you learnt to cut down the email to the relevant part only when
> replying.

Couldn't this use macros to make it easier to read or at least a
comment informing where to find those?

--
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-30 22:48       ` Otavio Salvador
@ 2013-07-30 23:31         ` Marek Vasut
  0 siblings, 0 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 23:31 UTC (permalink / raw)
  To: u-boot

Dear Otavio Salvador,

> On Tue, Jul 30, 2013 at 7:45 PM, Marek Vasut <marex@denx.de> wrote:
> > Dear Otavio Salvador,
> > 
> >> On Tue, Jul 30, 2013 at 6:37 PM, Marek Vasut <marex@denx.de> wrote:
> >> > Add hook that allow configuring SmartLCD attached the MXS LCDIF
> >> > controller operating in System-Mode. This hook can be overriden
> >> > by a platform-specific SmartLCD programming routine, which writes
> >> > the SmartLCD specific values into it's registers.
> >> > 
> >> > Also, this patch makes sure the SYNC signals are off for the
> >> > SmartLCD case.
> >> > 
> >> > Signed-off-by: Marek Vasut <marex@denx.de>
> >> > Cc: Anatolij Gustschin <agust@denx.de>
> >> > Cc: Fabio Estevam <fabio.estevam@freescale.com>
> >> > Cc: Otavio Salvador <otavio@ossystems.com.br>
> >> > Cc: Stefano Babic <sbabic@denx.de>
> >> > ---
> >> > 
> >> >  drivers/video/mxsfb.c |   16 ++++++++++++++++
> >> >  1 file changed, 16 insertions(+)
> >> > 
> >> > diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
> >> > index dbc63a6..78709dd 100644
> >> > --- a/drivers/video/mxsfb.c
> >> > +++ b/drivers/video/mxsfb.c
> >> > @@ -34,6 +34,17 @@
> >> > 
> >> >  static GraphicDevice panel;
> >> > 
> >> > +/**
> >> > + * mxsfb_system_setup() - Fine-tune LCDIF configuration
> >> > + *
> >> > + * This function is used to adjust the LCDIF configuration. This is
> >> > usually + * needed when driving the controller in System-Mode to
> >> > operate an 8080 or + * 6800 connected SmartLCD.
> >> > + */
> >> > +__weak void mxsfb_system_setup(void)
> >> > +{
> >> > +}
> >> > +
> >> > 
> >> >  /*
> >> >  
> >> >   * DENX M28EVK:
> >> >   * setenv videomode
> >> > 
> >> > @@ -88,6 +99,9 @@ static void mxs_lcd_init(GraphicDevice *panel,
> >> > 
> >> >         writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
> >> >         
> >> >                 &regs->hw_lcdif_ctrl1);
> >> > 
> >> > +
> >> > +       mxsfb_system_setup();
> >> > +
> >> > 
> >> >         writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
> >> >         mode->xres,
> >> >         
> >> >                 &regs->hw_lcdif_transfer_count);
> >> > 
> >> > @@ -115,8 +129,10 @@ static void mxs_lcd_init(GraphicDevice *panel,
> >> > 
> >> >         /* Flush FIFO first */
> >> >         writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
> >> > 
> >> > +#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM
> >> 
> >> Mode system or System mode?
> > 
> > This is a name of configuration macro, CONFIG_VIDEO_MXS_MODE_SYSTEM .
> > Otherwise I do not understand what you are asking about.
> 
> I got this but accordingly to your commitlog it should be
> CONFIG_VIDEO_MXS_SYSTEM_MODE to match the description. Any reason to
> not use this name?

Sorry, is this name of the macro mentioned in the commit log anywhere? I don't 
see it there. I believe grepping for CONFIG_VIDEO_MXS_MODE will make it easier 
in the future --  if we were to support more modes -- to find all occurances of 
such conditionals.

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 22:49       ` Otavio Salvador
@ 2013-07-30 23:36         ` Marek Vasut
  2013-07-31 12:57           ` Otavio Salvador
  0 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-30 23:36 UTC (permalink / raw)
  To: u-boot

Dear Otavio Salvador,

> On Tue, Jul 30, 2013 at 7:46 PM, Marek Vasut <marex@denx.de> wrote:
> > Dear Otavio Salvador,
> > 
> > [...]
> > 
> >> > +       mxsfb_write_register(0x36, 0xaf);
> >> > +       mxsfb_write_register(0x37, 0);
> >> > +       mxsfb_write_register(0x38, 0xdb);
> >> > +       mxsfb_write_register(0x39, 0);
> >> > +       mxsfb_write_register(0x20, 0);
> >> > +       mxsfb_write_register(0x21, 0);
> >> > +       /* Turn on Framebuffer Upload Mode */
> >> > +       mxsfb_write_byte(0x22, 0);
> >> 
> >> Where does those values come from?
> > 
> > The panel datasheet and from Amaury.
> > 
> > [...]
> > 
> > It'd be nice if you learnt to cut down the email to the relevant part
> > only when replying.
> 
> Couldn't this use macros to make it easier to read

What kind of macros ? Using function call allows the compiler to do type-
checking on the data, so no, using macro would be sub-par.

> or at least a
> comment informing where to find those?

See OTM2201A datasheet for the finer details, yet it will be useless for you 
since this is rather device-specific configuration.

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 21:37 ` [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board Marek Vasut
  2013-07-30 21:49   ` Otavio Salvador
@ 2013-07-31  5:59   ` Heiko Schocher
  2013-07-31 10:33     ` Marek Vasut
  2013-07-31 15:00   ` Stefano Babic
  2013-07-31 19:30   ` Wolfgang Denk
  3 siblings, 1 reply; 45+ messages in thread
From: Heiko Schocher @ 2013-07-31  5:59 UTC (permalink / raw)
  To: u-boot

Hello Marek,

Am 30.07.2013 23:37, schrieb Marek Vasut:
> Add STMP3780-based XFi3 board. This board is a small PMP device
> sporting a CPU which was later rebranded to i.MX233 . Currently
> supported is USB gadget mode and both external SD and internal
> Phison SD-NAND bridge .
>
> Signed-off-by: Marek Vasut<marex@denx.de>
> Cc: Fabio Estevam<fabio.estevam@freescale.com>
> Cc: Otavio Salvador<otavio@ossystems.com.br>
> Cc: Stefano Babic<sbabic@denx.de>
> ---
>   MAINTAINERS                    |    1 +
>   board/creative/xfi3/Makefile   |   47 +++++++++
>   board/creative/xfi3/spl_boot.c |  150 +++++++++++++++++++++++++++
>   board/creative/xfi3/xfi3.c     |  221 ++++++++++++++++++++++++++++++++++++++++
>   boards.cfg                     |    1 +
>   include/configs/xfi3.h         |   82 +++++++++++++++
>   6 files changed, 502 insertions(+)
>   create mode 100644 board/creative/xfi3/Makefile
>   create mode 100644 board/creative/xfi3/spl_boot.c
>   create mode 100644 board/creative/xfi3/xfi3.c
>   create mode 100644 include/configs/xfi3.h
>
[...]
> diff --git a/board/creative/xfi3/Makefile b/board/creative/xfi3/Makefile
> new file mode 100644
> index 0000000..c793bfb
> --- /dev/null
> +++ b/board/creative/xfi3/Makefile
> @@ -0,0 +1,47 @@
> +#
> +# (C) Copyright 2000-2006
> +# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> +#
> +# See file CREDITS for list of people who contributed to this
> +# project.
> +#
> +# 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.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> +# MA 02111-1307 USA

Please use for new files SPDX-License-Identifier, thanks.
Please fix globally

[...]

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-31  5:59   ` Heiko Schocher
@ 2013-07-31 10:33     ` Marek Vasut
  0 siblings, 0 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-31 10:33 UTC (permalink / raw)
  To: u-boot

Dear Heiko Schocher,

> Hello Marek,
> 
> Am 30.07.2013 23:37, schrieb Marek Vasut:
> > Add STMP3780-based XFi3 board. This board is a small PMP device
> > sporting a CPU which was later rebranded to i.MX233 . Currently
> > supported is USB gadget mode and both external SD and internal
> > Phison SD-NAND bridge .
> > 
> > Signed-off-by: Marek Vasut<marex@denx.de>
> > Cc: Fabio Estevam<fabio.estevam@freescale.com>
> > Cc: Otavio Salvador<otavio@ossystems.com.br>
> > Cc: Stefano Babic<sbabic@denx.de>
> > ---
> > 
> >   MAINTAINERS                    |    1 +
> >   board/creative/xfi3/Makefile   |   47 +++++++++
> >   board/creative/xfi3/spl_boot.c |  150 +++++++++++++++++++++++++++
> >   board/creative/xfi3/xfi3.c     |  221
> >   ++++++++++++++++++++++++++++++++++++++++ boards.cfg                   
> >    |    1 +
> >   include/configs/xfi3.h         |   82 +++++++++++++++
> >   6 files changed, 502 insertions(+)
> >   create mode 100644 board/creative/xfi3/Makefile
> >   create mode 100644 board/creative/xfi3/spl_boot.c
> >   create mode 100644 board/creative/xfi3/xfi3.c
> >   create mode 100644 include/configs/xfi3.h
> 
> [...]
> 
> > diff --git a/board/creative/xfi3/Makefile b/board/creative/xfi3/Makefile
> > new file mode 100644
> > index 0000000..c793bfb
> > --- /dev/null
> > +++ b/board/creative/xfi3/Makefile
> > @@ -0,0 +1,47 @@
> > +#
> > +# (C) Copyright 2000-2006
> > +# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> > +#
> > +# See file CREDITS for list of people who contributed to this
> > +# project.
> > +#
> > +# 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.
> > +#
> > +# This program is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > +# GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public License
> > +# along with this program; if not, write to the Free Software
> > +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > +# MA 02111-1307 USA
> 
> Please use for new files SPDX-License-Identifier, thanks.
> Please fix globally

Fixed for both, thanks!

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 23:36         ` Marek Vasut
@ 2013-07-31 12:57           ` Otavio Salvador
  0 siblings, 0 replies; 45+ messages in thread
From: Otavio Salvador @ 2013-07-31 12:57 UTC (permalink / raw)
  To: u-boot

On Tue, Jul 30, 2013 at 8:36 PM, Marek Vasut <marex@denx.de> wrote:
> Dear Otavio Salvador,
>
>> On Tue, Jul 30, 2013 at 7:46 PM, Marek Vasut <marex@denx.de> wrote:
>> > Dear Otavio Salvador,
>> >
>> > [...]
>> >
>> >> > +       mxsfb_write_register(0x36, 0xaf);
>> >> > +       mxsfb_write_register(0x37, 0);
>> >> > +       mxsfb_write_register(0x38, 0xdb);
>> >> > +       mxsfb_write_register(0x39, 0);
>> >> > +       mxsfb_write_register(0x20, 0);
>> >> > +       mxsfb_write_register(0x21, 0);
>> >> > +       /* Turn on Framebuffer Upload Mode */
>> >> > +       mxsfb_write_byte(0x22, 0);
>> >>
>> >> Where does those values come from?
>> >
>> > The panel datasheet and from Amaury.
>> >
>> > [...]
>> >
>> > It'd be nice if you learnt to cut down the email to the relevant part
>> > only when replying.
>>
>> Couldn't this use macros to make it easier to read
>
> What kind of macros ? Using function call allows the compiler to do type-
> checking on the data, so no, using macro would be sub-par.
>
>> or at least a
>> comment informing where to find those?
>
> See OTM2201A datasheet for the finer details, yet it will be useless for you
> since this is rather device-specific configuration.

A comment giving the datasheet name where those were took would be good.

--
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-30 21:37 ` [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb Marek Vasut
  2013-07-30 21:46   ` Otavio Salvador
@ 2013-07-31 13:19   ` Stefano Babic
  2013-07-31 13:22     ` Marek Vasut
  2013-08-09 19:51   ` Anatolij Gustschin
  2 siblings, 1 reply; 45+ messages in thread
From: Stefano Babic @ 2013-07-31 13:19 UTC (permalink / raw)
  To: u-boot

Hi Marek,

On 30/07/2013 23:37, Marek Vasut wrote:
> Add hook that allow configuring SmartLCD attached the MXS LCDIF
> controller operating in System-Mode. This hook can be overriden
> by a platform-specific SmartLCD programming routine, which writes
> the SmartLCD specific values into it's registers.
> 
> Also, this patch makes sure the SYNC signals are off for the
> SmartLCD case.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  drivers/video/mxsfb.c |   16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
> index dbc63a6..78709dd 100644
> --- a/drivers/video/mxsfb.c
> +++ b/drivers/video/mxsfb.c
> @@ -34,6 +34,17 @@
>  
>  static GraphicDevice panel;
>  
> +/**
> + * mxsfb_system_setup() - Fine-tune LCDIF configuration
> + *
> + * This function is used to adjust the LCDIF configuration. This is usually
> + * needed when driving the controller in System-Mode to operate an 8080 or
> + * 6800 connected SmartLCD.
> + */
> +__weak void mxsfb_system_setup(void)
> +{
> +}
> +


We have no easy way to know if a function is declared weak, but
generally a lot of weak functions are board specific.

Try to use the same naming schema, and rename this one as
board_mxfb_setup() (or something like that).

Or better: why cannot we use board_video_init(), as this name is already
used by other SOCs ?

>  /*
>   * DENX M28EVK:
>   * setenv videomode
> @@ -88,6 +99,9 @@ static void mxs_lcd_init(GraphicDevice *panel,
>  
>  	writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
>  		&regs->hw_lcdif_ctrl1);
> +
> +	mxsfb_system_setup();
> +
>  	writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) | mode->xres,
>  		&regs->hw_lcdif_transfer_count);
>  
> @@ -115,8 +129,10 @@ static void mxs_lcd_init(GraphicDevice *panel,
>  	/* Flush FIFO first */
>  	writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
>  
> +#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM
>  	/* Sync signals ON */
>  	setbits_le32(&regs->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON);
> +#endif

Question: is there anything wrong to move it into mxsfb_system_setup() ?
I would prefer to avoid adding a new not documented CONFIG_ only to set
a bit...

Best regards,
Stefano Babic



-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-31 13:19   ` Stefano Babic
@ 2013-07-31 13:22     ` Marek Vasut
  2013-07-31 15:05       ` Stefano Babic
  0 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-31 13:22 UTC (permalink / raw)
  To: u-boot

Dear Stefano Babic,

> Hi Marek,
> 
> On 30/07/2013 23:37, Marek Vasut wrote:
> > Add hook that allow configuring SmartLCD attached the MXS LCDIF
> > controller operating in System-Mode. This hook can be overriden
> > by a platform-specific SmartLCD programming routine, which writes
> > the SmartLCD specific values into it's registers.
> > 
> > Also, this patch makes sure the SYNC signals are off for the
> > SmartLCD case.
> > 
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Anatolij Gustschin <agust@denx.de>
> > Cc: Fabio Estevam <fabio.estevam@freescale.com>
> > Cc: Otavio Salvador <otavio@ossystems.com.br>
> > Cc: Stefano Babic <sbabic@denx.de>
> > ---
> > 
> >  drivers/video/mxsfb.c |   16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> > 
> > diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
> > index dbc63a6..78709dd 100644
> > --- a/drivers/video/mxsfb.c
> > +++ b/drivers/video/mxsfb.c
> > @@ -34,6 +34,17 @@
> > 
> >  static GraphicDevice panel;
> > 
> > +/**
> > + * mxsfb_system_setup() - Fine-tune LCDIF configuration
> > + *
> > + * This function is used to adjust the LCDIF configuration. This is
> > usually + * needed when driving the controller in System-Mode to operate
> > an 8080 or + * 6800 connected SmartLCD.
> > + */
> > +__weak void mxsfb_system_setup(void)
> > +{
> > +}
> > +
> 
> We have no easy way to know if a function is declared weak, but
> generally a lot of weak functions are board specific.
> 
> Try to use the same naming schema, and rename this one as
> board_mxfb_setup() (or something like that).
> 
> Or better: why cannot we use board_video_init(), as this name is already
> used by other SOCs ?

This is system-mode specific and needs to be called at this particular place.

> >  /*
> >  
> >   * DENX M28EVK:
> >   * setenv videomode
> > 
> > @@ -88,6 +99,9 @@ static void mxs_lcd_init(GraphicDevice *panel,
> > 
> >  	writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,
> >  	
> >  		&regs->hw_lcdif_ctrl1);
> > 
> > +
> > +	mxsfb_system_setup();
> > +
> > 
> >  	writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
> >  	mode->xres,
> >  	
> >  		&regs->hw_lcdif_transfer_count);
> > 
> > @@ -115,8 +129,10 @@ static void mxs_lcd_init(GraphicDevice *panel,
> > 
> >  	/* Flush FIFO first */
> >  	writel(LCDIF_CTRL1_FIFO_CLEAR, &regs->hw_lcdif_ctrl1_set);
> > 
> > +#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM
> > 
> >  	/* Sync signals ON */
> >  	setbits_le32(&regs->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON);
> > 
> > +#endif
> 
> Question: is there anything wrong to move it into mxsfb_system_setup() ?
> I would prefer to avoid adding a new not documented CONFIG_ only to set
> a bit...

Yes, the order in which the LCD is configured must be preserved as-is.

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 21:37 ` [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board Marek Vasut
  2013-07-30 21:49   ` Otavio Salvador
  2013-07-31  5:59   ` Heiko Schocher
@ 2013-07-31 15:00   ` Stefano Babic
  2013-07-31 15:09     ` Marek Vasut
  2013-07-31 19:30   ` Wolfgang Denk
  3 siblings, 1 reply; 45+ messages in thread
From: Stefano Babic @ 2013-07-31 15:00 UTC (permalink / raw)
  To: u-boot

Hi Marek,

On 30/07/2013 23:37, Marek Vasut wrote:
> Add STMP3780-based XFi3 board. This board is a small PMP device
> sporting a CPU which was later rebranded to i.MX233 . Currently
> supported is USB gadget mode and both external SD and internal
> Phison SD-NAND bridge .
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  MAINTAINERS                    |    1 +
>  board/creative/xfi3/Makefile   |   47 +++++++++
>  board/creative/xfi3/spl_boot.c |  150 +++++++++++++++++++++++++++
>  board/creative/xfi3/xfi3.c     |  221 ++++++++++++++++++++++++++++++++++++++++
>  boards.cfg                     |    1 +
>  include/configs/xfi3.h         |   82 +++++++++++++++
>  6 files changed, 502 insertions(+)
>  create mode 100644 board/creative/xfi3/Makefile
>  create mode 100644 board/creative/xfi3/spl_boot.c
>  create mode 100644 board/creative/xfi3/xfi3.c
>  create mode 100644 include/configs/xfi3.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 0a900dc..84c1f61 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -968,6 +968,7 @@ Marek Vasut <marek.vasut@gmail.com>
>  	vpac270		xscale/pxa
>  	zipitz2		xscale/pxa
>  	mx23_olinuxino	i.MX23
> +	xfi3		i.MX23
>  	m28evk		i.MX28
>  	sc_sps_1	i.MX28
>  	m53evk		i.MX53
> diff --git a/board/creative/xfi3/Makefile b/board/creative/xfi3/Makefile
> new file mode 100644
> index 0000000..c793bfb
> --- /dev/null
> +++ b/board/creative/xfi3/Makefile
> @@ -0,0 +1,47 @@
> +#
> +# (C) Copyright 2000-2006
> +# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> +#
> +# See file CREDITS for list of people who contributed to this
> +# project.
> +#
> +# 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.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> +# MA 02111-1307 USA
> +#

Please use new licence style with SPDX identifier. Fix it globally.

> +++ b/board/creative/xfi3/spl_boot.c
> @@ -0,0 +1,150 @@
> +/*
> + * Creative ZEN X-Fi3 setup
> + *
> + * Copyright (C) 2013 Marek Vasut <marex@denx.de>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <config.h>
> +#include <asm/io.h>
> +#include <asm/arch/iomux-mx23.h>
> +#include <asm/arch/imx-regs.h>
> +#include <asm/arch/sys_proto.h>
> +
> +#define	MUX_CONFIG_EMI	(MXS_PAD_1V8 | MXS_PAD_12MA | MXS_PAD_PULLUP)
> +#define	MUX_CONFIG_SSP	(MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
> +#define	MUX_CONFIG_LCD	(MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
> +
> +const iomux_cfg_t iomux_setup[] = {
> +	/* EMI */
> +	MX23_PAD_EMI_D00__EMI_D00 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D01__EMI_D01 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D02__EMI_D02 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D03__EMI_D03 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D04__EMI_D04 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D05__EMI_D05 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D06__EMI_D06 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D07__EMI_D07 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D08__EMI_D08 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D09__EMI_D09 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D10__EMI_D10 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D11__EMI_D11 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D12__EMI_D12 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D13__EMI_D13 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D14__EMI_D14 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_D15__EMI_D15 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_CLKN__EMI_CLKN | MUX_CONFIG_EMI,
> +
> +	MX23_PAD_EMI_A00__EMI_A00 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A01__EMI_A01 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A02__EMI_A02 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A03__EMI_A03 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A04__EMI_A04 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A05__EMI_A05 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A06__EMI_A06 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A07__EMI_A07 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A08__EMI_A08 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A09__EMI_A09 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A10__EMI_A10 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A11__EMI_A11 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_A12__EMI_A12 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
> +
> +	MX23_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
> +	MX23_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
> +
> +	MX23_PAD_LCD_D00__LCD_D00 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D01__LCD_D01 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D02__LCD_D02 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D03__LCD_D03 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D04__LCD_D04 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D05__LCD_D05 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D06__LCD_D06 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D07__LCD_D07 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D08__LCD_D08 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D09__LCD_D09 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_RESET__LCD_RESET | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_RS__LCD_RS | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_WR__LCD_WR | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_CS__LCD_CS | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_ENABLE__LCD_ENABLE | MUX_CONFIG_LCD,
> +	MX23_PAD_LCD_VSYNC__LCD_VSYNC | MUX_CONFIG_LCD,
> +
> +	MX23_PAD_SSP1_CMD__SSP1_CMD | MUX_CONFIG_SSP,
> +	MX23_PAD_SSP1_DETECT__GPIO_2_1 | MUX_CONFIG_SSP,
> +	MX23_PAD_SSP1_DATA0__SSP1_DATA0 | MUX_CONFIG_SSP,
> +	MX23_PAD_SSP1_DATA1__SSP1_DATA1 | MUX_CONFIG_SSP,
> +	MX23_PAD_SSP1_DATA2__SSP1_DATA2 | MUX_CONFIG_SSP,
> +	MX23_PAD_SSP1_DATA3__SSP1_DATA3 | MUX_CONFIG_SSP,
> +	MX23_PAD_SSP1_SCK__SSP1_SCK | MUX_CONFIG_SSP,
> +	MX23_PAD_GPMI_D07__GPIO_0_7 | MUX_CONFIG_SSP,
> +
> +	MX23_PAD_GPMI_D00__SSP2_DATA0 | MUX_CONFIG_SSP,
> +	MX23_PAD_GPMI_D01__SSP2_DATA1 | MUX_CONFIG_SSP,
> +	MX23_PAD_GPMI_D02__SSP2_DATA2 | MUX_CONFIG_SSP,
> +	MX23_PAD_GPMI_D03__SSP2_DATA3 | MUX_CONFIG_SSP,
> +	MX23_PAD_GPMI_RDY1__SSP2_CMD | MUX_CONFIG_SSP,
> +	MX23_PAD_GPMI_WRN__SSP2_SCK | MUX_CONFIG_SSP,
> +
> +	/* PWM -- FIXME */
> +	MX23_PAD_PWM2__GPIO_1_28 | MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP,
> +};
> +
> +void mxs_adjust_memory_params(uint32_t *dram_vals)
> +{
> +	/* mDDR configuration values */
> +	const uint32_t regs[] = {
> +		0x01010001, 0x00010000, 0x01000000, 0x00000001,
> +		0x00010101, 0x00000001, 0x00010000, 0x01000001,
> +		0x01010000, 0x00000001, 0x07000200, 0x04070203,
> +		0x02020002, 0x06070a02, 0x0d000201, 0x0305000d,
> +		0x02080800, 0x19330f0a, 0x1f1f1c00, 0x020a1313,
> +		0x03061323, 0x0000000a, 0x00080008, 0x00200020,
> +		0x00200020, 0x00200020, 0x000003f7, 0x00000000,
> +		0x00000000, 0x00000000, 0x00000020, 0x00000000,
> +		0x001023cd, 0x20410010, 0x00006665, 0x00000000,
> +		0x00000101, 0x00000001, 0x00000000, 0x00000000,
> +	};
> +	memcpy(dram_vals, regs, sizeof(regs));
> +}
> +
> +void board_init_ll(void)
> +{
> +	mxs_common_spl_init(iomux_setup, ARRAY_SIZE(iomux_setup));
> +}
> diff --git a/board/creative/xfi3/xfi3.c b/board/creative/xfi3/xfi3.c
> new file mode 100644
> index 0000000..8ab7746
> --- /dev/null
> +++ b/board/creative/xfi3/xfi3.c
> @@ -0,0 +1,221 @@
> +/*
> + * Creative ZEN X-Fi3 board
> + *
> + * Copyright (C) 2013 Marek Vasut <marex@denx.de>
> + *
> + * Hardware investigation done by:
> + *
> + * Amaury Pouly <amaury.pouly@gmail.com>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <errno.h>
> +#include <asm/gpio.h>
> +#include <asm/io.h>
> +#include <asm/arch/iomux-mx23.h>
> +#include <asm/arch/imx-regs.h>
> +#include <asm/arch/clock.h>
> +#include <asm/arch/sys_proto.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +/*
> + * Functions
> + */
> +int board_early_init_f(void)
> +{
> +	/* IO0 clock at 480MHz */
> +	mxs_set_ioclk(MXC_IOCLK0, 480000);
> +
> +	/* SSP0 clock at 96MHz */
> +	mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
> +
> +	return 0;
> +}
> +
> +int dram_init(void)
> +{
> +	return mxs_dram_init();
> +}
> +
> +#ifdef	CONFIG_CMD_MMC
> +static int xfi3_mmc_cd(int id)
> +{
> +	switch (id) {
> +	case 0:
> +		/* The SSP_DETECT is inverted on this board. */
> +		return gpio_get_value(MX23_PAD_SSP1_DETECT__GPIO_2_1);
> +	case 1:
> +		/* Phison bridge always present */
> +		return 1;
> +	default:
> +		return 0;
> +	}
> +}
> +
> +int board_mmc_init(bd_t *bis)
> +{
> +	int ret;
> +
> +	/* MicroSD slot */
> +	gpio_direction_input(MX23_PAD_SSP1_DETECT__GPIO_2_1);
> +	gpio_direction_output(MX23_PAD_GPMI_D07__GPIO_0_7, 0);
> +	ret = mxsmmc_initialize(bis, 0, NULL, xfi3_mmc_cd);
> +	if (ret)
> +		return ret;
> +
> +	/* Phison SD-NAND bridge */
> +	ret = mxsmmc_initialize(bis, 1, NULL, xfi3_mmc_cd);
> +
> +	return ret;
> +}
> +#endif
> +
> +#ifdef CONFIG_VIDEO_MXS
> +static int mxsfb_write_byte(uint32_t payload, const unsigned int data)
> +{
> +	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
> +	const unsigned int timeout = 0x10000;
> +
> +	if (mxs_wait_mask_clr(&regs->hw_lcdif_ctrl_reg, LCDIF_CTRL_RUN,
> +			      timeout))
> +		return -ETIMEDOUT;
> +
> +	writel((1 << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) |
> +		(1 << LCDIF_TRANSFER_COUNT_H_COUNT_OFFSET),
> +		&regs->hw_lcdif_transfer_count);
> +
> +	writel(LCDIF_CTRL_DATA_SELECT | LCDIF_CTRL_RUN,
> +		&regs->hw_lcdif_ctrl_clr);
> +
> +	if (data)
> +		writel(LCDIF_CTRL_DATA_SELECT, &regs->hw_lcdif_ctrl_set);
> +
> +	writel(LCDIF_CTRL_RUN, &regs->hw_lcdif_ctrl_set);
> +
> +	if (mxs_wait_mask_clr(&regs->hw_lcdif_lcdif_stat_reg, 1 << 29,
> +			      timeout))
> +		return -ETIMEDOUT;
> +
> +	writel(payload, &regs->hw_lcdif_data);
> +	return mxs_wait_mask_clr(&regs->hw_lcdif_ctrl_reg, LCDIF_CTRL_RUN,
> +				 timeout);
> +}
> +
> +static void mxsfb_write_register(uint32_t reg, uint32_t data)
> +{
> +	mxsfb_write_byte(reg, 0);
> +	mxsfb_write_byte(data, 1);
> +}
> +
> +void mxsfb_system_setup(void)
> +{
> +	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
> +
> +	/* Switch the LCDIF into System-Mode */
> +	writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DOTCLK_MODE |
> +		LCDIF_CTRL_BYPASS_COUNT, &regs->hw_lcdif_ctrl_clr);
> +
> +	/* Restart the SmartLCD controller */
> +	mdelay(50);

Nothing again, but 50mS is a lot of time and this sums up in the whole
function making a big delay. Really needed ?

> +	writel(1, &regs->hw_lcdif_ctrl1_set);
> +	mdelay(50);
> +	writel(1, &regs->hw_lcdif_ctrl1_clr);
> +	mdelay(50);
> +	writel(1, &regs->hw_lcdif_ctrl1_set);
> +	mdelay(50);
> +
> +	/* Program the SmartLCD controller */
> +	writel(LCDIF_CTRL1_RECOVER_ON_UNDERFLOW, &regs->hw_lcdif_ctrl1_set);
> +
> +	writel(0x03030202, &regs->hw_lcdif_timing);
> +
> +	mxsfb_write_register(1, 0x01c);
> +
> +	mxsfb_write_register(2, 0x100);
> +	/* 0x30 flips the LCD */
> +	mxsfb_write_register(3, 0x1038);
> +	mxsfb_write_register(8, 0x808);
> +	/* This can possibly contain 0x111 */
> +	mxsfb_write_register(0xc, 0x0);
> +	mxsfb_write_register(0xf, 0xc01);
> +	mxsfb_write_register(0x20, 0);
> +	mxsfb_write_register(0x21, 0);

There is a kind of magic here. Any way to get #defines or some
explanation ? I admit that the comment "This can possibly contain 0x111
*" does not help me a lot ;-)

> +	mdelay(30);
> +	mxsfb_write_register(0x10, 0xa00);
> +	mxsfb_write_register(0x11, 0x1038);
> +	mdelay(30);
> +	mxsfb_write_register(0x12, 0x1010);
> +	mxsfb_write_register(0x13, 0x50);
> +	mxsfb_write_register(0x14, 0x4f58);
> +	mxsfb_write_register(0x30, 0);
> +	mxsfb_write_register(0x31, 0xdb);
> +	mxsfb_write_register(0x32, 0);
> +	mxsfb_write_register(0x33, 0);
> +	mxsfb_write_register(0x34, 0xdb);
> +	mxsfb_write_register(0x35, 0);
> +	mxsfb_write_register(0x36, 0xaf);
> +	mxsfb_write_register(0x37, 0);
> +	mxsfb_write_register(0x38, 0xdb);
> +	mxsfb_write_register(0x39, 0);
> +	mxsfb_write_register(0x50, 0);
> +	mxsfb_write_register(0x51, 0x705);
> +	mxsfb_write_register(0x52, 0xe0a);
> +	mxsfb_write_register(0x53, 0x300);
> +	mxsfb_write_register(0x54, 0xa0e);
> +	mxsfb_write_register(0x55, 0x507);
> +	mxsfb_write_register(0x56, 0);
> +	mxsfb_write_register(0x57, 3);
> +	mxsfb_write_register(0x58, 0x90a);
> +	mxsfb_write_register(0x59, 0xa09);
> +	mdelay(30);
> +	mxsfb_write_register(7, 0x1017);
> +	mdelay(40);
> +	mxsfb_write_register(0x36, 0xaf);
> +	mxsfb_write_register(0x37, 0);
> +	mxsfb_write_register(0x38, 0xdb);
> +	mxsfb_write_register(0x39, 0);
> +	mxsfb_write_register(0x20, 0);
> +	mxsfb_write_register(0x21, 0);
> +	/* Turn on Framebuffer Upload Mode */
> +	mxsfb_write_byte(0x22, 0);
> +
> +	writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DATA_SELECT,
> +		&regs->hw_lcdif_ctrl_set);
> +}
> +#endif
> +
> +int board_init(void)
> +{
> +	/* Adress of boot parameters */
> +	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;

Complete OT: these two lines are in each board and often a board_init()
is written only for them. Maybe we can drop them putting the code
global. I have not seen a board where bi_boot_params is not set to RAM
address + 0x100.

> diff --git a/boards.cfg b/boards.cfg
> index f919c53..85e0c35 100644
> --- a/boards.cfg
> +++ b/boards.cfg
> @@ -198,6 +198,7 @@ zmx25                        arm         arm926ejs   zmx25               syteco
>  imx27lite                    arm         arm926ejs   imx27lite           logicpd        mx27
>  magnesium                    arm         arm926ejs   imx27lite           logicpd        mx27
>  mx23_olinuxino               arm         arm926ejs   mx23_olinuxino      olimex         mxs		mx23_olinuxino
> +xfi3                         arm         arm926ejs   xfi3                creative       mxs		xfi3

Entries here are not sorted. Can you fix it, please ? Thanks !

> diff --git a/include/configs/xfi3.h b/include/configs/xfi3.h
> new file mode 100644
> index 0000000..10facd9
> --- /dev/null
> +++ b/include/configs/xfi3.h
> @@ -0,0 +1,82 @@
> +/*
> + * Copyright (C) 2013 Marek Vasut <marex@denx.de>
> + *
> + * 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +#ifndef __CONFIGS_XFI3_H__
> +#define __CONFIGS_XFI3_H__
> +
> +/* System configurations */
> +#define CONFIG_MX23				/* i.MX23 SoC */
> +#define CONFIG_MACH_TYPE	0xffffffff
> +
> +/* U-Boot Commands */
> +#define CONFIG_SYS_NO_FLASH
> +#include <config_cmd_default.h>
> +#define CONFIG_DISPLAY_CPUINFO
> +#define CONFIG_DOS_PARTITION
> +
> +#define CONFIG_CMD_CACHE
> +#define CONFIG_CMD_EXT2
> +#define CONFIG_CMD_FAT
> +#define CONFIG_CMD_GPIO
> +#define CONFIG_CMD_MMC
> +#define CONFIG_CMD_PING
> +#define CONFIG_CMD_USB
> +#define CONFIG_VIDEO
> +
> +/* Memory configuration */
> +#define CONFIG_NR_DRAM_BANKS		1		/* 1 bank of DRAM */
> +#define PHYS_SDRAM_1			0x40000000	/* Base address */
> +#define PHYS_SDRAM_1_SIZE		0x08000000	/* Max 128 MB RAM */
> +#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1
> +
> +/* Environment */
> +#define CONFIG_ENV_SIZE			(16 * 1024)
> +#define CONFIG_ENV_IS_NOWHERE
> +#define CONFIG_ENV_OVERWRITE
> +
> +/* Booting Linux */
> +#define CONFIG_BOOTDELAY	3
> +#define CONFIG_BOOTFILE		"uImage"
> +#define CONFIG_BOOTARGS		"console=ttyAMA0,115200n8 "
> +#define CONFIG_LOADADDR		0x42000000
> +#define CONFIG_SYS_LOAD_ADDR	CONFIG_LOADADDR
> +
> +/* LCD */
> +#ifdef CONFIG_VIDEO
> +#define CONFIG_VIDEO_MXS_MODE_SYSTEM
> +#define CONFIG_SYS_BLACK_IN_WRITE
> +#define LCD_BPP	LCD_COLOR16
> +#endif
> +
> +/* USB */
> +#ifdef CONFIG_CMD_USB
> +#define CONFIG_EHCI_MXS_PORT0
> +#define CONFIG_USB_MAX_CONTROLLER_COUNT 1
> +
> +#define CONFIG_MV_UDC		/* ChipIdea CI13xxx UDC */
> +#define CONFIG_USB_GADGET_DUALSPEED
> +
> +#define CONFIG_USB_ETHER
> +#define CONFIG_USB_ETH_CDC
> +#define CONFIG_NETCONSOLE
> +#endif
> +
> +/* The rest of the configuration is shared */
> +#include <configs/mxs.h>
> +
> +#endif	/* __CONFIGS_XFI3_H__ */
> 

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================

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

* [U-Boot] [PATCH 10/11] ARM: mxs: Enable 4x6 font for X-Fi3
  2013-07-30 21:38 ` [U-Boot] [PATCH 10/11] ARM: mxs: Enable 4x6 font for X-Fi3 Marek Vasut
@ 2013-07-31 15:01   ` Stefano Babic
  2013-07-31 15:15     ` Marek Vasut
  0 siblings, 1 reply; 45+ messages in thread
From: Stefano Babic @ 2013-07-31 15:01 UTC (permalink / raw)
  To: u-boot

On 30/07/2013 23:38, Marek Vasut wrote:
> This device has a very small screen and thus can benefit from using
> smaller font. Enable it.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  include/configs/xfi3.h |    1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/configs/xfi3.h b/include/configs/xfi3.h
> index 10facd9..18467f6 100644
> --- a/include/configs/xfi3.h
> +++ b/include/configs/xfi3.h
> @@ -58,6 +58,7 @@
>  
>  /* LCD */
>  #ifdef CONFIG_VIDEO
> +#define CONFIG_VIDEO_FONT_4X6
>  #define CONFIG_VIDEO_MXS_MODE_SYSTEM
>  #define CONFIG_SYS_BLACK_IN_WRITE
>  #define LCD_BPP	LCD_COLOR16
> 

This patch should be squashed with 5/11 because you add a new file.

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-31 13:22     ` Marek Vasut
@ 2013-07-31 15:05       ` Stefano Babic
  2013-07-31 15:14         ` Marek Vasut
  0 siblings, 1 reply; 45+ messages in thread
From: Stefano Babic @ 2013-07-31 15:05 UTC (permalink / raw)
  To: u-boot

Hi Marek,

On 31/07/2013 15:22, Marek Vasut wrote:

>>
>> Question: is there anything wrong to move it into mxsfb_system_setup() ?
>> I would prefer to avoid adding a new not documented CONFIG_ only to set
>> a bit...
> 
> Yes, the order in which the LCD is configured must be preserved as-is.
> 

Ok, understood - sometimes is not possible to suimplify.

Best regards,
Stefano Babic


-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-31 15:00   ` Stefano Babic
@ 2013-07-31 15:09     ` Marek Vasut
  0 siblings, 0 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-31 15:09 UTC (permalink / raw)
  To: u-boot

Dear Stefano Babic,

[...]

> > @@ -0,0 +1,47 @@
> > +#
> > +# (C) Copyright 2000-2006
> > +# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> > +#
> > +# See file CREDITS for list of people who contributed to this
> > +# project.
> > +#
> > +# 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.
> > +#
> > +# This program is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > +# GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public License
> > +# along with this program; if not, write to the Free Software
> > +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > +# MA 02111-1307 USA
> > +#
> 
> Please use new licence style with SPDX identifier. Fix it globally.

Fixed in my tree already, thanks.

[...]

> > +void mxsfb_system_setup(void)
> > +{
> > +	struct mxs_lcdif_regs *regs = (struct mxs_lcdif_regs *)MXS_LCDIF_BASE;
> > +
> > +	/* Switch the LCDIF into System-Mode */
> > +	writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DOTCLK_MODE |
> > +		LCDIF_CTRL_BYPASS_COUNT, &regs->hw_lcdif_ctrl_clr);
> > +
> > +	/* Restart the SmartLCD controller */
> > +	mdelay(50);
> 
> Nothing again, but 50mS is a lot of time and this sums up in the whole
> function making a big delay. Really needed ?

Yeah, I had these smartLCDs (just for the record).

> > +	writel(1, &regs->hw_lcdif_ctrl1_set);
> > +	mdelay(50);
> > +	writel(1, &regs->hw_lcdif_ctrl1_clr);
> > +	mdelay(50);
> > +	writel(1, &regs->hw_lcdif_ctrl1_set);
> > +	mdelay(50);
> > +
> > +	/* Program the SmartLCD controller */
> > +	writel(LCDIF_CTRL1_RECOVER_ON_UNDERFLOW, &regs->hw_lcdif_ctrl1_set);
> > +
> > +	writel(0x03030202, &regs->hw_lcdif_timing);
> > +
> > +	mxsfb_write_register(1, 0x01c);
> > +
> > +	mxsfb_write_register(2, 0x100);
> > +	/* 0x30 flips the LCD */
> > +	mxsfb_write_register(3, 0x1038);
> > +	mxsfb_write_register(8, 0x808);
> > +	/* This can possibly contain 0x111 */
> > +	mxsfb_write_register(0xc, 0x0);
> > +	mxsfb_write_register(0xf, 0xc01);
> > +	mxsfb_write_register(0x20, 0);
> > +	mxsfb_write_register(0x21, 0);
> 
> There is a kind of magic here. Any way to get #defines or some
> explanation ? I admit that the comment "This can possibly contain 0x111
> *" does not help me a lot ;-)

No, I won't transcript the datasheet here, I see no added value. I added comment 
that this stuff is pulled from the OTM2201A datasheet so the reader can look the 
meaning of the registers up. 

> > +	mdelay(30);
> > +	mxsfb_write_register(0x10, 0xa00);
> > +	mxsfb_write_register(0x11, 0x1038);
> > +	mdelay(30);
> > +	mxsfb_write_register(0x12, 0x1010);
> > +	mxsfb_write_register(0x13, 0x50);
> > +	mxsfb_write_register(0x14, 0x4f58);
> > +	mxsfb_write_register(0x30, 0);
> > +	mxsfb_write_register(0x31, 0xdb);
> > +	mxsfb_write_register(0x32, 0);
> > +	mxsfb_write_register(0x33, 0);
> > +	mxsfb_write_register(0x34, 0xdb);
> > +	mxsfb_write_register(0x35, 0);
> > +	mxsfb_write_register(0x36, 0xaf);
> > +	mxsfb_write_register(0x37, 0);
> > +	mxsfb_write_register(0x38, 0xdb);
> > +	mxsfb_write_register(0x39, 0);
> > +	mxsfb_write_register(0x50, 0);
> > +	mxsfb_write_register(0x51, 0x705);
> > +	mxsfb_write_register(0x52, 0xe0a);
> > +	mxsfb_write_register(0x53, 0x300);
> > +	mxsfb_write_register(0x54, 0xa0e);
> > +	mxsfb_write_register(0x55, 0x507);
> > +	mxsfb_write_register(0x56, 0);
> > +	mxsfb_write_register(0x57, 3);
> > +	mxsfb_write_register(0x58, 0x90a);
> > +	mxsfb_write_register(0x59, 0xa09);
> > +	mdelay(30);
> > +	mxsfb_write_register(7, 0x1017);
> > +	mdelay(40);
> > +	mxsfb_write_register(0x36, 0xaf);
> > +	mxsfb_write_register(0x37, 0);
> > +	mxsfb_write_register(0x38, 0xdb);
> > +	mxsfb_write_register(0x39, 0);
> > +	mxsfb_write_register(0x20, 0);
> > +	mxsfb_write_register(0x21, 0);
> > +	/* Turn on Framebuffer Upload Mode */
> > +	mxsfb_write_byte(0x22, 0);
> > +
> > +	writel(LCDIF_CTRL_LCDIF_MASTER | LCDIF_CTRL_DATA_SELECT,
> > +		&regs->hw_lcdif_ctrl_set);
> > +}
> > +#endif
> > +
> > +int board_init(void)
> > +{
> > +	/* Adress of boot parameters */
> > +	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
> 
> Complete OT: these two lines are in each board and often a board_init()
> is written only for them. Maybe we can drop them putting the code
> global. I have not seen a board where bi_boot_params is not set to RAM
> address + 0x100.

Very valid point, feel free to submit a patch and CC me on that!

> > diff --git a/boards.cfg b/boards.cfg
> > index f919c53..85e0c35 100644
> > --- a/boards.cfg
> > +++ b/boards.cfg
> > @@ -198,6 +198,7 @@ zmx25                        arm         arm926ejs  
> > zmx25               syteco
> > 
> >  imx27lite                    arm         arm926ejs   imx27lite          
> >  logicpd        mx27 magnesium                    arm         arm926ejs 
> >   imx27lite           logicpd        mx27 mx23_olinuxino              
> >  arm         arm926ejs   mx23_olinuxino      olimex        
> >  mxs		mx23_olinuxino
> > 
> > +xfi3                         arm         arm926ejs   xfi3               
> > creative       mxs		xfi3
> 
> Entries here are not sorted. Can you fix it, please ? Thanks !

AARGH, they got unsorted by mx23evk already :-E~ Will add a patch to fix this 
and then keep this sorted in these patches here.

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-31 15:05       ` Stefano Babic
@ 2013-07-31 15:14         ` Marek Vasut
  0 siblings, 0 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-31 15:14 UTC (permalink / raw)
  To: u-boot

Dear Stefano Babic,

> Hi Marek,
> 
> On 31/07/2013 15:22, Marek Vasut wrote:
> >> Question: is there anything wrong to move it into mxsfb_system_setup() ?
> >> I would prefer to avoid adding a new not documented CONFIG_ only to set
> >> a bit...
> > 
> > Yes, the order in which the LCD is configured must be preserved as-is.
> 
> Ok, understood - sometimes is not possible to suimplify.

I believe SmartLCDs should be considered a crime against hardware design (and 
transitively an offense against software engineers' human rights). Just my 5 
cents ...

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 10/11] ARM: mxs: Enable 4x6 font for X-Fi3
  2013-07-31 15:01   ` Stefano Babic
@ 2013-07-31 15:15     ` Marek Vasut
  2013-07-31 16:08       ` Stefano Babic
  0 siblings, 1 reply; 45+ messages in thread
From: Marek Vasut @ 2013-07-31 15:15 UTC (permalink / raw)
  To: u-boot

Dear Stefano Babic,

> On 30/07/2013 23:38, Marek Vasut wrote:
> > This device has a very small screen and thus can benefit from using
> > smaller font. Enable it.
> > 
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Fabio Estevam <fabio.estevam@freescale.com>
> > Cc: Otavio Salvador <otavio@ossystems.com.br>
> > Cc: Stefano Babic <sbabic@denx.de>
> > ---
> > 
> >  include/configs/xfi3.h |    1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/include/configs/xfi3.h b/include/configs/xfi3.h
> > index 10facd9..18467f6 100644
> > --- a/include/configs/xfi3.h
> > +++ b/include/configs/xfi3.h
> > @@ -58,6 +58,7 @@
> > 
> >  /* LCD */
> >  #ifdef CONFIG_VIDEO
> > 
> > +#define CONFIG_VIDEO_FONT_4X6
> > 
> >  #define CONFIG_VIDEO_MXS_MODE_SYSTEM
> >  #define CONFIG_SYS_BLACK_IN_WRITE
> >  #define LCD_BPP	LCD_COLOR16
> 
> This patch should be squashed with 5/11 because you add a new file.

I explicitly keep it this way , see the cover letter. You could apply first 6 
patches and after Anatolij checks the font stuff, the rest can be applied. Or if 
I do get an ACK from Anatolij, I will squash them, yes.

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 10/11] ARM: mxs: Enable 4x6 font for X-Fi3
  2013-07-31 15:15     ` Marek Vasut
@ 2013-07-31 16:08       ` Stefano Babic
  0 siblings, 0 replies; 45+ messages in thread
From: Stefano Babic @ 2013-07-31 16:08 UTC (permalink / raw)
  To: u-boot

Hi Marek,

On 31/07/2013 17:15, Marek Vasut wrote:
>>
>> This patch should be squashed with 5/11 because you add a new file.
> 
> I explicitly keep it this way , see the cover letter. You could apply first 6 
> patches and after Anatolij checks the font stuff, the rest can be applied. Or if 
> I do get an ACK from Anatolij, I will squash them, yes.

Ok, fine. We will wait for Anatolji's ACK.

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-30 21:37 ` [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board Marek Vasut
                     ` (2 preceding siblings ...)
  2013-07-31 15:00   ` Stefano Babic
@ 2013-07-31 19:30   ` Wolfgang Denk
  2013-07-31 20:16     ` Marek Vasut
  3 siblings, 1 reply; 45+ messages in thread
From: Wolfgang Denk @ 2013-07-31 19:30 UTC (permalink / raw)
  To: u-boot

Dear Marek,

In message <1375220281-11132-6-git-send-email-marex@denx.de> you wrote:
>
...
> +	/* Program the SmartLCD controller */
> +	writel(LCDIF_CTRL1_RECOVER_ON_UNDERFLOW, &regs->hw_lcdif_ctrl1_set);
> +
> +	writel(0x03030202, &regs->hw_lcdif_timing);

Please don't use such magic numbers.

> +	mxsfb_write_register(1, 0x01c);
> +
> +	mxsfb_write_register(2, 0x100);
> +	/* 0x30 flips the LCD */
> +	mxsfb_write_register(3, 0x1038);
> +	mxsfb_write_register(8, 0x808);
> +	/* This can possibly contain 0x111 */
> +	mxsfb_write_register(0xc, 0x0);
> +	mxsfb_write_register(0xf, 0xc01);
> +	mxsfb_write_register(0x20, 0);
> +	mxsfb_write_register(0x21, 0);
> +	mdelay(30);
> +	mxsfb_write_register(0x10, 0xa00);
> +	mxsfb_write_register(0x11, 0x1038);
> +	mdelay(30);
> +	mxsfb_write_register(0x12, 0x1010);
> +	mxsfb_write_register(0x13, 0x50);
> +	mxsfb_write_register(0x14, 0x4f58);
> +	mxsfb_write_register(0x30, 0);
> +	mxsfb_write_register(0x31, 0xdb);
> +	mxsfb_write_register(0x32, 0);
> +	mxsfb_write_register(0x33, 0);
> +	mxsfb_write_register(0x34, 0xdb);
> +	mxsfb_write_register(0x35, 0);
> +	mxsfb_write_register(0x36, 0xaf);
> +	mxsfb_write_register(0x37, 0);
> +	mxsfb_write_register(0x38, 0xdb);
> +	mxsfb_write_register(0x39, 0);
> +	mxsfb_write_register(0x50, 0);
> +	mxsfb_write_register(0x51, 0x705);
> +	mxsfb_write_register(0x52, 0xe0a);
> +	mxsfb_write_register(0x53, 0x300);
> +	mxsfb_write_register(0x54, 0xa0e);
> +	mxsfb_write_register(0x55, 0x507);
> +	mxsfb_write_register(0x56, 0);
> +	mxsfb_write_register(0x57, 3);
> +	mxsfb_write_register(0x58, 0x90a);
> +	mxsfb_write_register(0x59, 0xa09);
> +	mdelay(30);
> +	mxsfb_write_register(7, 0x1017);
> +	mdelay(40);
> +	mxsfb_write_register(0x36, 0xaf);
> +	mxsfb_write_register(0x37, 0);
> +	mxsfb_write_register(0x38, 0xdb);
> +	mxsfb_write_register(0x39, 0);
> +	mxsfb_write_register(0x20, 0);
> +	mxsfb_write_register(0x21, 0);

This is terrible. WHy don't you use an array for these values, and
then a simple loop to program the (register,value) pairs?  That would
not only be much easier to read and to maintain but also result in
smaller code...


> +#define CONFIG_MACH_TYPE	0xffffffff

NAK.  Please use a proper value.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
God made the integers; all else is the work of Man.       - Kronecker

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

* [U-Boot] [PATCH 06/11] ARM: mxs: Add SanDisk Sansa Fuze+ board
  2013-07-30 21:37 ` [U-Boot] [PATCH 06/11] ARM: mxs: Add SanDisk Sansa Fuze+ board Marek Vasut
@ 2013-07-31 19:32   ` Wolfgang Denk
  2013-07-31 19:41     ` Marek Vasut
  0 siblings, 1 reply; 45+ messages in thread
From: Wolfgang Denk @ 2013-07-31 19:32 UTC (permalink / raw)
  To: u-boot

Dear Marek Vasut,

In message <1375220281-11132-7-git-send-email-marex@denx.de> you wrote:
>
> diff --git a/board/sandisk/sansa_fuze_plus/Makefile b/board/sandisk/sansa_fuze_plus/Makefile
> new file mode 100644
> index 0000000..5e46e4c
> --- /dev/null
> +++ b/board/sandisk/sansa_fuze_plus/Makefile
> @@ -0,0 +1,47 @@
> +#
> +# (C) Copyright 2000-2006
> +# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> +#
> +# See file CREDITS for list of people who contributed to this
> +# project.
> +#
> +# 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.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> +# MA 02111-1307 USA

Please fix the whole series to use SPDX License IDs instead.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Der Horizont vieler Menschen ist ein Kreis mit Radius Null --
und das nennen sie ihren Standpunkt.

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

* [U-Boot] [PATCH 06/11] ARM: mxs: Add SanDisk Sansa Fuze+ board
  2013-07-31 19:32   ` Wolfgang Denk
@ 2013-07-31 19:41     ` Marek Vasut
  0 siblings, 0 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-31 19:41 UTC (permalink / raw)
  To: u-boot

Dear Wolfgang Denk,

> Dear Marek Vasut,
> 
> In message <1375220281-11132-7-git-send-email-marex@denx.de> you wrote:
> > diff --git a/board/sandisk/sansa_fuze_plus/Makefile
> > b/board/sandisk/sansa_fuze_plus/Makefile new file mode 100644
> > index 0000000..5e46e4c
> > --- /dev/null
> > +++ b/board/sandisk/sansa_fuze_plus/Makefile
> > @@ -0,0 +1,47 @@
> > +#
> > +# (C) Copyright 2000-2006
> > +# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> > +#
> > +# See file CREDITS for list of people who contributed to this
> > +# project.
> > +#
> > +# 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.
> > +#
> > +# This program is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > +# GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public License
> > +# along with this program; if not, write to the Free Software
> > +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > +# MA 02111-1307 USA
> 
> Please fix the whole series to use SPDX License IDs instead.

Fixed

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board
  2013-07-31 19:30   ` Wolfgang Denk
@ 2013-07-31 20:16     ` Marek Vasut
  0 siblings, 0 replies; 45+ messages in thread
From: Marek Vasut @ 2013-07-31 20:16 UTC (permalink / raw)
  To: u-boot

Dear Wolfgang Denk,

> Dear Marek,
> 
> In message <1375220281-11132-6-git-send-email-marex@denx.de> you wrote:
> 
> ...
> 
> > +	/* Program the SmartLCD controller */
> > +	writel(LCDIF_CTRL1_RECOVER_ON_UNDERFLOW, &regs->hw_lcdif_ctrl1_set);
> > +
> > +	writel(0x03030202, &regs->hw_lcdif_timing);
> 
> Please don't use such magic numbers.

Fixed

[...]

> > +	mxsfb_write_register(0x38, 0xdb);
> > +	mxsfb_write_register(0x39, 0);
> > +	mxsfb_write_register(0x20, 0);
> > +	mxsfb_write_register(0x21, 0);
> 
> This is terrible. WHy don't you use an array for these values, and
> then a simple loop to program the (register,value) pairs?  That would
> not only be much easier to read and to maintain but also result in
> smaller code...

True, fixed.

> > +#define CONFIG_MACH_TYPE	0xffffffff
> 
> NAK.  Please use a proper value.

Removed altogether, we use only DT here.

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 01/11] dma: apbh: Add special circular mode for LCD
  2013-07-30 21:37 ` [U-Boot] [PATCH 01/11] dma: apbh: Add special circular mode for LCD Marek Vasut
@ 2013-08-09 19:50   ` Anatolij Gustschin
  0 siblings, 0 replies; 45+ messages in thread
From: Anatolij Gustschin @ 2013-08-09 19:50 UTC (permalink / raw)
  To: u-boot

On Tue, 30 Jul 2013 23:37:51 +0200
Marek Vasut <marex@denx.de> wrote:

> Add special function that executes a specially crafted circular
> DMA descriptor. The function doesn't wait for the descriptor to
> finish the transfer, since the descritor never finishes. This is
> useful when operating a SmartLCD through the LCDIF interface, as
> the LCDIF does not give us any means to have continuous refresh
> of the SmartLCD. Instead, the RUN bit in the LCDIF CTRL register
> must be triggered manually. This can be worked around by starting
> an DMA transfer which continuously sets the RUN bit. This function
> allows starting exactly such transfer.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  arch/arm/include/asm/imx-common/dma.h |    2 ++
>  drivers/dma/apbh_dma.c                |   22 ++++++++++++++++++++++
>  2 files changed, 24 insertions(+)

Applied to u-boot-video/master. Thanks!

Anatolij

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

* [U-Boot] [PATCH 02/11] video: Allocate the MXSFB framebuffer aligned
  2013-07-30 21:37 ` [U-Boot] [PATCH 02/11] video: Allocate the MXSFB framebuffer aligned Marek Vasut
@ 2013-08-09 19:50   ` Anatolij Gustschin
  0 siblings, 0 replies; 45+ messages in thread
From: Anatolij Gustschin @ 2013-08-09 19:50 UTC (permalink / raw)
  To: u-boot

On Tue, 30 Jul 2013 23:37:52 +0200
Marek Vasut <marex@denx.de> wrote:

> Allocate the framebuffer aligned so it can be flushed
> and the flush_dcache_range() function won't complain.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  drivers/video/mxsfb.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Applied to u-boot-video/master. Thanks!

Anatolij

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

* [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb
  2013-07-30 21:37 ` [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb Marek Vasut
  2013-07-30 21:46   ` Otavio Salvador
  2013-07-31 13:19   ` Stefano Babic
@ 2013-08-09 19:51   ` Anatolij Gustschin
  2 siblings, 0 replies; 45+ messages in thread
From: Anatolij Gustschin @ 2013-08-09 19:51 UTC (permalink / raw)
  To: u-boot

On Tue, 30 Jul 2013 23:37:53 +0200
Marek Vasut <marex@denx.de> wrote:

> Add hook that allow configuring SmartLCD attached the MXS LCDIF
> controller operating in System-Mode. This hook can be overriden
> by a platform-specific SmartLCD programming routine, which writes
> the SmartLCD specific values into it's registers.
> 
> Also, this patch makes sure the SYNC signals are off for the
> SmartLCD case.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  drivers/video/mxsfb.c |   16 ++++++++++++++++
>  1 file changed, 16 insertions(+)

Applied to u-boot-video/master. Thanks!

Anatolij

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

* [U-Boot] [PATCH 04/11] video: Implement continuous screen refresh for SmartLCD into mxsfb
  2013-07-30 21:37 ` [U-Boot] [PATCH 04/11] video: Implement continuous screen refresh for SmartLCD " Marek Vasut
@ 2013-08-09 19:51   ` Anatolij Gustschin
  0 siblings, 0 replies; 45+ messages in thread
From: Anatolij Gustschin @ 2013-08-09 19:51 UTC (permalink / raw)
  To: u-boot

On Tue, 30 Jul 2013 23:37:54 +0200
Marek Vasut <marex@denx.de> wrote:

> The LCDIF interface doesn't give us any means to do continuous refresh
> when driving a SmartLCD. To work this around, we produce a special
> circular DMA descriptor, which only writes the HW_LCDIF_CTRL0 register
> and sets the RUN bit.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Stefano Babic <sbabic@denx.de>
> ---
>  drivers/video/mxsfb.c |   26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)

Applied to u-boot-video/master. Thanks!

Anatolij

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

* [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h
  2013-07-30 21:37 ` [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h Marek Vasut
@ 2013-08-10  7:19   ` Anatolij Gustschin
  2013-08-11 17:29     ` Marek Vasut
  2013-08-12 20:43   ` Anatolij Gustschin
  1 sibling, 1 reply; 45+ messages in thread
From: Anatolij Gustschin @ 2013-08-10  7:19 UTC (permalink / raw)
  To: u-boot

Hi,

On Tue, 30 Jul 2013 23:37:57 +0200
Marek Vasut <marex@denx.de> wrote:

> This patch moves all the font configuration values into video_font_data.h
> so they are all in the right place with the font. The video_font.h now only
> includes video_font_data.h and will allow us to select and include different
> font once more fonts are added.

this patch adds a warning:

Configuring for mcc200 board...
   text	   data	    bss	    dec	    hex	filename
 202480	  19924	 286272	 508676	  7c304	./u-boot
/home/ag/u-boot/u-boot-video/include/video_font_data.h:16:22: warning: 'video_fontdata' defined but not used [-Wunused-variable]

and commit d3983ee85 did this video_font.h split. Any idea how we
should handle it?

Thanks,
Anatolij

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

* [U-Boot] [PATCH 09/11] video: Fix cfb_console for 4-bit wide font
  2013-07-30 21:37 ` [U-Boot] [PATCH 09/11] video: Fix cfb_console for 4-bit wide font Marek Vasut
@ 2013-08-10  7:24   ` Anatolij Gustschin
  0 siblings, 0 replies; 45+ messages in thread
From: Anatolij Gustschin @ 2013-08-10  7:24 UTC (permalink / raw)
  To: u-boot

On Tue, 30 Jul 2013 23:37:59 +0200
Marek Vasut <marex@denx.de> wrote:

> The cfb_console can't handle 4-bit wide font properly, since with
> 4-bit wide font, all 8 bits are drawn. Unbreak the video_drawchars()
> function to correctly render 4-bits only on such fonts.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  drivers/video/cfb_console.c |   21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)

Applied to u-boot-video/master. Thanks!

Anatolij

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

* [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h
  2013-08-10  7:19   ` Anatolij Gustschin
@ 2013-08-11 17:29     ` Marek Vasut
  0 siblings, 0 replies; 45+ messages in thread
From: Marek Vasut @ 2013-08-11 17:29 UTC (permalink / raw)
  To: u-boot

Dear Anatolij Gustschin,

> Hi,
> 
> On Tue, 30 Jul 2013 23:37:57 +0200
> 
> Marek Vasut <marex@denx.de> wrote:
> > This patch moves all the font configuration values into video_font_data.h
> > so they are all in the right place with the font. The video_font.h now
> > only includes video_font_data.h and will allow us to select and include
> > different font once more fonts are added.
> 
> this patch adds a warning:
> 
> Configuring for mcc200 board...
>    text	   data	    bss	    dec	    hex	filename
>  202480	  19924	 286272	 508676	  7c304	./u-boot
> /home/ag/u-boot/u-boot-video/include/video_font_data.h:16:22: warning:
> 'video_fontdata' defined but not used [-Wunused-variable]
> 
> and commit d3983ee85 did this video_font.h split. Any idea how we
> should handle it?

Dang. What about adding __maybe_ununsed for the video_fontdata ?

Best regards,
Marek Vasut

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

* [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h
  2013-07-30 21:37 ` [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h Marek Vasut
  2013-08-10  7:19   ` Anatolij Gustschin
@ 2013-08-12 20:43   ` Anatolij Gustschin
  1 sibling, 0 replies; 45+ messages in thread
From: Anatolij Gustschin @ 2013-08-12 20:43 UTC (permalink / raw)
  To: u-boot

Hi,

On Tue, 30 Jul 2013 23:37:57 +0200
Marek Vasut <marex@denx.de> wrote:

> This patch moves all the font configuration values into video_font_data.h
> so they are all in the right place with the font. The video_font.h now only
> includes video_font_data.h and will allow us to select and include different
> font once more fonts are added.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  arch/powerpc/cpu/mpc8xx/video.c |    1 -
>  common/lcd.c                    |    1 -
>  drivers/video/cfb_console.c     |    1 -
>  drivers/video/sed156x.c         |    1 -
>  include/video_font.h            |    5 +----
>  include/video_font_data.h       |    5 +++++
>  6 files changed, 6 insertions(+), 8 deletions(-)

Applied to u-boot-video/master after fixing warning.

Thanks,

Anatolij

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

* [U-Boot] [PATCH 08/11] video: Add small 4x6 font from Linux
  2013-07-30 21:37 ` [U-Boot] [PATCH 08/11] video: Add small 4x6 font from Linux Marek Vasut
@ 2013-08-12 20:44   ` Anatolij Gustschin
  0 siblings, 0 replies; 45+ messages in thread
From: Anatolij Gustschin @ 2013-08-12 20:44 UTC (permalink / raw)
  To: u-boot

On Tue, 30 Jul 2013 23:37:58 +0200
Marek Vasut <marex@denx.de> wrote:

> This font is based on Linux drivers/video/console/font_mini_4x6.c as of commit:
> 
> commit bcfbeecea11c15e243f076d37d637c2598aff4fe
> Author: Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
> Date:   Sun Aug 12 15:05:10 2012 +0000
> 
>     drivers: console: font_: Change a glyph from "broken bar" to "vertical line"
> 
> I removed these lines as they are useless in U-Boot:
>   #include <linux/font.h>
>   #define FONTDATAMAX 1536
>   Whole "const struct font_desc font_mini_4x6" block
> 
> This patch also adds a new configuration option to select this smaller font,
> CONFIG_VIDEO_FONT_4X6 , but this is disabled by default. The default setting
> is the regular "large" font.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  include/video_font.h     |    4 +
>  include/video_font_4x6.h | 2154 ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 2158 insertions(+)
>  create mode 100644 include/video_font_4x6.h

Applied to u-boot-video/master. Thanks!

Anatolij

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

end of thread, other threads:[~2013-08-12 20:44 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-30 21:37 [U-Boot] [PATCH 00/11] ARM: mxs: Various MX23 adjustments Marek Vasut
2013-07-30 21:37 ` [U-Boot] [PATCH 01/11] dma: apbh: Add special circular mode for LCD Marek Vasut
2013-08-09 19:50   ` Anatolij Gustschin
2013-07-30 21:37 ` [U-Boot] [PATCH 02/11] video: Allocate the MXSFB framebuffer aligned Marek Vasut
2013-08-09 19:50   ` Anatolij Gustschin
2013-07-30 21:37 ` [U-Boot] [PATCH 03/11] video: Add System-Mode configuration hook into mxsfb Marek Vasut
2013-07-30 21:46   ` Otavio Salvador
2013-07-30 22:45     ` Marek Vasut
2013-07-30 22:48       ` Otavio Salvador
2013-07-30 23:31         ` Marek Vasut
2013-07-31 13:19   ` Stefano Babic
2013-07-31 13:22     ` Marek Vasut
2013-07-31 15:05       ` Stefano Babic
2013-07-31 15:14         ` Marek Vasut
2013-08-09 19:51   ` Anatolij Gustschin
2013-07-30 21:37 ` [U-Boot] [PATCH 04/11] video: Implement continuous screen refresh for SmartLCD " Marek Vasut
2013-08-09 19:51   ` Anatolij Gustschin
2013-07-30 21:37 ` [U-Boot] [PATCH 05/11] ARM: mxs: Add Creative ZEN XFi3 board Marek Vasut
2013-07-30 21:49   ` Otavio Salvador
2013-07-30 22:46     ` Marek Vasut
2013-07-30 22:49       ` Otavio Salvador
2013-07-30 23:36         ` Marek Vasut
2013-07-31 12:57           ` Otavio Salvador
2013-07-31  5:59   ` Heiko Schocher
2013-07-31 10:33     ` Marek Vasut
2013-07-31 15:00   ` Stefano Babic
2013-07-31 15:09     ` Marek Vasut
2013-07-31 19:30   ` Wolfgang Denk
2013-07-31 20:16     ` Marek Vasut
2013-07-30 21:37 ` [U-Boot] [PATCH 06/11] ARM: mxs: Add SanDisk Sansa Fuze+ board Marek Vasut
2013-07-31 19:32   ` Wolfgang Denk
2013-07-31 19:41     ` Marek Vasut
2013-07-30 21:37 ` [U-Boot] [PATCH 07/11] video: Encapsulate font in video_font_data.h Marek Vasut
2013-08-10  7:19   ` Anatolij Gustschin
2013-08-11 17:29     ` Marek Vasut
2013-08-12 20:43   ` Anatolij Gustschin
2013-07-30 21:37 ` [U-Boot] [PATCH 08/11] video: Add small 4x6 font from Linux Marek Vasut
2013-08-12 20:44   ` Anatolij Gustschin
2013-07-30 21:37 ` [U-Boot] [PATCH 09/11] video: Fix cfb_console for 4-bit wide font Marek Vasut
2013-08-10  7:24   ` Anatolij Gustschin
2013-07-30 21:38 ` [U-Boot] [PATCH 10/11] ARM: mxs: Enable 4x6 font for X-Fi3 Marek Vasut
2013-07-31 15:01   ` Stefano Babic
2013-07-31 15:15     ` Marek Vasut
2013-07-31 16:08       ` Stefano Babic
2013-07-30 21:38 ` [U-Boot] [PATCH 11/11] ARM: mxs: Enable 4x6 font for Fuze+ Marek Vasut

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.