New ADS GraphicsClient+ board port
PATCH 1/1 New ADS GraphicsClient+ board port
George,
What problem did you have with the CFI flash driver? Brad
Quoted 1,062 lines
-----Original Message-----
From: George G. Davis [mailto:davis_g at comcast.net]
Sent: Thursday, March 11, 2004 2:17 PM
To: u-boot-users at lists.sourceforge.net
Subject: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board portGreetings,
I humbly submit this trivial board port for the ADS GraphicsClient+. This
SA-1110 based board is actually EOL but it's still useful to me for Linux
development/testing. I'll eventually make this thing use the common CFI
flash support instead of theflash.cincluded here. But for now I was unable to get the CFI flash support working on this target.This patch is based on latest CVS HEAD +/- a few hours.
Thanks!
--
Regards,
Georgediff -x CVS -ruN
u-boot.orig/board/gcplus/config.mku-boot.new/board/gcplus/config.mk
---u-boot.orig/board/gcplus/config.mk1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/config.mk2003-11-06
00:36:23.000000000 -0500(quoted diff) +13
-0@@ -0,0 +1,13 @@ +# +# ADS GCPlus board with SA1110 cpu +# +# The ADS GCPlus has 2 banks of 16 MiB SDRAM +# +# We use the ADS GCPlus Linux boot ROM to load U-Boot into SDRAM +# at c020'0000 and then move ourself to c8f0'0000. Basically, just +# install the U-Boot binary as you would the Linux zImage and then +# reap the benfits of more convenient Linux development cycles, i.e. +# bootp;tftp;bootm, repeat, etc.,. +# + +TEXT_BASE = 0xc8f00000diff -x CVS -ruN
u-boot.orig/board/gcplus/flash.cu-boot.new/board/gcplus/flash.c
---u-boot.orig/board/gcplus/flash.c1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/flash.c2003-12-09
11:29:34.000000000 -0500(quoted diff) +32
-0@@ -0,0 +1,440 @@ +/* + * (C) Copyright 2001 + * Kyle Harris, Nexus Technologies, Inc. kharris at nexus-tech.net + * + * (C) Copyright 2001 + * Wolfgang Denk, DENX Software Engineering, wd at denx.de. + * + * 2003 (c) MontaVista Software, Inc. + * + * 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 <linux/byteorder/swab.h> + +flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* infofor FLASH chips */
(quoted diff) +41
-2+ +/* Board support for 1 or 2 flash devices */ +#define FLASH_PORT_WIDTH32 +#undef FLASH_PORT_WIDTH16 + +#ifdef FLASH_PORT_WIDTH16 +#define FLASH_PORT_WIDTH ushort +#define FLASH_PORT_WIDTHV vu_short +#define SWAP(x) __swab16(x) +#else +#define FLASH_PORT_WIDTH ulong +#define FLASH_PORT_WIDTHV vu_long +#define SWAP(x) __swab32(x) +#endif + +#define FPW FLASH_PORT_WIDTH +#define FPWV FLASH_PORT_WIDTHV + +#define mb() __asm__ __volatile__ ("" : : : "memory") + +/*----------------------------------------------------------- ------------ + * Functions + */ +static ulong flash_get_size(FPW * addr, flash_info_t * info); +static int write_data(flash_info_t * info, ulong dest, FPW data); +static void flash_get_offsets(ulong base, flash_info_t * info); +void inline spin_wheel(void); + +/*----------------------------------------------------------- ------------ + */ + +unsigned long +flash_init(void) +{ + int i; + ulong size = 0; + + for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) { + switch (i) { + case 0: + flash_get_size((FPW *) PHYS_FLASH_1,&flash_info[i]);
(quoted diff) +14
-0+ flash_get_offsets(PHYS_FLASH_1, &flash_info[i]); + break; + default: + panic("configured too many flash banks!\n"); + break; + } + size += flash_info[i].size; + } + + /* Protect monitor and environment sectors + */ + flash_protect(FLAG_PROTECT_SET, + CFG_FLASH_BASE, + CFG_FLASH_BASE + monitor_flash_len - 1,&flash_info[0]);
(quoted diff) +22
-1+ + flash_protect(FLAG_PROTECT_SET, + CFG_ENV_ADDR, + CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]); + + return size; +} + +/*----------------------------------------------------------- ------------ + */ +static void +flash_get_offsets(ulong base, flash_info_t * info) +{ + int i; + + if (info->flash_id == FLASH_UNKNOWN) { + return; + } + + if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) { + for (i = 0; i < info->sector_count; i++) { + info->start[i] = base + (i *
PHYS_FLASH_SECT_SIZE);(quoted diff) +47
-1+ info->protect[i] = 0; + } + } +} + +/*----------------------------------------------------------- ------------ + */ +void +flash_print_info(flash_info_t * info) +{ + int i; + + if (info->flash_id == FLASH_UNKNOWN) { + printf("missing or unknown FLASH type\n"); + return; + } + + switch (info->flash_id & FLASH_VENDMASK) { + case FLASH_MAN_INTEL: + printf("INTEL "); + break; + default: + printf("Unknown Vendor "); + break; + } + + switch (info->flash_id & FLASH_TYPEMASK) { + case FLASH_28F128J3A: + printf("28F128J3A\n"); + break; + case FLASH_28F640J5: + printf("28F640J5\n"); + break; + default: + printf("Unknown Chip Type\n"); + break; + } + + printf(" Size: %ld MB in %d Sectors\n", + info->size >> 20, info->sector_count); + + printf(" Sector Start Addresses:"); + for (i = 0; i < info->sector_count; ++i) { + if ((i % 5) == 0) + printf("\n "); + printf(" %08lX%s", + info->start[i], info->protect[i] ? "(RO)" : " ");
(quoted diff) +86
-1+ } + printf("\n"); + return; +} + +/* + * The following code cannot be run from FLASH! + */ +static ulong +flash_get_size(FPW * addr, flash_info_t * info) +{ + volatile FPW value; + /* Write auto select command: read Manufacturer ID */ + addr[0x5555] = (FPW) 0x00AA00AA; + addr[0x2AAA] = (FPW) 0x00550055; + addr[0x5555] = (FPW) 0x00900090; + + mb(); + value = addr[0]; + + switch (value) { + + case (FPW) INTEL_MANUFACT: + info->flash_id = FLASH_MAN_INTEL; + break; + + default: + info->flash_id = FLASH_UNKNOWN; + info->sector_count = 0; + info->size = 0; + addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ + return (0); /* no or unknown flash */ + } + + mb(); + value = addr[1]; /* device ID */ + switch (value) { + case (FPW) INTEL_ID_28F128J3A: + info->flash_id += FLASH_28F128J3A; + info->sector_count = 128; + info->size = 0x02000000; + break; /* => 16 MB */ + case (FPW) INTEL_ID_28F640J5: + info->flash_id += FLASH_28F640J5; + info->sector_count = 64; + info->size = 0x01000000; + break; /* => 16 MB */ + + default: + info->flash_id = FLASH_UNKNOWN; + break; + } + + if (info->sector_count > CFG_MAX_FLASH_SECT) { + printf("** ERROR: sector count %d > max (%d) **\n", + info->sector_count, CFG_MAX_FLASH_SECT); + info->sector_count = CFG_MAX_FLASH_SECT; + } + + addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ + + return (info->size); +} + +/*----------------------------------------------------------- ------------ + */ + +int +flash_erase(flash_info_t * info, int s_first, int s_last) +{ + int flag, prot, sect; + ulong type, start, last; + int rcode = 0; + + if ((s_first < 0) || (s_first > s_last)) { + if (info->flash_id == FLASH_UNKNOWN) { + printf("- missing\n"); + } else { + printf("- no sectors to erase\n"); + } + return 1; + } + + type = (info->flash_id & FLASH_VENDMASK); + if ((type != FLASH_MAN_INTEL)) { + printf("Can't erase unknown flash type %08lx -aborted\n",
(quoted diff) +13
-0+ info->flash_id); + return 1; + } + + prot = 0; + for (sect = s_first; sect <= s_last; ++sect) { + if (info->protect[sect]) { + prot++; + } + } + + if (prot) { + printf("- Warning: %d protected sectors willnot be erased!\n",
(quoted diff) +23
-0+ prot); + } else { + printf("\n"); + } + + start = get_timer(0); + last = start; + + /* Disable interrupts which might cause a timeout here */ + flag = disable_interrupts(); + + /* Start erase on unprotected sectors */ + for (sect = s_first; sect <= s_last; sect++) { + if (info->protect[sect] == 0) { /* not protected */ + FPWV *addr = (FPWV *) (info->start[sect]); + FPW status; + + printf("Erasing sector %2d ... ", sect); + + /* arm simple, non interrupt dependent timer */ + reset_timer_masked(); + + *addr = (FPW) 0x00500050; /*clear status register */
(quoted diff) +1
-0+ *addr = (FPW) 0x00200020; /*erase setup */
(quoted diff) +1
-0+ *addr = (FPW) 0x00D000D0; /*erase confirm */
(quoted diff) +5
-0+ + while (((status = + *addr) & (FPW) 0x00800080) != + (FPW) 0x00800080) { + if (get_timer_masked() >
CFG_FLASH_ERASE_TOUT) {(quoted diff) +2
-0+ printf("Timeout\n"); + *addr = (FPW)
0x00B000B0; /* suspend erase */(quoted diff) +1
-0+ *addr = (FPW)
0x00FF00FF; /* reset to read mode */(quoted diff) +6
-0+ rcode = 1; + break; + } + } + + *addr = (FPW) 0x00500050; /*clear status register cmd. */
(quoted diff) +1
-0+ *addr = (FPW) 0x00FF00FF; /*resest to read mode */
(quoted diff) +112
-2+ + printf(" done\n"); + } + } + return rcode; +} + +/*----------------------------------------------------------- ------------ + * Copy memory to flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + * 4 - Flash not identified + */ + +int +write_buff(flash_info_t * info, uchar * src, ulong addr, ulong cnt) +{ + ulong cp, wp; + FPW data; + int count, i, l, rc, port_width; + + if (info->flash_id == FLASH_UNKNOWN) { + return 4; + } +/* get lower word aligned address */ +#ifdef FLASH_PORT_WIDTH16 + wp = (addr & ~1); + port_width = 2; +#else + wp = (addr & ~3); + port_width = 4; +#endif + + /* + * handle unaligned start bytes + */ + if ((l = addr - wp) != 0) { + data = 0; + for (i = 0, cp = wp; i < l; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + for (; i < port_width && cnt > 0; ++i) { + data = (data << 8) | *src++; + --cnt; + ++cp; + } + for (; cnt == 0 && i < port_width; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + + if ((rc = write_data(info, wp, SWAP(data))) != 0) { + return (rc); + } + wp += port_width; + } + + /* + * handle word aligned part + */ + count = 0; + while (cnt >= port_width) { + data = 0; + for (i = 0; i < port_width; ++i) { + data = (data << 8) | *src++; + } + if ((rc = write_data(info, wp, SWAP(data))) != 0) { + return (rc); + } + wp += port_width; + cnt -= port_width; + if (count++ > 0x800) { + spin_wheel(); + count = 0; + } + } + + if (cnt == 0) { + return (0); + } + + /* + * handle unaligned tail bytes + */ + data = 0; + for (i = 0, cp = wp; i < port_width && cnt > 0; ++i, ++cp) { + data = (data << 8) | *src++; + --cnt; + } + for (; i < port_width; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + + return (write_data(info, wp, SWAP(data))); +} + +/*----------------------------------------------------------- ------------ + * Write a word or halfword to Flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + */ +static int +write_data(flash_info_t * info, ulong dest, FPW data) +{ + FPWV *addr = (FPWV *) dest; + ulong status; + int flag; + + /* Check if Flash is (sufficiently) erased */ + if ((*addr & data) != data) { + printf("not erased at %08lx (%x)\n", (ulong)addr, *addr);
(quoted diff) +13
-0+ return (2); + } + /* Disable interrupts which might cause a timeout here */ + flag = disable_interrupts(); + + *addr = (FPW) 0x00400040; /* write setup */ + *addr = data; + + /* arm simple, non interrupt dependent timer */ + reset_timer_masked(); + + /* wait while polling the status register */ + while (((status = *addr) & (FPW) 0x00800080) != (FPW)
0x00800080) {(quoted diff) +2
-0+ if (get_timer_masked() > CFG_FLASH_WRITE_TOUT) { + *addr = (FPW) 0x00FF00FF; /*restore read mode */
(quoted diff) +18
-0+ return (1); + } + } + + *addr = (FPW) 0x00FF00FF; /* restore read mode */ + + return (0); +} + +void inline +spin_wheel(void) +{ + static int p = 0; + static char w[] = "\\/-"; + + printf("\010%c", w[p]); + (++p == 3) ? (p = 0) : 0; +}diff -x CVS -ruN
u-boot.orig/board/gcplus/gcplus.cu-boot.new/board/gcplus/gcplus.c
---u-boot.orig/board/gcplus/gcplus.c1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/gcplus.c2004-03-09
21:52:57.000000000 -0500(quoted diff) +40
-2@@ -0,0 +1,73 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <[email protected]> + * + * 2003-2004 (c) MontaVista Software, Inc. + * + * 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 <SA-1100.h> +/* -------------------------------------------------------------- ----------- */ + +/* + * Miscelaneous platform dependent initialisations + */ + +int +board_init(void) +{ + DECLARE_GLOBAL_DATA_PTR; + + gd->bd->bi_arch_number = 29; /* ADSGraphicsClientPlus Board */
(quoted diff) +33
-0+ + gd->bd->bi_boot_params = 0xc000003c; /* Weird address? */ + + /* Most of the ADS GCPlus I/O is connected to Static nCS2. + * So I'm brute forcing nCS2 timiming here for worst case. + */ + MSC1 &= ~0xFFFF; + MSC1 |= 0x8649; + + /* Nothing is connected to Static nCS4 or nCS5. But I'm using + * nCS4 as a paranoia safe guard to force nCS2, nOE; nWE high + * after accessing I/O via (non-VLIO) nCS2. What can I say, I'm + * paranoid and lack decent tools to alleviate my fear. I sure + * do wish I had a logic analyzer. : ( + */ + + MSC2 = 0xfff9fff9; + + return 0; +} + +int +dram_init(void) +{ + DECLARE_GLOBAL_DATA_PTR; + + gd->bd->bi_dram[0].start = PHYS_SDRAM_1; + gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; + gd->bd->bi_dram[1].start = PHYS_SDRAM_2; + gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE; + + return (0); +}diff -x CVS -ruN u-boot.orig/board/gcplus/Makefile u-boot.new/board/gcplus/Makefile
--- u-boot.orig/board/gcplus/Makefile 1969-12-31
19:00:00.000000000 -0500
+++ u-boot.new/board/gcplus/Makefile 2004-03-09
21:50:31.000000000 -0500(quoted diff) +42
-0@@ -0,0 +1,49 @@ +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd at denx.de. +# +# 2003 (c) MontaVista Software, Inc. +# +# 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 = lib$(BOARD).a + +OBJS := gcplus.o flash.o +SOBJS := memsetup.o + +$(LIB): $(OBJS) $(SOBJS) + $(AR) crv $@ $(OBJS) $(SOBJS) + +clean: + rm -f $(SOBJS) $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak .depend + +#########################################################################
(quoted diff) +7
-0+ +.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) + $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +-include .depend + +#########################################################################
diff -x CVS -ruNu-boot.orig/board/gcplus/memsetup.Su-boot.new/board/gcplus/memsetup.S
---u-boot.orig/board/gcplus/memsetup.S1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/memsetup.S2004-03-09
23:12:53.000000000 -0500(quoted diff) +4
-0@@ -0,0 +1,77 @@ +/* + * Memory Setup stuff - taken from blob memsetup.S + * + * Copyright (C) 1999 2000 2001 Erik Mouw(J.A.K.Mouw at its.tudelft.nl) and
+ * Jan-Derk Bakker (J.D.Bakker at its.tudelft.nl)
+ * 2003-2004 (c) MontaVista Software, Inc.
+ *
+ * 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
+ */(quoted diff) +9
-0+ + +#include "config.h" +#include "version.h" + + + .globl memsetup +memsetup: + /* The ADS GC+ for Linux Boot Rom Ver. 1.73 does memoryinit for us.
(quoted diff) +1
-0+ * However the darn thing leaves the MMU enabled beforehanding control
(quoted diff) +42
-0+ * over to us. So we need to disable the MMU and we use memsetup + * to do it. + */ + +@ The following code segment was borrowed with gratitude from: +@ linux-2.4.19-rmk7/arch/arm/boot/compressed/head-sa1100.S + + @ Data cache might be active. + @ Be sure to flush kernel binary out of the cache, + @ whatever state it is, before it is turned off. + @ This is done by fetching through currently executed + @ memory to be sure we hit the same cache. + bic r2, pc, #0x1f + add r3, r2, #0x4000 @ 16 kb is quite enough... +1: ldr r0, [r2], #32 + teq r2, r3 + bne 1b + mcr p15, 0, r0, c7, c10, 4 @ drain WB + mcr p15, 0, r0, c7, c7, 0 @ flush I & D caches + + @ disabling MMU and caches + mrc p15, 0, r0, c1, c0, 0 @ read control reg + bic r0, r0, #0x0d @ clear WB, DC, MMU + bic r0, r0, #0x1000 @ clear Icache + mcr p15, 0, r0, c1, c0, 0 + + nop + nop + nop + nop + nop + + b 2f +2: + nop + nop + nop + nop + nop + + + mov pc, lrdiff -x CVS -ruN
u-boot.orig/board/gcplus/u-boot.ldsu-boot.new/board/gcplus/u-boot.lds
---u-boot.orig/board/gcplus/u-boot.lds1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/u-boot.lds2004-03-06
16:03:44.000000000 -0500(quoted diff) +25
-0@@ -0,0 +1,57 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd at denx.de. + * 2003 (c) MontaVista Software, Inc. + * + * 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 + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm","elf32-littlearm")
(quoted diff) +32
-0+OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ + . = 0x00000000; + + . = ALIGN(4); + .text : + { + cpu/sa1100/start.o (.text) + *(.text) + } + + . = ALIGN(4); + .rodata : { *(.rodata) } + + . = ALIGN(4); + .data : { *(.data) } + + . = ALIGN(4); + .got : { *(.got) } + + + __u_boot_cmd_start = .; + .u_boot_cmd : { *(.u_boot_cmd) } + __u_boot_cmd_end = .; + + . = ALIGN(4); + __bss_start = .; + .bss : { *(.bss) } + _end = .; +}diff -x CVS -ruN
u-boot.orig/include/configs/gcplus.hu-boot.new/include/configs/gcplus.h
---u-boot.orig/include/configs/gcplus.h1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/include/configs/gcplus.h2004-03-11
09:41:31.000000000 -0500(quoted diff) +36
-0@@ -0,0 +1,174 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <[email protected]> + * + * 2003-2004 (c) MontaVista Software, Inc. + * + * Configuation settings for the ADS GraphicsClient+ board. + * + * 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 + +#undef DEBUG + +/* + * The ADS GCPlus Linux boot ROM loads U-Boot into RAM at 0xc0200000. + * We don't actually init RAM in this case since we're usingU-Boot as
+ * an secondary boot loader during Linux kernel development and testing,
+ * e.g. bootp/tftp download of the kernel is a far more convenient
+ * when testing new kernels on this target. However the ADS GCPlus Linux
+ * boot ROM leaves the MMU enabled when it passes control to U-Boot. So
+ * we use memsetup (CONFIG_INIT_CRITICAL) to remedy that problem.
+ */(quoted diff) +7
-0+#define CONFIG_INIT_CRITICAL + +/* + * High Level Configuration Options + * (easy to change) + */ +#define CONFIG_SA1110 1 /* This is anSA1100 CPU */
+#defineCONFIG_GCPLUS1 /* on an ADS
GCPlus Board */(quoted diff) +2
-0+ +#undef CONFIG_USE_IRQ /* we don'tneed IRQ/FIQ stuff */
(quoted diff) +2
-0+ +#define CONFIG_CMDLINE_TAG 1 /* enable passing ofATAGs */
(quoted diff) +8
-0+#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1 + +/* + * Size of malloc() pool + */ +#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) +#define CFG_GBL_DATA_SIZE 128 /* size rsrvd forinitial data */
(quoted diff) +6
-0+ + +/* + * Hardware drivers + */ +#define CONFIG_DRIVER_LAN91C96 /* we have an SMC9194on-board */
(quoted diff) +6
-0+#define CONFIG_LAN91C96_BASE 0x100e0000 + +/* + * select serial console configuration + */ +#define CONFIG_SERIAL3 1 /* we use SERIAL 3 onADS GCPlus */
(quoted diff) +10
-0+ +/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE + +#define CONFIG_BAUDRATE 38400 + +#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_DHCP) +#define CONFIG_BOOTP_MASK CONFIG_BOOTP_DEFAULT + +/* this must be included AFTER the definition of
CONFIG_COMMANDS(if any) */(quoted diff) +4
-0+#include <cmd_confdefs.h> + +#define CONFIG_BOOTDELAY 3 +#define CONFIG_BOOTARGS "console=ttySA0,38400n8mtdparts=sa1100-flash:1m at 0(zImage),3m at 1m(ramdisk.gz),12m at 4m(us erfs) root=/dev/nfs ip=bootp"
(quoted diff) +5
-0+#define CONFIG_BOOTCOMMAND "bootp;tftp;bootm" +#define CFG_AUTOLOAD "n" /* No autoload */ + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE 38400 /* speed to runkgdb serial port */
+#defineCONFIG_KGDB_SER_INDEX2 /*
which serial port to use */(quoted diff) +6
-0+#endif + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP /*undef to save memory */
+#defineCFG_PROMPT"ADS GCPlus # " /*
Monitor Command Prompt */
+#defineCFG_CBSIZE256 /*
Console I/O Buffer Size */
+#defineCFG_PBSIZE(CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
/* Print Buffer Size */
+#defineCFG_MAXARGS16 /* max
number of command args */
+#defineCFG_BARGSIZECFG_CBSIZE/* Boot
Argument Buffer Size */(quoted diff) +2
-0+ +#define CFG_MEMTEST_START 0xc0400000 /* memtestworks on */
+#defineCFG_MEMTEST_END0xc0800000/* 4
... 8 MB in DRAM */(quoted diff) +2
-0+ +#undef CFG_CLKS_IN_HZ /* everything, inclboard info, in Hz */
(quoted diff) +2
-0+ +#define CFG_LOAD_ADDR 0xc0000000 /*default load address */
(quoted diff) +2
-0+ +#define CFG_HZ 3686400 /*incrementer freq: 3.6864 MHz */
+#defineCFG_CPUSPEED0x0a/* set core
clock to 206MHz */(quoted diff) +38
-3+ + /* valid baudrates */ +#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } + +/*----------------------------------------------------------- ------------ + * Stack sizes + * + * The stack sizes are set up in start.S using the settings below + */ +#define CONFIG_STACKSIZE (128*1024) /* regular stack */ +#ifdef CONFIG_USE_IRQ +#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */ +#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */ +#endif + +/*----------------------------------------------------------- ------------ + * Physical Memory Map + */ +#define CONFIG_NR_DRAM_BANKS 2 /* we have 2 banks of DRAM */ +#define PHYS_SDRAM_1 0xc0000000 /* SDRAM Bank #1 */ +#define PHYS_SDRAM_1_SIZE 0x01000000 /* 16 MB */ +#define PHYS_SDRAM_2 0xc8000000 /* SDRAM Bank #2 */ +#define PHYS_SDRAM_2_SIZE 0x01000000 /* 16 MB */ + + +#define PHYS_FLASH_1 0x08000000 /* Flash Bank #1 */ +#define PHYS_FLASH_SIZE 0x00800000 /* 8 MB */ +#define PHYS_FLASH_BANK_SIZE 0x01000000 /* 16 MB Banks */ +#define PHYS_FLASH_SECT_SIZE 0x00040000 /* 256 KB sectors (x2) */ + +#define CFG_FLASH_BASE PHYS_FLASH_1 + +/*----------------------------------------------------------- ------------ + * FLASH and environment organization + */ +#if 1 +#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ +#define CFG_MAX_FLASH_SECT 128 /* max number ofsectors on one chip */
(quoted diff) +7
-0+ +/* timeout values are in ticks */ +#define CFG_FLASH_ERASE_TOUT (2*CFG_HZ) /* Timeout for Flash Erase */ +#define CFG_FLASH_WRITE_TOUT (2*CFG_HZ) /* Timeout for Flash Write */ +#else +/* REVISIT: This doesn't work on ADS GCPlus just yet: +#define CFG_FLASH_CFI 1 /* flash is CFIconformant */
+#defineCFG_FLASH_CFI_DRIVER1 /* use common cfi
driver */
+#defineCFG_FLASH_USE_BUFFER_WRITE1 /* use buffered
writes (20x faster) */
+#defineCFG_MAX_FLASH_BANKS1 /* max # of memory
banks */
+#defineCFG_FLASH_INCREMENT0 /* there is only one
bank */
+#defineCFG_MAX_FLASH_SECT128 /* max # of sectors
on one chip */
+//#defineCFG_FLASH_PROTECTION1 /* hardware flash
protection */(quoted diff) +5
-0+#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE } +#endif + +#define CFG_ENV_IS_IN_FLASH 1 +#define CFG_ENV_ADDR (PHYS_FLASH_1 +
PHYS_FLASH_SECT_SIZE) /* Addr of Environment Sector */(quoted diff) +3
-0+#define CFG_ENV_SIZE PHYS_FLASH_SECT_SIZE + +#endif /* __CONFIG_H */diff -x CVS -ruN u-boot.orig/Makefile u-boot.new/Makefile
Makefile +3
-0@@ -912,6 +912,9 @@ shannon_config : unconfig @./mkconfig $(@:_config=) arm sa1100 shannon +gcplus_config : unconfig + @./mkconfig $(@:_config=) arm sa1100 gcplus + ############################################################## ############# ARM92xT Systems
##############################################################
###########-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users
PATCH 1/1 New ADS GraphicsClient+ board port
Quoted 2 lines · Brad Kemp
George,
What problem did you have with the CFI flash driver?
Couldn't detect flash. I didn't try to debug it much beyond that since I already had the flash.c ported from a few months ago. So I punted with that for now. I took a look at that common CFI flash driver and had the opinion that the BE/LE support could/should probably be done better, e.g. via appropriate use of cpu_to_{le,be{8,16,32,64} macros. But that was just an opinion drawn from a mere glance at the source.
--
Regards,
George
Quoted 1,064 lines
Brad
Quoted 1,062 lines
-----Original Message-----
From: George G. Davis [mailto:davis_g at comcast.net]
Sent: Thursday, March 11, 2004 2:17 PM
To: u-boot-users at lists.sourceforge.net
Subject: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board portGreetings,
I humbly submit this trivial board port for the ADS GraphicsClient+. This
SA-1110 based board is actually EOL but it's still useful to me for Linux
development/testing. I'll eventually make this thing use the common CFI
flash support instead of theflash.cincluded here. But for now I was unable to get the CFI flash support working on this target.This patch is based on latest CVS HEAD +/- a few hours.
Thanks!
--
Regards,
Georgediff -x CVS -ruN
u-boot.orig/board/gcplus/config.mku-boot.new/board/gcplus/config.mk
---u-boot.orig/board/gcplus/config.mk1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/config.mk2003-11-06
00:36:23.000000000 -0500(quoted diff) +13
-0@@ -0,0 +1,13 @@ +# +# ADS GCPlus board with SA1110 cpu +# +# The ADS GCPlus has 2 banks of 16 MiB SDRAM +# +# We use the ADS GCPlus Linux boot ROM to load U-Boot into SDRAM +# at c020'0000 and then move ourself to c8f0'0000. Basically, just +# install the U-Boot binary as you would the Linux zImage and then +# reap the benfits of more convenient Linux development cycles, i.e. +# bootp;tftp;bootm, repeat, etc.,. +# + +TEXT_BASE = 0xc8f00000diff -x CVS -ruN
u-boot.orig/board/gcplus/flash.cu-boot.new/board/gcplus/flash.c
---u-boot.orig/board/gcplus/flash.c1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/flash.c2003-12-09
11:29:34.000000000 -0500(quoted diff) +32
-0@@ -0,0 +1,440 @@ +/* + * (C) Copyright 2001 + * Kyle Harris, Nexus Technologies, Inc. kharris at nexus-tech.net + * + * (C) Copyright 2001 + * Wolfgang Denk, DENX Software Engineering, wd at denx.de. + * + * 2003 (c) MontaVista Software, Inc. + * + * 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 <linux/byteorder/swab.h> + +flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* infofor FLASH chips */
(quoted diff) +41
-2+ +/* Board support for 1 or 2 flash devices */ +#define FLASH_PORT_WIDTH32 +#undef FLASH_PORT_WIDTH16 + +#ifdef FLASH_PORT_WIDTH16 +#define FLASH_PORT_WIDTH ushort +#define FLASH_PORT_WIDTHV vu_short +#define SWAP(x) __swab16(x) +#else +#define FLASH_PORT_WIDTH ulong +#define FLASH_PORT_WIDTHV vu_long +#define SWAP(x) __swab32(x) +#endif + +#define FPW FLASH_PORT_WIDTH +#define FPWV FLASH_PORT_WIDTHV + +#define mb() __asm__ __volatile__ ("" : : : "memory") + +/*----------------------------------------------------------- ------------ + * Functions + */ +static ulong flash_get_size(FPW * addr, flash_info_t * info); +static int write_data(flash_info_t * info, ulong dest, FPW data); +static void flash_get_offsets(ulong base, flash_info_t * info); +void inline spin_wheel(void); + +/*----------------------------------------------------------- ------------ + */ + +unsigned long +flash_init(void) +{ + int i; + ulong size = 0; + + for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) { + switch (i) { + case 0: + flash_get_size((FPW *) PHYS_FLASH_1,&flash_info[i]);
(quoted diff) +14
-0+ flash_get_offsets(PHYS_FLASH_1, &flash_info[i]); + break; + default: + panic("configured too many flash banks!\n"); + break; + } + size += flash_info[i].size; + } + + /* Protect monitor and environment sectors + */ + flash_protect(FLAG_PROTECT_SET, + CFG_FLASH_BASE, + CFG_FLASH_BASE + monitor_flash_len - 1,&flash_info[0]);
(quoted diff) +22
-1+ + flash_protect(FLAG_PROTECT_SET, + CFG_ENV_ADDR, + CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]); + + return size; +} + +/*----------------------------------------------------------- ------------ + */ +static void +flash_get_offsets(ulong base, flash_info_t * info) +{ + int i; + + if (info->flash_id == FLASH_UNKNOWN) { + return; + } + + if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) { + for (i = 0; i < info->sector_count; i++) { + info->start[i] = base + (i *
PHYS_FLASH_SECT_SIZE);(quoted diff) +47
-1+ info->protect[i] = 0; + } + } +} + +/*----------------------------------------------------------- ------------ + */ +void +flash_print_info(flash_info_t * info) +{ + int i; + + if (info->flash_id == FLASH_UNKNOWN) { + printf("missing or unknown FLASH type\n"); + return; + } + + switch (info->flash_id & FLASH_VENDMASK) { + case FLASH_MAN_INTEL: + printf("INTEL "); + break; + default: + printf("Unknown Vendor "); + break; + } + + switch (info->flash_id & FLASH_TYPEMASK) { + case FLASH_28F128J3A: + printf("28F128J3A\n"); + break; + case FLASH_28F640J5: + printf("28F640J5\n"); + break; + default: + printf("Unknown Chip Type\n"); + break; + } + + printf(" Size: %ld MB in %d Sectors\n", + info->size >> 20, info->sector_count); + + printf(" Sector Start Addresses:"); + for (i = 0; i < info->sector_count; ++i) { + if ((i % 5) == 0) + printf("\n "); + printf(" %08lX%s", + info->start[i], info->protect[i] ? "(RO)" : " ");
(quoted diff) +86
-1+ } + printf("\n"); + return; +} + +/* + * The following code cannot be run from FLASH! + */ +static ulong +flash_get_size(FPW * addr, flash_info_t * info) +{ + volatile FPW value; + /* Write auto select command: read Manufacturer ID */ + addr[0x5555] = (FPW) 0x00AA00AA; + addr[0x2AAA] = (FPW) 0x00550055; + addr[0x5555] = (FPW) 0x00900090; + + mb(); + value = addr[0]; + + switch (value) { + + case (FPW) INTEL_MANUFACT: + info->flash_id = FLASH_MAN_INTEL; + break; + + default: + info->flash_id = FLASH_UNKNOWN; + info->sector_count = 0; + info->size = 0; + addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ + return (0); /* no or unknown flash */ + } + + mb(); + value = addr[1]; /* device ID */ + switch (value) { + case (FPW) INTEL_ID_28F128J3A: + info->flash_id += FLASH_28F128J3A; + info->sector_count = 128; + info->size = 0x02000000; + break; /* => 16 MB */ + case (FPW) INTEL_ID_28F640J5: + info->flash_id += FLASH_28F640J5; + info->sector_count = 64; + info->size = 0x01000000; + break; /* => 16 MB */ + + default: + info->flash_id = FLASH_UNKNOWN; + break; + } + + if (info->sector_count > CFG_MAX_FLASH_SECT) { + printf("** ERROR: sector count %d > max (%d) **\n", + info->sector_count, CFG_MAX_FLASH_SECT); + info->sector_count = CFG_MAX_FLASH_SECT; + } + + addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ + + return (info->size); +} + +/*----------------------------------------------------------- ------------ + */ + +int +flash_erase(flash_info_t * info, int s_first, int s_last) +{ + int flag, prot, sect; + ulong type, start, last; + int rcode = 0; + + if ((s_first < 0) || (s_first > s_last)) { + if (info->flash_id == FLASH_UNKNOWN) { + printf("- missing\n"); + } else { + printf("- no sectors to erase\n"); + } + return 1; + } + + type = (info->flash_id & FLASH_VENDMASK); + if ((type != FLASH_MAN_INTEL)) { + printf("Can't erase unknown flash type %08lx -aborted\n",
(quoted diff) +13
-0+ info->flash_id); + return 1; + } + + prot = 0; + for (sect = s_first; sect <= s_last; ++sect) { + if (info->protect[sect]) { + prot++; + } + } + + if (prot) { + printf("- Warning: %d protected sectors willnot be erased!\n",
(quoted diff) +23
-0+ prot); + } else { + printf("\n"); + } + + start = get_timer(0); + last = start; + + /* Disable interrupts which might cause a timeout here */ + flag = disable_interrupts(); + + /* Start erase on unprotected sectors */ + for (sect = s_first; sect <= s_last; sect++) { + if (info->protect[sect] == 0) { /* not protected */ + FPWV *addr = (FPWV *) (info->start[sect]); + FPW status; + + printf("Erasing sector %2d ... ", sect); + + /* arm simple, non interrupt dependent timer */ + reset_timer_masked(); + + *addr = (FPW) 0x00500050; /*clear status register */
(quoted diff) +1
-0+ *addr = (FPW) 0x00200020; /*erase setup */
(quoted diff) +1
-0+ *addr = (FPW) 0x00D000D0; /*erase confirm */
(quoted diff) +5
-0+ + while (((status = + *addr) & (FPW) 0x00800080) != + (FPW) 0x00800080) { + if (get_timer_masked() >
CFG_FLASH_ERASE_TOUT) {(quoted diff) +2
-0+ printf("Timeout\n"); + *addr = (FPW)
0x00B000B0; /* suspend erase */(quoted diff) +1
-0+ *addr = (FPW)
0x00FF00FF; /* reset to read mode */(quoted diff) +6
-0+ rcode = 1; + break; + } + } + + *addr = (FPW) 0x00500050; /*clear status register cmd. */
(quoted diff) +1
-0+ *addr = (FPW) 0x00FF00FF; /*resest to read mode */
(quoted diff) +112
-2+ + printf(" done\n"); + } + } + return rcode; +} + +/*----------------------------------------------------------- ------------ + * Copy memory to flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + * 4 - Flash not identified + */ + +int +write_buff(flash_info_t * info, uchar * src, ulong addr, ulong cnt) +{ + ulong cp, wp; + FPW data; + int count, i, l, rc, port_width; + + if (info->flash_id == FLASH_UNKNOWN) { + return 4; + } +/* get lower word aligned address */ +#ifdef FLASH_PORT_WIDTH16 + wp = (addr & ~1); + port_width = 2; +#else + wp = (addr & ~3); + port_width = 4; +#endif + + /* + * handle unaligned start bytes + */ + if ((l = addr - wp) != 0) { + data = 0; + for (i = 0, cp = wp; i < l; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + for (; i < port_width && cnt > 0; ++i) { + data = (data << 8) | *src++; + --cnt; + ++cp; + } + for (; cnt == 0 && i < port_width; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + + if ((rc = write_data(info, wp, SWAP(data))) != 0) { + return (rc); + } + wp += port_width; + } + + /* + * handle word aligned part + */ + count = 0; + while (cnt >= port_width) { + data = 0; + for (i = 0; i < port_width; ++i) { + data = (data << 8) | *src++; + } + if ((rc = write_data(info, wp, SWAP(data))) != 0) { + return (rc); + } + wp += port_width; + cnt -= port_width; + if (count++ > 0x800) { + spin_wheel(); + count = 0; + } + } + + if (cnt == 0) { + return (0); + } + + /* + * handle unaligned tail bytes + */ + data = 0; + for (i = 0, cp = wp; i < port_width && cnt > 0; ++i, ++cp) { + data = (data << 8) | *src++; + --cnt; + } + for (; i < port_width; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + + return (write_data(info, wp, SWAP(data))); +} + +/*----------------------------------------------------------- ------------ + * Write a word or halfword to Flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + */ +static int +write_data(flash_info_t * info, ulong dest, FPW data) +{ + FPWV *addr = (FPWV *) dest; + ulong status; + int flag; + + /* Check if Flash is (sufficiently) erased */ + if ((*addr & data) != data) { + printf("not erased at %08lx (%x)\n", (ulong)addr, *addr);
(quoted diff) +13
-0+ return (2); + } + /* Disable interrupts which might cause a timeout here */ + flag = disable_interrupts(); + + *addr = (FPW) 0x00400040; /* write setup */ + *addr = data; + + /* arm simple, non interrupt dependent timer */ + reset_timer_masked(); + + /* wait while polling the status register */ + while (((status = *addr) & (FPW) 0x00800080) != (FPW)
0x00800080) {(quoted diff) +2
-0+ if (get_timer_masked() > CFG_FLASH_WRITE_TOUT) { + *addr = (FPW) 0x00FF00FF; /*restore read mode */
(quoted diff) +18
-0+ return (1); + } + } + + *addr = (FPW) 0x00FF00FF; /* restore read mode */ + + return (0); +} + +void inline +spin_wheel(void) +{ + static int p = 0; + static char w[] = "\\/-"; + + printf("\010%c", w[p]); + (++p == 3) ? (p = 0) : 0; +}diff -x CVS -ruN
u-boot.orig/board/gcplus/gcplus.cu-boot.new/board/gcplus/gcplus.c
---u-boot.orig/board/gcplus/gcplus.c1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/gcplus.c2004-03-09
21:52:57.000000000 -0500(quoted diff) +40
-2@@ -0,0 +1,73 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <[email protected]> + * + * 2003-2004 (c) MontaVista Software, Inc. + * + * 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 <SA-1100.h> +/* -------------------------------------------------------------- ----------- */ + +/* + * Miscelaneous platform dependent initialisations + */ + +int +board_init(void) +{ + DECLARE_GLOBAL_DATA_PTR; + + gd->bd->bi_arch_number = 29; /* ADSGraphicsClientPlus Board */
(quoted diff) +33
-0+ + gd->bd->bi_boot_params = 0xc000003c; /* Weird address? */ + + /* Most of the ADS GCPlus I/O is connected to Static nCS2. + * So I'm brute forcing nCS2 timiming here for worst case. + */ + MSC1 &= ~0xFFFF; + MSC1 |= 0x8649; + + /* Nothing is connected to Static nCS4 or nCS5. But I'm using + * nCS4 as a paranoia safe guard to force nCS2, nOE; nWE high + * after accessing I/O via (non-VLIO) nCS2. What can I say, I'm + * paranoid and lack decent tools to alleviate my fear. I sure + * do wish I had a logic analyzer. : ( + */ + + MSC2 = 0xfff9fff9; + + return 0; +} + +int +dram_init(void) +{ + DECLARE_GLOBAL_DATA_PTR; + + gd->bd->bi_dram[0].start = PHYS_SDRAM_1; + gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; + gd->bd->bi_dram[1].start = PHYS_SDRAM_2; + gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE; + + return (0); +}diff -x CVS -ruN u-boot.orig/board/gcplus/Makefile u-boot.new/board/gcplus/Makefile
--- u-boot.orig/board/gcplus/Makefile 1969-12-31
19:00:00.000000000 -0500
+++ u-boot.new/board/gcplus/Makefile 2004-03-09
21:50:31.000000000 -0500(quoted diff) +42
-0@@ -0,0 +1,49 @@ +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd at denx.de. +# +# 2003 (c) MontaVista Software, Inc. +# +# 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 = lib$(BOARD).a + +OBJS := gcplus.o flash.o +SOBJS := memsetup.o + +$(LIB): $(OBJS) $(SOBJS) + $(AR) crv $@ $(OBJS) $(SOBJS) + +clean: + rm -f $(SOBJS) $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak .depend + +#########################################################################
(quoted diff) +7
-0+ +.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) + $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +-include .depend + +#########################################################################
diff -x CVS -ruNu-boot.orig/board/gcplus/memsetup.Su-boot.new/board/gcplus/memsetup.S
---u-boot.orig/board/gcplus/memsetup.S1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/memsetup.S2004-03-09
23:12:53.000000000 -0500(quoted diff) +4
-0@@ -0,0 +1,77 @@ +/* + * Memory Setup stuff - taken from blob memsetup.S + * + * Copyright (C) 1999 2000 2001 Erik Mouw(J.A.K.Mouw at its.tudelft.nl) and
+ * Jan-Derk Bakker (J.D.Bakker at its.tudelft.nl)
+ * 2003-2004 (c) MontaVista Software, Inc.
+ *
+ * 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
+ */(quoted diff) +9
-0+ + +#include "config.h" +#include "version.h" + + + .globl memsetup +memsetup: + /* The ADS GC+ for Linux Boot Rom Ver. 1.73 does memoryinit for us.
(quoted diff) +1
-0+ * However the darn thing leaves the MMU enabled beforehanding control
(quoted diff) +42
-0+ * over to us. So we need to disable the MMU and we use memsetup + * to do it. + */ + +@ The following code segment was borrowed with gratitude from: +@ linux-2.4.19-rmk7/arch/arm/boot/compressed/head-sa1100.S + + @ Data cache might be active. + @ Be sure to flush kernel binary out of the cache, + @ whatever state it is, before it is turned off. + @ This is done by fetching through currently executed + @ memory to be sure we hit the same cache. + bic r2, pc, #0x1f + add r3, r2, #0x4000 @ 16 kb is quite enough... +1: ldr r0, [r2], #32 + teq r2, r3 + bne 1b + mcr p15, 0, r0, c7, c10, 4 @ drain WB + mcr p15, 0, r0, c7, c7, 0 @ flush I & D caches + + @ disabling MMU and caches + mrc p15, 0, r0, c1, c0, 0 @ read control reg + bic r0, r0, #0x0d @ clear WB, DC, MMU + bic r0, r0, #0x1000 @ clear Icache + mcr p15, 0, r0, c1, c0, 0 + + nop + nop + nop + nop + nop + + b 2f +2: + nop + nop + nop + nop + nop + + + mov pc, lrdiff -x CVS -ruN
u-boot.orig/board/gcplus/u-boot.ldsu-boot.new/board/gcplus/u-boot.lds
---u-boot.orig/board/gcplus/u-boot.lds1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/u-boot.lds2004-03-06
16:03:44.000000000 -0500(quoted diff) +25
-0@@ -0,0 +1,57 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd at denx.de. + * 2003 (c) MontaVista Software, Inc. + * + * 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 + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm","elf32-littlearm")
(quoted diff) +32
-0+OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ + . = 0x00000000; + + . = ALIGN(4); + .text : + { + cpu/sa1100/start.o (.text) + *(.text) + } + + . = ALIGN(4); + .rodata : { *(.rodata) } + + . = ALIGN(4); + .data : { *(.data) } + + . = ALIGN(4); + .got : { *(.got) } + + + __u_boot_cmd_start = .; + .u_boot_cmd : { *(.u_boot_cmd) } + __u_boot_cmd_end = .; + + . = ALIGN(4); + __bss_start = .; + .bss : { *(.bss) } + _end = .; +}diff -x CVS -ruN
u-boot.orig/include/configs/gcplus.hu-boot.new/include/configs/gcplus.h
---u-boot.orig/include/configs/gcplus.h1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/include/configs/gcplus.h2004-03-11
09:41:31.000000000 -0500(quoted diff) +36
-0@@ -0,0 +1,174 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <[email protected]> + * + * 2003-2004 (c) MontaVista Software, Inc. + * + * Configuation settings for the ADS GraphicsClient+ board. + * + * 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 + +#undef DEBUG + +/* + * The ADS GCPlus Linux boot ROM loads U-Boot into RAM at 0xc0200000. + * We don't actually init RAM in this case since we're usingU-Boot as
+ * an secondary boot loader during Linux kernel development and testing,
+ * e.g. bootp/tftp download of the kernel is a far more convenient
+ * when testing new kernels on this target. However the ADS GCPlus Linux
+ * boot ROM leaves the MMU enabled when it passes control to U-Boot. So
+ * we use memsetup (CONFIG_INIT_CRITICAL) to remedy that problem.
+ */(quoted diff) +7
-0+#define CONFIG_INIT_CRITICAL + +/* + * High Level Configuration Options + * (easy to change) + */ +#define CONFIG_SA1110 1 /* This is anSA1100 CPU */
+#defineCONFIG_GCPLUS1 /* on an ADS
GCPlus Board */(quoted diff) +2
-0+ +#undef CONFIG_USE_IRQ /* we don'tneed IRQ/FIQ stuff */
(quoted diff) +2
-0+ +#define CONFIG_CMDLINE_TAG 1 /* enable passing ofATAGs */
(quoted diff) +8
-0+#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1 + +/* + * Size of malloc() pool + */ +#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) +#define CFG_GBL_DATA_SIZE 128 /* size rsrvd forinitial data */
(quoted diff) +6
-0+ + +/* + * Hardware drivers + */ +#define CONFIG_DRIVER_LAN91C96 /* we have an SMC9194on-board */
(quoted diff) +6
-0+#define CONFIG_LAN91C96_BASE 0x100e0000 + +/* + * select serial console configuration + */ +#define CONFIG_SERIAL3 1 /* we use SERIAL 3 onADS GCPlus */
(quoted diff) +10
-0+ +/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE + +#define CONFIG_BAUDRATE 38400 + +#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_DHCP) +#define CONFIG_BOOTP_MASK CONFIG_BOOTP_DEFAULT + +/* this must be included AFTER the definition of
CONFIG_COMMANDS(if any) */(quoted diff) +4
-0+#include <cmd_confdefs.h> + +#define CONFIG_BOOTDELAY 3 +#define CONFIG_BOOTARGS "console=ttySA0,38400n8mtdparts=sa1100-flash:1m at 0(zImage),3m at 1m(ramdisk.gz),12m at 4m(us erfs) root=/dev/nfs ip=bootp"
(quoted diff) +5
-0+#define CONFIG_BOOTCOMMAND "bootp;tftp;bootm" +#define CFG_AUTOLOAD "n" /* No autoload */ + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE 38400 /* speed to runkgdb serial port */
+#defineCONFIG_KGDB_SER_INDEX2 /*
which serial port to use */(quoted diff) +6
-0+#endif + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP /*undef to save memory */
+#defineCFG_PROMPT"ADS GCPlus # " /*
Monitor Command Prompt */
+#defineCFG_CBSIZE256 /*
Console I/O Buffer Size */
+#defineCFG_PBSIZE(CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
/* Print Buffer Size */
+#defineCFG_MAXARGS16 /* max
number of command args */
+#defineCFG_BARGSIZECFG_CBSIZE/* Boot
Argument Buffer Size */(quoted diff) +2
-0+ +#define CFG_MEMTEST_START 0xc0400000 /* memtestworks on */
+#defineCFG_MEMTEST_END0xc0800000/* 4
... 8 MB in DRAM */(quoted diff) +2
-0+ +#undef CFG_CLKS_IN_HZ /* everything, inclboard info, in Hz */
(quoted diff) +2
-0+ +#define CFG_LOAD_ADDR 0xc0000000 /*default load address */
(quoted diff) +2
-0+ +#define CFG_HZ 3686400 /*incrementer freq: 3.6864 MHz */
+#defineCFG_CPUSPEED0x0a/* set core
clock to 206MHz */(quoted diff) +38
-3+ + /* valid baudrates */ +#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } + +/*----------------------------------------------------------- ------------ + * Stack sizes + * + * The stack sizes are set up in start.S using the settings below + */ +#define CONFIG_STACKSIZE (128*1024) /* regular stack */ +#ifdef CONFIG_USE_IRQ +#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */ +#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */ +#endif + +/*----------------------------------------------------------- ------------ + * Physical Memory Map + */ +#define CONFIG_NR_DRAM_BANKS 2 /* we have 2 banks of DRAM */ +#define PHYS_SDRAM_1 0xc0000000 /* SDRAM Bank #1 */ +#define PHYS_SDRAM_1_SIZE 0x01000000 /* 16 MB */ +#define PHYS_SDRAM_2 0xc8000000 /* SDRAM Bank #2 */ +#define PHYS_SDRAM_2_SIZE 0x01000000 /* 16 MB */ + + +#define PHYS_FLASH_1 0x08000000 /* Flash Bank #1 */ +#define PHYS_FLASH_SIZE 0x00800000 /* 8 MB */ +#define PHYS_FLASH_BANK_SIZE 0x01000000 /* 16 MB Banks */ +#define PHYS_FLASH_SECT_SIZE 0x00040000 /* 256 KB sectors (x2) */ + +#define CFG_FLASH_BASE PHYS_FLASH_1 + +/*----------------------------------------------------------- ------------ + * FLASH and environment organization + */ +#if 1 +#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ +#define CFG_MAX_FLASH_SECT 128 /* max number ofsectors on one chip */
(quoted diff) +7
-0+ +/* timeout values are in ticks */ +#define CFG_FLASH_ERASE_TOUT (2*CFG_HZ) /* Timeout for Flash Erase */ +#define CFG_FLASH_WRITE_TOUT (2*CFG_HZ) /* Timeout for Flash Write */ +#else +/* REVISIT: This doesn't work on ADS GCPlus just yet: +#define CFG_FLASH_CFI 1 /* flash is CFIconformant */
+#defineCFG_FLASH_CFI_DRIVER1 /* use common cfi
driver */
+#defineCFG_FLASH_USE_BUFFER_WRITE1 /* use buffered
writes (20x faster) */
+#defineCFG_MAX_FLASH_BANKS1 /* max # of memory
banks */
+#defineCFG_FLASH_INCREMENT0 /* there is only one
bank */
+#defineCFG_MAX_FLASH_SECT128 /* max # of sectors
on one chip */
+//#defineCFG_FLASH_PROTECTION1 /* hardware flash
protection */(quoted diff) +5
-0+#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE } +#endif + +#define CFG_ENV_IS_IN_FLASH 1 +#define CFG_ENV_ADDR (PHYS_FLASH_1 +
PHYS_FLASH_SECT_SIZE) /* Addr of Environment Sector */(quoted diff) +3
-0+#define CFG_ENV_SIZE PHYS_FLASH_SECT_SIZE + +#endif /* __CONFIG_H */diff -x CVS -ruN u-boot.orig/Makefile u-boot.new/Makefile
Makefile +3
-0@@ -912,6 +912,9 @@ shannon_config : unconfig @./mkconfig $(@:_config=) arm sa1100 shannon +gcplus_config : unconfig + @./mkconfig $(@:_config=) arm sa1100 gcplus + ############################################################## ############# ARM92xT Systems
##############################################################
###########-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users
PATCH 1/1 New ADS GraphicsClient+ board port
Quoted 4 lines · George G. Davis
I took a look at that common CFI flash driver and had the opinion that the BE/LE support could/should probably be done better, e.g. via appropriate use of cpu_to_{le,be{8,16,32,64} macros. But that was just an opinion drawn from a mere glance at the source.
Brad wrote the driver originally for BE systems, and I worked with him to get it to work on LE systems. Are you running your system LE? I only have two systems to test on, and currently one is not working (hardware problems), so the LE stuff has not been that well tested. I am certainly willing to work with you to make it better.
Ed Okerson
PATCH 1/1 New ADS GraphicsClient+ board port
Quoted 9 lines · Ed Okerson
Quoted 4 lines · George G. Davis
I took a look at that common CFI flash driver and had the opinion that the BE/LE support could/should probably be done better, e.g. via appropriate use of cpu_to_{le,be{8,16,32,64} macros. But that was just an opinion drawn from a mere glance at the source.
Brad wrote the driver originally for BE systems, and I worked with him to get it to work on LE systems. Are you running your system LE?
LE.
Quoted 4 lines
I only
have two systems to test on, and currently one is not working (hardware problems), so the LE stuff has not been that well tested. I am certainly willing to work with you to make it better.
Ok, no problem. I'll be somewhat sporadic since I'm always somewhat over extended. But I'm happy to work along with you to implement and test CFI changes on this and other LE targets (I've got a variety of ARM LE targets : ).
--
Regards,
George
Quoted 2 lines
Ed Okerson
PATCH 1/1 New ADS GraphicsClient+ board port
In reply to George G. DavisQuoted 4 lines · George G. Davis
Quoted 2 lines · Brad Kemp
George,
What problem did you have with the CFI flash driver?
Quoted 8 lines
Couldn't detect flash. I didn't try to debug it much beyond that since I already had the
flash.cported from a few months ago. So I punted with that for now. I took a look at that common CFI flash driver and had the opinion that the BE/LE support could/should probably be done better, e.g. via appropriate use of cpu_to_{le,be{8,16,32,64} macros. But that was just an opinion drawn from a mere glance at the source.
I think it should be configurable period. I am using the CFI driver on a BE system but I have the LE option defined since my flash is byte swapped. So that works for me, but I have to override the _LITTLE_ENDIAN define in just that file. So I think it should somehow look for a different define to override how it works. IE something like CONFIG_FLASH_CFI_BYTE_SWAP or something. Comments?
Thanks,
Matthew
Quoted 1,080 lines
--
Regards,
GeorgeQuoted 1,054 lines
Brad
Quoted 1,052 lines
-----Original Message-----
From: George G. Davis [mailto:davis_g at comcast.net]
Sent: Thursday, March 11, 2004 2:17 PM
To: u-boot-users at lists.sourceforge.net
Subject: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board portGreetings,
I humbly submit this trivial board port for the ADS GraphicsClient+. This
SA-1110 based board is actually EOL but it's still useful to me for Linux
development/testing. I'll eventually make this thing use the common CFI
flash support instead of theflash.cincluded here. But for now I was unable to get the CFI flash support working on this target.This patch is based on latest CVS HEAD +/- a few hours.
Thanks!
--
Regards,
Georgediff -x CVS -ruN
u-boot.orig/board/gcplus/config.mku-boot.new/board/gcplus/config.mk
---u-boot.orig/board/gcplus/config.mk1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/config.mk2003-11-06
00:36:23.000000000 -0500(quoted diff) +13
-0@@ -0,0 +1,13 @@ +# +# ADS GCPlus board with SA1110 cpu +# +# The ADS GCPlus has 2 banks of 16 MiB SDRAM +# +# We use the ADS GCPlus Linux boot ROM to load U-Boot into SDRAM +# at c020'0000 and then move ourself to c8f0'0000. Basically, just +# install the U-Boot binary as you would the Linux zImage and then +# reap the benfits of more convenient Linux development cycles, i.e. +# bootp;tftp;bootm, repeat, etc.,. +# + +TEXT_BASE = 0xc8f00000diff -x CVS -ruN
u-boot.orig/board/gcplus/flash.cu-boot.new/board/gcplus/flash.c
---u-boot.orig/board/gcplus/flash.c1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/flash.c2003-12-09
11:29:34.000000000 -0500(quoted diff) +32
-0@@ -0,0 +1,440 @@ +/* + * (C) Copyright 2001 + * Kyle Harris, Nexus Technologies, Inc. kharris at nexus-tech.net + * + * (C) Copyright 2001 + * Wolfgang Denk, DENX Software Engineering, wd at denx.de. + * + * 2003 (c) MontaVista Software, Inc. + * + * 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 <linux/byteorder/swab.h> + +flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* infofor FLASH chips */
(quoted diff) +41
-2+ +/* Board support for 1 or 2 flash devices */ +#define FLASH_PORT_WIDTH32 +#undef FLASH_PORT_WIDTH16 + +#ifdef FLASH_PORT_WIDTH16 +#define FLASH_PORT_WIDTH ushort +#define FLASH_PORT_WIDTHV vu_short +#define SWAP(x) __swab16(x) +#else +#define FLASH_PORT_WIDTH ulong +#define FLASH_PORT_WIDTHV vu_long +#define SWAP(x) __swab32(x) +#endif + +#define FPW FLASH_PORT_WIDTH +#define FPWV FLASH_PORT_WIDTHV + +#define mb() __asm__ __volatile__ ("" : : : "memory") + +/*----------------------------------------------------------- ------------ + * Functions + */ +static ulong flash_get_size(FPW * addr, flash_info_t * info); +static int write_data(flash_info_t * info, ulong dest, FPW data); +static void flash_get_offsets(ulong base, flash_info_t * info); +void inline spin_wheel(void); + +/*----------------------------------------------------------- ------------ + */ + +unsigned long +flash_init(void) +{ + int i; + ulong size = 0; + + for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) { + switch (i) { + case 0: + flash_get_size((FPW *) PHYS_FLASH_1,&flash_info[i]);
(quoted diff) +14
-0+ flash_get_offsets(PHYS_FLASH_1, &flash_info[i]); + break; + default: + panic("configured too many flash banks!\n"); + break; + } + size += flash_info[i].size; + } + + /* Protect monitor and environment sectors + */ + flash_protect(FLAG_PROTECT_SET, + CFG_FLASH_BASE, + CFG_FLASH_BASE + monitor_flash_len - 1,&flash_info[0]);
(quoted diff) +22
-1+ + flash_protect(FLAG_PROTECT_SET, + CFG_ENV_ADDR, + CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]); + + return size; +} + +/*----------------------------------------------------------- ------------ + */ +static void +flash_get_offsets(ulong base, flash_info_t * info) +{ + int i; + + if (info->flash_id == FLASH_UNKNOWN) { + return; + } + + if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) { + for (i = 0; i < info->sector_count; i++) { + info->start[i] = base + (i *
PHYS_FLASH_SECT_SIZE);(quoted diff) +47
-1+ info->protect[i] = 0; + } + } +} + +/*----------------------------------------------------------- ------------ + */ +void +flash_print_info(flash_info_t * info) +{ + int i; + + if (info->flash_id == FLASH_UNKNOWN) { + printf("missing or unknown FLASH type\n"); + return; + } + + switch (info->flash_id & FLASH_VENDMASK) { + case FLASH_MAN_INTEL: + printf("INTEL "); + break; + default: + printf("Unknown Vendor "); + break; + } + + switch (info->flash_id & FLASH_TYPEMASK) { + case FLASH_28F128J3A: + printf("28F128J3A\n"); + break; + case FLASH_28F640J5: + printf("28F640J5\n"); + break; + default: + printf("Unknown Chip Type\n"); + break; + } + + printf(" Size: %ld MB in %d Sectors\n", + info->size >> 20, info->sector_count); + + printf(" Sector Start Addresses:"); + for (i = 0; i < info->sector_count; ++i) { + if ((i % 5) == 0) + printf("\n "); + printf(" %08lX%s", + info->start[i], info->protect[i] ? "(RO)" : " ");
(quoted diff) +86
-1+ } + printf("\n"); + return; +} + +/* + * The following code cannot be run from FLASH! + */ +static ulong +flash_get_size(FPW * addr, flash_info_t * info) +{ + volatile FPW value; + /* Write auto select command: read Manufacturer ID */ + addr[0x5555] = (FPW) 0x00AA00AA; + addr[0x2AAA] = (FPW) 0x00550055; + addr[0x5555] = (FPW) 0x00900090; + + mb(); + value = addr[0]; + + switch (value) { + + case (FPW) INTEL_MANUFACT: + info->flash_id = FLASH_MAN_INTEL; + break; + + default: + info->flash_id = FLASH_UNKNOWN; + info->sector_count = 0; + info->size = 0; + addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ + return (0); /* no or unknown flash */ + } + + mb(); + value = addr[1]; /* device ID */ + switch (value) { + case (FPW) INTEL_ID_28F128J3A: + info->flash_id += FLASH_28F128J3A; + info->sector_count = 128; + info->size = 0x02000000; + break; /* => 16 MB */ + case (FPW) INTEL_ID_28F640J5: + info->flash_id += FLASH_28F640J5; + info->sector_count = 64; + info->size = 0x01000000; + break; /* => 16 MB */ + + default: + info->flash_id = FLASH_UNKNOWN; + break; + } + + if (info->sector_count > CFG_MAX_FLASH_SECT) { + printf("** ERROR: sector count %d > max (%d) **\n", + info->sector_count, CFG_MAX_FLASH_SECT); + info->sector_count = CFG_MAX_FLASH_SECT; + } + + addr[0] = (FPW) 0x00FF00FF; /* restore read mode */ + + return (info->size); +} + +/*----------------------------------------------------------- ------------ + */ + +int +flash_erase(flash_info_t * info, int s_first, int s_last) +{ + int flag, prot, sect; + ulong type, start, last; + int rcode = 0; + + if ((s_first < 0) || (s_first > s_last)) { + if (info->flash_id == FLASH_UNKNOWN) { + printf("- missing\n"); + } else { + printf("- no sectors to erase\n"); + } + return 1; + } + + type = (info->flash_id & FLASH_VENDMASK); + if ((type != FLASH_MAN_INTEL)) { + printf("Can't erase unknown flash type %08lx -aborted\n",
(quoted diff) +13
-0+ info->flash_id); + return 1; + } + + prot = 0; + for (sect = s_first; sect <= s_last; ++sect) { + if (info->protect[sect]) { + prot++; + } + } + + if (prot) { + printf("- Warning: %d protected sectors willnot be erased!\n",
(quoted diff) +23
-0+ prot); + } else { + printf("\n"); + } + + start = get_timer(0); + last = start; + + /* Disable interrupts which might cause a timeout here */ + flag = disable_interrupts(); + + /* Start erase on unprotected sectors */ + for (sect = s_first; sect <= s_last; sect++) { + if (info->protect[sect] == 0) { /* not protected */ + FPWV *addr = (FPWV *) (info->start[sect]); + FPW status; + + printf("Erasing sector %2d ... ", sect); + + /* arm simple, non interrupt dependent timer */ + reset_timer_masked(); + + *addr = (FPW) 0x00500050; /*clear status register */
(quoted diff) +1
-0+ *addr = (FPW) 0x00200020; /*erase setup */
(quoted diff) +1
-0+ *addr = (FPW) 0x00D000D0; /*erase confirm */
(quoted diff) +5
-0+ + while (((status = + *addr) & (FPW) 0x00800080) != + (FPW) 0x00800080) { + if (get_timer_masked() >
CFG_FLASH_ERASE_TOUT) {(quoted diff) +2
-0+ printf("Timeout\n"); + *addr = (FPW)
0x00B000B0; /* suspend erase */(quoted diff) +1
-0+ *addr = (FPW)
0x00FF00FF; /* reset to read mode */(quoted diff) +6
-0+ rcode = 1; + break; + } + } + + *addr = (FPW) 0x00500050; /*clear status register cmd. */
(quoted diff) +1
-0+ *addr = (FPW) 0x00FF00FF; /*resest to read mode */
(quoted diff) +112
-2+ + printf(" done\n"); + } + } + return rcode; +} + +/*----------------------------------------------------------- ------------ + * Copy memory to flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + * 4 - Flash not identified + */ + +int +write_buff(flash_info_t * info, uchar * src, ulong addr, ulong cnt) +{ + ulong cp, wp; + FPW data; + int count, i, l, rc, port_width; + + if (info->flash_id == FLASH_UNKNOWN) { + return 4; + } +/* get lower word aligned address */ +#ifdef FLASH_PORT_WIDTH16 + wp = (addr & ~1); + port_width = 2; +#else + wp = (addr & ~3); + port_width = 4; +#endif + + /* + * handle unaligned start bytes + */ + if ((l = addr - wp) != 0) { + data = 0; + for (i = 0, cp = wp; i < l; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + for (; i < port_width && cnt > 0; ++i) { + data = (data << 8) | *src++; + --cnt; + ++cp; + } + for (; cnt == 0 && i < port_width; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + + if ((rc = write_data(info, wp, SWAP(data))) != 0) { + return (rc); + } + wp += port_width; + } + + /* + * handle word aligned part + */ + count = 0; + while (cnt >= port_width) { + data = 0; + for (i = 0; i < port_width; ++i) { + data = (data << 8) | *src++; + } + if ((rc = write_data(info, wp, SWAP(data))) != 0) { + return (rc); + } + wp += port_width; + cnt -= port_width; + if (count++ > 0x800) { + spin_wheel(); + count = 0; + } + } + + if (cnt == 0) { + return (0); + } + + /* + * handle unaligned tail bytes + */ + data = 0; + for (i = 0, cp = wp; i < port_width && cnt > 0; ++i, ++cp) { + data = (data << 8) | *src++; + --cnt; + } + for (; i < port_width; ++i, ++cp) { + data = (data << 8) | (*(uchar *) cp); + } + + return (write_data(info, wp, SWAP(data))); +} + +/*----------------------------------------------------------- ------------ + * Write a word or halfword to Flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + */ +static int +write_data(flash_info_t * info, ulong dest, FPW data) +{ + FPWV *addr = (FPWV *) dest; + ulong status; + int flag; + + /* Check if Flash is (sufficiently) erased */ + if ((*addr & data) != data) { + printf("not erased at %08lx (%x)\n", (ulong)addr, *addr);
(quoted diff) +13
-0+ return (2); + } + /* Disable interrupts which might cause a timeout here */ + flag = disable_interrupts(); + + *addr = (FPW) 0x00400040; /* write setup */ + *addr = data; + + /* arm simple, non interrupt dependent timer */ + reset_timer_masked(); + + /* wait while polling the status register */ + while (((status = *addr) & (FPW) 0x00800080) != (FPW)
0x00800080) {(quoted diff) +2
-0+ if (get_timer_masked() > CFG_FLASH_WRITE_TOUT) { + *addr = (FPW) 0x00FF00FF; /*restore read mode */
(quoted diff) +18
-0+ return (1); + } + } + + *addr = (FPW) 0x00FF00FF; /* restore read mode */ + + return (0); +} + +void inline +spin_wheel(void) +{ + static int p = 0; + static char w[] = "\\/-"; + + printf("\010%c", w[p]); + (++p == 3) ? (p = 0) : 0; +}diff -x CVS -ruN
u-boot.orig/board/gcplus/gcplus.cu-boot.new/board/gcplus/gcplus.c
---u-boot.orig/board/gcplus/gcplus.c1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/gcplus.c2004-03-09
21:52:57.000000000 -0500(quoted diff) +40
-2@@ -0,0 +1,73 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <[email protected]> + * + * 2003-2004 (c) MontaVista Software, Inc. + * + * 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 <SA-1100.h> +/* -------------------------------------------------------------- ----------- */ + +/* + * Miscelaneous platform dependent initialisations + */ + +int +board_init(void) +{ + DECLARE_GLOBAL_DATA_PTR; + + gd->bd->bi_arch_number = 29; /* ADSGraphicsClientPlus Board */
(quoted diff) +33
-0+ + gd->bd->bi_boot_params = 0xc000003c; /* Weird address? */ + + /* Most of the ADS GCPlus I/O is connected to Static nCS2. + * So I'm brute forcing nCS2 timiming here for worst case. + */ + MSC1 &= ~0xFFFF; + MSC1 |= 0x8649; + + /* Nothing is connected to Static nCS4 or nCS5. But I'm using + * nCS4 as a paranoia safe guard to force nCS2, nOE; nWE high + * after accessing I/O via (non-VLIO) nCS2. What can I say, I'm + * paranoid and lack decent tools to alleviate my fear. I sure + * do wish I had a logic analyzer. : ( + */ + + MSC2 = 0xfff9fff9; + + return 0; +} + +int +dram_init(void) +{ + DECLARE_GLOBAL_DATA_PTR; + + gd->bd->bi_dram[0].start = PHYS_SDRAM_1; + gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; + gd->bd->bi_dram[1].start = PHYS_SDRAM_2; + gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE; + + return (0); +}diff -x CVS -ruN u-boot.orig/board/gcplus/Makefile u-boot.new/board/gcplus/Makefile
--- u-boot.orig/board/gcplus/Makefile 1969-12-31
19:00:00.000000000 -0500
+++ u-boot.new/board/gcplus/Makefile 2004-03-09
21:50:31.000000000 -0500(quoted diff) +42
-0@@ -0,0 +1,49 @@ +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd at denx.de. +# +# 2003 (c) MontaVista Software, Inc. +# +# 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 = lib$(BOARD).a + +OBJS := gcplus.o flash.o +SOBJS := memsetup.o + +$(LIB): $(OBJS) $(SOBJS) + $(AR) crv $@ $(OBJS) $(SOBJS) + +clean: + rm -f $(SOBJS) $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak .depend + +#########################################################################
(quoted diff) +7
-0+ +.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) + $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +-include .depend + +#########################################################################
diff -x CVS -ruNu-boot.orig/board/gcplus/memsetup.Su-boot.new/board/gcplus/memsetup.S
---u-boot.orig/board/gcplus/memsetup.S1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/memsetup.S2004-03-09
23:12:53.000000000 -0500(quoted diff) +4
-0@@ -0,0 +1,77 @@ +/* + * Memory Setup stuff - taken from blob memsetup.S + * + * Copyright (C) 1999 2000 2001 Erik Mouw(J.A.K.Mouw at its.tudelft.nl) and
+ * Jan-Derk Bakker (J.D.Bakker at its.tudelft.nl)
+ * 2003-2004 (c) MontaVista Software, Inc.
+ *
+ * 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
+ */(quoted diff) +9
-0+ + +#include "config.h" +#include "version.h" + + + .globl memsetup +memsetup: + /* The ADS GC+ for Linux Boot Rom Ver. 1.73 does memoryinit for us.
(quoted diff) +1
-0+ * However the darn thing leaves the MMU enabled beforehanding control
(quoted diff) +42
-0+ * over to us. So we need to disable the MMU and we use memsetup + * to do it. + */ + +@ The following code segment was borrowed with gratitude from: +@ linux-2.4.19-rmk7/arch/arm/boot/compressed/head-sa1100.S + + @ Data cache might be active. + @ Be sure to flush kernel binary out of the cache, + @ whatever state it is, before it is turned off. + @ This is done by fetching through currently executed + @ memory to be sure we hit the same cache. + bic r2, pc, #0x1f + add r3, r2, #0x4000 @ 16 kb is quite enough... +1: ldr r0, [r2], #32 + teq r2, r3 + bne 1b + mcr p15, 0, r0, c7, c10, 4 @ drain WB + mcr p15, 0, r0, c7, c7, 0 @ flush I & D caches + + @ disabling MMU and caches + mrc p15, 0, r0, c1, c0, 0 @ read control reg + bic r0, r0, #0x0d @ clear WB, DC, MMU + bic r0, r0, #0x1000 @ clear Icache + mcr p15, 0, r0, c1, c0, 0 + + nop + nop + nop + nop + nop + + b 2f +2: + nop + nop + nop + nop + nop + + + mov pc, lrdiff -x CVS -ruN
u-boot.orig/board/gcplus/u-boot.ldsu-boot.new/board/gcplus/u-boot.lds
---u-boot.orig/board/gcplus/u-boot.lds1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/u-boot.lds2004-03-06
16:03:44.000000000 -0500(quoted diff) +25
-0@@ -0,0 +1,57 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd at denx.de. + * 2003 (c) MontaVista Software, Inc. + * + * 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 + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm","elf32-littlearm")
(quoted diff) +32
-0+OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ + . = 0x00000000; + + . = ALIGN(4); + .text : + { + cpu/sa1100/start.o (.text) + *(.text) + } + + . = ALIGN(4); + .rodata : { *(.rodata) } + + . = ALIGN(4); + .data : { *(.data) } + + . = ALIGN(4); + .got : { *(.got) } + + + __u_boot_cmd_start = .; + .u_boot_cmd : { *(.u_boot_cmd) } + __u_boot_cmd_end = .; + + . = ALIGN(4); + __bss_start = .; + .bss : { *(.bss) } + _end = .; +}diff -x CVS -ruN
u-boot.orig/include/configs/gcplus.hu-boot.new/include/configs/gcplus.h
---u-boot.orig/include/configs/gcplus.h1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/include/configs/gcplus.h2004-03-11
09:41:31.000000000 -0500(quoted diff) +36
-0@@ -0,0 +1,174 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <[email protected]> + * + * 2003-2004 (c) MontaVista Software, Inc. + * + * Configuation settings for the ADS GraphicsClient+ board. + * + * 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 + +#undef DEBUG + +/* + * The ADS GCPlus Linux boot ROM loads U-Boot into RAM at 0xc0200000. + * We don't actually init RAM in this case since we're usingU-Boot as
+ * an secondary boot loader during Linux kernel development and testing,
+ * e.g. bootp/tftp download of the kernel is a far more convenient
+ * when testing new kernels on this target. However the ADS GCPlus Linux
+ * boot ROM leaves the MMU enabled when it passes control to U-Boot. So
+ * we use memsetup (CONFIG_INIT_CRITICAL) to remedy that problem.
+ */(quoted diff) +7
-0+#define CONFIG_INIT_CRITICAL + +/* + * High Level Configuration Options + * (easy to change) + */ +#define CONFIG_SA1110 1 /* This is anSA1100 CPU */
+#defineCONFIG_GCPLUS1 /* on an ADS
GCPlus Board */(quoted diff) +2
-0+ +#undef CONFIG_USE_IRQ /* we don'tneed IRQ/FIQ stuff */
(quoted diff) +2
-0+ +#define CONFIG_CMDLINE_TAG 1 /* enable passing ofATAGs */
(quoted diff) +8
-0+#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1 + +/* + * Size of malloc() pool + */ +#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) +#define CFG_GBL_DATA_SIZE 128 /* size rsrvd forinitial data */
(quoted diff) +6
-0+ + +/* + * Hardware drivers + */ +#define CONFIG_DRIVER_LAN91C96 /* we have an SMC9194on-board */
(quoted diff) +6
-0+#define CONFIG_LAN91C96_BASE 0x100e0000 + +/* + * select serial console configuration + */ +#define CONFIG_SERIAL3 1 /* we use SERIAL 3 onADS GCPlus */
(quoted diff) +10
-0+ +/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE + +#define CONFIG_BAUDRATE 38400 + +#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_DHCP) +#define CONFIG_BOOTP_MASK CONFIG_BOOTP_DEFAULT + +/* this must be included AFTER the definition of
CONFIG_COMMANDS(if any) */(quoted diff) +4
-0+#include <cmd_confdefs.h> + +#define CONFIG_BOOTDELAY 3 +#define CONFIG_BOOTARGS "console=ttySA0,38400n8mtdparts=sa1100-flash:1m at 0(zImage),3m at 1m(ramdisk.gz),12m at 4m(us erfs) root=/dev/nfs ip=bootp"
(quoted diff) +5
-0+#define CONFIG_BOOTCOMMAND "bootp;tftp;bootm" +#define CFG_AUTOLOAD "n" /* No autoload */ + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE 38400 /* speed to runkgdb serial port */
+#defineCONFIG_KGDB_SER_INDEX2 /*
which serial port to use */(quoted diff) +6
-0+#endif + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP /*undef to save memory */
+#defineCFG_PROMPT"ADS GCPlus # " /*
Monitor Command Prompt */
+#defineCFG_CBSIZE256 /*
Console I/O Buffer Size */
+#defineCFG_PBSIZE(CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
/* Print Buffer Size */
+#defineCFG_MAXARGS16 /* max
number of command args */
+#defineCFG_BARGSIZECFG_CBSIZE/* Boot
Argument Buffer Size */(quoted diff) +2
-0+ +#define CFG_MEMTEST_START 0xc0400000 /* memtestworks on */
+#defineCFG_MEMTEST_END0xc0800000/* 4
... 8 MB in DRAM */(quoted diff) +2
-0+ +#undef CFG_CLKS_IN_HZ /* everything, inclboard info, in Hz */
(quoted diff) +2
-0+ +#define CFG_LOAD_ADDR 0xc0000000 /*default load address */
(quoted diff) +2
-0+ +#define CFG_HZ 3686400 /*incrementer freq: 3.6864 MHz */
+#defineCFG_CPUSPEED0x0a/* set core
clock to 206MHz */(quoted diff) +38
-3+ + /* valid baudrates */ +#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } + +/*----------------------------------------------------------- ------------ + * Stack sizes + * + * The stack sizes are set up in start.S using the settings below + */ +#define CONFIG_STACKSIZE (128*1024) /* regular stack */ +#ifdef CONFIG_USE_IRQ +#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */ +#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */ +#endif + +/*----------------------------------------------------------- ------------ + * Physical Memory Map + */ +#define CONFIG_NR_DRAM_BANKS 2 /* we have 2 banks of DRAM */ +#define PHYS_SDRAM_1 0xc0000000 /* SDRAM Bank #1 */ +#define PHYS_SDRAM_1_SIZE 0x01000000 /* 16 MB */ +#define PHYS_SDRAM_2 0xc8000000 /* SDRAM Bank #2 */ +#define PHYS_SDRAM_2_SIZE 0x01000000 /* 16 MB */ + + +#define PHYS_FLASH_1 0x08000000 /* Flash Bank #1 */ +#define PHYS_FLASH_SIZE 0x00800000 /* 8 MB */ +#define PHYS_FLASH_BANK_SIZE 0x01000000 /* 16 MB Banks */ +#define PHYS_FLASH_SECT_SIZE 0x00040000 /* 256 KB sectors (x2) */ + +#define CFG_FLASH_BASE PHYS_FLASH_1 + +/*----------------------------------------------------------- ------------ + * FLASH and environment organization + */ +#if 1 +#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ +#define CFG_MAX_FLASH_SECT 128 /* max number ofsectors on one chip */
(quoted diff) +7
-0+ +/* timeout values are in ticks */ +#define CFG_FLASH_ERASE_TOUT (2*CFG_HZ) /* Timeout for Flash Erase */ +#define CFG_FLASH_WRITE_TOUT (2*CFG_HZ) /* Timeout for Flash Write */ +#else +/* REVISIT: This doesn't work on ADS GCPlus just yet: +#define CFG_FLASH_CFI 1 /* flash is CFIconformant */
+#defineCFG_FLASH_CFI_DRIVER1 /* use common cfi
driver */
+#defineCFG_FLASH_USE_BUFFER_WRITE1 /* use buffered
writes (20x faster) */
+#defineCFG_MAX_FLASH_BANKS1 /* max # of memory
banks */
+#defineCFG_FLASH_INCREMENT0 /* there is only one
bank */
+#defineCFG_MAX_FLASH_SECT128 /* max # of sectors
on one chip */
+//#defineCFG_FLASH_PROTECTION1 /* hardware flash
protection */(quoted diff) +5
-0+#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE } +#endif + +#define CFG_ENV_IS_IN_FLASH 1 +#define CFG_ENV_ADDR (PHYS_FLASH_1 +
PHYS_FLASH_SECT_SIZE) /* Addr of Environment Sector */(quoted diff) +3
-0+#define CFG_ENV_SIZE PHYS_FLASH_SECT_SIZE + +#endif /* __CONFIG_H */diff -x CVS -ruN u-boot.orig/Makefile u-boot.new/Makefile
Makefile +3
-0@@ -912,6 +912,9 @@ shannon_config : unconfig @./mkconfig $(@:_config=) arm sa1100 shannon +gcplus_config : unconfig + @./mkconfig $(@:_config=) arm sa1100 gcplus + ############################################################## ############# ARM92xT Systems
##############################################################
###########Quoted 10 lines
Quoted 10 lines
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users
Signature · 1 line
Matthew S. McClintock <[email protected]>
PATCH 1/1 New ADS GraphicsClient+ board port
Hi,
May I humbly request that you guys do not quote the whole patch over and over again!
As a matter of fact, such large patches would be better provided as an attachment (possibly compressed).
Best regards,
Tolunay
Quoted 2 lines · George G. Davis
Quoted 1 line · Brad Kemp
(snip)
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
-----Original Message-----
From: George G. Davis [mailto:davis_g at comcast.net]
Sent: Thursday, March 11, 2004 2:17 PM
To: u-boot-users at lists.sourceforge.net
Subject: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board port
(snip)
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
diff -x CVS -ruN
u-boot.orig/board/gcplus/config.mku-boot.new/board/gcplus/config.mk
---u-boot.orig/board/gcplus/config.mk1969-12-31
19:00:00.000000000 -0500
+++u-boot.new/board/gcplus/config.mk2003-11-06
(sniped large amount of text)
PATCH 1/1 New ADS GraphicsClient+ board port
Quoted 4 lines · listmember at orkun.us
Hi,
May I humbly request that you guys do not quote the whole patch over and over again!
Touche!
Quoted 3 lines
As a matter of fact, such large patches would be better provided as an attachment (possibly compressed).
This point is really a matter of personal preference. Some lists prefer in-line patches, e.g. for ease of critique/comment in replies. However I'll abide by the wishes of the list maintainer - as long as I can remember to avoid personal habits - good, bad or indifferent. : P
<snip>
--
Regards,
George