Dear Matthias Weisser, In message <1271932257-14618-4-git-send-email-weiss...@arcor.de> you wrote: > This patch adds support for the jadecpu board using the > MB86R01 'Jade' SoC from Fujitsu. > > Signed-off-by: Matthias Weisser <weiss...@arcor.de> > --- > MAINTAINERS | 4 + > MAKEALL | 1 + > Makefile | 3 + > board/syteco/jadecpu/Makefile | 55 +++++++ > board/syteco/jadecpu/config.mk | 1 + > board/syteco/jadecpu/jadecpu.c | 198 ++++++++++++++++++++++++ > board/syteco/jadecpu/lowlevel_init.S | 279 > ++++++++++++++++++++++++++++++++++ > common/serial.c | 3 +- > include/configs/jadecpu.h | 189 +++++++++++++++++++++++ > include/serial.h | 3 +- > tools/Makefile | 3 + > tools/logos/syteco.bmp | Bin 0 -> 11414 bytes > 12 files changed, 737 insertions(+), 2 deletions(-) > create mode 100644 board/syteco/jadecpu/Makefile > create mode 100644 board/syteco/jadecpu/config.mk > create mode 100644 board/syteco/jadecpu/jadecpu.c > create mode 100644 board/syteco/jadecpu/lowlevel_init.S > create mode 100644 include/configs/jadecpu.h > create mode 100644 tools/logos/syteco.bmp > > diff --git a/MAINTAINERS b/MAINTAINERS > index 04c8730..ac0ed62 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -776,6 +776,10 @@ Prafulla Wadaskar <prafu...@marvell.com> > rd6281a ARM926EJS (Kirkwood SoC) > sheevaplug ARM926EJS (Kirkwood SoC) > > +Matthias Weisser <matthias.weis...@graf-syteco.de> > + > + jadecpu ARM926EJS (MB86R01 SoC) > + > Richard Woodruff <r-woodru...@ti.com> > > omap2420h4 ARM1136EJS > diff --git a/MAKEALL b/MAKEALL > index fb1f7a3..5ee9678 100755 > --- a/MAKEALL > +++ b/MAKEALL > @@ -561,6 +561,7 @@ LIST_ARM9=" \ > edb9315 \ > edb9315a \ > imx27lite \ > + jadecpu \ > lpd7a400 \ > mv88f6281gtw_ge \ > mx1ads \ > diff --git a/Makefile b/Makefile > index 0381c81..4fdd216 100644 > --- a/Makefile > +++ b/Makefile > @@ -2834,6 +2834,9 @@ CPU9260_config : unconfig > @echo "#define CONFIG_$(@:_config=) 1" >$(obj)include/config.h > @$(MKCONFIG) -a cpu9260 arm arm926ejs cpu9260 eukrea at91 > > +jadecpu_config : unconfig > + @$(MKCONFIG) $(@:_config=) arm arm926ejs jadecpu syteco mb86r0x > + > meesc_config : unconfig > @$(MKCONFIG) $(@:_config=) arm arm926ejs meesc esd at91 > > diff --git a/board/syteco/jadecpu/Makefile b/board/syteco/jadecpu/Makefile > new file mode 100644 > index 0000000..87d2234 > --- /dev/null > +++ b/board/syteco/jadecpu/Makefile > @@ -0,0 +1,55 @@ > +# > +# (C) Copyright 2003-2008 > +# Wolfgang Denk, DENX Software Engineering, w...@denx.de. > +# > +# (C) Copyright 2008 > +# Stelian Pop <stelian....@leadtechdesign.com> > +# Lead Tech Design <www.leadtechdesign.com> > +# > +# See file CREDITS for list of people who contributed to this > +# project. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation; either version 2 of > +# the License, or (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write to the Free Software > +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, > +# MA 02111-1307 USA > +# > + > +include $(TOPDIR)/config.mk > + > +LIB = $(obj)lib$(BOARD).a > + > +COBJS-y += jadecpu.o > +SOBJS := lowlevel_init.o > + > +SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c) > +OBJS := $(addprefix $(obj),$(COBJS-y)) > +SOBJS := $(addprefix $(obj),$(SOBJS)) > + > +$(LIB): $(obj).depend $(OBJS) $(SOBJS) > + $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS) > + > +clean: > + rm -f $(SOBJS) $(OBJS) > + > +distclean: clean > + rm -f $(LIB) core *.bak $(obj).depend > + > +######################################################################### > + > +# defines $(obj).depend target > +include $(SRCTREE)/rules.mk > + > +sinclude $(obj).depend > + > +######################################################################### > diff --git a/board/syteco/jadecpu/config.mk b/board/syteco/jadecpu/config.mk > new file mode 100644 > index 0000000..c661f0b > --- /dev/null > +++ b/board/syteco/jadecpu/config.mk > @@ -0,0 +1 @@ > +TEXT_BASE = 0x46000000 > diff --git a/board/syteco/jadecpu/jadecpu.c b/board/syteco/jadecpu/jadecpu.c > new file mode 100644 > index 0000000..ecc6742 > --- /dev/null > +++ b/board/syteco/jadecpu/jadecpu.c > @@ -0,0 +1,198 @@ > +/* > + * (c) 2010 Graf-Syteco, Matthias Weisser > + * <weiss...@arcor.de> > + * > + * (C) Copyright 2007, mycable GmbH > + * Carsten Schneider <c...@mycable.de>, Alexander Bigga <a...@mycable.de> > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#include <common.h> > +#include <netdev.h> > +#include <asm/io.h> > +#include <asm/arch/mb86r0x.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +#if defined(CONFIG_SHOW_BOOT_PROGRESS) > +void show_boot_progress(int progress) > +{ > + printf("Boot reached stage %d\n", progress); > +} > +#endif > + > +/* > + * Miscellaneous platform dependent initialisations > + */ > +int board_init(void) > +{ > + struct mb86r0x_ccnt * ccnt = (struct mb86r0x_ccnt *) > + MB86R0x_CCNT_PHYS_BASE; > + > + /* We select mode 0 for group 2 and mode 1 for group 4 */ > + writel(0x00000010, &ccnt->cmux_md); > + > + gd->flags = 0; > + gd->bd->bi_arch_number = MACH_TYPE_JADECPU; > + gd->bd->bi_boot_params = PHYS_SDRAM + PHYS_SDRAM_SIZE - 0x10000; > + > + icache_enable(); > + > + return 0; > +} > + > +int board_late_init(void) > +{ > + struct mb86r0x_gpio *gpio = (struct mb86r0x_gpio *) > + MB86R0x_GPIO_PHYS_BASE; > + struct mb86r0x_pwm *pwm; > + uint32_t in_word; > + const char *e; > + const char *s; > + > +#ifdef CONFIG_VIDEO_MB86R0xGDC > + /* Check if we have valid display settings and turn on power if so */ > + /* Display 0 */ > + if (getenv("gs_dsp_0_param") || getenv("videomode")) { > + writel(readl(&gpio->gpdr2) | (1 << 3), &gpio->gpdr2); > + > + e = getenv("gs_dsp_0_pwm"); > + if (e != NULL) { > + uint32_t freq, init; > + > + freq = 0; > + init = 0; > + > + s = strchr(e, 'f'); > + if (s != NULL) > + freq = simple_strtol(s + 2, NULL, 0); > + > + s = strchr(e, 'i'); > + if (s != NULL) > + init = simple_strtol(s + 2, NULL, 0); > + > + if (freq > 0) { > + pwm = (struct mb86r0x_pwm *) > + MB86R0x_PWM0_PHYS_BASE; > + > + writel(CONFIG_MB86R0x_IOCLK / 1000 / freq, > + &pwm->bcr); > + writel(1002, &pwm->tpr); > + writel(1, &pwm->pr); > + writel(init * 10 + 1, &pwm->dr); > + writel(1, &pwm->cr); > + writel(1, &pwm->sr); > + } > + } > + } > + writel(readl(&gpio->gpddr2) | (1 << 3), &gpio->gpddr2); > + > + /* Display 1 */ > + if (getenv("gs_dsp_1_param")) { > + writel(readl(&gpio->gpdr2) | (1 << 4), &gpio->gpdr2); > + > + e = getenv("gs_dsp_1_pwm"); > + if (e != NULL) { > + uint32_t freq, init; > + > + freq = 0; > + init = 0; > + > + s = strchr(e, 'f'); > + if (s != NULL) > + freq = simple_strtol(s + 2, NULL, 0); > + > + s = strchr(e, 'i'); > + if (s != NULL) > + init = simple_strtol(s + 2, NULL, 0); > + > + if (freq > 0) { > + pwm = (struct mb86r0x_pwm *) > + MB86R0x_PWM1_PHYS_BASE; > + > + writel(CONFIG_MB86R0x_IOCLK / 1000 / freq, > + &pwm->bcr); > + writel(1002, &pwm->tpr); > + writel(1, &pwm->pr); > + writel(init * 10 + 1, &pwm->dr); > + writel(1, &pwm->cr); > + writel(1, &pwm->sr);
Instead of repeating the code, use a function with an argument. > + if ((in_word & 0xC0) == 0xC0) { > + setenv("stdin", "serial"); > + setenv("stdout", "serial"); > + setenv("stderr", "serial"); > + setenv("bootdelay", "10"); > + } else if ((in_word & 0xC0) != 0) { > + setenv("stdout", "vga"); > + setenv("bootcmd", "mw.l 0x40000000 0 1024; usb start;" > + "fatls usb 0; fatload usb 0 0x40000000 mcq5resq.bin;" > + "bootelf 0x40000000; bootelf 0x10080000"); > + setenv("bootdelay", "5"); I consider such mandatory settings of behaviour-critical variables as "bootcmd" and "bootdelay" bad style. I recommend to use oither variables instead, and to use these as defaults, so the user still has a choice to define his own "bootcmd" which does not get overwritten at each boot. > diff --git a/common/serial.c b/common/serial.c > index 5f9ffd7..3cc4d23 100644 > --- a/common/serial.c > +++ b/common/serial.c > @@ -41,7 +41,8 @@ struct serial_device *__default_serial_console (void) > #elif defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) \ > || defined(CONFIG_405EP) || defined(CONFIG_405EZ) || > defined(CONFIG_405EX) \ > || defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC83xx) \ > - || defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) > + || defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) \ > + || defined(CONFIG_MB86R0x) Please keep list sorted. ... > +#define CONFIG_MB86R0x > +#define CONFIG_MB86R0x_IOCLK (41164767) > +#define CONFIG_SYS_HZ (CONFIG_MB86R0x_IOCLK / 16) NAK. CONFIG_SYS_HZ must always be 1000. > diff --git a/include/serial.h b/include/serial.h > index f2638ec..8802193 100644 > --- a/include/serial.h > +++ b/include/serial.h > @@ -25,7 +25,8 @@ extern struct serial_device * default_serial_console (void); > #if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_440) || > \ > defined(CONFIG_405EP) || defined(CONFIG_405EZ) || defined(CONFIG_405EX) > || \ > defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC83xx) || \ > - defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) > + defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) || \ > + defined(CONFIG_MB86R0x) Please keep list sorted. > extern struct serial_device serial0_device; > extern struct serial_device serial1_device; > #if defined(CONFIG_SYS_NS16550_SERIAL) > diff --git a/tools/Makefile b/tools/Makefile > index 749d994..b2e73b2 100644 > --- a/tools/Makefile > +++ b/tools/Makefile > @@ -118,6 +118,9 @@ endif > ifeq ($(VENDOR),ronetix) > LOGO_BMP= logos/ronetix.bmp > endif > +ifeq ($(VENDOR),syteco) > +LOGO_BMP= logos/syteco.bmp > +endif Please keep list sorted. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de Program maintenance is an entropy-increasing process, and even its most skilfull execution only delays the subsidence of the system into unfixable obsolescence. - Fred Brooks, "The Mythical Man Month" _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot