Matthias Weisser wrote: > Signed-off-by: Matthias Weisser <matthias.weis...@graf-syteco.de> > --- > MAINTAINERS | 4 + > MAKEALL | 1 + <snip>
> index ed6156f..98c147d 100644 > --- a/Makefile > +++ b/Makefile > @@ -2874,6 +2874,13 @@ TNY_A9260_config : unconfig > @echo "#define CONFIG_$(@:_config=) 1" >$(obj)include/config.h > @$(MKCONFIG) -a tny_a9260 arm arm926ejs tny_a9260 calao at91 > > +######################################################################### > +## ARM926EJ-S Systems > +######################################################################### > + Change to 'Syteco 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 \ <snip> > + */ > + > +#include <common.h> > +#include <netdev.h> > +#include <asm/io.h> > +#include <asm/arch/jade.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) > +{ board_init should fill out entries in struct global_data. See other board like lopgicpd/zoom1 as an example. Make sure to include the machine id. > + struct jade_ccnt * ccnt = (struct jade_ccnt *)JADE_CCNT_PHYS_BASE; > + > + /* We select mode 0 for group 2 and mode 1 for group 4 */ > + writel(0x00000010, &ccnt->cmux_md); > + > + gd->flags = 0; > + > + icache_enable(); > + > + return 0; > +} > + > +int board_late_init(void) > +{ > + struct jade_gpio *gpio = (struct jade_gpio *)JADE_GPIO_PHYS_BASE; > + struct jade_pwm *pwm; > + uint32_t in_word; > + const char *e; > + const char *s; > + > + /* Check if we have valid display settings and turn on power if so*/ ws Add as space between 'so*' > + /* Display 0 */ This should be conditional included if the video in included #ifdef CONFIG_VIDEO_JADEGDC .. > + if (getenv("gs_dsp_0_param")) { > + 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 jade_pwm *)JADE_PWM0_PHYS_BASE; > + > + writel(CONFIG_JADE_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); > + } > + } > + } The video patch has logic to fall back reading if (penv == NULL) { penv = getenv("videomode"); if ((i == 1) || (penv == NULL)) Should similar logic be added here ? > + 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 jade_pwm *)JADE_PWM1_PHYS_BASE; > + > + writel(CONFIG_JADE_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 << 4), &gpio->gpddr2); > + > + /* 5V enable */ > + writel(readl(&gpio->gpddr1) | (1 << 5), &gpio->gpddr1); > + writel(readl(&gpio->gpdr1) & ~(1 << 5), &gpio->gpdr1); > + > + /* We have special boot options if told by GPIOs */ > + in_word = readl(&gpio->gpdr1); > + > + if ((in_word & 0xC0) == 0xC0) { > + setenv("stdin", "eserial0"); > + setenv("stdout", "eserial0"); > + setenv("stderr", "eserial0"); > + 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"); > + } else{ ws space between 'else{' > + setenv("stdin", "serial"); > + setenv("stdout", "serial"); > + setenv("stderr", "serial"); > + if (getenv("gs_devel")) > + setenv("bootdelay", "5"); > + else > + setenv("bootdelay", "0"); > + } > + > + return 0; > +} > + > +int misc_init_r(void) > +{ > + setenv("verify", "n"); This should be added to the list of #define CONFIG_EXTRA_ENV_SETTINGS set the the board config file. > + 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; > +} > + > +int board_eth_init(bd_t *bis) > +{ > + int rc = 0; > +#ifdef CONFIG_SMC911X > + rc = smc911x_initialize(0, CONFIG_SMC911X_BASE); > +#endif > + return rc; > +} > + > diff --git a/board/syteco/jadecpu/lowlevel_init.S > b/board/syteco/jadecpu/lowlevel_init.S > new file mode 100644 > index 0000000..73550c9 > --- /dev/null > +++ b/board/syteco/jadecpu/lowlevel_init.S > @@ -0,0 +1,279 @@ > +/* > + * Board specific setup info > + * > + * (C) Copyright 2007, mycable GmbH > + * Carsten Schneider <c...@mycable.de>, Alexander Bigga <a...@mycable.de> > + * > + * (C) Copyright 2007, mycable GmbH > + * Carsten Schneider <c...@mycable.de>, Alexander Bigga <a...@mycable.de> > + * > + * (C) Copyright 2003, ARM Ltd. > + * Philippe Robin, <philippe.ro...@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 ws remove '/*' > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation/* either version 2 of ws remove '/*' > + * 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 ws remove '/*' > + * 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 here too.. > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#include <config.h> > +#include <version.h> > +#include <asm/macro.h> > +#include <asm/arch/jade.h> > + > +/* Set up the platform, once the cpu has been initialized */ > +.globl lowlevel_init > +lowlevel_init: > +/* > + * Initialize Clock Reset Generator (CRG) > + */ > + > + ldr r0, =JADE_CRG_PHYS_BASE > + > + /* Not change the initial value that is set by external pin.*/ > +1: ldr r2, [r0, #CRG_CRPR] /* Wait for PLLREADY */ Use a better label that '1:' > + tst r2, #0x00000100 > + beq 1b > + > + /* Set clock gate control */ > + ldr r1, =0x0000ffff /* Open */ > + str r1, [r0, #CRG_CRHA] /* CRHA: AHB clock */ > + ldr r1, =0x0000ffff /* Open */ > + str r1, [r0, #CRG_CRPA] /* CRPA: APB-A clock */ > + ldr r1, =0xfffffffe /* Close */ > + str r1, [r0, #CRG_CRPB] /* CRPA: APB-B clock */ > + ldr r1, =0x0000ffff /* Open */ > + str r1, [r0, #CRG_CRHB] /* CRHB: ExtAHB clock */ > + ldr r1, =0xffffffef /* Open ARM926EJ-S only */ > + str r1, [r0, #CRG_CRAM] /* CRAM: ARM core clock */ > + > +/* > + * Initialize External Bus Interface > + */ > + > + ldr r0, =JADE_MEMC_PHYS_BASE > + > + /* > + * 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, =0x03061008 /* XCS0: FPGA*/ > + str r1, [r0, #0x20] > + ldr r1, =0x03061008 /* XCS2: Ethernet */ > + 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, =0x000000c0 /* XCS0: 0x0c000000/1MB */ > + str r1, [r0, #0x40] > + ldr r1, =0x00000020 /* XCS2: 0x02000000/1MB */ > + str r1, [r0, #0x48] > + ldr r1, =0x001f0000 /* XCS4: 32 MB */ > + str r1, [r0, #0x50] > + > +/* > + * Initialize DDR2 Controller > + */ > + > + /* Wait for PLL LOCK up time or more */ > + wait_timer 20 > + > + /* > + * (2) Initialize DDRIF > + */ > + ldr r0, =JADE_DDR2C_PHYS_BASE > + ldr r1, =0x5555 > + strh r1, [r0, #DDR2C_DRIMS] > + > + /* > + * (3) Wait for 20MCKPs(120nsec) or more > + */ > + wait_timer 20 > + > + /* > + * (4) IRESET/IUSRRST release > + /* This looks like a programming error /* -> */ ? > + ldr r0, =JADE_CCNT_PHYS_BASE > + ldr r1, =0x00000002 > + str r1, [r0, #CCNT_CDCRC] > + <snip> > + ldr r1, =0x0005 /* EMR(1) command */ > + strh r1, [r0, #DDR2C_DRIC1] > + ldr r1, =0x0380 /* Extended Mode Register 1 set OCD */ > + strh r1, [r0, #DDR2C_DRIC2] > + ldr r1, =0xc001 > + strh r1, [r0, #DDR2C_DRIC] > + > + ldr r1, =0x0005 /* EMR(1) command */ > + strh r1, [r0, #DDR2C_DRIC1] > + /* ldr r1, =0x0044 */ Do not include commented out code. Remove or add appropriate if-def > + ldr r1, =0x0002 /* EMR(1) set reduced strength */ > + strh r1, [r0, #DDR2C_DRIC2] > + ldr r1, =0xc001 > + strh r1, [r0, #DDR2C_DRIC] > + > + ldr r1, =0x0032 /* Set BT, AL, CL, BL */ > + strh r1, [r0, #DDR2C_DRCM] > + > + ldr r1, =0x3418 /* Set tRCD, tRAS, tRP, tRC */ > + strh r1, [r0, #DDR2C_DRCST1] > + > + /* ldr r1, =0x2e22 */ /* Set tRFC, tRRD, tWR */ Same here.. > + ldr r1, =0x6e32 > + strh r1, [r0, #DDR2C_DRCST2] > + > + /* ldr r1, =0x0051 */ /* Set CNTL, REF_CNT*/ and here.. > + ldr r1, =0x0141 /* (changed) */ > + strh r1, [r0, #DDR2C_DRCR] > + > + ldr r1, =0x0002 /* Set Address FIFO (8 steps) */ > + strh r1, [r0, #DDR2C_DRCF] > + > + ldr r1, =0x0001 /* Enable AXI Cache */ > + strh r1, [r0, #DDR2C_DRASR] > + > + /* > + * (11) ODT setting > + */ > + ldr r1, =0x0001 > + strh r1, [r0, #DDR2C_DROBS] > + ldr r1, =0x0103 /* ODT auto adjustment on */ > + strh r1, [r0, #DDR2C_DROABA] > + ldr r1, =0x003F /* Set ODT to on 50/100 Ohm */ > + strh r1, [r0, #DDR2C_DRIBSODT1] > + > + /* > + * (12) Shift to ODTCONT ON (SDRAM side) and DDR2C usual operation mode > + */ > + ldr r1, =0x0001 > + strh r1, [r0, #DDR2C_DROS] > + ldr r1, =0x4000 > + strh r1, [r0, #DDR2C_DRIC] > + > + mov pc, lr > + > diff --git a/include/configs/jadecpu.h b/include/configs/jadecpu.h > new file mode 100644 > index 0000000..5a19abf > --- /dev/null > +++ b/include/configs/jadecpu.h > @@ -0,0 +1,187 @@ > +/* > + * (C) Copyright 2007-2008 > + * Matthias Weisser <matthias.weis...@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_JADE The board and cpu defines go first move the device configs to later > +#define CONFIG_JADE_IOCLK (41164767) This is a strange number. please add a comment. > +#define CONFIG_SYS_HZ (CONFIG_JADE_IOCLK / 16) > +#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 > +#define BOARD_LATE_INIT 1 > + > +/* > + * Hardware drivers > + */ > + > +/* > + * Serial > + */ > +#define CONFIG_SERIAL_MULTI > +#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 /* UART 0 */ > +#define CONFIG_SYS_NS16550_COM2 0xfff50000 /* UART 2 (SP) > */ > +#define CONFIG_SYS_NS16550_COM3 0xfff51000 /* UART 3 */ > +#define CONFIG_SYS_NS16550_COM4 0xfff43000 /* UART 4 */ > + > +#define CONFIG_CONS_INDEX 4 > + > +/* > + * Ethernet > + */ > +#define CONFIG_NET_MULTI > +#define CONFIG_SMC911X > +#define CONFIG_SMC911X_BASE 0x02000000 > +#define CONFIG_SMC911X_16_BIT > + > +/* > + * Video This should be conditional on CONFIG_VIDEO_JADEDC > + */ > +#define CONFIG_VIDEO > +#define CONFIG_VIDEO_JADEGDC > +#define CONFIG_SYS_WHITE_ON_BLACK > +#define CONFIG_CFB_CONSOLE > +#define CONFIG_SYS_CONSOLE_IS_IN_ENV > +#define CONFIG_SYS_CONSOLE_ENV_OVERWRITE > +#define CONFIG_VIDEO_LOGO > +#define CONFIG_SPLASH_SCREEN > +#define CONFIG_SPLASH_SCREEN_ALIGN > +#define CONFIG_VIDEO_BMP_LOGO > +#define CONFIG_VIDEO_BMP_GZIP > +#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE (800*480 + 256*4 + 10*1024) > +#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 > +#undef CONFIG_CMD_NFS > +#undef CONFIG_CMD_XIMG > + > +#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 > +#define CONFIG_CMD_FAT 1 > +#define CONFIG_SYS_HUSH_PARSER > +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " > + > +/* USB */ > +#define CONFIG_USB_OHCI_NEW > +#define CONFIG_SYS_USB_OHCI_REGS_BASE 0xFFF81000 > +#define CONFIG_SYS_USB_OHCI_SLOT_NAME "jadeusb" > +#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 1 ws convert spaces in the last 3 lines to tabs Tom _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot