[U-Boot] [PATCH RESEND 0/3] arm: Add support for MB86R01 'Jade' SoC

This patchset adds support for the MB86R01 'Jade' SoC from Fujitsu.
The second patch which adds the video driver needs this patch http://lists.denx.de/pipermail/u-boot/2009-July/055582.html which adds register offset definitions for the graphic controller.
This time I ran checkpatch.pl from the linux kernel sources for all patches and hopefully ignored only things which are not critical for inclusion of my source into u-boot.
Matthias Weisser

This patch adds support for MB86R01 'Jade' SoC from Fujitsu
Signed-off-by: Matthias Weisser matthias.weisser@graf-syteco.de --- cpu/arm926ejs/jade/Makefile | 47 +++++++++ cpu/arm926ejs/jade/timer.c | 126 ++++++++++++++++++++++++ include/asm-arm/arch-jade/hardware.h | 31 ++++++ include/asm-arm/arch-jade/jade.h | 177 ++++++++++++++++++++++++++++++++++ 4 files changed, 381 insertions(+), 0 deletions(-) create mode 100644 cpu/arm926ejs/jade/Makefile create mode 100644 cpu/arm926ejs/jade/timer.c create mode 100644 include/asm-arm/arch-jade/hardware.h create mode 100644 include/asm-arm/arch-jade/jade.h
diff --git a/cpu/arm926ejs/jade/Makefile b/cpu/arm926ejs/jade/Makefile new file mode 100644 index 0000000..7da9f40 --- /dev/null +++ b/cpu/arm926ejs/jade/Makefile @@ -0,0 +1,47 @@ +# +# (C) Copyright 2000-2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB = $(obj)lib$(SOC).a + +COBJS = timer.o +SOBJS = + +SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS)) +START := $(addprefix $(obj),$(START)) + +all: $(obj).depend $(LIB) + +$(LIB): $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/cpu/arm926ejs/jade/timer.c b/cpu/arm926ejs/jade/timer.c new file mode 100644 index 0000000..2d262c8 --- /dev/null +++ b/cpu/arm926ejs/jade/timer.c @@ -0,0 +1,126 @@ +/* + * (C) Copyright 2007-2008 + * Stelian Pop stelian.pop@leadtechdesign.com + * Lead Tech Design <www.leadtechdesign.com> + * + * Matthias Weisser matthias.weisser@graf-syteco.de + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <div64.h> + +#define TIMER_LOAD_VAL 0xffffffff +#define TIMER_BASE 0xfffe0000 + +#define READ_TIMER (*(volatile ulong *)(TIMER_BASE+4)) +#define TIMER_FREQ (CONFIG_JADE_IOCLK / 16) + +static ulong timestamp; +static ulong lastdec; + +static inline unsigned long long tick_to_time(unsigned long long tick) +{ + tick *= CONFIG_SYS_HZ; + do_div(tick, TIMER_FREQ); + + return tick; +} + +static inline unsigned long long usec_to_tick(unsigned long long usec) +{ + usec *= TIMER_FREQ; + do_div(usec, 1000000); + + return usec; +} + +/* nothing really to do with interrupts, just starts up a counter. */ +int timer_init(void) +{ + *(volatile ulong *)(TIMER_BASE + 0) = TIMER_LOAD_VAL; + *(volatile ulong *)(TIMER_BASE + 8) = 0x86; + + reset_timer_masked(); + + return 0; +} + +/* + * timer without interrupts + */ +unsigned long long get_ticks(void) +{ + ulong now = READ_TIMER; + + if (now <= lastdec) /* normal mode (non roll) */ + /* move stamp forward with absolut diff ticks */ + timestamp += (lastdec - now); + else /* we have rollover of incrementer */ + timestamp += lastdec + TIMER_LOAD_VAL - now; + lastdec = now; + return timestamp; +} + +void reset_timer_masked(void) +{ + /* reset time */ + lastdec = READ_TIMER; /* capture current decrement value time */ + timestamp = 0; /* start "advancing" time stamp from 0 */ +} + +ulong get_timer_masked(void) +{ + return tick_to_time(get_ticks()); +} + +void udelay(unsigned long usec) +{ + unsigned long long tmp; + ulong tmo; + + tmo = usec_to_tick(usec); + tmp = get_ticks() + tmo; /* get current timestamp */ + + while (get_ticks() < tmp) /* loop till event */ + /*NOP*/; +} + +void reset_timer(void) +{ + reset_timer_masked(); +} + +ulong get_timer(ulong base) +{ + return get_timer_masked() - base; +} + +/* + * This function is derived from PowerPC code (timebase clock frequency). + * On ARM it returns the number of timer ticks per second. + */ +ulong get_tbclk(void) +{ + ulong tbclk; + + tbclk = CONFIG_SYS_HZ; + return tbclk; +} diff --git a/include/asm-arm/arch-jade/hardware.h b/include/asm-arm/arch-jade/hardware.h new file mode 100644 index 0000000..a26bdca --- /dev/null +++ b/include/asm-arm/arch-jade/hardware.h @@ -0,0 +1,31 @@ +/* + * (C) Copyright 2007 + * + * Author : Carsten Schneider, mycable GmbH + * cs@mycable.de + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ +#ifndef __ASM_ARCH_HARDWARE_H +#define __ASM_ARCH_HARDWARE_H + +#include <asm/sizes.h> +#include <asm/arch/jade.h> + +#endif diff --git a/include/asm-arm/arch-jade/jade.h b/include/asm-arm/arch-jade/jade.h new file mode 100644 index 0000000..c2b28a2 --- /dev/null +++ b/include/asm-arm/arch-jade/jade.h @@ -0,0 +1,177 @@ +/* + * (C) Copyright 2007 + * + * jade definitions + * + * Author : Carsten Schneider, mycable GmbH + * cs@mycable.de + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef JADE_H +#define JADE_H + +typedef volatile unsigned int JREG; /* Hardware register */ + +/* + * Physical Address Defines + */ +#define JADE_GDC_PHYS_BASE 0xf1fc0000 +#define JADE_GDC_PHYS_DISP_BASE 0xf1fd0000 +#define JADE_CCNT_PHYS_BASE 0xfff42000 +#define JADE_CAN0_PHYS_BASE 0xfff54000 +#define JADE_CAN1_PHYS_BASE 0xfff55000 +#define JADE_I2C0_PHYS_BASE 0xfff56000 +#define JADE_I2C1_PHYS_BASE 0xfff57000 +#define JADE_EHCI_PHYS_BASE 0xfff80000 +#define JADE_OHCI_PHYS_BASE 0xfff81000 +#define JADE_IRC1_PHYS_BASE 0xfffb0000 +#define JADE_TIMER_PHYS_BASE 0xfffe0000 +#define JADE_UART0_PHYS_BASE 0xfffe1000 +#define JADE_UART1_PHYS_BASE 0xfffe2000 +#define JADE_IRCE_PHYS_BASE 0xfffe4000 +#define JADE_CRG_PHYS_BASE 0xfffe7000 +#define JADE_IRC0_PHYS_BASE 0xfffe8000 +#define JADE_GPIO_PHYS_BASE 0xfffe9000 + + +/* DRAMC_DRIC DRAM Controller Mode Register */ + +/* + * REGISTER ADDRESS DEFINITION FOR DRAMC PERIPHERAL + */ +#define JREGC_DRAMC_DRIC ((JREG *) 0xF3000000) +#define JREGC_DRAMC_DRIC1 ((JREG *) 0xF3000002) +#define JREGC_DRAMC_DRIC2 ((JREG *) 0xF3000004) +#define JREGC_DRAMC_DRCA ((JREG *) 0xF3000006) +#define JREGC_DRAMC_DRCM ((JREG *) 0xF3000008) +#define JREGC_DRAMC_DRCST1 ((JREG *) 0xF300000A) +#define JREGC_DRAMC_DRCST2 ((JREG *) 0xF300000C) +#define JREGC_DRAMC_DRCR ((JREG *) 0xF300000E) +#define JREGC_DRAMC_DRCS ((JREG *) 0xF3000020) +#define JREGC_DRAMC_DRASR ((JREG *) 0xF3000030) +#define JREGC_DRAMC_DRIMS1 ((JREG *) 0xF3000042) +#define JREGC_DRAMC_DRIMS2A1 ((JREG *) 0xF3000044) +#define JREGC_DRAMC_DRIMS3A2 ((JREG *) 0xF3000046) +#define JREGC_DRAMC_DRIMS4 ((JREG *) 0xF3000048) +#define JREGC_DRAMC_DRIMS5 ((JREG *) 0xF300004A) +#define JREGC_DRAMC_DRIMS6 ((JREG *) 0xF300004C) +#define JREGC_DRAMC_DRIMS7D1 ((JREG *) 0xF300004E) +#define JREGC_DRAMC_DRIMS8D2 ((JREG *) 0xF3000050) +#define JREGC_DRAMC_DRIMS9T1 ((JREG *) 0xF3000052) +#define JREGC_DRAMC_DRIMSS10T2 ((JREG *) 0xF3000054) +#define JREGC_DRAMC_DROS ((JREG *) 0xF3000060) +#define JREGC_DRAMC_DRIBSLI ((JREG *) 0xF3000062) +#define JREGC_DRAMC_DRIBSODT1 ((JREG *) 0xF3000064) +#define JREGC_DRAMC_DRIBSOCD ((JREG *) 0xF3000066) +#define JREGC_DRAMC_DRIBSOCD2 ((JREG *) 0xF3000068) +#define JREGC_DRAMC_DROABA ((JREG *) 0xF3000070) +#define JREGC_DRAMC_DROBV ((JREG *) 0xF3000080) +#define JREGC_DRAMC_DROBS ((JREG *) 0xF3000084) +#define JREGC_DRAMC_DROBSR1 ((JREG *) 0xF3000086) +#define JREGC_DRAMC_DROBSR2 ((JREG *) 0xF3000088) +#define JREGC_DRAMC_DROBSR3 ((JREG *) 0xF300008A) +#define JREGC_DRAMC_DROBSR4 ((JREG *) 0xF300008C) +#define JREGC_DRAMC_DRIMR1 ((JREG *) 0xF3000090) +#define JREGC_DRAMC_DRIMR2 ((JREG *) 0xF3000092) +#define JREGC_DRAMC_DRIMR3 ((JREG *) 0xF3000094) +#define JREGC_DRAMC_DRIMR4 ((JREG *) 0xF3000096) +#define JREGC_DRAMC_DROISR1 ((JREG *) 0xF3000098) +#define JREGC_DRAMC_DROISR2 ((JREG *) 0xF300009A) + +/* + * REGISTER ADDRESS DEFINITION FOR GPIO PERIPHERAL + */ +/* GPIO Port data register */ +#define GPIO_PORT_DATA 0x00 +/* GPIO Data Direction */ +#define GPIO_DIRECTION 0x10 + +/* GPIO Block Defines */ +#define GPIO_BLOCK_0 0x00 +#define GPIO_BLOCK_1 0x04 +#define GPIO_BLOCK_2 0x08 + +/* + * JADE Chip Control Module + * + */ + +#define CCNT_CGPIO_IST 0x18 +#define CCNT_CGPIO_ISTM 0x1c +#define CCNT_CGPIO_IP 0x20 +#define CCNT_CGPIO_IM 0x24 +#define CCNT_CMUX_MD 0x30 + +/* + * REGISTER ADDRESS DEFINITION FOR UART0 PERIPHERAL + * +#define JREGC_UART0_URT0RFR ((JREG *) 0xFFFE1000) +#define JREGC_UART0_URT0TFR ((JREG *) 0xFFFE1000) +#define JREGC_UART0_URT0DLL ((JREG *) 0xFFFE1000) +#define JREGC_UART0_URT0IER ((JREG *) 0xFFFE1004) +#define JREGC_UART0_URT0DLM ((JREG *) 0xFFFE1004) +#define JREGC_UART0_URT0IIR ((JREG *) 0xFFFE1008) +#define JREGC_UART0_URT0FCR ((JREG *) 0xFFFE1008) +#define JREGC_UART0_URT0LCR ((JREG *) 0xFFFE100C) +#define JREGC_UART0_URT0MCR ((JREG *) 0xFFFE1010) +#define JREGC_UART0_URT0LSR ((JREG *) 0xFFFE1014) +#define JREGC_UART0_URT0MSR ((JREG *) 0xFFFE1018) +#define JREGC_UART0_URT0SCR ((JREG *) 0xFFFE101C) + +/* + * REGISTER ADDRESS DEFINITION FOR UART1 PERIPHERAL + */ +#define JREGC_UART1_URT1RFR ((JREG *) 0xFFFE2000) +#define JREGC_UART1_URT1TFR ((JREG *) 0xFFFE2000) +#define JREGC_UART1_URT1DLL ((JREG *) 0xFFFE2000) +#define JREGC_UART1_URT1IER ((JREG *) 0xFFFE2004) +#define JREGC_UART1_URT1DLM ((JREG *) 0xFFFE2004) +#define JREGC_UART1_URT1IIR ((JREG *) 0xFFFE2008) +#define JREGC_UART1_URT1FCR ((JREG *) 0xFFFE2008) +#define JREGC_UART1_URT1LCR ((JREG *) 0xFFFE200C) +#define JREGC_UART1_URT1MCR ((JREG *) 0xFFFE2010) +#define JREGC_UART1_URT1LSR ((JREG *) 0xFFFE2014) +#define JREGC_UART1_URT1MSR ((JREG *) 0xFFFE2018) +#define JREGC_UART1_URT1SCR ((JREG *) 0xFFFE201C) + +/* + * REGISTER ADDRESS DEFINITION FOR CLOCK/RESET INTERFACE + */ +#define JREGC_CRG_CRPR ((JREG *) 0xFFFE7000) +#define JREGC_CRG_CRWR ((JREG *) 0xFFFE7008) +#define JREGC_CRG_CRSR ((JREG *) 0xFFFE700C) +#define JREGC_CRG_CRDA ((JREG *) 0xFFFE7010) +#define JREGC_CRG_CRDB ((JREG *) 0xFFFE7014) +#define JREGC_CRG_CRHA ((JREG *) 0xFFFE7018) +#define JREGC_CRG_CRPA ((JREG *) 0xFFFE701C) +#define JREGC_CRG_CRPB ((JREG *) 0xFFFE7020) +#define JREGC_CRG_CRHB ((JREG *) 0xFFFE7024) +#define JREGC_CRG_CRAM ((JREG *) 0xFFFE7028) + +/* + * REGISTER BASE ADDRESS DEFINITION FOR PERIPHERAL + */ +#define JREGC_BASE_DRAM ((JREGPS_DRAMC) 0xF3000000) +#define JREGC_BASE_GPIO ((JREGPS_GPIO) 0xFFFE9000) +#define JREGC_BASE_UART0 ((JREGPS_UART0) 0xFFFE1000) +#define JREGC_BASE_UART1 ((JREGPS_UART1) 0xFFFE2000) + +#endif /* jade_H */

This patch adds support for the display controller in the MB86R01 'Jade' SoC.
Signed-off-by: Matthias Weisser matthias.weisser@graf-syteco.de --- drivers/video/Makefile | 1 + drivers/video/cfb_console.c | 2 +- drivers/video/jadegdc.c | 192 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 194 insertions(+), 1 deletions(-) create mode 100644 drivers/video/jadegdc.c
diff --git a/drivers/video/Makefile b/drivers/video/Makefile index bc00852..ad4b0c9 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -30,6 +30,7 @@ COBJS-$(CONFIG_ATMEL_LCD) += atmel_lcdfb.o COBJS-$(CONFIG_CFB_CONSOLE) += cfb_console.o COBJS-$(CONFIG_S6E63D6) += s6e63d6.o COBJS-$(CONFIG_VIDEO_CT69000) += ct69000.o +COBJS-$(CONFIG_VIDEO_JADEGDC) += jadegdc.o COBJS-$(CONFIG_VIDEO_MB862xx) += mb862xx.o COBJS-$(CONFIG_VIDEO_MX3) += mx3fb.o COBJS-$(CONFIG_VIDEO_SED13806) += sed13806.o diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index bcafb27..e23499f --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -314,7 +314,7 @@ void console_cursor (int state); #else #define SWAP16(x) (x) #define SWAP32(x) (x) -#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) +#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) || defined(CONFIG_VIDEO_JADEGDC) #define SHORTSWAP32(x) ( ((x) >> 16) | ((x) << 16) ) #else #define SHORTSWAP32(x) (x) diff --git a/drivers/video/jadegdc.c b/drivers/video/jadegdc.c new file mode 100644 index 0000000..d3f68ab --- /dev/null +++ b/drivers/video/jadegdc.c @@ -0,0 +1,192 @@ +/* + * (C) Copyright 2007-2009 + * Matthias Weisser matthias.weisser@graf-syteco.de + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * jade.c - Graphic interface for Fujitsu Jade integrated graphic + * controller. Derived from mb862xx.c + */ + +#include <common.h> + +#include <malloc.h> +#include <mb862xx.h> +#include <asm/io.h> +#include <video_fb.h> +#include "videomodes.h" + +/* + * 4MB (at the end of system RAM) + */ +#define VIDEO_MEM_SIZE 0x400000 + +#define GDC_HOST_BASE 0xF1FC0000 +#define GDC_DSP0_BASE 0xF1FD0000 +#define GDC_DSP1_BASE 0xF1FD2000 + +/* + * Graphic Device + */ +GraphicDevice jadegdc; + +void *video_hw_init(void) +{ + GraphicDevice *pGD = &jadegdc; + struct ctfb_res_modes var_mode[2]; + unsigned long *vid; + unsigned long div; + unsigned long dspBase[2]; + char *penv; + int bpp; + int i, j; + + memset(pGD, 0, sizeof(GraphicDevice)); + + dspBase[0] = GDC_DSP0_BASE; + dspBase[1] = GDC_DSP1_BASE; + + pGD->frameAdrs = GDC_HOST_BASE; + pGD->gdfIndex = GDF_15BIT_555RGB; + pGD->gdfBytesPP = 2; + + pGD->memSize = VIDEO_MEM_SIZE; + pGD->frameAdrs = PHYS_SDRAM + PHYS_SDRAM_SIZE - VIDEO_MEM_SIZE; + vid = (unsigned long *)pGD->frameAdrs; + + for (i = 0; i < 2; i++) { + char varName[32]; + u32 dcm1, dcm2, dcm3; + u16 htp, hdp, hdb, hsp, vtr, vsp, vdp; + u8 hsw, vsw; + u32 l2m, l2em, l2oa0, l2da0, l2oa1, l2da1; + u16 l2dx, l2dy, l2wx, l2wy, l2ww, l2wh; + + sprintf(varName, "gs_dsp_%d_param", i); + + if ((penv = getenv(varName)) == NULL) + if ((i == 1) || ((penv = getenv("videomode")) == NULL)) + continue; + + bpp = 0; + bpp = video_get_params(&var_mode[i], penv); + + if (bpp == 0) { + var_mode[i].xres = 640; + var_mode[i].yres = 480; + var_mode[i].pixclock = 39721; /* 25MHz */ + var_mode[i].left_margin = 48; + var_mode[i].right_margin = 16; + var_mode[i].upper_margin = 33; + var_mode[i].lower_margin = 10; + var_mode[i].hsync_len = 96; + var_mode[i].vsync_len = 2; + var_mode[i].sync = 0; + var_mode[i].vmode = 0; + } + + for (j = 0; j < var_mode[i].xres * var_mode[i].yres / 2; j++) + *vid++ = 0xFFFFFFFF; + + pGD->winSizeX = var_mode[i].xres; + pGD->winSizeY = var_mode[i].yres; + + /* LCD base clock is ~ 660MHZ. We do calculations in kHz */ + div = 660000 / (1000000000L / var_mode[i].pixclock); + if (div > 64) + div = 64; + + dcm1 = div << 8; + dcm2 = 0x00000000; + dcm3 = 0x00000000; + + htp = var_mode[i].left_margin + var_mode[i].xres + + var_mode[i].hsync_len + var_mode[i].right_margin; + hdp = var_mode[i].xres; + hdb = var_mode[i].xres; + hsp = var_mode[i].xres + var_mode[i].right_margin; + hsw = var_mode[i].hsync_len; + + vsw = var_mode[i].vsync_len; + vtr = var_mode[i].upper_margin + var_mode[i].yres + + var_mode[i].vsync_len + var_mode[i].lower_margin; + vsp = var_mode[i].yres + var_mode[i].lower_margin; + vdp = var_mode[i].yres; + + l2m = ( (var_mode[i].yres - 1) << ( 0)) | + (((var_mode[i].xres * 2) / 64) << (16)) | + ( (1) << (31)); + + l2em = (1 << 0) | (1 << 1); + + l2oa0 = pGD->frameAdrs; + l2da0 = pGD->frameAdrs; + l2oa1 = pGD->frameAdrs; + l2da1 = pGD->frameAdrs; + l2dx = 0; + l2dy = 0; + l2wx = 0; + l2wy = 0; + l2ww = var_mode[i].xres; + l2wh = var_mode[i].yres - 1; + + writel(dcm1, dspBase[i] + GC_DCM1); + writel(dcm2, dspBase[i] + GC_DCM2); + writel(dcm3, dspBase[i] + GC_DCM3); + + writew(htp, dspBase[i] + GC_HTP); + writew(hdp, dspBase[i] + GC_HDP); + writew(hdb, dspBase[i] + GC_HDB); + writew(hsp, dspBase[i] + GC_HSP); + writeb(hsw, dspBase[i] + GC_HSW); + + writeb(vsw, dspBase[i] + GC_VSW); + writew(vtr, dspBase[i] + GC_VTR); + writew(vsp, dspBase[i] + GC_VSP); + writew(vdp, dspBase[i] + GC_VDP); + + writel(l2m, dspBase[i] + GC_L2M); + writel(l2em, dspBase[i] + GC_L2EM); + writel(l2oa0, dspBase[i] + GC_L2OA0); + writel(l2da0, dspBase[i] + GC_L2DA0); + writel(l2oa1, dspBase[i] + GC_L2OA1); + writel(l2da1, dspBase[i] + GC_L2DA1); + writew(l2dx, dspBase[i] + GC_L2DX); + writew(l2dy, dspBase[i] + GC_L2DY); + writew(l2wx, dspBase[i] + GC_L2WX); + writew(l2wy, dspBase[i] + GC_L2WY); + writew(l2ww, dspBase[i] + GC_L2WW); + writew(l2wh, dspBase[i] + GC_L2WH); + + writel(dcm1 | (1 << 18) | (1 << 31), dspBase[i] + GC_DCM1); + } + + return pGD; +} + +/* + * Set a RGB color in the LUT + */ +void video_set_lut(unsigned int index, unsigned char r, + unsigned char g, unsigned char b) +{ + +}

This patch adds support for the jadecpu board using the MB86R01 'Jade' SoC from Fujitsu.
Signed-off-by: Matthias Weisser matthias.weisser@graf-syteco.de --- MAINTAINERS | 4 + MAKEALL | 1 + Makefile | 7 + board/syteco/jadecpu/Makefile | 55 ++++++ board/syteco/jadecpu/config.mk | 1 + board/syteco/jadecpu/jadecpu.c | 99 ++++++++++ board/syteco/jadecpu/lowlevel_init.S | 337 ++++++++++++++++++++++++++++++++++ include/configs/jadecpu.h | 160 ++++++++++++++++ tools/Makefile | 3 + tools/logos/syteco.bmp | Bin 0 -> 12278 bytes 10 files changed, 667 insertions(+), 0 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 9379c7e..157f437 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -671,6 +671,10 @@ Sergey Lapin slapin@ossfans.org
afeb9260 ARM926EJS (AT91SAM9260 SoC)
+Matthias Weisser matthias.weisser@graf-syteco.de + + jadecpu ARM926EJS (Jade SoC) + -------------------------------------------------------------------------
Unknown / orphaned boards: diff --git a/MAKEALL b/MAKEALL index f4599d6..841c3d6 --- a/MAKEALL +++ b/MAKEALL @@ -533,6 +533,7 @@ LIST_ARM9=" \ davinci_sffsdr \ davinci_sonata \ davinci_dm355evm \ + jadecpu \ "
######################################################################### diff --git a/Makefile b/Makefile index bcc81c9..0088d6d --- a/Makefile +++ b/Makefile @@ -2785,6 +2785,13 @@ at91sam9rlek_config : unconfig pm9263_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm926ejs pm9263 ronetix at91
+######################################################################### +## Different ARM926EJ-S Systems +######################################################################### + +jadecpu_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm926ejs jadecpu syteco jade + ######################################################################## ## ARM Integrator boards - see doc/README-integrator for more info. integratorap_config \ 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, wd@denx.de. +# +# (C) Copyright 2008 +# Stelian Pop stelian.pop@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..51dc8f7 --- /dev/null +++ b/board/syteco/jadecpu/jadecpu.c @@ -0,0 +1,99 @@ +/* + * (c) 2009 Graf-Syteco, Matthias Weisser + * matthias.weisser@graf-syteco.de + * + * (C) Copyright 2007, mycable GmbH + * Carsten Schneider cs@mycable.de, Alexander Bigga ab@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 <asm/arch/jade.h> + +DECLARE_GLOBAL_DATA_PTR; + +void multiplex_group_init(void); +void gpio_init(void); + +#if defined(CONFIG_SHOW_BOOT_PROGRESS) +void show_boot_progress(int progress) +{ + printf("Boot reached stage %d\n", progress); +} +#endif + +static inline void delay(unsigned long loops) +{ + __asm__ volatile ("1:\n" + "subs %0, %1, #1\n" + "bne 1b" : "=r" (loops) : "0" (loops)); +} + +/* + * Miscellaneous platform dependent initialisations + */ + +int board_init(void) +{ + /* arch number of Versatile Board */ + gd->bd->bi_arch_number = 0 /*MACH_TYPE_GSJADECPU*/; + /* adress of boot parameters */ + gd->bd->bi_boot_params = 0x47000000; + + gd->flags = 0; + + icache_enable(); + + /* set Multiplex Group */ + multiplex_group_init(); + + /* init GPIOs */ + gpio_init(); + + return 0; +} + +int misc_init_r(void) +{ + setenv("verify", "n"); + return 0; +} + +/* + * DRAM configuration + */ +int dram_init(void) +{ + gd->bd->bi_dram[0].start = PHYS_SDRAM; + gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE; + + return 0; +} + +/* + * Initial the Pin Multiplex Groups + */ +void multiplex_group_init(void) +{ + +} + +void gpio_init(void) +{ + +} + diff --git a/board/syteco/jadecpu/lowlevel_init.S b/board/syteco/jadecpu/lowlevel_init.S new file mode 100644 index 0000000..727eda5 --- /dev/null +++ b/board/syteco/jadecpu/lowlevel_init.S @@ -0,0 +1,337 @@ +/* + * Board specific setup info + * + * (C) Copyright 2007, mycable GmbH + * Carsten Schneider cs@mycable.de, Alexander Bigga ab@mycable.de + * + * (C) Copyright 2007, mycable GmbH + * Carsten Schneider cs@mycable.de, Alexander Bigga ab@mycable.de + * + * (C) Copyright 2003, ARM Ltd. + * Philippe Robin, philippe.robin@arm.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 <config.h> +#include <version.h> + +/* Set up the platform, once the cpu has been initialized */ +.globl lowlevel_init +lowlevel_init: +/* + * Initialize Clock Reset Generator (CRG) + */ + + ldr r0, =0xfffe7000 /* CRG base address */ + + /* Not change the initial value that is set by external pin.*/ +1: ldr r2, [r0, #0x00] /* Wait for PLLREADY */ + tst r2, #0x00000100 + beq 1b + + /* Set clock gate control */ + ldr r1, =0x0000ffff /* Open */ + str r1, [r0, #0x18] /* CRHA: AHB clock */ + ldr r1, =0x0000ffff /* Open */ + str r1, [r0, #0x1c] /* CRPA: APB-A clock */ + ldr r1, =0xfffffffe /* Close */ + str r1, [r0, #0x20] /* CRPA: APB-B clock */ + ldr r1, =0x0000ffff /* Open */ + str r1, [r0, #0x24] /* CRHB: ExtAHB clock */ + ldr r1, =0xffffffef /* Open ARM926EJ-S only */ + str r1, [r0, #0x28] /* CRAM: ARM core clock */ + +/* + * Initialize External Bus Interface + */ +#define MEMC_BASE 0xfffc0000 + + ldr r0, =MEMC_BASE /* MEMC base address */ + + /* + * SRAM/flash _mode_ registers (XCS4 is set by external pin) + * XCS0: Ethernet Controller + * XCS2: not used (?) + * XCS4: Flash + */ + ldr r1, =0x00000001 /* XCS0: 16bit */ + str r1, [r0, #0x00] + ldr r1, =0x00000001 /* XCS2: 16bit */ + str r1, [r0, #0x08] + ldr r1, =0x00000021 /* XCS4: 16bit, */ + str r1, [r0, #0x10] + + /* SRAM/flash _timing_ registers (HCLK=83.3/80MHz) */ + ldr r1, =0x055ff00f /* XCS0: */ + str r1, [r0, #0x20] + ldr r1, =0x03061008 /* XCS2: not used */ + str r1, [r0, #0x28] + ldr r1, =0x03061804 /* XCS4: FLASH ROM */ + str r1, [r0, #0x30] + + /* SRAM/flash _area_ registers (address of XCS4 is set by hardware) */ + ldr r1, =0x00000020 + str r1, [r0, #0x40] + ldr r1, =0x00000050 /* XCS2: 0x05000000/2MB */ + str r1, [r0, #0x48] + ldr r1, =0x001f0000 /* XCS4: 32 MB */ + str r1, [r0, #0x50] + +/* + * GPIO Settings + */ + +/* + * Initialize DDR2 Controller + */ +#define CCNT_BASE 0xfff42000 +#define CDEBUG1 0xec + +#define DDR2C_BASE 0xf3000000 +#define DRIC 0x00 +#define DRIC1 0x02 +#define DRIC2 0x04 +#define DRCA 0x06 +#define DRCM 0x08 +#define DRCST1 0x0a +#define DRCST2 0x0c +#define DRCR 0x0e +#define DRCF 0x20 +#define DRASR 0x30 +#define DRIMS 0x50 +#define DROS 0x60 +#define DRIBSLI 0x62 +#define DRIBSODT1 0x64 +#define DRIBSOCD 0x66 +#define DRIBSOCD2 0x68 +#define DROABA 0x70 +#define DROBV 0x80 +#define DROBS 0x84 +#define DROBSR1 0x86 +#define DROBSR2 0x88 +#define DROBSR3 0x8a +#define DROBSR4 0x8c +#define DRIMR1 0x90 +#define DRIMR2 0x92 +#define DRIMR3 0x94 +#define DRIMR4 0x96 +#define DROISR1 0x98 +#define DROISR2 0x9a + + .macro wait, count + mov r4, #\count +3: + subs r4, r4, #0x1 + bne 3b + + .endm + + /* Wait for PLL LOCK up time or more */ + wait 20 + + /* + * (2) Initialize DDRIF + */ + ldr r0, =DDR2C_BASE /* DDR2C base address */ + ldr r1, =0x5555 + strh r1, [r0, #DRIMS] + + /* + * (3) Wait for 20MCKPs(120nsec) or more + */ + wait 20 + + /* + * (4) IRESET/IUSRRST release + /* + ldr r0, =CCNT_BASE /* CCNT base address */ + ldr r1, =0x00000002 + str r1, [r0, #CDEBUG1] + + /* + * (5) Wait for 20MCKPs(120nsec) or more + */ + wait 20 + + /* + * (6) IDLLRST release + */ + ldr r0, =CCNT_BASE /* CCNT base address */ + ldr r1, =0x00000003 + str r1, [r0, #CDEBUG1] + + /* + * (7+8) Wait for 200us(=200000ns) or more (DDR2 Spec) + */ + wait 33536 + + /* + * (9) MCKE ON + */ + ldr r0, =DDR2C_BASE /* DDR2C base address */ + ldr r1, =0x003f + strh r1, [r0, #DRIC1] + ldr r1, =0x0000 + strh r1, [r0, #DRIC2] + ldr r1, =0xc124 /* 512Mbit DDR2SDRAM x 2 */ + strh r1, [r0, #DRCA] + ldr r1, =0xc000 + strh r1, [r0, #DRIC] + + /* + * (10) Initialize SDRAM + */ + ldr r0, =DDR2C_BASE /* DDR2C base address */ + ldr r1, =0xc001 /* NOP Command */ + strh r1, [r0, #DRIC] + + wait 67 /* 400ns wait */ + + ldr r1, =0x0017 /* PALL Command */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0400 + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + ldr r1, =0x0006 /* EMR(2) command */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0000 + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + ldr r1, =0x0007 /* EMR(3) command */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0000 + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + ldr r1, =0x0005 /* EMR(1) command */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0000 /* Extended Mode Register 1 clear*/ + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + ldr r1, =0x0004 /* MRS command */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0532 /* Mode Register */ + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + wait 200 + + ldr r1, =0x0017 /* PALL command */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0400 + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + ldr r1, =0x000f /* REF command 1 */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0000 /* (changed) */ + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + wait 18 /* 105ns wait */ + + ldr r1, =0x0004 /* MRS command */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0432 + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + wait 200 /* MRS to OCD: 200clock */ + + ldr r1, =0x0005 /* EMR(1) command */ + strh r1, [r0, #DRIC1] + ldr r1, =0x0380 /* Extended Mode Register 1 set OCD */ + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + ldr r1, =0x0005 /* EMR(1) command */ + strh r1, [r0, #DRIC1] + /* ldr r1, =0x0044 */ + ldr r1, =0x0002 /* EMR(1) set reduced strength */ + strh r1, [r0, #DRIC2] + ldr r1, =0xc001 + strh r1, [r0, #DRIC] + + ldr r1, =0x0032 /* Set BT, AL, CL, BL */ + strh r1, [r0, #DRCM] + + ldr r1, =0x3418 /* Set tRCD, tRAS, tRP, tRC */ + strh r1, [r0, #DRCST1] + + /* ldr r1, =0x2e22 */ /* Set tRFC, tRRD, tWR */ + ldr r1, =0x6e32 + strh r1, [r0, #DRCST2] + + /* ldr r1, =0x0051 */ /* Set CNTL, REF_CNT*/ + ldr r1, =0x0141 /* (changed) */ + strh r1, [r0, #DRCR] + + ldr r1, =0x0002 /* Set Address FIFO (8 steps) */ + strh r1, [r0, #DRCF] + + ldr r1, =0x0001 /* Enable AXI Cache */ + strh r1, [r0, #DRASR] + + /* + * (11) ODT setting + */ + ldr r0, =DDR2C_BASE /* DDR2C base address */ + ldr r1, =0x0001 + strh r1, [r0, #DROBS] + ldr r1, =0x0103 /* ODT auto adjustment on */ + strh r1, [r0, #DROABA] + ldr r1, =0x003F /* Set ODT to on 50/100 Ohm */ + strh r1, [r0, #DRIBSODT1] + + /* + * (12) Shift to ODTCONT ON (SDRAM side) and DDR2C usual operation mode + */ + ldr r0, =DDR2C_BASE /* DDR2C base address */ + ldr r1, =0x0001 + strh r1, [r0, #DROS] + ldr r1, =0x4000 + strh r1, [r0, #DRIC] + + mov pc, lr + +/* + * Reset CPU by writing SWRSTREQ to CRSR-register + */ +.globl reset_cpu +reset_cpu: + ldr r0, =0xfffe7000 /* CRG Base address */ + ldr r2, =0x00000002 /* SWRSTREQ */ + str r2, [r0, #0x0c] + +_loop_forever: + b _loop_forever + diff --git a/include/configs/jadecpu.h b/include/configs/jadecpu.h new file mode 100644 index 0000000..235d0b6 --- /dev/null +++ b/include/configs/jadecpu.h @@ -0,0 +1,160 @@ +/* + * (C) Copyright 2007-2008 + * Matthias Weisser matthias.weisser@graf-syteco.de + * + * Configuation settings for the AT91SAM9260EK & AT91SAM9G20EK boards. + * + * 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 + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#define CONFIG_SHOW_BOOT_PROGRESS 1 + +#define CONFIG_SYS_HZ 1000 +#define CONFIG_JADE_IOCLK (41500000) +#define CONFIG_SYS_TIMERBASE 0xfffe0000 + +#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ +#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */ + +#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1 + +/* + * Hardware drivers + */ + +/* + * Serial + */ +#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE (-4) +#define CONFIG_SYS_NS16550_CLK CONFIG_JADE_IOCLK +#define CONFIG_SYS_NS16550_COM1 0xfffe1000 +#define CONFIG_SYS_NS16550_COM2 0xfffe2000 + +#define CONFIG_CONS_INDEX 1 + +/* + * Ethernet + */ +#define CONFIG_DRIVER_SMC911X 1 +#define CONFIG_DRIVER_SMC911X_BASE 0x02000000 +#define CONFIG_DRIVER_SMC911X_16_BIT + +/* + * Video + */ +#define CONFIG_VIDEO +#define CONFIG_VIDEO_JADEGDC +#define CONFIG_CFB_CONSOLE +#define CONFIG_SYS_CONSOLE_IS_IN_ENV +#define CONFIG_VIDEO_LOGO +#define CONFIG_SPLASH_SCREEN +#define CONFIG_VIDEO_BMP_LOGO +#define VIDEO_KBD_INIT_FCT 0 +#define VIDEO_TSTC_FCT serial_tstc +#define VIDEO_GETC_FCT serial_getc + +/* + * BOOTP options + */ +#define CONFIG_BOOTP_BOOTFILESIZE 1 +#define CONFIG_BOOTP_BOOTPATH 1 +#define CONFIG_BOOTP_GATEWAY 1 +#define CONFIG_BOOTP_HOSTNAME 1 + +/* + * Command line configuration. + */ +#include <config_cmd_default.h> +#undef CONFIG_CMD_BDI +#undef CONFIG_CMD_FPGA +#undef CONFIG_CMD_IMI +#undef CONFIG_CMD_IMLS +#undef CONFIG_CMD_LOADS +#undef CONFIG_CMD_SOURCE + +#define CONFIG_CMD_IMI 1 +#define CONFIG_CMD_ELF 1 +#define CONFIG_CMD_PING 1 +#define CONFIG_CMD_DHCP 1 +#define CONFIG_CMD_BMP 1 +/* #define CONFIG_CMD_USB 1 */ + +/* SDRAM */ +#define CONFIG_NR_DRAM_BANKS 1 +#define PHYS_SDRAM 0x40000000 /* Start address of DDRRAM */ +#define PHYS_SDRAM_SIZE 0x08000000 /* 128 megs */ + +/* + * FLASH and environment organization + */ +#define CONFIG_SYS_FLASH_BASE 0x10000000 +#define CONFIG_SYS_MAX_FLASH_BANKS 1 +#define CONFIG_SYS_MAX_FLASH_SECT 256 +#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE + +#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x00040000) +#define CONFIG_ENV_IS_IN_FLASH 1 +#define CONFIG_ENV_SECT_SIZE (128 * 1024) +#define CONFIG_ENV_SIZE (128 * 1024) + +/* + * CFI FLASH driver setup + */ +#define CONFIG_SYS_FLASH_CFI 1 +#define CONFIG_FLASH_CFI_DRIVER 1 +#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1 /* ~10x faster */ + +#define CONFIG_SYS_LOAD_ADDR 0x40000000 /* load address */ + +#define CONFIG_SYS_MEMTEST_START (PHYS_SDRAM + (512*1024)) +#define CONFIG_SYS_MEMTEST_END (PHYS_SDRAM + PHYS_SDRAM_SIZE) + +#define CONFIG_BAUDRATE 115200 +#define CONFIG_SYS_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 } + +#define CONFIG_SYS_PROMPT "jade> " +#define CONFIG_SYS_CBSIZE 256 +#define CONFIG_SYS_MAXARGS 16 +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16) +#define CONFIG_SYS_LONGHELP 1 +#define CONFIG_CMDLINE_EDITING 1 +#define CONFIG_BOOTDELAY 2 + +#define ROUND(A, B) (((A) + (B)) & ~((B) - 1)) +/* + * Size of malloc() pool + */ +#define CONFIG_SYS_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 0x1000) +#define CONFIG_SYS_GBL_DATA_SIZE 128 /* 128 bytes for initial data */ + +#define CONFIG_STACKSIZE (32*1024) /* regular stack */ + +#ifdef CONFIG_USE_IRQ +#error CONFIG_USE_IRQ not supported +#endif + +#endif /* __CONFIG_H */ + diff --git a/tools/Makefile b/tools/Makefile index 43c284c..456e9dd --- a/tools/Makefile +++ b/tools/Makefile @@ -125,6 +125,9 @@ endif ifeq ($(VENDOR),ronetix) LOGO_BMP= logos/ronetix.bmp endif +ifeq ($(VENDOR),syteco) +LOGO_BMP= logos/syteco.bmp +endif
# now $(obj) is defined SRCS += $(addprefix $(SRCTREE)/,$(EXT_OBJ_FILES-y:.o=.c)) diff --git a/tools/logos/syteco.bmp b/tools/logos/syteco.bmp new file mode 100644 index 0000000000000000000000000000000000000000..141ee8e10edd85caa52b9501e3a4381b81fe772d GIT binary patch literal 12278 zcmeI0TdvbE5Qg2PNJwmiH{MtP??`Ncopb>#s;lC)jN^<mx5VSvEtQTf72hWQzx=+$ zhaW%xehW+behuL(l>Wf)7yK^a^U@yw`TZsRu;KA|g!}yt)yLX&3%A>CEstzCFdP^T zd`t(f&J=<Se1cz6Vz2%xn8}kC7#8>(XPCrZWxxz)aQVUR*)s#%*H9UWBXrEA1QO&t zYstvm(XSvSGDIqb%bIEx@j1x-j~>EAlo=D;a@~oAc7b6ib0rJDLd@MXyUuWw7M5lh zfih3b_~Yq<Q0mM4sm&RQGEdX7KJAq(ZPTPs8d(~qNu#u~oQ5$_npsY+84IPE<=mPv zQ97`kn5KBBu^pKzRr@FeV}ujV0E-%key8+JPwjR%PSg-fL+v?Zuuzm~N*8k07B$EL zgOci{u%n!(&w*xPvQV*M3>M{ZnIT6kFp5Q@?7&zo5+*A-3K2%KXp{&O|B7Qh)*L|? zpC$*w76J<5c_x@E8fJ%u!)!vHl9NR{v&%xA@eq(0pD%ivp1}fG^iANr-ANEg*UW!q z5!3Wi7BY`!(b&_ei5$V^gNKdw934IaoiAk}Vud1NtB)*p`12iK3IL=Vr3MQz1&YHL z?g!T5(G$}<te52r@ir{UnfLG|IrA<o(V5;X`SwN+d0eDBdHS-))l0rbu^5}`5<7SE zRg$sjdj!8hEd8L`mjx~<>uXXIGz-iLz0M#^oeMge`4T14zy+4)zzCKVrZ7jqYdS;U zK)-geMY1HAGK&er_EJ$=1t^vU#=&C1z*A)XDyd=veR|!7ux30g3PzkUMQIhlSTc-@ zMZgG@*7F4qsH=~K!AO*L798Qkj$n(W{oIW!FU?{FOAaOLb{j}7ih~CEHp_s~Z*R(> z0tFpD&{ka*OeKq?NOh&;XfR-ESl~bKOcsZ-5uyjHVwp@9L&w#mVCq;V!xxvX86;tv zS@1$`sudaqOe;&gcN7#4x;acE%W?(k1=GfoP<lDj#DXX-Fy!*w!m^>X!E6i4`vtgM zK%4GqiqZ>a!!mBRTo7yU$TR*rpd^+A%JbZc6eD%0s`up(SQ{|tgv^IC(h;nGKxaB^ J$T5U;;2&8xIXwUX
literal 0 HcmV?d00001

