diff options
65 files changed, 3493 insertions, 735 deletions
| diff --git a/Licenses/README b/Licenses/README index b1a59cc22..3ed7abad6 100644 --- a/Licenses/README +++ b/Licenses/README @@ -43,10 +43,11 @@ at [2].  [1] http://spdx.org/  [2] http://spdx.org/licenses/ -Full name					SPDX Identifier	OSI Approved	File name	URI +Full name					SPDX Identifier	OSI Approved	File name		URI  ======================================================================================================================================= -GNU General Public License v2.0 only		GPL-2.0		Y		gpl-2.0.txt	http://www.gnu.org/licenses/gpl-2.0.txt -GNU General Public License v2.0 or later	GPL-2.0+	Y		gpl-2.0.txt	http://www.gnu.org/licenses/gpl-2.0.txt -GNU Library General Public License v2 or later	LGPL-2.0+	Y		lgpl-2.0.txt	http://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt -GNU Lesser General Public License v2.1 or later	LGPL-2.1+	Y		lgpl-2.1.txt	http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt -eCos license version 2.0			eCos-2.0			eCos-2.0.txt	http://www.gnu.org/licenses/ecos-license.html +GNU General Public License v2.0 only		GPL-2.0		Y		gpl-2.0.txt		http://www.gnu.org/licenses/gpl-2.0.txt +GNU General Public License v2.0 or later	GPL-2.0+	Y		gpl-2.0.txt		http://www.gnu.org/licenses/gpl-2.0.txt +GNU Library General Public License v2 or later	LGPL-2.0+	Y		lgpl-2.0.txt		http://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt +GNU Lesser General Public License v2.1 or later	LGPL-2.1+	Y		lgpl-2.1.txt		http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt +eCos license version 2.0			eCos-2.0			eCos-2.0.txt		http://www.gnu.org/licenses/ecos-license.html +BSD 2-Clause License				BSD-2-Clause	Y		bsd-2-clause.txt	https://spdx.org/licenses/BSD-2-Clause diff --git a/Licenses/bsd-2-clause.txt b/Licenses/bsd-2-clause.txt new file mode 100644 index 000000000..af697645f --- /dev/null +++ b/Licenses/bsd-2-clause.txt @@ -0,0 +1,25 @@ +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the following +conditions are met: + +1. Redistributions of source code must retain the above +   copyright notice, this list of conditions and the following +   disclaimer. +2. Redistributions in binary form must reproduce the above +   copyright notice, this list of conditions and the following +   disclaimer in the documentation and/or other materials +   provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/MAINTAINERS b/MAINTAINERS index 23a17c30f..4297fe1ce 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1366,7 +1366,7 @@ Dimitar Penev <dpn@switchfin.org>  #	Board		CPU						#  ######################################################################### -Macpaul Lin <macpaul@andestech.com> +Andes <uboot@andestech.com>  	ADP-AG101	N1213 (AG101 SoC)  	ADP-AG101P	N1213 (AG101P XC5 FPGA) diff --git a/arch/arm/include/asm/arch-am33xx/hardware.h b/arch/arm/include/asm/arch-am33xx/hardware.h index 02f5f8a8d..2dfcc2e65 100644 --- a/arch/arm/include/asm/arch-am33xx/hardware.h +++ b/arch/arm/include/asm/arch-am33xx/hardware.h @@ -78,4 +78,5 @@  #define USB0_OTG_BASE			0x47401000  #define USB1_OTG_BASE			0x47401800 +int clk_get(int clk);  #endif /* __AM33XX_HARDWARE_H */ diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h index 8916d9d16..498a9ffc0 100644 --- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h +++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h @@ -291,7 +291,7 @@ struct exynos_platform_mipi_dsim {   */  struct mipi_dsim_master_ops {  	int (*cmd_write)(struct mipi_dsim_device *dsim, unsigned int data_id, -		unsigned int data0, unsigned int data1); +		const unsigned char *data0, unsigned int data1);  	int (*cmd_read)(struct mipi_dsim_device *dsim, unsigned int data_id,  		unsigned int data0, unsigned int data1);  	int (*get_dsim_frame_done)(struct mipi_dsim_device *dsim); diff --git a/arch/arm/include/asm/arch-zynq/hardware.h b/arch/arm/include/asm/arch-zynq/hardware.h index 25f0e3d9c..081624e20 100644 --- a/arch/arm/include/asm/arch-zynq/hardware.h +++ b/arch/arm/include/asm/arch-zynq/hardware.h @@ -17,6 +17,8 @@  #define ZYNQ_SDHCI_BASEADDR1		0xE0101000  #define ZYNQ_I2C_BASEADDR0		0xE0004000  #define ZYNQ_I2C_BASEADDR1		0xE0005000 +#define ZYNQ_SPI_BASEADDR0		0xE0006000 +#define ZYNQ_SPI_BASEADDR1		0xE0007000  /* Reflect slcr offsets */  struct slcr_regs { diff --git a/arch/arm/include/asm/imx-common/dma.h b/arch/arm/include/asm/imx-common/dma.h index 5f516ef6e..d5c1f7f25 100644 --- a/arch/arm/include/asm/imx-common/dma.h +++ b/arch/arm/include/asm/imx-common/dma.h @@ -161,4 +161,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/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c index 8267191fd..f7182f27e 100644 --- a/arch/microblaze/lib/board.c +++ b/arch/microblaze/lib/board.c @@ -16,6 +16,7 @@  #include <stdio_dev.h>  #include <serial.h>  #include <net.h> +#include <spi.h>  #include <linux/compiler.h>  #include <asm/processor.h>  #include <asm/microblaze_intc.h> @@ -147,6 +148,10 @@ void board_init_f(ulong not_used)  	}  #endif +#ifdef CONFIG_SPI +	spi_init(); +#endif +  	/* relocate environment function pointers etc. */  	env_relocate(); diff --git a/arch/mips/include/asm/config.h b/arch/mips/include/asm/config.h index cd2973478..3a891ba62 100644 --- a/arch/mips/include/asm/config.h +++ b/arch/mips/include/asm/config.h @@ -7,4 +7,7 @@  #ifndef _ASM_CONFIG_H_  #define _ASM_CONFIG_H_ +#define CONFIG_LMB +#define CONFIG_SYS_BOOT_RAMDISK_HIGH +  #endif diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile index e9f82f711..f91406c06 100644 --- a/arch/mips/lib/Makefile +++ b/arch/mips/lib/Makefile @@ -19,11 +19,7 @@ LGOBJS	:= $(addprefix $(obj),$(GLSOBJS))  SOBJS-y	+=  COBJS-y	+= board.o -ifeq ($(CONFIG_QEMU_MIPS),y) -COBJS-$(CONFIG_CMD_BOOTM) += bootm_qemu_mips.o -else  COBJS-$(CONFIG_CMD_BOOTM) += bootm.o -endif  SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)  OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y)) diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index ade9af47e..66340ea47 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -17,23 +17,148 @@ DECLARE_GLOBAL_DATA_PTR;  #define	LINUX_MAX_ENVS		256  #define	LINUX_MAX_ARGS		256 +#if defined(CONFIG_QEMU_MALTA) +#define mips_boot_qemu_malta	1 +#else +#define mips_boot_qemu_malta	0 +#endif +  static int linux_argc;  static char **linux_argv; +static char *linux_argp;  static char **linux_env;  static char *linux_env_p;  static int linux_env_idx; -static void linux_params_init(ulong start, char *commandline); -static void linux_env_set(char *env_name, char *env_val); +static ulong arch_get_sp(void) +{ +	ulong ret; + +	__asm__ __volatile__("move %0, $sp" : "=r"(ret) : ); + +	return ret; +} + +void arch_lmb_reserve(struct lmb *lmb) +{ +	ulong sp; + +	sp = arch_get_sp(); +	debug("## Current stack ends at 0x%08lx\n", sp); + +	/* adjust sp by 4K to be safe */ +	sp -= 4096; +	lmb_reserve(lmb, sp, CONFIG_SYS_SDRAM_BASE + gd->ram_size - sp); +} + +static void linux_cmdline_init(void) +{ +	linux_argc = 1; +	linux_argv = (char **)UNCACHED_SDRAM(gd->bd->bi_boot_params); +	linux_argv[0] = 0; +	linux_argp = (char *)(linux_argv + LINUX_MAX_ARGS); +} + +static void linux_cmdline_set(const char *value, size_t len) +{ +	linux_argv[linux_argc] = linux_argp; +	memcpy(linux_argp, value, len); +	linux_argp[len] = 0; + +	linux_argp += len + 1; +	linux_argc++; +} + +static void linux_cmdline_dump(void) +{ +	int i; + +	debug("## cmdline argv at 0x%p, argp at 0x%p\n", +	      linux_argv, linux_argp); + +	for (i = 1; i < linux_argc; i++) +		debug("   arg %03d: %s\n", i, linux_argv[i]); +} + +static void boot_cmdline_linux(bootm_headers_t *images) +{ +	const char *bootargs, *next, *quote; + +	linux_cmdline_init(); + +	bootargs = getenv("bootargs"); +	if (!bootargs) +		return; + +	next = bootargs; + +	while (bootargs && *bootargs && linux_argc < LINUX_MAX_ARGS) { +		quote = strchr(bootargs, '"'); +		next = strchr(bootargs, ' '); + +		while (next && quote && quote < next) { +			/* +			 * we found a left quote before the next blank +			 * now we have to find the matching right quote +			 */ +			next = strchr(quote + 1, '"'); +			if (next) { +				quote = strchr(next + 1, '"'); +				next = strchr(next + 1, ' '); +			} +		} + +		if (!next) +			next = bootargs + strlen(bootargs); + +		linux_cmdline_set(bootargs, next - bootargs); + +		if (*next) +			next++; + +		bootargs = next; +	} + +	linux_cmdline_dump(); +} + +static void linux_env_init(void) +{ +	linux_env = (char **)(((ulong) linux_argp + 15) & ~15); +	linux_env[0] = 0; +	linux_env_p = (char *)(linux_env + LINUX_MAX_ENVS); +	linux_env_idx = 0; +} + +static void linux_env_set(const char *env_name, const char *env_val) +{ +	if (linux_env_idx < LINUX_MAX_ENVS - 1) { +		linux_env[linux_env_idx] = linux_env_p; + +		strcpy(linux_env_p, env_name); +		linux_env_p += strlen(env_name); + +		if (mips_boot_qemu_malta) { +			linux_env_p++; +			linux_env[++linux_env_idx] = linux_env_p; +		} else { +			*linux_env_p++ = '='; +		} + +		strcpy(linux_env_p, env_val); +		linux_env_p += strlen(env_val); + +		linux_env_p++; +		linux_env[++linux_env_idx] = 0; +	} +}  static void boot_prep_linux(bootm_headers_t *images)  { -	char *commandline = getenv("bootargs");  	char env_buf[12]; -	char *cp; - -	linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline); +	const char *cp; +	ulong rd_start, rd_size;  #ifdef CONFIG_MEMSIZE_IN_BYTES  	sprintf(env_buf, "%lu", (ulong)gd->ram_size); @@ -41,15 +166,20 @@ static void boot_prep_linux(bootm_headers_t *images)  #else  	sprintf(env_buf, "%lu", (ulong)(gd->ram_size >> 20));  	debug("## Giving linux memsize in MB, %lu\n", -		(ulong)(gd->ram_size >> 20)); +	      (ulong)(gd->ram_size >> 20));  #endif /* CONFIG_MEMSIZE_IN_BYTES */ +	rd_start = UNCACHED_SDRAM(images->initrd_start); +	rd_size = images->initrd_end - images->initrd_start; + +	linux_env_init(); +  	linux_env_set("memsize", env_buf); -	sprintf(env_buf, "0x%08X", (uint) UNCACHED_SDRAM(images->rd_start)); +	sprintf(env_buf, "0x%08lX", rd_start);  	linux_env_set("initrd_start", env_buf); -	sprintf(env_buf, "0x%X", (uint) (images->rd_end - images->rd_start)); +	sprintf(env_buf, "0x%lX", rd_size);  	linux_env_set("initrd_size", env_buf);  	sprintf(env_buf, "0x%08X", (uint) (gd->bd->bi_flashstart)); @@ -65,33 +195,42 @@ static void boot_prep_linux(bootm_headers_t *images)  	cp = getenv("eth1addr");  	if (cp)  		linux_env_set("eth1addr", cp); + +	if (mips_boot_qemu_malta) +		linux_env_set("modetty0", "38400n8r");  }  static void boot_jump_linux(bootm_headers_t *images)  { -	void (*theKernel) (int, char **, char **, int *); - -	/* find kernel entry point */ -	theKernel = (void (*)(int, char **, char **, int *))images->ep; +	typedef void __noreturn (*kernel_entry_t)(int, ulong, ulong, ulong); +	kernel_entry_t kernel = (kernel_entry_t) images->ep; +	ulong linux_extra = 0; -	debug("## Transferring control to Linux (at address %08lx) ...\n", -		(ulong) theKernel); +	debug("## Transferring control to Linux (at address %p) ...\n", kernel);  	bootstage_mark(BOOTSTAGE_ID_RUN_OS); +	if (mips_boot_qemu_malta) +		linux_extra = gd->ram_size; +  	/* we assume that the kernel is in place */  	printf("\nStarting kernel ...\n\n"); -	theKernel(linux_argc, linux_argv, linux_env, 0); +	kernel(linux_argc, (ulong)linux_argv, (ulong)linux_env, linux_extra);  }  int do_bootm_linux(int flag, int argc, char * const argv[],  			bootm_headers_t *images)  {  	/* No need for those on MIPS */ -	if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE) +	if (flag & BOOTM_STATE_OS_BD_T)  		return -1; +	if (flag & BOOTM_STATE_OS_CMDLINE) { +		boot_cmdline_linux(images); +		return 0; +	} +  	if (flag & BOOTM_STATE_OS_PREP) {  		boot_prep_linux(images);  		return 0; @@ -102,76 +241,10 @@ int do_bootm_linux(int flag, int argc, char * const argv[],  		return 0;  	} +	boot_cmdline_linux(images);  	boot_prep_linux(images);  	boot_jump_linux(images);  	/* does not return */  	return 1;  } - -static void linux_params_init(ulong start, char *line) -{ -	char *next, *quote, *argp; - -	linux_argc = 1; -	linux_argv = (char **) start; -	linux_argv[0] = 0; -	argp = (char *) (linux_argv + LINUX_MAX_ARGS); - -	next = line; - -	while (line && *line && linux_argc < LINUX_MAX_ARGS) { -		quote = strchr(line, '"'); -		next = strchr(line, ' '); - -		while (next && quote && quote < next) { -			/* we found a left quote before the next blank -			 * now we have to find the matching right quote -			 */ -			next = strchr(quote + 1, '"'); -			if (next) { -				quote = strchr(next + 1, '"'); -				next = strchr(next + 1, ' '); -			} -		} - -		if (!next) -			next = line + strlen(line); - -		linux_argv[linux_argc] = argp; -		memcpy(argp, line, next - line); -		argp[next - line] = 0; - -		argp += next - line + 1; -		linux_argc++; - -		if (*next) -			next++; - -		line = next; -	} - -	linux_env = (char **) (((ulong) argp + 15) & ~15); -	linux_env[0] = 0; -	linux_env_p = (char *) (linux_env + LINUX_MAX_ENVS); -	linux_env_idx = 0; -} - -static void linux_env_set(char *env_name, char *env_val) -{ -	if (linux_env_idx < LINUX_MAX_ENVS - 1) { -		linux_env[linux_env_idx] = linux_env_p; - -		strcpy(linux_env_p, env_name); -		linux_env_p += strlen(env_name); - -		strcpy(linux_env_p, "="); -		linux_env_p += 1; - -		strcpy(linux_env_p, env_val); -		linux_env_p += strlen(env_val); - -		linux_env_p++; -		linux_env[++linux_env_idx] = 0; -	} -} diff --git a/arch/mips/lib/bootm_qemu_mips.c b/arch/mips/lib/bootm_qemu_mips.c deleted file mode 100644 index 910ab7363..000000000 --- a/arch/mips/lib/bootm_qemu_mips.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * (C) Copyright 2008 - * Jean-Christophe PLAGNIOL-VILLARD <jcplagniol@jcrosoft.com> - * - * SPDX-License-Identifier:	GPL-2.0+ - */ - -#include <common.h> -#include <command.h> -#include <image.h> -#include <asm/byteorder.h> -#include <asm/addrspace.h> - -DECLARE_GLOBAL_DATA_PTR; - -int do_bootm_linux(int flag, int argc, char * const argv[], -			bootm_headers_t *images) -{ -	void (*theKernel) (int, char **, char **, int *); -	char *bootargs = getenv("bootargs"); -	char *start; -	uint len; - -	/* find kernel entry point */ -	theKernel = (void (*)(int, char **, char **, int *))images->ep; - -	bootstage_mark(BOOTSTAGE_ID_RUN_OS); - -	debug("## Transferring control to Linux (at address %08lx) ...\n", -		(ulong) theKernel); - -	gd->bd->bi_boot_params = gd->bd->bi_memstart + (16 << 20) - 256; -	debug("%-12s= 0x%08lX\n", "boot_params", (ulong)gd->bd->bi_boot_params); - -	/* set Magic */ -	*(int32_t *)(gd->bd->bi_boot_params - 4) = 0x12345678; -	/* set ram_size */ -	*(int32_t *)(gd->bd->bi_boot_params - 8) = gd->ram_size; - -	start = (char *)gd->bd->bi_boot_params; - -	len = strlen(bootargs); - -	strncpy(start, bootargs, len + 1); - -	start += len; - -	len = images->rd_end - images->rd_start; -	if (len > 0) { -		start += sprintf(start, " rd_start=0x%08X rd_size=0x%0X", -		(uint) UNCACHED_SDRAM(images->rd_start), -		(uint) len); -	} - -	/* we assume that the kernel is in place */ -	printf("\nStarting kernel ...\n\n"); - -	theKernel(0, NULL, NULL, 0); - -	/* does not return */ -	return 1; -} diff --git a/arch/nds32/include/asm/dma-mapping.h b/arch/nds32/include/asm/dma-mapping.h new file mode 100644 index 000000000..25e5a1b6e --- /dev/null +++ b/arch/nds32/include/asm/dma-mapping.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2013 Andes Technology Corporation + * Ken Kuo, Andes Technology Corporation <ken_kuo@andestech.com> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ +#ifndef __ASM_NDS_DMA_MAPPING_H +#define __ASM_NDS_DMA_MAPPING_H + +enum dma_data_direction { +	DMA_BIDIRECTIONAL	= 0, +	DMA_TO_DEVICE		= 1, +	DMA_FROM_DEVICE		= 2, +}; + +static void *dma_alloc_coherent(size_t len, unsigned long *handle) +{ +	*handle = (unsigned long)memalign(ARCH_DMA_MINALIGN, len); +	return (void *)*handle; +} + +static inline unsigned long dma_map_single(volatile void *vaddr, size_t len, +					   enum dma_data_direction dir) +{ +	return (unsigned long)vaddr; +} + +static inline void dma_unmap_single(volatile void *vaddr, size_t len, +				    unsigned long paddr) +{ +} + +#endif /* __ASM_NDS_DMA_MAPPING_H */ diff --git a/arch/powerpc/cpu/mpc8xx/video.c b/arch/powerpc/cpu/mpc8xx/video.c index 02cd0debc..02a046789 100644 --- a/arch/powerpc/cpu/mpc8xx/video.c +++ b/arch/powerpc/cpu/mpc8xx/video.c @@ -109,7 +109,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/board/AndesTech/adp-ag102/Makefile b/board/AndesTech/adp-ag102/Makefile index ec67dd04b..6c187190b 100644 --- a/board/AndesTech/adp-ag102/Makefile +++ b/board/AndesTech/adp-ag102/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(BOARD).o -COBJS	:= adp-ag102.o +COBJS-y	:= adp-ag102.o  SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)  OBJS	:= $(addprefix $(obj),$(COBJS-y) $(SOBJS-y)) diff --git a/board/a3m071/README b/board/a3m071/README index a0fe832fb..112c47b60 100644 --- a/board/a3m071/README +++ b/board/a3m071/README @@ -57,13 +57,13 @@ the following command:  => fdt print  5. Save fdt to NOR flash: -=> erase fc060000 fc07ffff -=> cp.b 1800000 fc060000 10000 +=> erase fc180000 fc07ffff +=> cp.b 1800000 fc180000 10000  All this can be integrated into an environment command: -=> setenv upd_fdt 'tftp 1800000 a3m071/a3m071.dtb;run mtdargs addip2 addtty; \ -	fdt addr 1800000;fdt boardsetup;fdt chosen;erase fc060000 fc07ffff; \ -	cp.b 1800000 fc060000 10000' +=> setenv upd_fdt 'tftp 1800000 a3m071/a3m071.dtb;run mtdargs addip addtty; \ +	fdt addr 1800000;fdt boardsetup;fdt chosen;erase fc180000 fc07ffff; \ +	cp.b 1800000 fc180000 10000'  => saveenv  After this, only "run upd_fdt" needs to get called to load, patch diff --git a/board/davinci/ea20/ea20.c b/board/davinci/ea20/ea20.c index c78699779..c4444c7c7 100644 --- a/board/davinci/ea20/ea20.c +++ b/board/davinci/ea20/ea20.c @@ -24,7 +24,7 @@  #include <asm/io.h>  #include <asm/arch/davinci_misc.h>  #include <asm/gpio.h> -#include <asm/arch/da8xx-fb.h> +#include "../../../drivers/video/da8xx-fb.h"  DECLARE_GLOBAL_DATA_PTR; @@ -43,6 +43,30 @@ static const struct da8xx_panel lcd_panel = {  	.invert_pxl_clk = 0,  }; +static const struct display_panel disp_panel = { +	QVGA, +	16, +	16, +	COLOR_ACTIVE, +}; + +static const struct lcd_ctrl_config lcd_cfg = { +	&disp_panel, +	.ac_bias		= 255, +	.ac_bias_intrpt		= 0, +	.dma_burst_sz		= 16, +	.bpp			= 16, +	.fdd			= 255, +	.tft_alt_mode		= 0, +	.stn_565_mode		= 0, +	.mono_8bit_mode		= 0, +	.invert_line_clock	= 1, +	.invert_frm_clock	= 1, +	.sync_edge		= 0, +	.sync_ctrl		= 1, +	.raster_order		= 0, +}; +  /* SPI0 pin muxer settings */  static const struct pinmux_config spi1_pins[] = {  	{ pinmux(5), 1, 1 }, @@ -259,7 +283,7 @@ int board_init(void)  	/* address of boot parameters */  	gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR; -	da8xx_video_init(&lcd_panel, 16); +	da8xx_video_init(&lcd_panel, &lcd_cfg, 16);  	return 0;  } diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c index 4bb140e29..c173f0cc5 100644 --- a/board/xilinx/zynq/board.c +++ b/board/xilinx/zynq/board.c @@ -20,6 +20,7 @@ Xilinx_desc fpga010 = XILINX_XC7Z010_DESC(0x10);  Xilinx_desc fpga020 = XILINX_XC7Z020_DESC(0x20);  Xilinx_desc fpga030 = XILINX_XC7Z030_DESC(0x30);  Xilinx_desc fpga045 = XILINX_XC7Z045_DESC(0x45); +Xilinx_desc fpga100 = XILINX_XC7Z100_DESC(0x100);  #endif  int board_init(void) @@ -42,6 +43,9 @@ int board_init(void)  	case XILINX_ZYNQ_7045:  		fpga = fpga045;  		break; +	case XILINX_ZYNQ_7100: +		fpga = fpga100; +		break;  	}  #endif diff --git a/common/cmd_sf.c b/common/cmd_sf.c index 19b0dc9f4..4af0f0af2 100644 --- a/common/cmd_sf.c +++ b/common/cmd_sf.c @@ -151,16 +151,17 @@ static const char *spi_flash_update_block(struct spi_flash *flash, u32 offset,  		size_t len, const char *buf, char *cmp_buf, size_t *skipped)  {  	debug("offset=%#x, sector_size=%#x, len=%#zx\n", -		offset, flash->sector_size, len); +	      offset, flash->sector_size, len);  	if (spi_flash_read(flash, offset, len, cmp_buf))  		return "read";  	if (memcmp(cmp_buf, buf, len) == 0) {  		debug("Skip region %x size %zx: no change\n", -			offset, len); +		      offset, len);  		*skipped += len;  		return NULL;  	} -	if (spi_flash_erase(flash, offset, len)) +	/* Erase the entire sector */ +	if (spi_flash_erase(flash, offset, flash->sector_size))  		return "erase";  	if (spi_flash_write(flash, offset, len, buf))  		return "write"; @@ -200,7 +201,7 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,  			todo = min(end - buf, flash->sector_size);  			if (get_timer(last_update) > 100) {  				printf("   \rUpdating, %zu%% %lu B/s", -					100 - (end - buf) / scale, +				       100 - (end - buf) / scale,  					bytes_per_second(buf - start_buf,  							 start_time));  				last_update = get_timer(0); @@ -220,9 +221,9 @@ static int spi_flash_update(struct spi_flash *flash, u32 offset,  	delta = get_timer(start_time);  	printf("%zu bytes written, %zu bytes skipped", len - skipped, -		skipped); +	       skipped);  	printf(" in %ld.%lds, speed %ld B/s\n", -		delta / 1000, delta % 1000, bytes_per_second(len, start_time)); +	       delta / 1000, delta % 1000, bytes_per_second(len, start_time));  	return 0;  } @@ -252,7 +253,7 @@ static int do_spi_flash_read_write(int argc, char * const argv[])  	/* Consistency checking */  	if (offset + len > flash->size) {  		printf("ERROR: attempting %s past flash size (%#x)\n", -			argv[0], flash->size); +		       argv[0], flash->size);  		return 1;  	} @@ -262,9 +263,9 @@ static int do_spi_flash_read_write(int argc, char * const argv[])  		return 1;  	} -	if (strcmp(argv[0], "update") == 0) +	if (strcmp(argv[0], "update") == 0) {  		ret = spi_flash_update(flash, offset, len, buf); -	else if (strncmp(argv[0], "read", 4) == 0 || +	} else if (strncmp(argv[0], "read", 4) == 0 ||  			strncmp(argv[0], "write", 5) == 0) {  		int read; @@ -275,7 +276,7 @@ static int do_spi_flash_read_write(int argc, char * const argv[])  			ret = spi_flash_write(flash, offset, len, buf);  		printf("SF: %zu bytes @ %#x %s: %s\n", (size_t)len, (u32)offset, -			read ? "Read" : "Written", ret ? "ERROR" : "OK"); +		       read ? "Read" : "Written", ret ? "ERROR" : "OK");  	}  	unmap_physmem(buf, len); @@ -304,13 +305,13 @@ static int do_spi_flash_erase(int argc, char * const argv[])  	/* Consistency checking */  	if (offset + len > flash->size) {  		printf("ERROR: attempting %s past flash size (%#x)\n", -			argv[0], flash->size); +		       argv[0], flash->size);  		return 1;  	}  	ret = spi_flash_erase(flash, offset, len);  	printf("SF: %zu bytes @ %#x Erased: %s\n", (size_t)len, (u32)offset, -			ret ? "ERROR" : "OK"); +	       ret ? "ERROR" : "OK");  	return ret == 0 ? 0 : 1;  } @@ -470,7 +471,8 @@ static int do_spi_flash_test(int argc, char * const argv[])  }  #endif /* CONFIG_CMD_SF_TEST */ -static int do_spi_flash(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +static int do_spi_flash(cmd_tbl_t *cmdtp, int flag, int argc, +			char * const argv[])  {  	const char *cmd;  	int ret; @@ -526,7 +528,7 @@ U_BOOT_CMD(  	"SPI flash sub-system",  	"probe [[bus:]cs] [hz] [mode]	- init flash device on given SPI bus\n"  	"				  and chip select\n" -	"sf read addr offset len 	- read `len' bytes starting at\n" +	"sf read addr offset len	- read `len' bytes starting at\n"  	"				  `offset' to memory at `addr'\n"  	"sf write addr offset len	- write `len' bytes from memory\n"  	"				  at `addr' to flash at `offset'\n" diff --git a/common/env_sf.c b/common/env_sf.c index e3e1897cc..9f806fb09 100644 --- a/common/env_sf.c +++ b/common/env_sf.c @@ -7,7 +7,7 @@   *   * (C) Copyright 2008 Atmel Corporation   * - * SPDX-License-Identifier:	GPL-2.0+  + * SPDX-License-Identifier:	GPL-2.0+   */  #include <common.h>  #include <environment.h> diff --git a/common/lcd.c b/common/lcd.c index 8d5c63c29..990650c7e 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -51,7 +51,6 @@  /* ** FONT DATA								*/  /************************************************************************/  #include <video_font.h>		/* Get font data, width and height	*/ -#include <video_font_data.h>  /************************************************************************/  /* ** LOGO DATA								*/ diff --git a/drivers/dma/apbh_dma.c b/drivers/dma/apbh_dma.c index 96d4c9bb1..22defcd7d 100644 --- a/drivers/dma/apbh_dma.c +++ b/drivers/dma/apbh_dma.c @@ -545,6 +545,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) diff --git a/drivers/fpga/zynqpl.c b/drivers/fpga/zynqpl.c index 8cc16fd2c..14363c9a5 100644 --- a/drivers/fpga/zynqpl.c +++ b/drivers/fpga/zynqpl.c @@ -23,6 +23,7 @@  #define DEVCFG_STATUS_DMA_CMD_Q_E	0x40000000  #define DEVCFG_STATUS_DMA_DONE_CNT_MASK	0x30000000  #define DEVCFG_STATUS_PCFG_INIT		0x00000010 +#define DEVCFG_MCTRL_PCAP_LPBK		0x00000010  #define DEVCFG_MCTRL_RFIFO_FLUSH	0x00000002  #define DEVCFG_MCTRL_WFIFO_FLUSH	0x00000001 @@ -31,7 +32,7 @@  #endif  #ifndef CONFIG_SYS_FPGA_PROG_TIME -#define CONFIG_SYS_FPGA_PROG_TIME CONFIG_SYS_HZ	/* 1 s */ +#define CONFIG_SYS_FPGA_PROG_TIME	(CONFIG_SYS_HZ * 4) /* 4 s */  #endif  int zynq_info(Xilinx_desc *desc) @@ -200,6 +201,9 @@ int zynq_load(Xilinx_desc *desc, const void *buf, size_t bsize)  		swap = SWAP_DONE;  	} +	/* Clear loopback bit */ +	clrbits_le32(&devcfg_base->mctrl, DEVCFG_MCTRL_PCAP_LPBK); +  	if (!partialbit) {  		zynq_slcr_devcfg_disable(); diff --git a/drivers/mtd/spi/atmel.c b/drivers/mtd/spi/atmel.c index 6a92c4b77..f34df43f5 100644 --- a/drivers/mtd/spi/atmel.c +++ b/drivers/mtd/spi/atmel.c @@ -252,7 +252,7 @@ static int dataflash_write_p2(struct spi_flash *flash,  	}  	debug("SF: AT45: Successfully programmed %zu bytes @ 0x%x\n", -			len, offset); +	      len, offset);  	ret = 0;  out: @@ -325,7 +325,7 @@ static int dataflash_write_at45(struct spi_flash *flash,  	}  	debug("SF: AT45: Successfully programmed %zu bytes @ 0x%x\n", -			len, offset); +	      len, offset);  	ret = 0;  out: @@ -387,7 +387,7 @@ static int dataflash_erase_p2(struct spi_flash *flash, u32 offset, size_t len)  	}  	debug("SF: AT45: Successfully erased %zu bytes @ 0x%x\n", -			len, offset); +	      len, offset);  	ret = 0;  out: @@ -450,7 +450,7 @@ static int dataflash_erase_at45(struct spi_flash *flash, u32 offset, size_t len)  	}  	debug("SF: AT45: Successfully erased %zu bytes @ 0x%x\n", -			len, offset); +	      len, offset);  	ret = 0;  out: @@ -476,7 +476,7 @@ struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode)  	if (i == ARRAY_SIZE(atmel_spi_flash_table)) {  		debug("SF: Unsupported DataFlash ID %02x\n", -				idcode[1]); +		      idcode[1]);  		return NULL;  	} diff --git a/drivers/mtd/spi/eon.c b/drivers/mtd/spi/eon.c index b16e7ab09..25cfc1252 100644 --- a/drivers/mtd/spi/eon.c +++ b/drivers/mtd/spi/eon.c @@ -54,8 +54,7 @@ struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode)  	flash->page_size = 256;  	flash->sector_size = 256 * 16 * 16; -	flash->size = 256 * 16 -	    * params->nr_sectors; +	flash->size = 256 * 16 * params->nr_sectors;  	return flash;  } diff --git a/drivers/mtd/spi/gigadevice.c b/drivers/mtd/spi/gigadevice.c index 950c7770a..b42581a70 100644 --- a/drivers/mtd/spi/gigadevice.c +++ b/drivers/mtd/spi/gigadevice.c @@ -45,7 +45,7 @@ struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode)  	if (i == ARRAY_SIZE(gigadevice_spi_flash_table)) {  		debug("SF: Unsupported Gigadevice ID %02x%02x\n", -				idcode[1], idcode[2]); +		      idcode[1], idcode[2]);  		return NULL;  	} diff --git a/drivers/mtd/spi/ramtron.c b/drivers/mtd/spi/ramtron.c index f67ddd696..38f9d6916 100644 --- a/drivers/mtd/spi/ramtron.c +++ b/drivers/mtd/spi/ramtron.c @@ -230,7 +230,8 @@ struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode)  		/* JEDEC conformant RAMTRON id */  		for (i = 0; i < ARRAY_SIZE(ramtron_spi_fram_table); i++) {  			params = &ramtron_spi_fram_table[i]; -			if (idcode[1] == params->id1 && idcode[2] == params->id2) +			if (idcode[1] == params->id1 && +			    idcode[2] == params->id2)  				goto found;  		}  		break; @@ -251,7 +252,8 @@ struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode)  		/* now find the device */  		for (i = 0; i < ARRAY_SIZE(ramtron_spi_fram_table); i++) {  			params = &ramtron_spi_fram_table[i]; -			if (!strcmp(params->name, CONFIG_SPI_FRAM_RAMTRON_NON_JEDEC)) +			if (!strcmp(params->name, +				    CONFIG_SPI_FRAM_RAMTRON_NON_JEDEC))  				goto found;  		}  		debug("SF: Unsupported non-JEDEC RAMTRON device " @@ -264,7 +266,7 @@ struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode)  	/* arriving here means no method has found a device we can handle */  	debug("SF/ramtron: unsupported device id0=%02x id1=%02x id2=%02x\n", -		idcode[0], idcode[1], idcode[2]); +	      idcode[0], idcode[1], idcode[2]);  	return NULL;  found: diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index 47a48976b..fa7ac8c93 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -6,7 +6,7 @@   * TsiChung Liew (Tsi-Chung.Liew@freescale.com),   * and  Jason McMullan (mcmullan@netapp.com)   * - * SPDX-License-Identifier:	GPL-2.0+  + * SPDX-License-Identifier:	GPL-2.0+   */  #include <common.h> @@ -122,7 +122,8 @@ struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode)  	}  	if (i == ARRAY_SIZE(spansion_spi_flash_table)) { -		debug("SF: Unsupported SPANSION ID %04x %04x\n", jedec, ext_jedec); +		debug("SF: Unsupported SPANSION ID %04x %04x\n", +		      jedec, ext_jedec);  		return NULL;  	} diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 6a6fe37e0..9814395b9 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -40,12 +40,13 @@ static int spi_flash_read_write(struct spi_slave *spi,  	ret = spi_xfer(spi, cmd_len * 8, cmd, NULL, flags);  	if (ret) {  		debug("SF: Failed to send command (%zu bytes): %d\n", -				cmd_len, ret); +		      cmd_len, ret);  	} else if (data_len != 0) { -		ret = spi_xfer(spi, data_len * 8, data_out, data_in, SPI_XFER_END); +		ret = spi_xfer(spi, data_len * 8, data_out, data_in, +					SPI_XFER_END);  		if (ret)  			debug("SF: Failed to transfer %zu bytes of data: %d\n", -					data_len, ret); +			      data_len, ret);  	}  	return ret; @@ -86,7 +87,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout)  	ret = spi_xfer(spi, 8, &cmd, NULL, SPI_XFER_BEGIN);  	if (ret) {  		debug("SF: fail to read %s status register\n", -			cmd == CMD_READ_STATUS ? "read" : "flag"); +		      cmd == CMD_READ_STATUS ? "read" : "flag");  		return ret;  	} @@ -144,7 +145,7 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd,  	ret = spi_flash_cmd_wait_ready(flash, timeout);  	if (ret < 0) {  		debug("SF: write %s timed out\n", -			timeout == SPI_FLASH_PROG_TIMEOUT ? +		      timeout == SPI_FLASH_PROG_TIMEOUT ?  			"program" : "page erase");  		return ret;  	} diff --git a/drivers/mtd/spi/spi_spl_load.c b/drivers/mtd/spi/spi_spl_load.c index 7c799ca48..29355307f 100644 --- a/drivers/mtd/spi/spi_spl_load.c +++ b/drivers/mtd/spi/spi_spl_load.c @@ -39,7 +39,7 @@ void spl_spi_load_image(void)  	/* Load u-boot, mkimage header is 64 bytes. */  	spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS, 0x40, -			(void *) header); +		       (void *)header);  	spl_parse_image_header(header);  	spi_flash_read(flash, CONFIG_SYS_SPI_U_BOOT_OFFS,  		       spl_image.size, (void *)spl_image.load_addr); diff --git a/drivers/mtd/spi/sst.c b/drivers/mtd/spi/sst.c index 95f5490c3..256867c84 100644 --- a/drivers/mtd/spi/sst.c +++ b/drivers/mtd/spi/sst.c @@ -19,7 +19,7 @@  #include "spi_flash_internal.h"  #define CMD_SST_BP		0x02	/* Byte Program */ -#define CMD_SST_AAI_WP		0xAD	/* Auto Address Increment Word Program */ +#define CMD_SST_AAI_WP		0xAD	/* Auto Address Incr Word Program */  #define SST_SR_WIP		(1 << 0)	/* Write-in-Progress */  #define SST_SR_WEL		(1 << 1)	/* Write enable */ @@ -50,47 +50,61 @@ static const struct sst_spi_flash_params sst_spi_flash_table[] = {  		.flags = SST_FEAT_WP,  		.nr_sectors = 128,  		.name = "SST25VF040B", -	},{ +	}, +	{  		.idcode1 = 0x8e,  		.flags = SST_FEAT_WP,  		.nr_sectors = 256,  		.name = "SST25VF080B", -	},{ +	}, +	{  		.idcode1 = 0x41,  		.flags = SST_FEAT_WP,  		.nr_sectors = 512,  		.name = "SST25VF016B", -	},{ +	}, +	{  		.idcode1 = 0x4a,  		.flags = SST_FEAT_WP,  		.nr_sectors = 1024,  		.name = "SST25VF032B", -	},{ +	}, +	{  		.idcode1 = 0x4b,  		.flags = SST_FEAT_MBP,  		.nr_sectors = 2048,  		.name = "SST25VF064C", -	},{ +	}, +	{  		.idcode1 = 0x01,  		.flags = SST_FEAT_WP,  		.nr_sectors = 16,  		.name = "SST25WF512", -	},{ +	}, +	{  		.idcode1 = 0x02,  		.flags = SST_FEAT_WP,  		.nr_sectors = 32,  		.name = "SST25WF010", -	},{ +	}, +	{  		.idcode1 = 0x03,  		.flags = SST_FEAT_WP,  		.nr_sectors = 64,  		.name = "SST25WF020", -	},{ +	}, +	{  		.idcode1 = 0x04,  		.flags = SST_FEAT_WP,  		.nr_sectors = 128,  		.name = "SST25WF040",  	}, +	{ +		.idcode1 = 0x05, +		.flags = SST_FEAT_WP, +		.nr_sectors = 256, +		.name = "SST25WF080", +	},  };  static int @@ -105,7 +119,7 @@ sst_byte_write(struct spi_flash *flash, u32 offset, const void *buf)  	};  	debug("BP[%02x]: 0x%p => cmd = { 0x%02x 0x%06x }\n", -		spi_w8r8(flash->spi, CMD_READ_STATUS), buf, cmd[0], offset); +	      spi_w8r8(flash->spi, CMD_READ_STATUS), buf, cmd[0], offset);  	ret = spi_flash_cmd_write_enable(flash);  	if (ret) @@ -152,11 +166,11 @@ sst_write_wp(struct spi_flash *flash, u32 offset, size_t len, const void *buf)  	for (; actual < len - 1; actual += 2) {  		debug("WP[%02x]: 0x%p => cmd = { 0x%02x 0x%06x }\n", -		     spi_w8r8(flash->spi, CMD_READ_STATUS), buf + actual, cmd[0], -		     offset); +		      spi_w8r8(flash->spi, CMD_READ_STATUS), buf + actual, +		      cmd[0], offset);  		ret = spi_flash_cmd_write(flash->spi, cmd, cmd_len, -		                          buf + actual, 2); +					buf + actual, 2);  		if (ret) {  			debug("SF: sst word program failed\n");  			break; diff --git a/drivers/mtd/spi/stmicro.c b/drivers/mtd/spi/stmicro.c index 0ca00f158..c5fa64e37 100644 --- a/drivers/mtd/spi/stmicro.c +++ b/drivers/mtd/spi/stmicro.c @@ -8,7 +8,7 @@   * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.   * TsiChung Liew (Tsi-Chung.Liew@freescale.com)   * - * SPDX-License-Identifier:	GPL-2.0+  + * SPDX-License-Identifier:	GPL-2.0+   */  #include <common.h> @@ -18,7 +18,7 @@  #include "spi_flash_internal.h"  /* M25Pxx-specific commands */ -#define CMD_M25PXX_RES		0xab	/* Release from DP, and Read Signature */ +#define CMD_M25PXX_RES	0xab	/* Release from DP, and Read Signature */  struct stmicro_spi_flash_params {  	u16 id; @@ -150,7 +150,7 @@ static const struct stmicro_spi_flash_params stmicro_spi_flash_table[] = {  	},  }; -struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode) +struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 *idcode)  {  	const struct stmicro_spi_flash_params *params;  	struct spi_flash *flash; @@ -166,17 +166,17 @@ struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 * idcode)  			idcode[0] = 0x20;  			idcode[1] = 0x20;  			idcode[2] = idcode[3] + 1; -		} else +		} else {  			return NULL; +		}  	}  	id = ((idcode[1] << 8) | idcode[2]);  	for (i = 0; i < ARRAY_SIZE(stmicro_spi_flash_table); i++) {  		params = &stmicro_spi_flash_table[i]; -		if (params->id == id) { +		if (params->id == id)  			break; -		}  	}  	if (i == ARRAY_SIZE(stmicro_spi_flash_table)) { diff --git a/drivers/mtd/spi/winbond.c b/drivers/mtd/spi/winbond.c index c399bf14d..b31911a40 100644 --- a/drivers/mtd/spi/winbond.c +++ b/drivers/mtd/spi/winbond.c @@ -123,7 +123,7 @@ struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)  	if (i == ARRAY_SIZE(winbond_spi_flash_table)) {  		debug("SF: Unsupported Winbond ID %02x%02x\n", -				idcode[1], idcode[2]); +		      idcode[1], idcode[2]);  		return NULL;  	} diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index 019132e85..91d24cea5 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -39,6 +39,7 @@ COBJS-$(CONFIG_TEGRA20_SFLASH) += tegra20_sflash.o  COBJS-$(CONFIG_TEGRA20_SLINK) += tegra20_slink.o  COBJS-$(CONFIG_TEGRA114_SPI) += tegra114_spi.o  COBJS-$(CONFIG_XILINX_SPI) += xilinx_spi.o +COBJS-$(CONFIG_ZYNQ_SPI) += zynq_spi.o  COBJS	:= $(COBJS-y)  SRCS	:= $(COBJS:.o=.c) diff --git a/drivers/spi/fsl_espi.c b/drivers/spi/fsl_espi.c index fc0a58be2..c883d3cac 100644 --- a/drivers/spi/fsl_espi.c +++ b/drivers/spi/fsl_espi.c @@ -221,15 +221,13 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *data_out,  	      slave->bus, slave->cs, *(uint *) dout,  	      dout, *(uint *) din, din, len); -	num_chunks = data_len / max_tran_len + -		(data_len % max_tran_len ? 1 : 0); +	num_chunks = DIV_ROUND_UP(data_len, max_tran_len);  	while (num_chunks--) {  		if (data_in)  			din = buffer + rx_offset;  		dout = buffer;  		tran_len = min(data_len , max_tran_len); -		num_blks = (tran_len + cmd_len) / 4 + -			((tran_len + cmd_len) % 4 ? 1 : 0); +		num_blks = DIV_ROUND_UP(tran_len + cmd_len, 4);  		num_bytes = (tran_len + cmd_len) % 4;  		fsl->data_len = tran_len + cmd_len;  		spi_cs_activate(slave); diff --git a/drivers/spi/mpc8xxx_spi.c b/drivers/spi/mpc8xxx_spi.c index bbfc259e4..348361a7f 100644 --- a/drivers/spi/mpc8xxx_spi.c +++ b/drivers/spi/mpc8xxx_spi.c @@ -77,7 +77,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,  {  	volatile spi8xxx_t *spi = &((immap_t *) (CONFIG_SYS_IMMR))->spi;  	unsigned int tmpdout, tmpdin, event; -	int numBlks = bitlen / 32 + (bitlen % 32 ? 1 : 0); +	int numBlks = DIV_ROUND_UP(bitlen, 32);  	int tm, isRead = 0;  	unsigned char charSize = 32; diff --git a/drivers/spi/zynq_spi.c b/drivers/spi/zynq_spi.c new file mode 100644 index 000000000..5da87591c --- /dev/null +++ b/drivers/spi/zynq_spi.c @@ -0,0 +1,280 @@ +/* + * (C) Copyright 2013 Inc. + * + * Xilinx Zynq PS SPI controller driver (master mode only) + * + * SPDX-License-Identifier:     GPL-2.0+ + */ + +#include <config.h> +#include <common.h> +#include <malloc.h> +#include <spi.h> +#include <asm/io.h> +#include <asm/arch/hardware.h> + +/* zynq spi register bit masks ZYNQ_SPI_<REG>_<BIT>_MASK */ +#define ZYNQ_SPI_CR_MSA_MASK		(1 << 15)	/* Manual start enb */ +#define ZYNQ_SPI_CR_MCS_MASK		(1 << 14)	/* Manual chip select */ +#define ZYNQ_SPI_CR_CS_MASK		(0xF << 10)	/* Chip select */ +#define ZYNQ_SPI_CR_BRD_MASK		(0x7 << 3)	/* Baud rate div */ +#define ZYNQ_SPI_CR_CPHA_MASK		(1 << 2)	/* Clock phase */ +#define ZYNQ_SPI_CR_CPOL_MASK		(1 << 1)	/* Clock polarity */ +#define ZYNQ_SPI_CR_MSTREN_MASK		(1 << 0)	/* Mode select */ +#define ZYNQ_SPI_IXR_RXNEMPTY_MASK	(1 << 4)	/* RX_FIFO_not_empty */ +#define ZYNQ_SPI_IXR_TXOW_MASK		(1 << 2)	/* TX_FIFO_not_full */ +#define ZYNQ_SPI_IXR_ALL_MASK		0x7F		/* All IXR bits */ +#define ZYNQ_SPI_ENR_SPI_EN_MASK	(1 << 0)	/* SPI Enable */ + +#define ZYNQ_SPI_FIFO_DEPTH		128 +#ifndef CONFIG_SYS_ZYNQ_SPI_WAIT +#define CONFIG_SYS_ZYNQ_SPI_WAIT	(CONFIG_SYS_HZ/100)	/* 10 ms */ +#endif + +/* zynq spi register set */ +struct zynq_spi_regs { +	u32 cr;		/* 0x00 */ +	u32 isr;	/* 0x04 */ +	u32 ier;	/* 0x08 */ +	u32 idr;	/* 0x0C */ +	u32 imr;	/* 0x10 */ +	u32 enr;	/* 0x14 */ +	u32 dr;		/* 0x18 */ +	u32 txdr;	/* 0x1C */ +	u32 rxdr;	/* 0x20 */ +}; + +/* zynq spi slave */ +struct zynq_spi_slave { +	struct spi_slave slave; +	struct zynq_spi_regs *base; +	u8 mode; +	u8 fifo_depth; +	u32 speed_hz; +	u32 input_hz; +	u32 req_hz; +}; + +static inline struct zynq_spi_slave *to_zynq_spi_slave(struct spi_slave *slave) +{ +	return container_of(slave, struct zynq_spi_slave, slave); +} + +static inline struct zynq_spi_regs *get_zynq_spi_base(int dev) +{ +	if (dev) +		return (struct zynq_spi_regs *)ZYNQ_SPI_BASEADDR1; +	else +		return (struct zynq_spi_regs *)ZYNQ_SPI_BASEADDR0; +} + +static void zynq_spi_init_hw(struct zynq_spi_slave *zslave) +{ +	u32 confr; + +	/* Disable SPI */ +	writel(~ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr); + +	/* Disable Interrupts */ +	writel(ZYNQ_SPI_IXR_ALL_MASK, &zslave->base->idr); + +	/* Clear RX FIFO */ +	while (readl(&zslave->base->isr) & +			ZYNQ_SPI_IXR_RXNEMPTY_MASK) +		readl(&zslave->base->rxdr); + +	/* Clear Interrupts */ +	writel(ZYNQ_SPI_IXR_ALL_MASK, &zslave->base->isr); + +	/* Manual slave select and Auto start */ +	confr = ZYNQ_SPI_CR_MCS_MASK | ZYNQ_SPI_CR_CS_MASK | +		ZYNQ_SPI_CR_MSTREN_MASK; +	confr &= ~ZYNQ_SPI_CR_MSA_MASK; +	writel(confr, &zslave->base->cr); + +	/* Enable SPI */ +	writel(ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr); +} + +int spi_cs_is_valid(unsigned int bus, unsigned int cs) +{ +	/* 2 bus with 3 chipselect */ +	return bus < 2 && cs < 3; +} + +void spi_cs_activate(struct spi_slave *slave) +{ +	struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave); +	u32 cr; + +	debug("spi_cs_activate: 0x%08x\n", (u32)slave); + +	clrbits_le32(&zslave->base->cr, ZYNQ_SPI_CR_CS_MASK); +	cr = readl(&zslave->base->cr); +	/* +	 * CS cal logic: CS[13:10] +	 * xxx0	- cs0 +	 * xx01	- cs1 +	 * x011 - cs2 +	 */ +	cr |= (~(0x1 << slave->cs) << 10) & ZYNQ_SPI_CR_CS_MASK; +	writel(cr, &zslave->base->cr); +} + +void spi_cs_deactivate(struct spi_slave *slave) +{ +	struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave); + +	debug("spi_cs_deactivate: 0x%08x\n", (u32)slave); + +	setbits_le32(&zslave->base->cr, ZYNQ_SPI_CR_CS_MASK); +} + +void spi_init() +{ +	/* nothing to do */ +} + +struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, +		unsigned int max_hz, unsigned int mode) +{ +	struct zynq_spi_slave *zslave; + +	if (!spi_cs_is_valid(bus, cs)) +		return NULL; + +	zslave = spi_alloc_slave(struct zynq_spi_slave, bus, cs); +	if (!zslave) { +		printf("SPI_error: Fail to allocate zynq_spi_slave\n"); +		return NULL; +	} + +	zslave->base = get_zynq_spi_base(bus); +	zslave->mode = mode; +	zslave->fifo_depth = ZYNQ_SPI_FIFO_DEPTH; +	zslave->input_hz = 166666700; +	zslave->speed_hz = zslave->input_hz / 2; +	zslave->req_hz = max_hz; + +	/* init the zynq spi hw */ +	zynq_spi_init_hw(zslave); + +	return &zslave->slave; +} + +void spi_free_slave(struct spi_slave *slave) +{ +	struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave); + +	debug("spi_free_slave: 0x%08x\n", (u32)slave); +	free(zslave); +} + +int spi_claim_bus(struct spi_slave *slave) +{ +	struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave); +	u32 confr = 0; +	u8 baud_rate_val = 0; + +	writel(~ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr); + +	/* Set the SPI Clock phase and polarities */ +	confr = readl(&zslave->base->cr); +	confr &= ~(ZYNQ_SPI_CR_CPHA_MASK | ZYNQ_SPI_CR_CPOL_MASK); +	if (zslave->mode & SPI_CPHA) +		confr |= ZYNQ_SPI_CR_CPHA_MASK; +	if (zslave->mode & SPI_CPOL) +		confr |= ZYNQ_SPI_CR_CPOL_MASK; + +	/* Set the clock frequency */ +	if (zslave->req_hz == 0) { +		/* Set baudrate x8, if the req_hz is 0 */ +		baud_rate_val = 0x2; +	} else if (zslave->speed_hz != zslave->req_hz) { +		while ((baud_rate_val < 8) && +				((zslave->input_hz / +				(2 << baud_rate_val)) > zslave->req_hz)) +			baud_rate_val++; +		zslave->speed_hz = zslave->req_hz / (2 << baud_rate_val); +	} +	confr &= ~ZYNQ_SPI_CR_BRD_MASK; +	confr |= (baud_rate_val << 3); +	writel(confr, &zslave->base->cr); + +	writel(ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr); + +	return 0; +} + +void spi_release_bus(struct spi_slave *slave) +{ +	struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave); + +	debug("spi_release_bus: 0x%08x\n", (u32)slave); +	writel(~ZYNQ_SPI_ENR_SPI_EN_MASK, &zslave->base->enr); +} + +int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, +		void *din, unsigned long flags) +{ +	struct zynq_spi_slave *zslave = to_zynq_spi_slave(slave); +	u32 len = bitlen / 8; +	u32 tx_len = len, rx_len = len, tx_tvl; +	const u8 *tx_buf = dout; +	u8 *rx_buf = din, buf; +	u32 ts, status; + +	debug("spi_xfer: bus:%i cs:%i bitlen:%i len:%i flags:%lx\n", +	      slave->bus, slave->cs, bitlen, len, flags); + +	if (bitlen == 0) +		return -1; + +	if (bitlen % 8) { +		debug("spi_xfer: Non byte aligned SPI transfer\n"); +		return -1; +	} + +	if (flags & SPI_XFER_BEGIN) +		spi_cs_activate(slave); + +	while (rx_len > 0) { +		/* Write the data into TX FIFO - tx threshold is fifo_depth */ +		tx_tvl = 0; +		while ((tx_tvl < zslave->fifo_depth) && tx_len) { +			if (tx_buf) +				buf = *tx_buf++; +			else +				buf = 0; +			writel(buf, &zslave->base->txdr); +			tx_len--; +			tx_tvl++; +		} + +		/* Check TX FIFO completion */ +		ts = get_timer(0); +		status = readl(&zslave->base->isr); +		while (!(status & ZYNQ_SPI_IXR_TXOW_MASK)) { +			if (get_timer(ts) > CONFIG_SYS_ZYNQ_SPI_WAIT) { +				printf("spi_xfer: Timeout! TX FIFO not full\n"); +				return -1; +			} +			status = readl(&zslave->base->isr); +		} + +		/* Read the data from RX FIFO */ +		status = readl(&zslave->base->isr); +		while (status & ZYNQ_SPI_IXR_RXNEMPTY_MASK) { +			buf = readl(&zslave->base->rxdr); +			if (rx_buf) +				*rx_buf++ = buf; +			status = readl(&zslave->base->isr); +			rx_len--; +		} +	} + +	if (flags & SPI_XFER_END) +		spi_cs_deactivate(slave); + +	return 0; +} diff --git a/drivers/video/Makefile b/drivers/video/Makefile index f1fb26c18..6dee1e930 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -19,6 +19,7 @@ COBJS-$(CONFIG_EXYNOS_MIPI_DSIM) += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \  				exynos_mipi_dsi_lowlevel.o  COBJS-$(CONFIG_EXYNOS_PWM_BL) += exynos_pwm_bl.o  COBJS-$(CONFIG_FSL_DIU_FB) += fsl_diu_fb.o videomodes.o +COBJS-$(CONFIG_L5F31188) += l5f31188.o  COBJS-$(CONFIG_MPC8XX_LCD) += mpc8xx_lcd.o  COBJS-$(CONFIG_PXA_LCD) += pxa_lcd.o  COBJS-$(CONFIG_S6E8AX0) += s6e8ax0.o diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index 96ef8f9c2..fd2885573 100644 --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -197,7 +197,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> @@ -431,6 +430,16 @@ static const int video_font_draw_table32[16][4] = {  	{0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff}  }; +/* + * Implement a weak default function for boards that optionally + * need to skip the cfb initialization. + */ +__weak int board_cfb_skip(void) +{ +	/* As default, don't skip cfb init */ +	return 0; +} +  static void video_drawchars(int xx, int yy, unsigned char *s, int count)  {  	u8 *cdat, *dest, *dest0; @@ -452,6 +461,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; @@ -477,6 +490,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) ^ @@ -507,6 +524,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) ^ @@ -541,6 +562,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); @@ -576,6 +602,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; @@ -1996,6 +2026,8 @@ static void *video_logo(void)  		return video_fb_address + video_logo_height * VIDEO_LINE_LEN;  	}  #endif +	if (board_cfb_skip()) +		return 0;  	sprintf(info, " %s", version_string); @@ -2205,6 +2237,9 @@ int drv_video_init(void)  	/* Init video chip - returns with framebuffer cleared */  	skip_dev_init = (video_init() == -1); +	if (board_cfb_skip()) +		return 0; +  #if !defined(CONFIG_VGA_AS_SINGLE_DEVICE)  	debug("KBD: Keyboard init ...\n");  	skip_dev_init |= (VIDEO_KBD_INIT_FCT == -1); diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c index 373991dde..3a5f325cd 100644 --- a/drivers/video/da8xx-fb.c +++ b/drivers/video/da8xx-fb.c @@ -24,10 +24,17 @@  #include <asm/arch/hardware.h>  #include "videomodes.h" -#include <asm/arch/da8xx-fb.h> +#include "da8xx-fb.h" + +#if !defined(DA8XX_LCD_CNTL_BASE) +#define DA8XX_LCD_CNTL_BASE	DAVINCI_LCD_CNTL_BASE +#endif  #define DRIVER_NAME "da8xx_lcdc" +#define LCD_VERSION_1	1 +#define LCD_VERSION_2	2 +  /* LCD Status Register */  #define LCD_END_OF_FRAME1		(1 << 9)  #define LCD_END_OF_FRAME0		(1 << 8) @@ -42,9 +49,14 @@  #define LCD_DMA_BURST_4			0x2  #define LCD_DMA_BURST_8			0x3  #define LCD_DMA_BURST_16		0x4 -#define LCD_END_OF_FRAME_INT_ENA	(1 << 2) +#define LCD_V1_END_OF_FRAME_INT_ENA	(1 << 2) +#define LCD_V2_END_OF_FRAME0_INT_ENA	(1 << 8) +#define LCD_V2_END_OF_FRAME1_INT_ENA	(1 << 9)  #define LCD_DUAL_FRAME_BUFFER_ENABLE	(1 << 0) +#define LCD_V2_TFT_24BPP_MODE		(1 << 25) +#define LCD_V2_TFT_24BPP_UNPACK		(1 << 26) +  /* LCD Control Register */  #define LCD_CLK_DIVISOR(x)		((x) << 8)  #define LCD_RASTER_MODE			0x01 @@ -58,12 +70,20 @@  #define LCD_MONO_8BIT_MODE		(1 << 9)  #define LCD_RASTER_ORDER		(1 << 8)  #define LCD_TFT_MODE			(1 << 7) -#define LCD_UNDERFLOW_INT_ENA		(1 << 6) -#define LCD_PL_ENABLE			(1 << 4) +#define LCD_V1_UNDERFLOW_INT_ENA	(1 << 6) +#define LCD_V2_UNDERFLOW_INT_ENA	(1 << 5) +#define LCD_V1_PL_INT_ENA		(1 << 4) +#define LCD_V2_PL_INT_ENA		(1 << 6)  #define LCD_MONOCHROME_MODE		(1 << 1)  #define LCD_RASTER_ENABLE		(1 << 0)  #define LCD_TFT_ALT_ENABLE		(1 << 23)  #define LCD_STN_565_ENABLE		(1 << 24) +#define LCD_V2_DMA_CLK_EN		(1 << 2) +#define LCD_V2_LIDD_CLK_EN		(1 << 1) +#define LCD_V2_CORE_CLK_EN		(1 << 0) +#define LCD_V2_LPP_B10			26 +#define LCD_V2_TFT_24BPP_MODE		(1 << 25) +#define LCD_V2_TFT_24BPP_UNPACK		(1 << 26)  /* LCD Raster Timing 2 Register */  #define LCD_AC_BIAS_TRANSITIONS_PER_INT(x)	((x) << 16) @@ -74,6 +94,8 @@  #define LCD_INVERT_LINE_CLOCK			(1 << 21)  #define LCD_INVERT_FRAME_CLOCK			(1 << 20) +/* Clock registers available only on Version 2 */ +#define  LCD_CLK_MAIN_RESET			(1 << 3)  /* LCD Block */  struct da8xx_lcd_regs {  	u32	revid; @@ -97,6 +119,15 @@ struct da8xx_lcd_regs {  	u32	dma_frm_buf_ceiling_addr_0;  	u32	dma_frm_buf_base_addr_1;  	u32	dma_frm_buf_ceiling_addr_1; +	u32	resv1; +	u32	raw_stat; +	u32	masked_stat; +	u32	int_ena_set; +	u32	int_ena_clr; +	u32	end_of_int_ind; +	/* Clock registers available only on Version 2 */ +	u32	clk_ena; +	u32	clk_reset;  };  #define LCD_NUM_BUFFERS	1 @@ -107,6 +138,8 @@ struct da8xx_lcd_regs {  #define RIGHT_MARGIN	64  #define UPPER_MARGIN	32  #define LOWER_MARGIN	32 +#define WAIT_FOR_FRAME_DONE	true +#define NO_WAIT_FOR_FRAME_DONE	false  #define calc_fbsize() (panel.plnSizeX * panel.plnSizeY * panel.gdfBytesPP) @@ -119,6 +152,8 @@ static GraphicDevice gpanel;  static const struct da8xx_panel *lcd_panel;  static struct fb_info *da8xx_fb_info;  static int bits_x_pixel; +static unsigned int lcd_revision; +const struct lcd_ctrl_config *da8xx_lcd_cfg;  static inline unsigned int lcdc_read(u32 *addr)  { @@ -179,35 +214,24 @@ static struct fb_fix_screeninfo da8xx_fb_fix = {  	.accel = FB_ACCEL_NONE  }; -static const struct display_panel disp_panel = { -	QVGA, -	16, -	16, -	COLOR_ACTIVE, -}; - -static const struct lcd_ctrl_config lcd_cfg = { -	&disp_panel, -	.ac_bias		= 255, -	.ac_bias_intrpt		= 0, -	.dma_burst_sz		= 16, -	.bpp			= 16, -	.fdd			= 255, -	.tft_alt_mode		= 0, -	.stn_565_mode		= 0, -	.mono_8bit_mode		= 0, -	.invert_line_clock	= 1, -	.invert_frm_clock	= 1, -	.sync_edge		= 0, -	.sync_ctrl		= 1, -	.raster_order		= 0, -}; -  /* Enable the Raster Engine of the LCD Controller */  static inline void lcd_enable_raster(void)  {  	u32 reg; +	/* Put LCDC in reset for several cycles */ +	if (lcd_revision == LCD_VERSION_2) +		lcdc_write(LCD_CLK_MAIN_RESET, +			   &da8xx_fb_reg_base->clk_reset); + +	udelay(1000); +	/* Bring LCDC out of reset */ +	if (lcd_revision == LCD_VERSION_2) +		lcdc_write(0, +			   &da8xx_fb_reg_base->clk_reset); + +	udelay(1000); +  	reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl);  	if (!(reg & LCD_RASTER_ENABLE))  		lcdc_write(reg | LCD_RASTER_ENABLE, @@ -215,14 +239,40 @@ static inline void lcd_enable_raster(void)  }  /* Disable the Raster Engine of the LCD Controller */ -static inline void lcd_disable_raster(void) +static inline void lcd_disable_raster(bool wait_for_frame_done)  {  	u32 reg; +	u32 loop_cnt = 0; +	u32 stat; +	u32 i = 0; + +	if (wait_for_frame_done) +		loop_cnt = 5000;  	reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl);  	if (reg & LCD_RASTER_ENABLE)  		lcdc_write(reg & ~LCD_RASTER_ENABLE,  			&da8xx_fb_reg_base->raster_ctrl); + +	/* Wait for the current frame to complete */ +	do { +		if (lcd_revision == LCD_VERSION_1) +			stat = lcdc_read(&da8xx_fb_reg_base->stat); +		else +			stat = lcdc_read(&da8xx_fb_reg_base->raw_stat); + +		mdelay(1); +	} while (!(stat & 0x01) && (i++ < loop_cnt)); + +	if (lcd_revision == LCD_VERSION_1) +		lcdc_write(stat, &da8xx_fb_reg_base->stat); +	else +		lcdc_write(stat, &da8xx_fb_reg_base->raw_stat); + +	if ((loop_cnt != 0) && (i >= loop_cnt)) { +		printf("LCD Controller timed out\n"); +		return; +	}  }  static void lcd_blit(int load_mode, struct da8xx_fb_par *par) @@ -231,6 +281,7 @@ static void lcd_blit(int load_mode, struct da8xx_fb_par *par)  	u32 end;  	u32 reg_ras;  	u32 reg_dma; +	u32 reg_int;  	/* init reg to clear PLM (loading mode) fields */  	reg_ras = lcdc_read(&da8xx_fb_reg_base->raster_ctrl); @@ -243,7 +294,15 @@ static void lcd_blit(int load_mode, struct da8xx_fb_par *par)  		end      = par->dma_end;  		reg_ras |= LCD_PALETTE_LOAD_MODE(DATA_ONLY); -		reg_dma |= LCD_END_OF_FRAME_INT_ENA; +		if (lcd_revision == LCD_VERSION_1) { +			reg_dma |= LCD_V1_END_OF_FRAME_INT_ENA; +		} else { +			reg_int = lcdc_read(&da8xx_fb_reg_base->int_ena_set) | +				LCD_V2_END_OF_FRAME0_INT_ENA | +				LCD_V2_END_OF_FRAME1_INT_ENA | +				LCD_V2_UNDERFLOW_INT_ENA | LCD_SYNC_LOST; +			lcdc_write(reg_int, &da8xx_fb_reg_base->int_ena_set); +		}  #if (LCD_NUM_BUFFERS == 2)  		reg_dma |= LCD_DUAL_FRAME_BUFFER_ENABLE; @@ -264,7 +323,13 @@ static void lcd_blit(int load_mode, struct da8xx_fb_par *par)  		end      = start + par->palette_sz - 1;  		reg_ras |= LCD_PALETTE_LOAD_MODE(PALETTE_ONLY); -		reg_ras |= LCD_PL_ENABLE; +		if (lcd_revision == LCD_VERSION_1) { +			reg_ras |= LCD_V1_PL_INT_ENA; +		} else { +			reg_int = lcdc_read(&da8xx_fb_reg_base->int_ena_set) | +				LCD_V2_PL_INT_ENA; +			lcdc_write(reg_int, &da8xx_fb_reg_base->int_ena_set); +		}  		lcdc_write(start, &da8xx_fb_reg_base->dma_frm_buf_base_addr_0);  		lcdc_write(end, &da8xx_fb_reg_base->dma_frm_buf_ceiling_addr_0); @@ -348,6 +413,7 @@ static void lcd_cfg_vertical_sync(int back_porch, int pulse_width,  static int lcd_cfg_display(const struct lcd_ctrl_config *cfg)  {  	u32 reg; +	u32 reg_int;  	reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl) & ~(LCD_TFT_MODE |  						LCD_MONO_8BIT_MODE | @@ -375,7 +441,13 @@ static int lcd_cfg_display(const struct lcd_ctrl_config *cfg)  	}  	/* enable additional interrupts here */ -	reg |= LCD_UNDERFLOW_INT_ENA; +	if (lcd_revision == LCD_VERSION_1) { +		reg |= LCD_V1_UNDERFLOW_INT_ENA; +	} else { +		reg_int = lcdc_read(&da8xx_fb_reg_base->int_ena_set) | +			LCD_V2_UNDERFLOW_INT_ENA; +		lcdc_write(reg_int, &da8xx_fb_reg_base->int_ena_set); +	}  	lcdc_write(reg, &da8xx_fb_reg_base->raster_ctrl); @@ -413,22 +485,53 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,  	/* Set the Panel Width */  	/* Pixels per line = (PPL + 1)*16 */ -	/*0x3F in bits 4..9 gives max horisontal resolution = 1024 pixels*/ -	width &= 0x3f0; +	if (lcd_revision == LCD_VERSION_1) { +		/* +		 * 0x3F in bits 4..9 gives max horisontal resolution = 1024 +		 * pixels +		 */ +		width &= 0x3f0; +	} else { +		/* +		 * 0x7F in bits 4..10 gives max horizontal resolution = 2048 +		 * pixels. +		 */ +		width &= 0x7f0; +	}  	reg = lcdc_read(&da8xx_fb_reg_base->raster_timing_0);  	reg &= 0xfffffc00; -	reg |= ((width >> 4) - 1) << 4; +	if (lcd_revision == LCD_VERSION_1) { +		reg |= ((width >> 4) - 1) << 4; +	} else { +		width = (width >> 4) - 1; +		reg |= ((width & 0x3f) << 4) | ((width & 0x40) >> 3); +	}  	lcdc_write(reg, &da8xx_fb_reg_base->raster_timing_0);  	/* Set the Panel Height */ +	/* Set bits 9:0 of Lines Per Pixel */  	reg = lcdc_read(&da8xx_fb_reg_base->raster_timing_1);  	reg = ((height - 1) & 0x3ff) | (reg & 0xfffffc00);  	lcdc_write(reg, &da8xx_fb_reg_base->raster_timing_1); +	/* Set bit 10 of Lines Per Pixel */ +	if (lcd_revision == LCD_VERSION_2) { +		reg = lcdc_read(&da8xx_fb_reg_base->raster_timing_2); +		reg |= ((height - 1) & 0x400) << 16; +		lcdc_write(reg, &da8xx_fb_reg_base->raster_timing_2); +	} +  	/* Set the Raster Order of the Frame Buffer */  	reg = lcdc_read(&da8xx_fb_reg_base->raster_ctrl) & ~(1 << 8);  	if (raster_order)  		reg |= LCD_RASTER_ORDER; + +	if (bpp == 24) +		reg |= (LCD_TFT_MODE | LCD_V2_TFT_24BPP_MODE); +	else if (bpp == 32) +		reg |= (LCD_TFT_MODE | LCD_V2_TFT_24BPP_MODE +				| LCD_V2_TFT_24BPP_UNPACK); +  	lcdc_write(reg, &da8xx_fb_reg_base->raster_ctrl);  	switch (bpp) { @@ -436,6 +539,8 @@ static int lcd_cfg_frame_buffer(struct da8xx_fb_par *par, u32 width, u32 height,  	case 2:  	case 4:  	case 16: +	case 24: +	case 32:  		par->palette_sz = 16 * 2;  		break; @@ -494,6 +599,23 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,  			update_hw = 1;  			palette[0] = 0x4000;  		} +	} else if (((info->var.bits_per_pixel == 32) && regno < 32) || +		   ((info->var.bits_per_pixel == 24) && regno < 24)) { +		red >>= (24 - info->var.red.length); +		red <<= info->var.red.offset; + +		green >>= (24 - info->var.green.length); +		green <<= info->var.green.offset; + +		blue >>= (24 - info->var.blue.length); +		blue <<= info->var.blue.offset; + +		par->pseudo_palette[regno] = red | green | blue; + +		if (palette[0] != 0x4000) { +			update_hw = 1; +			palette[0] = 0x4000; +		}  	}  	/* Update the palette in the h/w as needed. */ @@ -506,11 +628,18 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,  static void lcd_reset(struct da8xx_fb_par *par)  {  	/* Disable the Raster if previously Enabled */ -	lcd_disable_raster(); +	lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);  	/* DMA has to be disabled */  	lcdc_write(0, &da8xx_fb_reg_base->dma_ctrl);  	lcdc_write(0, &da8xx_fb_reg_base->raster_ctrl); + +	if (lcd_revision == LCD_VERSION_2) { +		lcdc_write(0, &da8xx_fb_reg_base->int_ena_set); +		/* Write 1 to reset */ +		lcdc_write(LCD_CLK_MAIN_RESET, &da8xx_fb_reg_base->clk_reset); +		lcdc_write(0, &da8xx_fb_reg_base->clk_reset); +	}  }  static void lcd_calc_clk_divider(struct da8xx_fb_par *par) @@ -521,12 +650,17 @@ static void lcd_calc_clk_divider(struct da8xx_fb_par *par)  	lcd_clk = clk_get(2);  	div = lcd_clk / par->pxl_clk; -	debug("LCD Clock: 0x%x Divider: 0x%x PixClk: 0x%x\n", -		lcd_clk, div, par->pxl_clk); +	debug("LCD Clock: %d Divider: %d PixClk: %d\n", +	      lcd_clk, div, par->pxl_clk);  	/* Configure the LCD clock divisor. */  	lcdc_write(LCD_CLK_DIVISOR(div) |  			(LCD_RASTER_MODE & 0x1), &da8xx_fb_reg_base->ctrl); + +	if (lcd_revision == LCD_VERSION_2) +		lcdc_write(LCD_V2_DMA_CLK_EN | LCD_V2_LIDD_CLK_EN | +				LCD_V2_CORE_CLK_EN, +				&da8xx_fb_reg_base->clk_ena);  }  static int lcd_init(struct da8xx_fb_par *par, const struct lcd_ctrl_config *cfg, @@ -566,7 +700,8 @@ static int lcd_init(struct da8xx_fb_par *par, const struct lcd_ctrl_config *cfg,  	if (ret < 0)  		return ret; -	if (QVGA != cfg->p_disp_panel->panel_type) +	if ((QVGA != cfg->p_disp_panel->panel_type) && +	    (WVGA != cfg->p_disp_panel->panel_type))  		return -EINVAL;  	if (cfg->bpp <= cfg->p_disp_panel->max_bpp && @@ -602,7 +737,7 @@ static void lcdc_dma_start(void)  		&da8xx_fb_reg_base->dma_frm_buf_ceiling_addr_1);  } -static u32 lcdc_irq_handler(void) +static u32 lcdc_irq_handler_rev01(void)  {  	struct da8xx_fb_par *par = da8xx_fb_info->par;  	u32 stat = lcdc_read(&da8xx_fb_reg_base->stat); @@ -610,7 +745,7 @@ static u32 lcdc_irq_handler(void)  	if ((stat & LCD_SYNC_LOST) && (stat & LCD_FIFO_UNDERFLOW)) {  		debug("LCD_SYNC_LOST\n"); -		lcd_disable_raster(); +		lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);  		lcdc_write(stat, &da8xx_fb_reg_base->stat);  		lcd_enable_raster();  		return LCD_SYNC_LOST; @@ -622,13 +757,13 @@ static u32 lcdc_irq_handler(void)  		 * interrupt via the following write to the status register. If  		 * this is done after then one gets multiple PL done interrupts.  		 */ -		lcd_disable_raster(); +		lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE);  		lcdc_write(stat, &da8xx_fb_reg_base->stat);  		/* Disable PL completion inerrupt */  		reg_ras  = lcdc_read(&da8xx_fb_reg_base->raster_ctrl); -		reg_ras &= ~LCD_PL_ENABLE; +		reg_ras &= ~LCD_V1_PL_INT_ENA;  		lcdc_write(reg_ras, &da8xx_fb_reg_base->raster_ctrl);  		/* Setup and start data loading mode */ @@ -650,6 +785,66 @@ static u32 lcdc_irq_handler(void)  	return stat;  } +static u32 lcdc_irq_handler_rev02(void) +{ +	struct da8xx_fb_par *par = da8xx_fb_info->par; +	u32 stat = lcdc_read(&da8xx_fb_reg_base->masked_stat); +	u32 reg_int; + +	if ((stat & LCD_SYNC_LOST) && (stat & LCD_FIFO_UNDERFLOW)) { +		debug("LCD_SYNC_LOST\n"); +		lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE); +		lcdc_write(stat, &da8xx_fb_reg_base->masked_stat); +		lcd_enable_raster(); +		lcdc_write(0, &da8xx_fb_reg_base->end_of_int_ind); +		return LCD_SYNC_LOST; +	} else if (stat & LCD_PL_LOAD_DONE) { +		debug("LCD_PL_LOAD_DONE\n"); +		/* +		 * Must disable raster before changing state of any control bit. +		 * And also must be disabled before clearing the PL loading +		 * interrupt via the following write to the status register. If +		 * this is done after then one gets multiple PL done interrupts. +		 */ +		lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE); + +		lcdc_write(stat, &da8xx_fb_reg_base->masked_stat); + +		/* Disable PL completion inerrupt */ +		reg_int  = lcdc_read(&da8xx_fb_reg_base->int_ena_clr) | +			(LCD_V2_PL_INT_ENA); +		lcdc_write(reg_int, &da8xx_fb_reg_base->int_ena_clr); + +		/* Setup and start data loading mode */ +		lcd_blit(LOAD_DATA, par); +		lcdc_write(0, &da8xx_fb_reg_base->end_of_int_ind); +		return LCD_PL_LOAD_DONE; +	} else { +		lcdc_write(stat, &da8xx_fb_reg_base->masked_stat); + +		if (stat & LCD_END_OF_FRAME0) +			debug("LCD_END_OF_FRAME0\n"); + +		lcdc_write(par->dma_start, +			   &da8xx_fb_reg_base->dma_frm_buf_base_addr_0); +		lcdc_write(par->dma_end, +			   &da8xx_fb_reg_base->dma_frm_buf_ceiling_addr_0); +		par->vsync_flag = 1; +		lcdc_write(0, &da8xx_fb_reg_base->end_of_int_ind); +		return LCD_END_OF_FRAME0; +	} +	lcdc_write(0, &da8xx_fb_reg_base->end_of_int_ind); +	return stat; +} + +static u32 lcdc_irq_handler(void) +{ +	if (lcd_revision == LCD_VERSION_1) +		return lcdc_irq_handler_rev01(); +	else +		return lcdc_irq_handler_rev02(); +} +  static u32 wait_for_event(u32 event)  {  	u32 timeout = 50000; @@ -673,6 +868,7 @@ void *video_hw_init(void)  {  	struct da8xx_fb_par *par;  	u32 size; +	u32 rev;  	char *p;  	if (!lcd_panel) { @@ -685,6 +881,10 @@ void *video_hw_init(void)  	gpanel.plnSizeY = lcd_panel->height;  	switch (bits_x_pixel) { +	case 32: +		gpanel.gdfBytesPP = 4; +		gpanel.gdfIndex = GDF_32BIT_X888RGB; +		break;  	case 24:  		gpanel.gdfBytesPP = 4;  		gpanel.gdfIndex = GDF_32BIT_X888RGB; @@ -699,12 +899,29 @@ void *video_hw_init(void)  		break;  	} -	da8xx_fb_reg_base = (struct da8xx_lcd_regs *)DAVINCI_LCD_CNTL_BASE; +	da8xx_fb_reg_base = (struct da8xx_lcd_regs *)DA8XX_LCD_CNTL_BASE; + +	/* Determine LCD IP Version */ +	rev = lcdc_read(&da8xx_fb_reg_base->revid); +	switch (rev) { +	case 0x4C100102: +		lcd_revision = LCD_VERSION_1; +		break; +	case 0x4F200800: +	case 0x4F201000: +		lcd_revision = LCD_VERSION_2; +		break; +	default: +		printf("Unknown PID Reg value 0x%x, defaulting to LCD revision 1\n", +		       rev); +		lcd_revision = LCD_VERSION_1; +		break; +	} -	debug("Resolution: %dx%d %x\n", -		gpanel.winSizeX, -		gpanel.winSizeY, -		lcd_cfg.bpp); +	debug("rev: 0x%x Resolution: %dx%d %d\n", rev, +	      gpanel.winSizeX, +	      gpanel.winSizeY, +	      da8xx_lcd_cfg->bpp);  	size = sizeof(struct fb_info) + sizeof(struct da8xx_fb_par);  	da8xx_fb_info = malloc(size); @@ -722,13 +939,14 @@ void *video_hw_init(void)  	par = da8xx_fb_info->par;  	par->pxl_clk = lcd_panel->pxl_clk; -	if (lcd_init(par, &lcd_cfg, lcd_panel) < 0) { +	if (lcd_init(par, da8xx_lcd_cfg, lcd_panel) < 0) {  		printf("lcd_init failed\n");  		goto err_release_fb;  	}  	/* allocate frame buffer */ -	par->vram_size = lcd_panel->width * lcd_panel->height * lcd_cfg.bpp; +	par->vram_size = lcd_panel->width * lcd_panel->height * +			da8xx_lcd_cfg->bpp;  	par->vram_size = par->vram_size * LCD_NUM_BUFFERS / 8;  	par->vram_virt = malloc(par->vram_size); @@ -741,12 +959,13 @@ void *video_hw_init(void)  		printf("GLCD: malloc for frame buffer failed\n");  		goto err_release_fb;  	} +	gd->fb_base = (int)par->vram_virt;  	gpanel.frameAdrs = (unsigned int)par->vram_virt;  	da8xx_fb_info->screen_base = (char *) par->vram_virt;  	da8xx_fb_fix.smem_start	= gpanel.frameAdrs;  	da8xx_fb_fix.smem_len = par->vram_size; -	da8xx_fb_fix.line_length = (lcd_panel->width * lcd_cfg.bpp) / 8; +	da8xx_fb_fix.line_length = (lcd_panel->width * da8xx_lcd_cfg->bpp) / 8;  	par->dma_start = par->vram_phys;  	par->dma_end   = par->dma_start + lcd_panel->height * @@ -762,7 +981,7 @@ void *video_hw_init(void)  	par->p_palette_base = (unsigned int)par->v_palette_base;  	/* Initialize par */ -	da8xx_fb_info->var.bits_per_pixel = lcd_cfg.bpp; +	da8xx_fb_info->var.bits_per_pixel = da8xx_lcd_cfg->bpp;  	da8xx_fb_var.xres = lcd_panel->width;  	da8xx_fb_var.xres_virtual = lcd_panel->width; @@ -771,8 +990,8 @@ void *video_hw_init(void)  	da8xx_fb_var.yres_virtual = lcd_panel->height * LCD_NUM_BUFFERS;  	da8xx_fb_var.grayscale = -	    lcd_cfg.p_disp_panel->panel_shade == MONOCHROME ? 1 : 0; -	da8xx_fb_var.bits_per_pixel = lcd_cfg.bpp; +	    da8xx_lcd_cfg->p_disp_panel->panel_shade == MONOCHROME ? 1 : 0; +	da8xx_fb_var.bits_per_pixel = da8xx_lcd_cfg->bpp;  	da8xx_fb_var.hsync_len = lcd_panel->hsw;  	da8xx_fb_var.vsync_len = lcd_panel->vsw; @@ -787,8 +1006,11 @@ void *video_hw_init(void)  	/* Clear interrupt */  	memset((void *)par->vram_virt, 0, par->vram_size); -	lcd_disable_raster(); -	lcdc_write(0xFFFF, &da8xx_fb_reg_base->stat); +	lcd_disable_raster(NO_WAIT_FOR_FRAME_DONE); +	if (lcd_revision == LCD_VERSION_1) +		lcdc_write(0xFFFF, &da8xx_fb_reg_base->stat); +	else +		lcdc_write(0xFFFF, &da8xx_fb_reg_base->masked_stat);  	debug("Palette at 0x%x size %d\n", par->p_palette_base,  		par->palette_sz);  	lcdc_dma_start(); @@ -823,8 +1045,10 @@ void video_set_lut(unsigned int index,	/* color number */  	return;  } -void da8xx_video_init(const struct da8xx_panel *panel, int bits_pixel) +void da8xx_video_init(const struct da8xx_panel *panel, +		      const struct lcd_ctrl_config *lcd_cfg, int bits_pixel)  {  	lcd_panel = panel; +	da8xx_lcd_cfg = lcd_cfg;  	bits_x_pixel = bits_pixel;  } diff --git a/arch/arm/include/asm/arch-davinci/da8xx-fb.h b/drivers/video/da8xx-fb.h index c115034f0..6447a4047 100644 --- a/arch/arm/include/asm/arch-davinci/da8xx-fb.h +++ b/drivers/video/da8xx-fb.h @@ -17,7 +17,8 @@  #define DA8XX_FB_H  enum panel_type { -	QVGA = 0 +	QVGA = 0, +	WVGA  };  enum panel_shade { @@ -108,6 +109,8 @@ struct lcd_sync_arg {  	int pulse_width;  }; -void da8xx_video_init(const struct da8xx_panel *panel, int bits_pixel); +void da8xx_video_init(const struct da8xx_panel *panel, +		      const struct lcd_ctrl_config *lcd_cfg, +		      int bits_pixel);  #endif  /* ifndef DA8XX_FB_H */ diff --git a/drivers/video/exynos_mipi_dsi_common.c b/drivers/video/exynos_mipi_dsi_common.c index 2cc847f6e..97e12484f 100644 --- a/drivers/video/exynos_mipi_dsi_common.c +++ b/drivers/video/exynos_mipi_dsi_common.c @@ -50,7 +50,7 @@ static unsigned int dpll_table[15] = {  };  static void exynos_mipi_dsi_long_data_wr(struct mipi_dsim_device *dsim, -		unsigned int data0, unsigned int data1) +		const unsigned char *data0, unsigned int data1)  {  	unsigned int data_cnt = 0, payload = 0; @@ -62,42 +62,40 @@ static void exynos_mipi_dsi_long_data_wr(struct mipi_dsim_device *dsim,  		 */  		if ((data1 - data_cnt) < 4) {  			if ((data1 - data_cnt) == 3) { -				payload = *(u8 *)(data0 + data_cnt) | -					(*(u8 *)(data0 + (data_cnt + 1))) << 8 | -					(*(u8 *)(data0 + (data_cnt + 2))) << 16; +				payload = data0[data_cnt] | +					data0[data_cnt + 1] << 8 | +					data0[data_cnt + 2] << 16;  			debug("count = 3 payload = %x, %x %x %x\n", -				payload, *(u8 *)(data0 + data_cnt), -				*(u8 *)(data0 + (data_cnt + 1)), -				*(u8 *)(data0 + (data_cnt + 2))); +				payload, data0[data_cnt], +				data0[data_cnt + 1], +				data0[data_cnt + 2]);  			} else if ((data1 - data_cnt) == 2) { -				payload = *(u8 *)(data0 + data_cnt) | -					(*(u8 *)(data0 + (data_cnt + 1))) << 8; +				payload = data0[data_cnt] | +					data0[data_cnt + 1] << 8;  			debug("count = 2 payload = %x, %x %x\n", payload, -				*(u8 *)(data0 + data_cnt), -				*(u8 *)(data0 + (data_cnt + 1))); +				data0[data_cnt], data0[data_cnt + 1]);  			} else if ((data1 - data_cnt) == 1) { -				payload = *(u8 *)(data0 + data_cnt); +				payload = data0[data_cnt];  			}  		} else {  			/* send 4bytes per one time. */ -			payload = *(u8 *)(data0 + data_cnt) | -				(*(u8 *)(data0 + (data_cnt + 1))) << 8 | -				(*(u8 *)(data0 + (data_cnt + 2))) << 16 | -				(*(u8 *)(data0 + (data_cnt + 3))) << 24; +			payload = data0[data_cnt] | +				data0[data_cnt + 1] << 8 | +				data0[data_cnt + 2] << 16 | +				data0[data_cnt + 3] << 24;  			debug("count = 4 payload = %x, %x %x %x %x\n",  				payload, *(u8 *)(data0 + data_cnt), -				*(u8 *)(data0 + (data_cnt + 1)), -				*(u8 *)(data0 + (data_cnt + 2)), -				*(u8 *)(data0 + (data_cnt + 3))); - +				data0[data_cnt + 1], +				data0[data_cnt + 2], +				data0[data_cnt + 3]);  		}  		exynos_mipi_dsi_wr_tx_data(dsim, payload);  	}  }  int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id, -	unsigned int data0, unsigned int data1) +	const unsigned char *data0, unsigned int data1)  {  	unsigned int timeout = TRY_GET_FIFO_TIMEOUT;  	unsigned long delay_val, delay; @@ -136,8 +134,8 @@ int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,  	case MIPI_DSI_DCS_SHORT_WRITE_PARAM:  	case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:  		debug("data0 = %x data1 = %x\n", -				data0, data1); -		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1); +				data0[0], data0[1]); +		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);  		if (check_rx_ack) {  			/* process response func should be implemented */  			return 0; @@ -150,7 +148,7 @@ int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,  	case MIPI_DSI_COLOR_MODE_ON:  	case MIPI_DSI_SHUTDOWN_PERIPHERAL:  	case MIPI_DSI_TURN_ON_PERIPHERAL: -		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1); +		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);  		if (check_rx_ack) {  			/* process response func should be implemented. */  			return 0; @@ -172,7 +170,7 @@ int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,  	case MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM:  	case MIPI_DSI_DCS_READ:  		exynos_mipi_dsi_clear_all_interrupt(dsim); -		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1); +		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);  		/* process response func should be implemented. */  		return 0; @@ -183,21 +181,19 @@ int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,  	case MIPI_DSI_GENERIC_LONG_WRITE:  	case MIPI_DSI_DCS_LONG_WRITE:  	{ -		unsigned int data_cnt = 0, payload = 0; +		unsigned int payload = 0;  		/* if data count is less then 4, then send 3bytes data.  */  		if (data1 < 4) { -			payload = *(u8 *)(data0) | -				*(u8 *)(data0 + 1) << 8 | -				*(u8 *)(data0 + 2) << 16; +			payload = data0[0] | +				data0[1] << 8 | +				data0[2] << 16;  			exynos_mipi_dsi_wr_tx_data(dsim, payload);  			debug("count = %d payload = %x,%x %x %x\n", -				data1, payload, -				*(u8 *)(data0 + data_cnt), -				*(u8 *)(data0 + (data_cnt + 1)), -				*(u8 *)(data0 + (data_cnt + 2))); +				data1, payload, data0[0], +				data0[1], data0[2]);  		} else {  			/* in case that data count is more then 4 */  			exynos_mipi_dsi_long_data_wr(dsim, data0, data1); diff --git a/drivers/video/exynos_mipi_dsi_common.h b/drivers/video/exynos_mipi_dsi_common.h index 318c7ecec..ef6510abd 100644 --- a/drivers/video/exynos_mipi_dsi_common.h +++ b/drivers/video/exynos_mipi_dsi_common.h @@ -13,7 +13,7 @@  #define _EXYNOS_MIPI_DSI_COMMON_H  int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id, -	unsigned int data0, unsigned int data1); +	const unsigned char *data0, unsigned int data1);  int exynos_mipi_dsi_pll_on(struct mipi_dsim_device *dsim, unsigned int enable);  unsigned long exynos_mipi_dsi_change_pll(struct mipi_dsim_device *dsim,  	unsigned int pre_divider, unsigned int main_divider, diff --git a/drivers/video/exynos_mipi_dsi_lowlevel.c b/drivers/video/exynos_mipi_dsi_lowlevel.c index b47eee45d..1313bcea4 100644 --- a/drivers/video/exynos_mipi_dsi_lowlevel.c +++ b/drivers/video/exynos_mipi_dsi_lowlevel.c @@ -600,7 +600,7 @@ unsigned int exynos_mipi_dsi_get_fifo_state(struct mipi_dsim_device *dsim)  }  void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim, -	unsigned int di, unsigned int data0, unsigned int data1) +	unsigned int di, const unsigned char data0, const unsigned char data1)  {  	struct exynos_mipi_dsim *mipi_dsim =  		(struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim(); diff --git a/drivers/video/exynos_mipi_dsi_lowlevel.h b/drivers/video/exynos_mipi_dsi_lowlevel.h index 8a45954e9..59f6ce09e 100644 --- a/drivers/video/exynos_mipi_dsi_lowlevel.h +++ b/drivers/video/exynos_mipi_dsi_lowlevel.h @@ -91,7 +91,7 @@ unsigned int _exynos_mipi_dsi_get_frame_done_status(struct mipi_dsim_device  						*dsim);  void _exynos_mipi_dsi_clear_frame_done(struct mipi_dsim_device *dsim);  void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim, -		unsigned int di, unsigned int data0, unsigned int data1); +		unsigned int di, const unsigned char data0, const unsigned char data1);  void exynos_mipi_dsi_wr_tx_data(struct mipi_dsim_device *dsim,  		unsigned int tx_data); diff --git a/drivers/video/l5f31188.c b/drivers/video/l5f31188.c new file mode 100644 index 000000000..3312dcfb3 --- /dev/null +++ b/drivers/video/l5f31188.c @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. + * Hyungwon Hwang <human.hwang@samsung.com> + * + * SPDX-License-Identifier:      GPL-2.0+ + */ + +#include <common.h> +#include <asm/arch/mipi_dsim.h> + +#define SCAN_FROM_LEFT_TO_RIGHT 0 +#define SCAN_FROM_RIGHT_TO_LEFT 1 +#define SCAN_FROM_TOP_TO_BOTTOM 0 +#define SCAN_FROM_BOTTOM_TO_TOP 1 + +static void l5f31188_sleep_in(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x10, 0x00); +} + +static void l5f31188_sleep_out(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x11, 0x00); +} + +static void l5f31188_set_gamma(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x26, 0x00); +} + +static void l5f31188_display_off(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x28, 0x00); +} + +static void l5f31188_display_on(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE, 0x29, 0x00); +} + +static void l5f31188_ctl_memory_access(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops, +		int h_direction, int v_direction) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x36, +			(((h_direction & 0x1) << 1) | (v_direction & 0x1))); +} + +static void l5f31188_set_pixel_format(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x3A, 0x70); +} + +static void l5f31188_write_disbv(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops, unsigned int brightness) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x51, brightness); +} + +static void l5f31188_write_ctrld(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x53, 0x2C); +} + +static void l5f31188_write_cabc(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops, +			unsigned int wm_mode) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x55, wm_mode); +} + +static void l5f31188_write_cabcmb(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops, unsigned int min_brightness) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0x5E, +			min_brightness); +} + +static void l5f31188_set_extension(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	const unsigned char data_to_send[] = { +		0xB9, 0xFF, 0x83, 0x94 +	}; + +	ops->cmd_write(dev, MIPI_DSI_DCS_LONG_WRITE, +			(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +} + +static void l5f31188_set_dgc_lut(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	const unsigned char data_to_send[] = { +		0xC1, 0x01, 0x00, 0x04, 0x0E, 0x18, 0x1E, 0x26, +		0x2F, 0x36, 0x3E, 0x47, 0x4E, 0x56, 0x5D, 0x65, +		0x6D, 0x75, 0x7D, 0x84, 0x8C, 0x94, 0x9C, 0xA4, +		0xAD, 0xB5, 0xBD, 0xC5, 0xCC, 0xD4, 0xDE, 0xE5, +		0xEE, 0xF7, 0xFF, 0x3F, 0x9A, 0xCE, 0xD4, 0x21, +		0xA1, 0x26, 0x54, 0x00, 0x00, 0x04, 0x0E, 0x19, +		0x1F, 0x27, 0x30, 0x37, 0x40, 0x48, 0x50, 0x58, +		0x60, 0x67, 0x6F, 0x77, 0x7F, 0x87, 0x8F, 0x97, +		0x9F, 0xA7, 0xB0, 0xB8, 0xC0, 0xC8, 0xCE, 0xD8, +		0xE0, 0xE7, 0xF0, 0xF7, 0xFF, 0x3C, 0xEB, 0xFD, +		0x2F, 0x66, 0xA8, 0x2C, 0x46, 0x00, 0x00, 0x04, +		0x0E, 0x18, 0x1E, 0x26, 0x30, 0x38, 0x41, 0x4A, +		0x52, 0x5A, 0x62, 0x6B, 0x73, 0x7B, 0x83, 0x8C, +		0x94, 0x9C, 0xA5, 0xAD, 0xB6, 0xBD, 0xC5, 0xCC, +		0xD4, 0xDD, 0xE3, 0xEB, 0xF2, 0xF9, 0xFF, 0x3F, +		0xA4, 0x8A, 0x8F, 0xC7, 0x33, 0xF5, 0xE9, 0x00 +	}; +	ops->cmd_write(dev, MIPI_DSI_DCS_LONG_WRITE, +			(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +} + +static void l5f31188_set_tcon(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	const unsigned char data_to_send[] = { +		0xC7, 0x00, 0x20 +	}; +	ops->cmd_write(dev, MIPI_DSI_DCS_LONG_WRITE, +			(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +} + +static void l5f31188_set_ptba(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	const unsigned char data_to_send[] = { +		0xBF, 0x06, 0x10 +	}; +	ops->cmd_write(dev, MIPI_DSI_DCS_LONG_WRITE, +			(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +} + +static void l5f31188_set_eco(struct mipi_dsim_device *dev, +		struct mipi_dsim_master_ops *ops) +{ +	ops->cmd_write(dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xC6, 0x0C); +} + +static int l5f31188_panel_init(struct mipi_dsim_device *dev) +{ +	struct mipi_dsim_master_ops *ops = dev->master_ops; + +	l5f31188_set_extension(dev, ops); +	l5f31188_set_dgc_lut(dev, ops); + +	l5f31188_set_eco(dev, ops); +	l5f31188_set_tcon(dev, ops); +	l5f31188_set_ptba(dev, ops); +	l5f31188_set_gamma(dev, ops); +	l5f31188_ctl_memory_access(dev, ops, +			SCAN_FROM_LEFT_TO_RIGHT, SCAN_FROM_TOP_TO_BOTTOM); +	l5f31188_set_pixel_format(dev, ops); +	l5f31188_write_disbv(dev, ops, 0xFF); +	l5f31188_write_ctrld(dev, ops); +	l5f31188_write_cabc(dev, ops, 0x0); +	l5f31188_write_cabcmb(dev, ops, 0x0); + +	l5f31188_sleep_out(dev, ops); + +	/* 120 msec */ +	udelay(120 * 1000); + +	return 0; +} + +static void l5f31188_display_enable(struct mipi_dsim_device *dev) +{ +	struct mipi_dsim_master_ops *ops = dev->master_ops; +	l5f31188_display_on(dev, ops); +} + +static struct mipi_dsim_lcd_driver l5f31188_dsim_ddi_driver = { +	.name = "l5f31188", +	.id = -1, + +	.mipi_panel_init = l5f31188_panel_init, +	.mipi_display_on = l5f31188_display_enable, +}; + +void l5f31188_init(void) +{ +	exynos_mipi_dsi_register_lcd_driver(&l5f31188_dsim_ddi_driver); +} diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c index 6bf9fc503..03b0f88ac 100644 --- a/drivers/video/mxsfb.c +++ b/drivers/video/mxsfb.c @@ -15,11 +15,25 @@  #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 + * + * 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: @@ -75,6 +89,9 @@ static void mxs_lcd_init(GraphicDevice *panel,  	writel(valid_data << LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET,  		®s->hw_lcdif_ctrl1); + +	mxsfb_system_setup(); +  	writel((mode->yres << LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET) | mode->xres,  		®s->hw_lcdif_transfer_count); @@ -102,8 +119,10 @@ static void mxs_lcd_init(GraphicDevice *panel,  	/* Flush FIFO first */  	writel(LCDIF_CTRL1_FIFO_CLEAR, ®s->hw_lcdif_ctrl1_set); +#ifndef CONFIG_VIDEO_MXS_MODE_SYSTEM  	/* Sync signals ON */  	setbits_le32(®s->hw_lcdif_vdctrl4, LCDIF_VDCTRL4_SYNC_SIGNALS_ON); +#endif  	/* FIFO cleared */  	writel(LCDIF_CTRL1_FIFO_CLEAR, ®s->hw_lcdif_ctrl1_clr); @@ -161,7 +180,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; @@ -177,5 +197,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(®s->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;  } diff --git a/drivers/video/s6e8ax0.c b/drivers/video/s6e8ax0.c index fc092522b..0e97f511f 100644 --- a/drivers/video/s6e8ax0.c +++ b/drivers/video/s6e8ax0.c @@ -34,11 +34,11 @@ static void s6e8ax0_panel_cond(struct mipi_dsim_device *dsim_dev)  	if (reverse) {  		ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send_reverse, +			data_to_send_reverse,  			ARRAY_SIZE(data_to_send_reverse));  	} else {  		ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +			data_to_send, ARRAY_SIZE(data_to_send));  	}  } @@ -50,8 +50,7 @@ static void s6e8ax0_display_cond(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send, -			ARRAY_SIZE(data_to_send)); +			data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_gamma_cond(struct mipi_dsim_device *dsim_dev) @@ -65,15 +64,18 @@ static void s6e8ax0_gamma_cond(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send, -			ARRAY_SIZE(data_to_send)); +			data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_gamma_update(struct mipi_dsim_device *dsim_dev)  {  	struct mipi_dsim_master_ops *ops = dsim_dev->master_ops; +	static const unsigned char data_to_send[] = { +		0xf7, 0x03 +	}; -	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xf7, 0x3); +	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, data_to_send, +			ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_etc_source_control(struct mipi_dsim_device *dsim_dev) @@ -84,8 +86,7 @@ static void s6e8ax0_etc_source_control(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send, -			ARRAY_SIZE(data_to_send)); +			data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_etc_pentile_control(struct mipi_dsim_device *dsim_dev) @@ -97,8 +98,7 @@ static void s6e8ax0_etc_pentile_control(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send, -			ARRAY_SIZE(data_to_send)); +			data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_etc_mipi_control1(struct mipi_dsim_device *dsim_dev) @@ -109,8 +109,7 @@ static void s6e8ax0_etc_mipi_control1(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send, -			ARRAY_SIZE(data_to_send)); +			data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_etc_mipi_control2(struct mipi_dsim_device *dsim_dev) @@ -121,8 +120,7 @@ static void s6e8ax0_etc_mipi_control2(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send, -			ARRAY_SIZE(data_to_send)); +			data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_etc_power_control(struct mipi_dsim_device *dsim_dev) @@ -133,14 +131,18 @@ static void s6e8ax0_etc_power_control(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -		(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +		data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_etc_mipi_control3(struct mipi_dsim_device *dsim_dev)  {  	struct mipi_dsim_master_ops *ops = dsim_dev->master_ops; +	static const unsigned char data_to_send[] = { +		0xe3, 0x40 +	}; -	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xe3, 0x40); +	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, data_to_send, +		       ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_etc_mipi_control4(struct mipi_dsim_device *dsim_dev) @@ -151,7 +153,7 @@ static void s6e8ax0_etc_mipi_control4(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -		(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +		data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_elvss_set(struct mipi_dsim_device *dsim_dev) @@ -162,24 +164,29 @@ static void s6e8ax0_elvss_set(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -			(unsigned int)data_to_send, -			ARRAY_SIZE(data_to_send)); +			data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_display_on(struct mipi_dsim_device *dsim_dev)  {  	struct mipi_dsim_master_ops *ops = dsim_dev->master_ops; +	static const unsigned char data_to_send[] = { +		0x29, 0x00 +	}; -	ops->cmd_write(dsim_dev, -		MIPI_DSI_DCS_SHORT_WRITE, 0x29, 0x00); +	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE, data_to_send, +		       ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_sleep_out(struct mipi_dsim_device *dsim_dev)  {  	struct mipi_dsim_master_ops *ops = dsim_dev->master_ops; +	static const unsigned char data_to_send[] = { +		0x11, 0x00 +	}; -	ops->cmd_write(dsim_dev, -		MIPI_DSI_DCS_SHORT_WRITE, 0x11, 0x00); +	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE, data_to_send, +		       ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_apply_level1_key(struct mipi_dsim_device *dsim_dev) @@ -190,7 +197,7 @@ static void s6e8ax0_apply_level1_key(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -		(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +		data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_apply_mtp_key(struct mipi_dsim_device *dsim_dev) @@ -201,7 +208,7 @@ static void s6e8ax0_apply_mtp_key(struct mipi_dsim_device *dsim_dev)  	};  	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE, -		(unsigned int)data_to_send, ARRAY_SIZE(data_to_send)); +		data_to_send, ARRAY_SIZE(data_to_send));  }  static void s6e8ax0_panel_init(struct mipi_dsim_device *dsim_dev) diff --git a/drivers/video/sed156x.c b/drivers/video/sed156x.c index d8b0d7f5d..f324354c3 100644 --- a/drivers/video/sed156x.c +++ b/drivers/video/sed156x.c @@ -25,7 +25,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/configs/a3m071.h b/include/configs/a3m071.h index b18a3fa64..43d3d99bc 100644 --- a/include/configs/a3m071.h +++ b/include/configs/a3m071.h @@ -31,6 +31,8 @@  #define CONFIG_HOSTNAME		a3m071  #endif +#define CONFIG_BOOTCOUNT_LIMIT +  /*   * Serial console configuration   */ @@ -65,7 +67,8 @@  #define CONFIG_FLASH_CFI_MTD  #define MTDIDS_DEFAULT          "nor0=fc000000.flash"  #define MTDPARTS_DEFAULT	"mtdparts=fc000000.flash:512k(u-boot),"	\ -						"256k(env),"	\ +						"128k(env1),"	\ +						"128k(env2),"	\  						"128k(hwinfo),"	\  						"1M(nvramsim),"	\  						"128k(dtb),"	\ @@ -73,7 +76,9 @@  						"128k(sysinfo),"	\  						"7552k(root),"	\  						"4M(app),"	\ -						"13568k(data)" +						"5376k(data),"	\ +						"8M(install)" +  #define CONFIG_LZO			/* needed for UBI */  #define CONFIG_RBTREE			/* needed for UBI */  #define CONFIG_CMD_MTDPARTS @@ -367,7 +372,7 @@  	"nfsargs=setenv bootargs root=/dev/nfs rw "			\  		"nfsroot=${serverip}:${rootpath}\0"			\  	"ramargs=setenv bootargs root=/dev/ram rw\0"			\ -	"mtdargs=setenv bootargs root=/dev/mtdblock7 "			\ +	"mtdargs=setenv bootargs root=/dev/mtdblock8 "			\  		"rootfstype=squashfs,jffs2\0"				\  	"addhost=setenv bootargs ${bootargs} "				\  		"hostname=${hostname}\0"				\ @@ -376,22 +381,32 @@  		":${hostname}:${netdev}:off panic=1\0"			\  	"addtty=setenv bootargs ${bootargs} "				\  		"console=${consoledev},${baudrate}\0"			\ -	"flash_nfs=run nfsargs addip addtty addhost;"			\ +	"flash_nfs=run nfsargs addip addtty addmtd addhost;"		\  		"bootm ${kernel_addr} - ${fdt_addr}\0"			\ -	"flash_mtd=run mtdargs addip addtty addhost;"			\ +	"flash_mtd=run mtdargs addip addtty addmtd addhost;"		\  		"bootm ${kernel_addr} - ${fdt_addr}\0"			\ -	"flash_self=run ramargs addip addtty addhost;"			\ +	"flash_self=run ramargs addip addtty addmtd addhost;"		\  		"bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}\0"	\  	"net_nfs=tftp ${kernel_addr_r} ${bootfile};"			\  		"tftp ${fdt_addr_r} ${fdtfile};"			\ -		"run nfsargs addip addtty addhost;"			\ +		"run nfsargs addip addtty addmtd addhost;"		\  		"bootm ${kernel_addr_r} - ${fdt_addr_r}\0"		\  	"load=tftp ${loadaddr} " __stringify(CONFIG_HOSTNAME)		\  		"/u-boot-img.bin\0"					\ -	"update=protect off fc000000 fc07ffff; "			\ +	"update=protect off fc000000 fc07ffff;"				\  		"era fc000000 fc07ffff;"				\  		"cp.b ${loadaddr} fc000000 ${filesize}\0"		\  	"upd=run load;run update\0"					\ +	"upd_fdt=tftp 1800000 a3m071/a3m071.dtb;"			\ +		"run mtdargs addip addtty addmtd addhost;"		\ +		"fdt addr 1800000;fdt boardsetup;fdt chosen;"		\ +		"erase fc1e0000 fc1fffff;cp.b 1800000 fc1e0000 20000"	\ +	"upd_kernel=tftp 1000000 a3m071/uImage-uncompressed;"		\ +		"erase fc200000 fc6fffff;"				\ +		"cp.b 1000000 fc200000 ${filesize}"			\ +	"addmtd=setenv bootargs ${bootargs} ${mtdparts}\0"		\ +	"mtdids=" MTDIDS_DEFAULT "\0"					\ +	"mtdparts=" MTDPARTS_DEFAULT "\0"				\  	""  #define CONFIG_BOOTCOMMAND	"run flash_mtd" diff --git a/include/configs/zynq.h b/include/configs/zynq.h index 79fa5bb53..b9f381f64 100644 --- a/include/configs/zynq.h +++ b/include/configs/zynq.h @@ -72,6 +72,15 @@  # define CONFIG_CPU_V6 /* Required by CONFIG_ARM_DCC */  #endif +#define CONFIG_ZYNQ_SPI + +/* SPI */ +#ifdef CONFIG_ZYNQ_SPI +# define CONFIG_SPI_FLASH +# define CONFIG_SPI_FLASH_SST +# define CONFIG_CMD_SF +#endif +  /* Enable the PL to be downloaded */  #define CONFIG_FPGA  #define CONFIG_FPGA_XILINX diff --git a/include/edid.h b/include/edid.h index f153091f6..480a773d0 100644 --- a/include/edid.h +++ b/include/edid.h @@ -54,7 +54,7 @@ struct edid_detailed_timing {  	 (_x).vertical_blanking)  	unsigned char hsync_offset;  	unsigned char hsync_pulse_width; -	unsigned char sync_offset_pulse_width; +	unsigned char vsync_offset_pulse_width;  	unsigned char hsync_vsync_offset_pulse_width_hi;  #define EDID_DETAILED_TIMING_HSYNC_OFFSET(_x) \  	((GET_BITS((_x).hsync_vsync_offset_pulse_width_hi, 7, 6) << 8) + \ diff --git a/include/video_font.h b/include/video_font.h index 7ef951999..96b9edb0d 100644 --- a/include/video_font.h +++ b/include/video_font.h @@ -8,9 +8,10 @@  #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) +#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 000000000..d1778d5b5 --- /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: '' */ +	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 diff --git a/include/video_font_data.h b/include/video_font_data.h index 4e544f0d7..346a162f5 100644 --- a/include/video_font_data.h +++ b/include/video_font_data.h @@ -8,7 +8,12 @@  #ifndef _VIDEO_FONT_DATA_  #define _VIDEO_FONT_DATA_ -static unsigned char video_fontdata[VIDEO_FONT_SIZE] = { +#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 __maybe_unused video_fontdata[VIDEO_FONT_SIZE] = {  	/* 0 0x00 '^@' */  	0x00, /* 00000000 */ diff --git a/include/zynqpl.h b/include/zynqpl.h index f8211cdba..6107cbf3a 100644 --- a/include/zynqpl.h +++ b/include/zynqpl.h @@ -20,12 +20,14 @@ extern int zynq_info(Xilinx_desc *desc);  #define XILINX_ZYNQ_7020	0x7  #define XILINX_ZYNQ_7030	0xc  #define XILINX_ZYNQ_7045	0x11 +#define XILINX_ZYNQ_7100	0x16  /* Device Image Sizes */  #define XILINX_XC7Z010_SIZE	16669920/8  #define XILINX_XC7Z020_SIZE	32364512/8  #define XILINX_XC7Z030_SIZE	47839328/8  #define XILINX_XC7Z045_SIZE	106571232/8 +#define XILINX_XC7Z100_SIZE	139330784/8  /* Descriptor Macros */  #define XILINX_XC7Z010_DESC(cookie) \ @@ -40,4 +42,7 @@ extern int zynq_info(Xilinx_desc *desc);  #define XILINX_XC7Z045_DESC(cookie) \  { xilinx_zynq, devcfg, XILINX_XC7Z045_SIZE, NULL, cookie, "7z045" } +#define XILINX_XC7Z100_DESC(cookie) \ +{ xilinx_zynq, devcfg, XILINX_XC7Z100_SIZE, NULL, cookie, "7z100" } +  #endif /* _ZYNQPL_H_ */ diff --git a/lib/libfdt/fdt.c b/lib/libfdt/fdt.c index 154e9a446..e146aba6e 100644 --- a/lib/libfdt/fdt.c +++ b/lib/libfdt/fdt.c @@ -1,52 +1,7 @@  /*   * libfdt - Flat Device Tree manipulation   * Copyright (C) 2006 David Gibson, IBM Corporation. - * - * libfdt is dual licensed: you can use it either under the terms of - * the GPL, or the BSD license, at your option. - * - *  a) This library 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 library 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 library; if not, write to the Free - *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - *     MA 02110-1301 USA - * - * Alternatively, - * - *  b) Redistribution and use in source and binary forms, with or - *     without modification, are permitted provided that the following - *     conditions are met: - * - *     1. Redistributions of source code must retain the above - *        copyright notice, this list of conditions and the following - *        disclaimer. - *     2. Redistributions in binary form must reproduce the above - *        copyright notice, this list of conditions and the following - *        disclaimer in the documentation and/or other materials - *        provided with the distribution. - * - *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause   */  #include "libfdt_env.h" diff --git a/lib/libfdt/fdt_empty_tree.c b/lib/libfdt/fdt_empty_tree.c index f72d13b1d..ac6c1fb04 100644 --- a/lib/libfdt/fdt_empty_tree.c +++ b/lib/libfdt/fdt_empty_tree.c @@ -1,52 +1,7 @@  /*   * libfdt - Flat Device Tree manipulation   * Copyright (C) 2012 David Gibson, IBM Corporation. - * - * libfdt is dual licensed: you can use it either under the terms of - * the GPL, or the BSD license, at your option. - * - *  a) This library 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 library 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 library; if not, write to the Free - *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - *     MA 02110-1301 USA - * - * Alternatively, - * - *  b) Redistribution and use in source and binary forms, with or - *     without modification, are permitted provided that the following - *     conditions are met: - * - *     1. Redistributions of source code must retain the above - *        copyright notice, this list of conditions and the following - *        disclaimer. - *     2. Redistributions in binary form must reproduce the above - *        copyright notice, this list of conditions and the following - *        disclaimer in the documentation and/or other materials - *        provided with the distribution. - * - *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause   */  #include "libfdt_env.h" diff --git a/lib/libfdt/fdt_ro.c b/lib/libfdt/fdt_ro.c index b65f4e23a..f2154e837 100644 --- a/lib/libfdt/fdt_ro.c +++ b/lib/libfdt/fdt_ro.c @@ -1,52 +1,7 @@  /*   * libfdt - Flat Device Tree manipulation   * Copyright (C) 2006 David Gibson, IBM Corporation. - * - * libfdt is dual licensed: you can use it either under the terms of - * the GPL, or the BSD license, at your option. - * - *  a) This library 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 library 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 library; if not, write to the Free - *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - *     MA 02110-1301 USA - * - * Alternatively, - * - *  b) Redistribution and use in source and binary forms, with or - *     without modification, are permitted provided that the following - *     conditions are met: - * - *     1. Redistributions of source code must retain the above - *        copyright notice, this list of conditions and the following - *        disclaimer. - *     2. Redistributions in binary form must reproduce the above - *        copyright notice, this list of conditions and the following - *        disclaimer in the documentation and/or other materials - *        provided with the distribution. - * - *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause   */  #include "libfdt_env.h" diff --git a/lib/libfdt/fdt_rw.c b/lib/libfdt/fdt_rw.c index aba609484..6fa4f1307 100644 --- a/lib/libfdt/fdt_rw.c +++ b/lib/libfdt/fdt_rw.c @@ -1,52 +1,7 @@  /*   * libfdt - Flat Device Tree manipulation   * Copyright (C) 2006 David Gibson, IBM Corporation. - * - * libfdt is dual licensed: you can use it either under the terms of - * the GPL, or the BSD license, at your option. - * - *  a) This library 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 library 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 library; if not, write to the Free - *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - *     MA 02110-1301 USA - * - * Alternatively, - * - *  b) Redistribution and use in source and binary forms, with or - *     without modification, are permitted provided that the following - *     conditions are met: - * - *     1. Redistributions of source code must retain the above - *        copyright notice, this list of conditions and the following - *        disclaimer. - *     2. Redistributions in binary form must reproduce the above - *        copyright notice, this list of conditions and the following - *        disclaimer in the documentation and/or other materials - *        provided with the distribution. - * - *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause   */  #include "libfdt_env.h" diff --git a/lib/libfdt/fdt_strerror.c b/lib/libfdt/fdt_strerror.c index 9b00c3a6e..2f3cc243d 100644 --- a/lib/libfdt/fdt_strerror.c +++ b/lib/libfdt/fdt_strerror.c @@ -1,52 +1,7 @@  /*   * libfdt - Flat Device Tree manipulation   * Copyright (C) 2006 David Gibson, IBM Corporation. - * - * libfdt is dual licensed: you can use it either under the terms of - * the GPL, or the BSD license, at your option. - * - *  a) This library 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 library 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 library; if not, write to the Free - *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - *     MA 02110-1301 USA - * - * Alternatively, - * - *  b) Redistribution and use in source and binary forms, with or - *     without modification, are permitted provided that the following - *     conditions are met: - * - *     1. Redistributions of source code must retain the above - *        copyright notice, this list of conditions and the following - *        disclaimer. - *     2. Redistributions in binary form must reproduce the above - *        copyright notice, this list of conditions and the following - *        disclaimer in the documentation and/or other materials - *        provided with the distribution. - * - *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause   */  #include "libfdt_env.h" diff --git a/lib/libfdt/fdt_sw.c b/lib/libfdt/fdt_sw.c index f422754de..580b57024 100644 --- a/lib/libfdt/fdt_sw.c +++ b/lib/libfdt/fdt_sw.c @@ -1,52 +1,7 @@  /*   * libfdt - Flat Device Tree manipulation   * Copyright (C) 2006 David Gibson, IBM Corporation. - * - * libfdt is dual licensed: you can use it either under the terms of - * the GPL, or the BSD license, at your option. - * - *  a) This library 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 library 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 library; if not, write to the Free - *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - *     MA 02110-1301 USA - * - * Alternatively, - * - *  b) Redistribution and use in source and binary forms, with or - *     without modification, are permitted provided that the following - *     conditions are met: - * - *     1. Redistributions of source code must retain the above - *        copyright notice, this list of conditions and the following - *        disclaimer. - *     2. Redistributions in binary form must reproduce the above - *        copyright notice, this list of conditions and the following - *        disclaimer in the documentation and/or other materials - *        provided with the distribution. - * - *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause   */  #include "libfdt_env.h" diff --git a/lib/libfdt/fdt_wip.c b/lib/libfdt/fdt_wip.c index b9e3c4a74..3f2dfa573 100644 --- a/lib/libfdt/fdt_wip.c +++ b/lib/libfdt/fdt_wip.c @@ -1,52 +1,7 @@  /*   * libfdt - Flat Device Tree manipulation   * Copyright (C) 2006 David Gibson, IBM Corporation. - * - * libfdt is dual licensed: you can use it either under the terms of - * the GPL, or the BSD license, at your option. - * - *  a) This library 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 library 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 library; if not, write to the Free - *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - *     MA 02110-1301 USA - * - * Alternatively, - * - *  b) Redistribution and use in source and binary forms, with or - *     without modification, are permitted provided that the following - *     conditions are met: - * - *     1. Redistributions of source code must retain the above - *        copyright notice, this list of conditions and the following - *        disclaimer. - *     2. Redistributions in binary form must reproduce the above - *        copyright notice, this list of conditions and the following - *        disclaimer in the documentation and/or other materials - *        provided with the distribution. - * - *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause   */  #include "libfdt_env.h" diff --git a/lib/libfdt/libfdt_internal.h b/lib/libfdt/libfdt_internal.h index 381133ba8..13cbc9af2 100644 --- a/lib/libfdt/libfdt_internal.h +++ b/lib/libfdt/libfdt_internal.h @@ -3,52 +3,7 @@  /*   * libfdt - Flat Device Tree manipulation   * Copyright (C) 2006 David Gibson, IBM Corporation. - * - * libfdt is dual licensed: you can use it either under the terms of - * the GPL, or the BSD license, at your option. - * - *  a) This library 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 library 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 library; if not, write to the Free - *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - *     MA 02110-1301 USA - * - * Alternatively, - * - *  b) Redistribution and use in source and binary forms, with or - *     without modification, are permitted provided that the following - *     conditions are met: - * - *     1. Redistributions of source code must retain the above - *        copyright notice, this list of conditions and the following - *        disclaimer. - *     2. Redistributions in binary form must reproduce the above - *        copyright notice, this list of conditions and the following - *        disclaimer in the documentation and/or other materials - *        provided with the distribution. - * - *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause   */  #include <fdt.h> diff --git a/tools/bmp_logo.c b/tools/bmp_logo.c index b2ad3d592..2247adcc8 100644 --- a/tools/bmp_logo.c +++ b/tools/bmp_logo.c @@ -179,7 +179,7 @@ int main (int argc, char *argv[])  	printf("unsigned char bmp_logo_bitmap[] = {\n");  	for (i=(b->height-1)*b->width; i>=0; i-=b->width) {  		for (x = 0; x < b->width; x++) { -			b->data[(uint16_t) i + x] = (uint8_t) fgetc (fp) \ +			b->data[i + x] = (uint8_t) fgetc(fp)  						+ DEFAULT_CMAP_SIZE;  		}  	} |