+{
- printf("Boot reached stage %d\n", progress);
+} +#endif
+static inline void delay(unsigned long loops) +{
- __asm__ volatile ("1:\n"
"subs %0, %1, #1\n"
"bne 1b" : "=r" (loops) : "0" (loops));
+}
no please remove
+/*
- Miscellaneous platform dependent initialisations
- */
+int board_init(void) +{
- /* arch number of Versatile Board */
- gd->bd->bi_arch_number = 0 /*MACH_TYPE_GSJADECPU*/;
nack the arch number must be register properly
- /* adress of boot parameters */
- gd->bd->bi_boot_params = 0x47000000;
please use this style RAM_BASE + X
- gd->flags = 0;
- icache_enable();
- /* set Multiplex Group */
- multiplex_group_init();
no please remove
- /* init GPIOs */
- gpio_init();
no please remove
- return 0;
+}
+int misc_init_r(void) +{
- setenv("verify", "n");
- return 0;
+}
+/*
- DRAM configuration
- */
+int dram_init(void) +{
- gd->bd->bi_dram[0].start = PHYS_SDRAM;
- gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
- return 0;
+}
+/*
- Initial the Pin Multiplex Groups
- */
+void multiplex_group_init(void) +{
+}
+void gpio_init(void) +{
+}
diff --git a/board/syteco/jadecpu/lowlevel_init.S b/board/syteco/jadecpu/lowlevel_init.S new file mode 100644 index 0000000..727eda5 --- /dev/null +++ b/board/syteco/jadecpu/lowlevel_init.S @@ -0,0 +1,337 @@ +/*
- Board specific setup info
- (C) Copyright 2007, mycable GmbH
- Carsten Schneider cs@mycable.de, Alexander Bigga ab@mycable.de
- (C) Copyright 2007, mycable GmbH
- Carsten Schneider cs@mycable.de, Alexander Bigga ab@mycable.de
- (C) Copyright 2003, ARM Ltd.
- Philippe Robin, philippe.robin@arm.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 <config.h> +#include <version.h>
+/* Set up the platform, once the cpu has been initialized */ +.globl lowlevel_init +lowlevel_init: +/*
- Initialize Clock Reset Generator (CRG)
- */
- ldr r0, =0xfffe7000 /* CRG base address */
- /* Not change the initial value that is set by external pin.*/
+1: ldr r2, [r0, #0x00] /* Wait for PLLREADY */
- tst r2, #0x00000100
- beq 1b
- /* Set clock gate control */
- ldr r1, =0x0000ffff /* Open */
- str r1, [r0, #0x18] /* CRHA: AHB clock */
- ldr r1, =0x0000ffff /* Open */
- str r1, [r0, #0x1c] /* CRPA: APB-A clock */
- ldr r1, =0xfffffffe /* Close */
- str r1, [r0, #0x20] /* CRPA: APB-B clock */
- ldr r1, =0x0000ffff /* Open */
- str r1, [r0, #0x24] /* CRHB: ExtAHB clock */
- ldr r1, =0xffffffef /* Open ARM926EJ-S only */
- str r1, [r0, #0x28] /* CRAM: ARM core clock */
+/*
- Initialize External Bus Interface
- */
+#define MEMC_BASE 0xfffc0000
- ldr r0, =MEMC_BASE /* MEMC base address */
- /*
* SRAM/flash _mode_ registers (XCS4 is set by external pin)
* XCS0: Ethernet Controller
* XCS2: not used (?)
* XCS4: Flash
*/
- ldr r1, =0x00000001 /* XCS0: 16bit */
- str r1, [r0, #0x00]
- ldr r1, =0x00000001 /* XCS2: 16bit */
- str r1, [r0, #0x08]
- ldr r1, =0x00000021 /* XCS4: 16bit, */
- str r1, [r0, #0x10]
- /* SRAM/flash _timing_ registers (HCLK=83.3/80MHz) */
- ldr r1, =0x055ff00f /* XCS0: */
- str r1, [r0, #0x20]
- ldr r1, =0x03061008 /* XCS2: not used */
- str r1, [r0, #0x28]
- ldr r1, =0x03061804 /* XCS4: FLASH ROM */
- str r1, [r0, #0x30]
- /* SRAM/flash _area_ registers (address of XCS4 is set by hardware) */
- ldr r1, =0x00000020
- str r1, [r0, #0x40]
- ldr r1, =0x00000050 /* XCS2: 0x05000000/2MB */
- str r1, [r0, #0x48]
- ldr r1, =0x001f0000 /* XCS4: 32 MB */
- str r1, [r0, #0x50]
+/*
- GPIO Settings
- */
+/*
- Initialize DDR2 Controller
- */
+#define CCNT_BASE 0xfff42000
please move define to proper header
+#define CDEBUG1 0xec
+#define DDR2C_BASE 0xf3000000 +#define DRIC 0x00 +#define DRIC1 0x02 +#define DRIC2 0x04 +#define DRCA 0x06 +#define DRCM 0x08 +#define DRCST1 0x0a +#define DRCST2 0x0c +#define DRCR 0x0e +#define DRCF 0x20 +#define DRASR 0x30 +#define DRIMS 0x50 +#define DROS 0x60 +#define DRIBSLI 0x62 +#define DRIBSODT1 0x64 +#define DRIBSOCD 0x66 +#define DRIBSOCD2 0x68 +#define DROABA 0x70 +#define DROBV 0x80 +#define DROBS 0x84 +#define DROBSR1 0x86 +#define DROBSR2 0x88 +#define DROBSR3 0x8a +#define DROBSR4 0x8c +#define DRIMR1 0x90 +#define DRIMR2 0x92 +#define DRIMR3 0x94 +#define DRIMR4 0x96 +#define DROISR1 0x98 +#define DROISR2 0x9a
what is this define?
- .macro wait, count
- mov r4, #\count
+3:
- subs r4, r4, #0x1
- bne 3b
- .endm
please use include/asm-arm/macro.h
- /* Wait for PLL LOCK up time or more */
- wait 20
- /*
* (2) Initialize DDRIF
*/
- ldr r0, =DDR2C_BASE /* DDR2C base address */
- ldr r1, =0x5555
- strh r1, [r0, #DRIMS]
- /*
* (3) Wait for 20MCKPs(120nsec) or more
*/
- wait 20
- /*
* (4) IRESET/IUSRRST release
- /*
- ldr r0, =CCNT_BASE /* CCNT base address */
- ldr r1, =0x00000002
- str r1, [r0, #CDEBUG1]
- /*
* (5) Wait for 20MCKPs(120nsec) or more
*/
- wait 20
- /*
* (6) IDLLRST release
*/
- ldr r0, =CCNT_BASE /* CCNT base address */
- ldr r1, =0x00000003
- str r1, [r0, #CDEBUG1]
- /*
* (7+8) Wait for 200us(=200000ns) or more (DDR2 Spec)
*/
- wait 33536
- /*
* (9) MCKE ON
*/
- ldr r0, =DDR2C_BASE /* DDR2C base address */
- ldr r1, =0x003f
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0000
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc124 /* 512Mbit DDR2SDRAM x 2 */
- strh r1, [r0, #DRCA]
- ldr r1, =0xc000
- strh r1, [r0, #DRIC]
- /*
* (10) Initialize SDRAM
*/
- ldr r0, =DDR2C_BASE /* DDR2C base address */
- ldr r1, =0xc001 /* NOP Command */
- strh r1, [r0, #DRIC]
- wait 67 /* 400ns wait */
- ldr r1, =0x0017 /* PALL Command */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0400
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- ldr r1, =0x0006 /* EMR(2) command */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0000
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- ldr r1, =0x0007 /* EMR(3) command */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0000
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- ldr r1, =0x0005 /* EMR(1) command */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0000 /* Extended Mode Register 1 clear*/
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- ldr r1, =0x0004 /* MRS command */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0532 /* Mode Register */
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- wait 200
- ldr r1, =0x0017 /* PALL command */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0400
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- ldr r1, =0x000f /* REF command 1 */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0000 /* (changed) */
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- wait 18 /* 105ns wait */
- ldr r1, =0x0004 /* MRS command */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0432
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- wait 200 /* MRS to OCD: 200clock */
- ldr r1, =0x0005 /* EMR(1) command */
- strh r1, [r0, #DRIC1]
- ldr r1, =0x0380 /* Extended Mode Register 1 set OCD */
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- ldr r1, =0x0005 /* EMR(1) command */
- strh r1, [r0, #DRIC1]
- /* ldr r1, =0x0044 */
- ldr r1, =0x0002 /* EMR(1) set reduced strength */
- strh r1, [r0, #DRIC2]
- ldr r1, =0xc001
- strh r1, [r0, #DRIC]
- ldr r1, =0x0032 /* Set BT, AL, CL, BL */
- strh r1, [r0, #DRCM]
- ldr r1, =0x3418 /* Set tRCD, tRAS, tRP, tRC */
- strh r1, [r0, #DRCST1]
- /* ldr r1, =0x2e22 */ /* Set tRFC, tRRD, tWR */
- ldr r1, =0x6e32
- strh r1, [r0, #DRCST2]
- /* ldr r1, =0x0051 */ /* Set CNTL, REF_CNT*/
- ldr r1, =0x0141 /* (changed) */
- strh r1, [r0, #DRCR]
- ldr r1, =0x0002 /* Set Address FIFO (8 steps) */
- strh r1, [r0, #DRCF]
- ldr r1, =0x0001 /* Enable AXI Cache */
- strh r1, [r0, #DRASR]
- /*
* (11) ODT setting
*/
- ldr r0, =DDR2C_BASE /* DDR2C base address */
- ldr r1, =0x0001
- strh r1, [r0, #DROBS]
- ldr r1, =0x0103 /* ODT auto adjustment on */
- strh r1, [r0, #DROABA]
- ldr r1, =0x003F /* Set ODT to on 50/100 Ohm */
- strh r1, [r0, #DRIBSODT1]
- /*
* (12) Shift to ODTCONT ON (SDRAM side) and DDR2C usual operation mode
*/
- ldr r0, =DDR2C_BASE /* DDR2C base address */
- ldr r1, =0x0001
- strh r1, [r0, #DROS]
- ldr r1, =0x4000
- strh r1, [r0, #DRIC]
- mov pc, lr
+/*
- Reset CPU by writing SWRSTREQ to CRSR-register
- */
+.globl reset_cpu +reset_cpu:
- ldr r0, =0xfffe7000 /* CRG Base address */
- ldr r2, =0x00000002 /* SWRSTREQ */
- str r2, [r0, #0x0c]
+_loop_forever:
b _loop_forever
is it board or soc specific reset?
this ram init is board or soc specific?
diff --git a/include/configs/jadecpu.h b/include/configs/jadecpu.h new file mode 100644 index 0000000..235d0b6 --- /dev/null +++ b/include/configs/jadecpu.h @@ -0,0 +1,160 @@ +/*
- (C) Copyright 2007-2008
- Matthias Weisser matthias.weisser@graf-syteco.de
- Configuation settings for the AT91SAM9260EK & AT91SAM9G20EK boards.
- 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
- */
+#ifndef __CONFIG_H +#define __CONFIG_H
+#define CONFIG_SHOW_BOOT_PROGRESS 1
+#define CONFIG_SYS_HZ 1000 +#define CONFIG_JADE_IOCLK (41500000) +#define CONFIG_SYS_TIMERBASE 0xfffe0000
I guess it's soc specific so please move it to proper header
+#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */ +#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
+#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1
+/*
- Hardware drivers
- */
+/*
- Serial
- */
+#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE (-4) +#define CONFIG_SYS_NS16550_CLK CONFIG_JADE_IOCLK +#define CONFIG_SYS_NS16550_COM1 0xfffe1000 +#define CONFIG_SYS_NS16550_COM2 0xfffe2000
+#define CONFIG_CONS_INDEX 1
+/*
- Ethernet
- */
+#define CONFIG_DRIVER_SMC911X 1 +#define CONFIG_DRIVER_SMC911X_BASE 0x02000000 +#define CONFIG_DRIVER_SMC911X_16_BIT
+/*
- Video
- */
+#define CONFIG_VIDEO +#define CONFIG_VIDEO_JADEGDC +#define CONFIG_CFB_CONSOLE +#define CONFIG_SYS_CONSOLE_IS_IN_ENV +#define CONFIG_VIDEO_LOGO +#define CONFIG_SPLASH_SCREEN +#define CONFIG_VIDEO_BMP_LOGO +#define VIDEO_KBD_INIT_FCT 0 +#define VIDEO_TSTC_FCT serial_tstc +#define VIDEO_GETC_FCT serial_getc
?? why?
+/*
- BOOTP options
- */
+#define CONFIG_BOOTP_BOOTFILESIZE 1 +#define CONFIG_BOOTP_BOOTPATH 1 +#define CONFIG_BOOTP_GATEWAY 1 +#define CONFIG_BOOTP_HOSTNAME 1
+/*
- Command line configuration.
- */
+#include <config_cmd_default.h> +#undef CONFIG_CMD_BDI +#undef CONFIG_CMD_FPGA +#undef CONFIG_CMD_IMI +#undef CONFIG_CMD_IMLS +#undef CONFIG_CMD_LOADS +#undef CONFIG_CMD_SOURCE
+#define CONFIG_CMD_IMI 1 +#define CONFIG_CMD_ELF 1 +#define CONFIG_CMD_PING 1 +#define CONFIG_CMD_DHCP 1 +#define CONFIG_CMD_BMP 1 +/* #define CONFIG_CMD_USB 1 */
please no dead code
Best Regards, J.

Hello Jean-Christophe
+int board_init(void) +{
- /* arch number of Versatile Board */
- gd->bd->bi_arch_number = 0 /*MACH_TYPE_GSJADECPU*/;
nack
How to get a arch number? As I don't use Linux on that board I don't think I need one. What is the right way to handle such a situation? Dont't set bi_arch_number at all?
+#define CCNT_BASE 0xfff42000
please move define to proper header
+#define CDEBUG1 0xec
+#define DDR2C_BASE 0xf3000000 +#define DRIC 0x00 +#define DRIC1 0x02 +#define DRIC2 0x04 +#define DRCA 0x06 +#define DRCM 0x08 +#define DRCST1 0x0a +#define DRCST2 0x0c +#define DRCR 0x0e +#define DRCF 0x20 +#define DRASR 0x30 +#define DRIMS 0x50 +#define DROS 0x60 +#define DRIBSLI 0x62 +#define DRIBSODT1 0x64 +#define DRIBSOCD 0x66 +#define DRIBSOCD2 0x68 +#define DROABA 0x70 +#define DROBV 0x80 +#define DROBS 0x84 +#define DROBSR1 0x86 +#define DROBSR2 0x88 +#define DROBSR3 0x8a +#define DROBSR4 0x8c +#define DRIMR1 0x90 +#define DRIMR2 0x92 +#define DRIMR3 0x94 +#define DRIMR4 0x96 +#define DROISR1 0x98 +#define DROISR2 0x9a
what is this define?
I will check this and move the needed ones to jade.h
- .macro wait, count
- mov r4, #\count
+3:
- subs r4, r4, #0x1
- bne 3b
- .endm
please use include/asm-arm/macro.h
I don't have this file here. Is it currently included in the master branch of u-boot?
+/*
- Reset CPU by writing SWRSTREQ to CRSR-register
- */
+.globl reset_cpu +reset_cpu:
- ldr r0, =0xfffe7000 /* CRG Base address */
- ldr r2, =0x00000002 /* SWRSTREQ */
- str r2, [r0, #0x0c]
+_loop_forever:
b _loop_forever
is it board or soc specific reset?
Reset is soc specific. I will move it to reset.c in the soc dir. Right?
this ram init is board or soc specific?
RAM init is board specific as the soc could use other RAM configurations on other boards. So I think it should stay here.
+#define CONFIG_SYS_HZ 1000 +#define CONFIG_JADE_IOCLK (41500000) +#define CONFIG_SYS_TIMERBASE 0xfffe0000
I guess it's soc specific so please move it to proper header
For the timer base, yes.
+#define VIDEO_KBD_INIT_FCT 0 +#define VIDEO_TSTC_FCT serial_tstc +#define VIDEO_GETC_FCT serial_getc
?? why?
Well, copy + paste from other board. Even if video is stdout/stdin serial port is used for input. Better way would be...?
I will fix the points from the other mails also.
Thanks for your time, Matthias
------------------------------------ Amtsgericht Freiburg HRA 602707 Ust. ID-Nr.: DE232464428
Geschäftsführer: Dipl. Ing. (FH) Martin Graf Dipl. Ing. (FH) David Graf Dipl. Inf. Fabian Graf
Komplementärin: GRAF-SYTECO Verwaltungs-GmbH Amtsgericht Freiburg HRB 602868 ------------------------------------

On 08:43 Thu 09 Jul , Matthias Weisser wrote:
Hello Jean-Christophe
+int board_init(void) +{
- /* arch number of Versatile Board */
- gd->bd->bi_arch_number = 0 /*MACH_TYPE_GSJADECPU*/;
nack
How to get a arch number? As I don't use Linux on that board I don't think I need one. What is the right way to handle such a situation? Dont't set bi_arch_number at all?
you have no plan to support linux? if not, just do not add it and disable linux boot support btw please put a comment in the config about it
+#define CCNT_BASE 0xfff42000
please move define to proper header
+#define CDEBUG1 0xec
+#define DDR2C_BASE 0xf3000000 +#define DRIC 0x00 +#define DRIC1 0x02 +#define DRIC2 0x04 +#define DRCA 0x06 +#define DRCM 0x08 +#define DRCST1 0x0a +#define DRCST2 0x0c +#define DRCR 0x0e +#define DRCF 0x20 +#define DRASR 0x30 +#define DRIMS 0x50 +#define DROS 0x60 +#define DRIBSLI 0x62 +#define DRIBSODT1 0x64 +#define DRIBSOCD 0x66 +#define DRIBSOCD2 0x68 +#define DROABA 0x70 +#define DROBV 0x80 +#define DROBS 0x84 +#define DROBSR1 0x86 +#define DROBSR2 0x88 +#define DROBSR3 0x8a +#define DROBSR4 0x8c +#define DRIMR1 0x90 +#define DRIMR2 0x92 +#define DRIMR3 0x94 +#define DRIMR4 0x96 +#define DROISR1 0x98 +#define DROISR2 0x9a
what is this define?
I will check this and move the needed ones to jade.h
- .macro wait, count
- mov r4, #\count
+3:
- subs r4, r4, #0x1
- bne 3b
- .endm
please use include/asm-arm/macro.h
I don't have this file here. Is it currently included in the master branch of u-boot?
yes
+/*
- Reset CPU by writing SWRSTREQ to CRSR-register
- */
+.globl reset_cpu +reset_cpu:
- ldr r0, =0xfffe7000 /* CRG Base address */
- ldr r2, =0x00000002 /* SWRSTREQ */
- str r2, [r0, #0x0c]
+_loop_forever:
b _loop_forever
is it board or soc specific reset?
Reset is soc specific. I will move it to reset.c in the soc dir. Right?
yes please
this ram init is board or soc specific?
RAM init is board specific as the soc could use other RAM configurations on other boards. So I think it should stay here.
+#define CONFIG_SYS_HZ 1000 +#define CONFIG_JADE_IOCLK (41500000) +#define CONFIG_SYS_TIMERBASE 0xfffe0000
I guess it's soc specific so please move it to proper header
For the timer base, yes.
+#define VIDEO_KBD_INIT_FCT 0 +#define VIDEO_TSTC_FCT serial_tstc +#define VIDEO_GETC_FCT serial_getc
?? why?
Well, copy + paste from other board. Even if video is stdout/stdin serial port is used for input. Better way would be...?
please use device_t in this case and set via preboot the correct stdout/stderr you can also consider to add iomux support so you can use both at the sametime
Best Regards, J.

On 16:02 Wed 08 Jul , Matthias Weisser wrote:
This patch adds support for the display controller in the MB86R01 'Jade' SoC.
Signed-off-by: Matthias Weisser matthias.weisser@graf-syteco.de
drivers/video/Makefile | 1 + drivers/video/cfb_console.c | 2 +- drivers/video/jadegdc.c | 192 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 194 insertions(+), 1 deletions(-) create mode 100644 drivers/video/jadegdc.c
diff --git a/drivers/video/Makefile b/drivers/video/Makefile index bc00852..ad4b0c9 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -30,6 +30,7 @@ COBJS-$(CONFIG_ATMEL_LCD) += atmel_lcdfb.o COBJS-$(CONFIG_CFB_CONSOLE) += cfb_console.o COBJS-$(CONFIG_S6E63D6) += s6e63d6.o COBJS-$(CONFIG_VIDEO_CT69000) += ct69000.o +COBJS-$(CONFIG_VIDEO_JADEGDC) += jadegdc.o COBJS-$(CONFIG_VIDEO_MB862xx) += mb862xx.o COBJS-$(CONFIG_VIDEO_MX3) += mx3fb.o COBJS-$(CONFIG_VIDEO_SED13806) += sed13806.o diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index bcafb27..e23499f --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -314,7 +314,7 @@ void console_cursor (int state); #else #define SWAP16(x) (x) #define SWAP32(x) (x) -#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) +#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) || defined(CONFIG_VIDEO_JADEGDC) #define SHORTSWAP32(x) ( ((x) >> 16) | ((x) << 16) ) #else #define SHORTSWAP32(x) (x) diff --git a/drivers/video/jadegdc.c b/drivers/video/jadegdc.c new file mode 100644 index 0000000..d3f68ab --- /dev/null +++ b/drivers/video/jadegdc.c @@ -0,0 +1,192 @@ +/*
- (C) Copyright 2007-2009
- Matthias Weisser matthias.weisser@graf-syteco.de
- See file CREDITS for list of people who contributed to this
- project.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- MA 02111-1307 USA
- */
+/*
- jade.c - Graphic interface for Fujitsu Jade integrated graphic
- controller. Derived from mb862xx.c
- */
+#include <common.h>
+#include <malloc.h> +#include <mb862xx.h> +#include <asm/io.h> +#include <video_fb.h> +#include "videomodes.h"
+/*
- 4MB (at the end of system RAM)
- */
+#define VIDEO_MEM_SIZE 0x400000
+#define GDC_HOST_BASE 0xF1FC0000 +#define GDC_DSP0_BASE 0xF1FD0000 +#define GDC_DSP1_BASE 0xF1FD2000
please move to a header
+/*
- Graphic Device
- */
+GraphicDevice jadegdc;
please no uppercase in type
Best Regards, J.

Jean-Christophe PLAGNIOL-VILLARD wrote:
On 16:02 Wed 08 Jul , Matthias Weisser wrote:
This patch adds support for the display controller in the MB86R01 'Jade' SoC.
Signed-off-by: Matthias Weisser matthias.weisser@graf-syteco.de
...
+/*
- 4MB (at the end of system RAM)
- */
+#define VIDEO_MEM_SIZE 0x400000
+#define GDC_HOST_BASE 0xF1FC0000 +#define GDC_DSP0_BASE 0xF1FD0000 +#define GDC_DSP1_BASE 0xF1FD2000
please move to a header
probably we should drop these entirely and use JADE_GDC_PHYS_BASE and JADE_GDC_PHYS_DISP_BASE from include/asm-arm/arch-jade/jade.h file introduced with this patch series? Just need to add the base for second display controller register block there.
...
+GraphicDevice jadegdc;
please no uppercase in type
we have to stay with GraphicDevice type in this patch now. It is there in U-Boot code since more than five years, Matthias simply uses it here as other video drivers use it, too. But yes, we should do general video code cleanup later.
Best regards, Anatolij

On 00:25 Thu 09 Jul , Anatolij Gustschin wrote:
Jean-Christophe PLAGNIOL-VILLARD wrote:
On 16:02 Wed 08 Jul , Matthias Weisser wrote:
This patch adds support for the display controller in the MB86R01 'Jade' SoC.
Signed-off-by: Matthias Weisser matthias.weisser@graf-syteco.de
...
+/*
- 4MB (at the end of system RAM)
- */
+#define VIDEO_MEM_SIZE 0x400000
+#define GDC_HOST_BASE 0xF1FC0000 +#define GDC_DSP0_BASE 0xF1FD0000 +#define GDC_DSP1_BASE 0xF1FD2000
please move to a header
probably we should drop these entirely and use JADE_GDC_PHYS_BASE and JADE_GDC_PHYS_DISP_BASE from include/asm-arm/arch-jade/jade.h file introduced with this patch series? Just need to add the base for second display controller register block there.
...
+GraphicDevice jadegdc;
please no uppercase in type
we have to stay with GraphicDevice type in this patch now. It is there in U-Boot code since more than five years, Matthias simply uses it here as other video drivers use it, too. But yes, we should do general video code cleanup later.
ok fine
Best Regards, J.

On 16:02 Wed 08 Jul , Matthias Weisser wrote:
This patch adds support for MB86R01 'Jade' SoC from Fujitsu
Signed-off-by: Matthias Weisser matthias.weisser@graf-syteco.de
cpu/arm926ejs/jade/Makefile | 47 +++++++++ cpu/arm926ejs/jade/timer.c | 126 ++++++++++++++++++++++++ include/asm-arm/arch-jade/hardware.h | 31 ++++++ include/asm-arm/arch-jade/jade.h | 177 ++++++++++++++++++++++++++++++++++ 4 files changed, 381 insertions(+), 0 deletions(-) create mode 100644 cpu/arm926ejs/jade/Makefile create mode 100644 cpu/arm926ejs/jade/timer.c create mode 100644 include/asm-arm/arch-jade/hardware.h create mode 100644 include/asm-arm/arch-jade/jade.h
diff --git a/cpu/arm926ejs/jade/Makefile b/cpu/arm926ejs/jade/Makefile new file mode 100644 index 0000000..7da9f40 --- /dev/null +++ b/cpu/arm926ejs/jade/Makefile @@ -0,0 +1,47 @@ +# +# (C) Copyright 2000-2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +#
+include $(TOPDIR)/config.mk
+LIB = $(obj)lib$(SOC).a
+COBJS = timer.o +SOBJS =
+SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS)) +START := $(addprefix $(obj),$(START))
+all: $(obj).depend $(LIB)
+$(LIB): $(OBJS)
- $(AR) $(ARFLAGS) $@ $(OBJS)
+#########################################################################
+# defines $(obj).depend target +include $(SRCTREE)/rules.mk
+sinclude $(obj).depend
+######################################################################### diff --git a/cpu/arm926ejs/jade/timer.c b/cpu/arm926ejs/jade/timer.c new file mode 100644 index 0000000..2d262c8 --- /dev/null +++ b/cpu/arm926ejs/jade/timer.c @@ -0,0 +1,126 @@ +/*
- (C) Copyright 2007-2008
- Stelian Pop stelian.pop@leadtechdesign.com
- Lead Tech Design <www.leadtechdesign.com>
- Matthias Weisser matthias.weisser@graf-syteco.de
- See file CREDITS for list of people who contributed to this
- project.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- MA 02111-1307 USA
- */
+#include <common.h> +#include <div64.h>
+#define TIMER_LOAD_VAL 0xffffffff +#define TIMER_BASE 0xfffe0000
whitespace please fix
+#define READ_TIMER (*(volatile ulong *)(TIMER_BASE+4)) +#define TIMER_FREQ (CONFIG_JADE_IOCLK / 16)
whitespace please fix
+static ulong timestamp; +static ulong lastdec;
+static inline unsigned long long tick_to_time(unsigned long long tick) +{
- tick *= CONFIG_SYS_HZ;
- do_div(tick, TIMER_FREQ);
- return tick;
+}
+static inline unsigned long long usec_to_tick(unsigned long long usec) +{
- usec *= TIMER_FREQ;
- do_div(usec, 1000000);
- return usec;
+}
+/* nothing really to do with interrupts, just starts up a counter. */ +int timer_init(void) +{
- *(volatile ulong *)(TIMER_BASE + 0) = TIMER_LOAD_VAL;
- *(volatile ulong *)(TIMER_BASE + 8) = 0x86;
please use proper accessor readx/writex
- reset_timer_masked();
- return 0;
+}
+/*
- timer without interrupts
- */
+unsigned long long get_ticks(void) +{
- ulong now = READ_TIMER;
- if (now <= lastdec) /* normal mode (non roll) */
/* move stamp forward with absolut diff ticks */
timestamp += (lastdec - now);
- else /* we have rollover of incrementer */
timestamp += lastdec + TIMER_LOAD_VAL - now;
- lastdec = now;
- return timestamp;
+}
+void reset_timer_masked(void) +{
- /* reset time */
- lastdec = READ_TIMER; /* capture current decrement value time */
- timestamp = 0; /* start "advancing" time stamp from 0 */
+}
+ulong get_timer_masked(void) +{
- return tick_to_time(get_ticks());
+}
+void udelay(unsigned long usec) +{
- unsigned long long tmp;
- ulong tmo;
- tmo = usec_to_tick(usec);
- tmp = get_ticks() + tmo; /* get current timestamp */
- while (get_ticks() < tmp) /* loop till event */
/*NOP*/;
+}
+void reset_timer(void) +{
- reset_timer_masked();
+}
+ulong get_timer(ulong base) +{
- return get_timer_masked() - base;
+}
+/*
- This function is derived from PowerPC code (timebase clock frequency).
- On ARM it returns the number of timer ticks per second.
- */
+ulong get_tbclk(void) +{
- ulong tbclk;
- tbclk = CONFIG_SYS_HZ;
- return tbclk;
please return it directly
+} diff --git a/include/asm-arm/arch-jade/hardware.h b/include/asm-arm/arch-jade/hardware.h new file mode 100644 index 0000000..a26bdca --- /dev/null +++ b/include/asm-arm/arch-jade/hardware.h @@ -0,0 +1,31 @@ +/*
- (C) Copyright 2007
- Author : Carsten Schneider, mycable GmbH
<cs@mycable.de>
- See file CREDITS for list of people who contributed to this
- project.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- MA 02111-1307 USA
- */
+#ifndef __ASM_ARCH_HARDWARE_H +#define __ASM_ARCH_HARDWARE_H
+#include <asm/sizes.h> +#include <asm/arch/jade.h>
+#endif diff --git a/include/asm-arm/arch-jade/jade.h b/include/asm-arm/arch-jade/jade.h new file mode 100644 index 0000000..c2b28a2 --- /dev/null +++ b/include/asm-arm/arch-jade/jade.h @@ -0,0 +1,177 @@ +/*
- (C) Copyright 2007
- jade definitions
- Author : Carsten Schneider, mycable GmbH
<cs@mycable.de>
- See file CREDITS for list of people who contributed to this
- project.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of
- the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- MA 02111-1307 USA
- */
+#ifndef JADE_H +#define JADE_H
+typedef volatile unsigned int JREG; /* Hardware register */
+/*
- Physical Address Defines
- */
+#define JADE_GDC_PHYS_BASE 0xf1fc0000 +#define JADE_GDC_PHYS_DISP_BASE 0xf1fd0000 +#define JADE_CCNT_PHYS_BASE 0xfff42000 +#define JADE_CAN0_PHYS_BASE 0xfff54000 +#define JADE_CAN1_PHYS_BASE 0xfff55000 +#define JADE_I2C0_PHYS_BASE 0xfff56000 +#define JADE_I2C1_PHYS_BASE 0xfff57000 +#define JADE_EHCI_PHYS_BASE 0xfff80000 +#define JADE_OHCI_PHYS_BASE 0xfff81000 +#define JADE_IRC1_PHYS_BASE 0xfffb0000 +#define JADE_TIMER_PHYS_BASE 0xfffe0000 +#define JADE_UART0_PHYS_BASE 0xfffe1000 +#define JADE_UART1_PHYS_BASE 0xfffe2000 +#define JADE_IRCE_PHYS_BASE 0xfffe4000 +#define JADE_CRG_PHYS_BASE 0xfffe7000 +#define JADE_IRC0_PHYS_BASE 0xfffe8000 +#define JADE_GPIO_PHYS_BASE 0xfffe9000
please align them
+/* DRAMC_DRIC DRAM Controller Mode Register */
+/*
- REGISTER ADDRESS DEFINITION FOR DRAMC PERIPHERAL
- */
+#define JREGC_DRAMC_DRIC ((JREG *) 0xF3000000)
please remove the JREG everywhere as no need when use proper accessor
Best Regards, J.
participants (4)
-
Anatolij Gustschin
-
Jean-Christophe PLAGNIOL-VILLARD
-
Matthias Weisser
-
Matthias Weisser