RE: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board port

George, What problem did you have with the CFI flash driver? Brad
-----Original Message----- From: George G. Davis [mailto:davis_g@comcast.net] Sent: Thursday, March 11, 2004 2:17 PM To: u-boot-users@lists.sourceforge.net Subject: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board port
Greetings,
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 the flash.c included 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, George
diff -x CVS -ruN u-boot.orig/board/gcplus/config.mk u-boot.new/board/gcplus/config.mk --- u-boot.orig/board/gcplus/config.mk 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/config.mk 2003-11-06 00:36:23.000000000 -0500 @@ -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 = 0xc8f00000 diff -x CVS -ruN u-boot.orig/board/gcplus/flash.c u-boot.new/board/gcplus/flash.c --- u-boot.orig/board/gcplus/flash.c 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/flash.c 2003-12-09 11:29:34.000000000 -0500 @@ -0,0 +1,440 @@ +/*
- (C) Copyright 2001
- Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
- (C) Copyright 2001
- Wolfgang Denk, DENX Software Engineering, wd@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]; /* info for FLASH chips */
+/* 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]);
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]);
- 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);
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)" : " ");
- }
- 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",
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 will
not be erased!\n",
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 */
*addr = (FPW) 0x00200020; /*
erase setup */
*addr = (FPW) 0x00D000D0; /*
erase confirm */
while (((status =
*addr) & (FPW) 0x00800080) !=
(FPW) 0x00800080) {
if (get_timer_masked() >
CFG_FLASH_ERASE_TOUT) {
printf("Timeout\n");
*addr = (FPW)
0x00B000B0; /* suspend erase */
*addr = (FPW)
0x00FF00FF; /* reset to read mode */
rcode = 1;
break;
}
}
*addr = (FPW) 0x00500050; /*
clear status register cmd. */
*addr = (FPW) 0x00FF00FF; /*
resest to read mode */
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);
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) {
if (get_timer_masked() > CFG_FLASH_WRITE_TOUT) {
*addr = (FPW) 0x00FF00FF; /*
restore read mode */
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.c u-boot.new/board/gcplus/gcplus.c --- u-boot.orig/board/gcplus/gcplus.c 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/gcplus.c 2004-03-09 21:52:57.000000000 -0500 @@ -0,0 +1,73 @@ +/*
- (C) Copyright 2002
- Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- Marius Groeger mgroeger@sysgo.de
- 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; /* ADS
GraphicsClientPlus Board */
- 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 @@ -0,0 +1,49 @@ +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd@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
+############################################################# ############
+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+-include .depend
+############################################################# ############ diff -x CVS -ruN u-boot.orig/board/gcplus/memsetup.S u-boot.new/board/gcplus/memsetup.S --- u-boot.orig/board/gcplus/memsetup.S 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/memsetup.S 2004-03-09 23:12:53.000000000 -0500 @@ -0,0 +1,77 @@ +/*
- Memory Setup stuff - taken from blob memsetup.S
- Copyright (C) 1999 2000 2001 Erik Mouw
(J.A.K.Mouw@its.tudelft.nl) and
Jan-Derk Bakker (J.D.Bakker@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
- */
+#include "config.h" +#include "version.h"
- .globl memsetup
+memsetup:
- /* The ADS GC+ for Linux Boot Rom Ver. 1.73 does memory
init for us.
* However the darn thing leaves the MMU enabled before
handing control
* 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, lr
diff -x CVS -ruN u-boot.orig/board/gcplus/u-boot.lds u-boot.new/board/gcplus/u-boot.lds --- u-boot.orig/board/gcplus/u-boot.lds 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/u-boot.lds 2004-03-06 16:03:44.000000000 -0500 @@ -0,0 +1,57 @@ +/*
- (C) Copyright 2000
- Wolfgang Denk, DENX Software Engineering, wd@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") +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.h u-boot.new/include/configs/gcplus.h --- u-boot.orig/include/configs/gcplus.h 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/include/configs/gcplus.h 2004-03-11 09:41:31.000000000 -0500 @@ -0,0 +1,174 @@ +/*
- (C) Copyright 2002
- Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- Marius Groeger mgroeger@sysgo.de
- 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 using
U-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.
- */
+#define CONFIG_INIT_CRITICAL
+/*
- High Level Configuration Options
- (easy to change)
- */
+#define CONFIG_SA1110 1 /* This is an SA1100 CPU */ +#define CONFIG_GCPLUS 1 /* on an ADS GCPlus Board */
+#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
+/*
- Size of malloc() pool
- */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) +#define CFG_GBL_DATA_SIZE 128 /* size rsrvd for initial data */
+/*
- Hardware drivers
- */
+#define CONFIG_DRIVER_LAN91C96 /* we have an SMC9194 on-board */ +#define CONFIG_LAN91C96_BASE 0x100e0000
+/*
- select serial console configuration
- */
+#define CONFIG_SERIAL3 1 /* we use SERIAL 3 on ADS GCPlus */
+/* 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) */ +#include <cmd_confdefs.h>
+#define CONFIG_BOOTDELAY 3 +#define CONFIG_BOOTARGS "console=ttySA0,38400n8 mtdparts=sa1100-flash:1m@0(zImage),3m@1m(ramdisk.gz),12m@4m(us erfs) root=/dev/nfs ip=bootp" +#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 run kgdb serial port */ +#define CONFIG_KGDB_SER_INDEX 2 /* which serial port to use */ +#endif
+/*
- Miscellaneous configurable options
- */
+#define CFG_LONGHELP /* undef to save memory */ +#define CFG_PROMPT "ADS GCPlus # " /* Monitor Command Prompt */ +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+#define CFG_MEMTEST_START 0xc0400000 /* memtest works on */ +#define CFG_MEMTEST_END 0xc0800000 /* 4 ... 8 MB in DRAM */
+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
+#define CFG_LOAD_ADDR 0xc0000000 /* default load address */
+#define CFG_HZ 3686400 /* incrementer freq: 3.6864 MHz */ +#define CFG_CPUSPEED 0x0a /* set core clock to 206MHz */
/* 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 of sectors on one chip */
+/* 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 CFI conformant */ +#define CFG_FLASH_CFI_DRIVER 1 /* use common cfi driver */ +#define CFG_FLASH_USE_BUFFER_WRITE 1 /* use buffered writes (20x faster) */ +#define CFG_MAX_FLASH_BANKS 1 /* max # of memory banks */ +#define CFG_FLASH_INCREMENT 0 /* there is only one bank */ +#define CFG_MAX_FLASH_SECT 128 /* max # of sectors on one chip */ +//#define CFG_FLASH_PROTECTION 1 /* hardware flash protection */ +#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 */ +#define CFG_ENV_SIZE PHYS_FLASH_SECT_SIZE
+#endif /* __CONFIG_H */ diff -x CVS -ruN u-boot.orig/Makefile u-boot.new/Makefile --- u-boot.orig/Makefile 2004-03-11 14:00:20.000000000 -0500 +++ u-boot.new/Makefile 2004-03-09 23:16:52.000000000 -0500 @@ -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@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/u-boot-users

On Thu, Mar 11, 2004 at 02:56:24PM -0500, Brad Kemp wrote:
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
Brad
-----Original Message----- From: George G. Davis [mailto:davis_g@comcast.net] Sent: Thursday, March 11, 2004 2:17 PM To: u-boot-users@lists.sourceforge.net Subject: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board port
Greetings,
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 the flash.c included 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, George
diff -x CVS -ruN u-boot.orig/board/gcplus/config.mk u-boot.new/board/gcplus/config.mk --- u-boot.orig/board/gcplus/config.mk 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/config.mk 2003-11-06 00:36:23.000000000 -0500 @@ -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 = 0xc8f00000 diff -x CVS -ruN u-boot.orig/board/gcplus/flash.c u-boot.new/board/gcplus/flash.c --- u-boot.orig/board/gcplus/flash.c 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/flash.c 2003-12-09 11:29:34.000000000 -0500 @@ -0,0 +1,440 @@ +/*
- (C) Copyright 2001
- Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
- (C) Copyright 2001
- Wolfgang Denk, DENX Software Engineering, wd@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]; /* info for FLASH chips */
+/* 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]);
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]);
- 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);
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)" : " ");
- }
- 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",
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 will
not be erased!\n",
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 */
*addr = (FPW) 0x00200020; /*
erase setup */
*addr = (FPW) 0x00D000D0; /*
erase confirm */
while (((status =
*addr) & (FPW) 0x00800080) !=
(FPW) 0x00800080) {
if (get_timer_masked() >
CFG_FLASH_ERASE_TOUT) {
printf("Timeout\n");
*addr = (FPW)
0x00B000B0; /* suspend erase */
*addr = (FPW)
0x00FF00FF; /* reset to read mode */
rcode = 1;
break;
}
}
*addr = (FPW) 0x00500050; /*
clear status register cmd. */
*addr = (FPW) 0x00FF00FF; /*
resest to read mode */
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);
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) {
if (get_timer_masked() > CFG_FLASH_WRITE_TOUT) {
*addr = (FPW) 0x00FF00FF; /*
restore read mode */
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.c u-boot.new/board/gcplus/gcplus.c --- u-boot.orig/board/gcplus/gcplus.c 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/gcplus.c 2004-03-09 21:52:57.000000000 -0500 @@ -0,0 +1,73 @@ +/*
- (C) Copyright 2002
- Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- Marius Groeger mgroeger@sysgo.de
- 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; /* ADS
GraphicsClientPlus Board */
- 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 @@ -0,0 +1,49 @@ +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd@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
+############################################################# ############
+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+-include .depend
+############################################################# ############ diff -x CVS -ruN u-boot.orig/board/gcplus/memsetup.S u-boot.new/board/gcplus/memsetup.S --- u-boot.orig/board/gcplus/memsetup.S 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/memsetup.S 2004-03-09 23:12:53.000000000 -0500 @@ -0,0 +1,77 @@ +/*
- Memory Setup stuff - taken from blob memsetup.S
- Copyright (C) 1999 2000 2001 Erik Mouw
(J.A.K.Mouw@its.tudelft.nl) and
Jan-Derk Bakker (J.D.Bakker@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
- */
+#include "config.h" +#include "version.h"
- .globl memsetup
+memsetup:
- /* The ADS GC+ for Linux Boot Rom Ver. 1.73 does memory
init for us.
* However the darn thing leaves the MMU enabled before
handing control
* 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, lr
diff -x CVS -ruN u-boot.orig/board/gcplus/u-boot.lds u-boot.new/board/gcplus/u-boot.lds --- u-boot.orig/board/gcplus/u-boot.lds 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/u-boot.lds 2004-03-06 16:03:44.000000000 -0500 @@ -0,0 +1,57 @@ +/*
- (C) Copyright 2000
- Wolfgang Denk, DENX Software Engineering, wd@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") +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.h u-boot.new/include/configs/gcplus.h --- u-boot.orig/include/configs/gcplus.h 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/include/configs/gcplus.h 2004-03-11 09:41:31.000000000 -0500 @@ -0,0 +1,174 @@ +/*
- (C) Copyright 2002
- Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- Marius Groeger mgroeger@sysgo.de
- 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 using
U-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.
- */
+#define CONFIG_INIT_CRITICAL
+/*
- High Level Configuration Options
- (easy to change)
- */
+#define CONFIG_SA1110 1 /* This is an SA1100 CPU */ +#define CONFIG_GCPLUS 1 /* on an ADS GCPlus Board */
+#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
+/*
- Size of malloc() pool
- */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) +#define CFG_GBL_DATA_SIZE 128 /* size rsrvd for initial data */
+/*
- Hardware drivers
- */
+#define CONFIG_DRIVER_LAN91C96 /* we have an SMC9194 on-board */ +#define CONFIG_LAN91C96_BASE 0x100e0000
+/*
- select serial console configuration
- */
+#define CONFIG_SERIAL3 1 /* we use SERIAL 3 on ADS GCPlus */
+/* 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) */ +#include <cmd_confdefs.h>
+#define CONFIG_BOOTDELAY 3 +#define CONFIG_BOOTARGS "console=ttySA0,38400n8 mtdparts=sa1100-flash:1m@0(zImage),3m@1m(ramdisk.gz),12m@4m(us erfs) root=/dev/nfs ip=bootp" +#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 run kgdb serial port */ +#define CONFIG_KGDB_SER_INDEX 2 /* which serial port to use */ +#endif
+/*
- Miscellaneous configurable options
- */
+#define CFG_LONGHELP /* undef to save memory */ +#define CFG_PROMPT "ADS GCPlus # " /* Monitor Command Prompt */ +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+#define CFG_MEMTEST_START 0xc0400000 /* memtest works on */ +#define CFG_MEMTEST_END 0xc0800000 /* 4 ... 8 MB in DRAM */
+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
+#define CFG_LOAD_ADDR 0xc0000000 /* default load address */
+#define CFG_HZ 3686400 /* incrementer freq: 3.6864 MHz */ +#define CFG_CPUSPEED 0x0a /* set core clock to 206MHz */
/* 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 of sectors on one chip */
+/* 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 CFI conformant */ +#define CFG_FLASH_CFI_DRIVER 1 /* use common cfi driver */ +#define CFG_FLASH_USE_BUFFER_WRITE 1 /* use buffered writes (20x faster) */ +#define CFG_MAX_FLASH_BANKS 1 /* max # of memory banks */ +#define CFG_FLASH_INCREMENT 0 /* there is only one bank */ +#define CFG_MAX_FLASH_SECT 128 /* max # of sectors on one chip */ +//#define CFG_FLASH_PROTECTION 1 /* hardware flash protection */ +#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 */ +#define CFG_ENV_SIZE PHYS_FLASH_SECT_SIZE
+#endif /* __CONFIG_H */ diff -x CVS -ruN u-boot.orig/Makefile u-boot.new/Makefile --- u-boot.orig/Makefile 2004-03-11 14:00:20.000000000 -0500 +++ u-boot.new/Makefile 2004-03-09 23:16:52.000000000 -0500 @@ -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@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/u-boot-users

On Thu, 11 Mar 2004, George G. Davis wrote:
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

On Thu, Mar 11, 2004 at 02:55:42PM -0600, Ed Okerson wrote:
On Thu, 11 Mar 2004, George G. Davis wrote:
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.
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
Ed Okerson

On Thu, 2004-03-11 at 14:28, George G. Davis wrote:
On Thu, Mar 11, 2004 at 02:56:24PM -0500, Brad Kemp wrote:
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.
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
-- Regards, George
Brad
-----Original Message----- From: George G. Davis [mailto:davis_g@comcast.net] Sent: Thursday, March 11, 2004 2:17 PM To: u-boot-users@lists.sourceforge.net Subject: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board port
Greetings,
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 the flash.c included 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, George
diff -x CVS -ruN u-boot.orig/board/gcplus/config.mk u-boot.new/board/gcplus/config.mk --- u-boot.orig/board/gcplus/config.mk 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/config.mk 2003-11-06 00:36:23.000000000 -0500 @@ -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 = 0xc8f00000 diff -x CVS -ruN u-boot.orig/board/gcplus/flash.c u-boot.new/board/gcplus/flash.c --- u-boot.orig/board/gcplus/flash.c 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/flash.c 2003-12-09 11:29:34.000000000 -0500 @@ -0,0 +1,440 @@ +/*
- (C) Copyright 2001
- Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
- (C) Copyright 2001
- Wolfgang Denk, DENX Software Engineering, wd@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]; /* info for FLASH chips */
+/* 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]);
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]);
- 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);
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)" : " ");
- }
- 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",
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 will
not be erased!\n",
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 */
*addr = (FPW) 0x00200020; /*
erase setup */
*addr = (FPW) 0x00D000D0; /*
erase confirm */
while (((status =
*addr) & (FPW) 0x00800080) !=
(FPW) 0x00800080) {
if (get_timer_masked() >
CFG_FLASH_ERASE_TOUT) {
printf("Timeout\n");
*addr = (FPW)
0x00B000B0; /* suspend erase */
*addr = (FPW)
0x00FF00FF; /* reset to read mode */
rcode = 1;
break;
}
}
*addr = (FPW) 0x00500050; /*
clear status register cmd. */
*addr = (FPW) 0x00FF00FF; /*
resest to read mode */
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);
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) {
if (get_timer_masked() > CFG_FLASH_WRITE_TOUT) {
*addr = (FPW) 0x00FF00FF; /*
restore read mode */
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.c u-boot.new/board/gcplus/gcplus.c --- u-boot.orig/board/gcplus/gcplus.c 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/gcplus.c 2004-03-09 21:52:57.000000000 -0500 @@ -0,0 +1,73 @@ +/*
- (C) Copyright 2002
- Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- Marius Groeger mgroeger@sysgo.de
- 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; /* ADS
GraphicsClientPlus Board */
- 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 @@ -0,0 +1,49 @@ +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd@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
+############################################################# ############
+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+-include .depend
+############################################################# ############ diff -x CVS -ruN u-boot.orig/board/gcplus/memsetup.S u-boot.new/board/gcplus/memsetup.S --- u-boot.orig/board/gcplus/memsetup.S 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/memsetup.S 2004-03-09 23:12:53.000000000 -0500 @@ -0,0 +1,77 @@ +/*
- Memory Setup stuff - taken from blob memsetup.S
- Copyright (C) 1999 2000 2001 Erik Mouw
(J.A.K.Mouw@its.tudelft.nl) and
Jan-Derk Bakker (J.D.Bakker@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
- */
+#include "config.h" +#include "version.h"
- .globl memsetup
+memsetup:
- /* The ADS GC+ for Linux Boot Rom Ver. 1.73 does memory
init for us.
* However the darn thing leaves the MMU enabled before
handing control
* 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, lr
diff -x CVS -ruN u-boot.orig/board/gcplus/u-boot.lds u-boot.new/board/gcplus/u-boot.lds --- u-boot.orig/board/gcplus/u-boot.lds 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/u-boot.lds 2004-03-06 16:03:44.000000000 -0500 @@ -0,0 +1,57 @@ +/*
- (C) Copyright 2000
- Wolfgang Denk, DENX Software Engineering, wd@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") +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.h u-boot.new/include/configs/gcplus.h --- u-boot.orig/include/configs/gcplus.h 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/include/configs/gcplus.h 2004-03-11 09:41:31.000000000 -0500 @@ -0,0 +1,174 @@ +/*
- (C) Copyright 2002
- Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- Marius Groeger mgroeger@sysgo.de
- 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 using
U-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.
- */
+#define CONFIG_INIT_CRITICAL
+/*
- High Level Configuration Options
- (easy to change)
- */
+#define CONFIG_SA1110 1 /* This is an SA1100 CPU */ +#define CONFIG_GCPLUS 1 /* on an ADS GCPlus Board */
+#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
+/*
- Size of malloc() pool
- */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024) +#define CFG_GBL_DATA_SIZE 128 /* size rsrvd for initial data */
+/*
- Hardware drivers
- */
+#define CONFIG_DRIVER_LAN91C96 /* we have an SMC9194 on-board */ +#define CONFIG_LAN91C96_BASE 0x100e0000
+/*
- select serial console configuration
- */
+#define CONFIG_SERIAL3 1 /* we use SERIAL 3 on ADS GCPlus */
+/* 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) */ +#include <cmd_confdefs.h>
+#define CONFIG_BOOTDELAY 3 +#define CONFIG_BOOTARGS "console=ttySA0,38400n8 mtdparts=sa1100-flash:1m@0(zImage),3m@1m(ramdisk.gz),12m@4m(us erfs) root=/dev/nfs ip=bootp" +#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 run kgdb serial port */ +#define CONFIG_KGDB_SER_INDEX 2 /* which serial port to use */ +#endif
+/*
- Miscellaneous configurable options
- */
+#define CFG_LONGHELP /* undef to save memory */ +#define CFG_PROMPT "ADS GCPlus # " /* Monitor Command Prompt */ +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+#define CFG_MEMTEST_START 0xc0400000 /* memtest works on */ +#define CFG_MEMTEST_END 0xc0800000 /* 4 ... 8 MB in DRAM */
+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
+#define CFG_LOAD_ADDR 0xc0000000 /* default load address */
+#define CFG_HZ 3686400 /* incrementer freq: 3.6864 MHz */ +#define CFG_CPUSPEED 0x0a /* set core clock to 206MHz */
/* 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 of sectors on one chip */
+/* 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 CFI conformant */ +#define CFG_FLASH_CFI_DRIVER 1 /* use common cfi driver */ +#define CFG_FLASH_USE_BUFFER_WRITE 1 /* use buffered writes (20x faster) */ +#define CFG_MAX_FLASH_BANKS 1 /* max # of memory banks */ +#define CFG_FLASH_INCREMENT 0 /* there is only one bank */ +#define CFG_MAX_FLASH_SECT 128 /* max # of sectors on one chip */ +//#define CFG_FLASH_PROTECTION 1 /* hardware flash protection */ +#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 */ +#define CFG_ENV_SIZE PHYS_FLASH_SECT_SIZE
+#endif /* __CONFIG_H */ diff -x CVS -ruN u-boot.orig/Makefile u-boot.new/Makefile --- u-boot.orig/Makefile 2004-03-11 14:00:20.000000000 -0500 +++ u-boot.new/Makefile 2004-03-09 23:16:52.000000000 -0500 @@ -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@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@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/u-boot-users

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
On Thu, 2004-03-11 at 14:28, George G. Davis wrote:
On Thu, Mar 11, 2004 at 02:56:24PM -0500, Brad Kemp wrote:
(snip)
-----Original Message----- From: George G. Davis [mailto:davis_g@comcast.net] Sent: Thursday, March 11, 2004 2:17 PM To: u-boot-users@lists.sourceforge.net Subject: [U-Boot-Users] [PATCH] New ADS GraphicsClient+ board port
(snip)
diff -x CVS -ruN u-boot.orig/board/gcplus/config.mk u-boot.new/board/gcplus/config.mk --- u-boot.orig/board/gcplus/config.mk 1969-12-31 19:00:00.000000000 -0500 +++ u-boot.new/board/gcplus/config.mk 2003-11-06
(sniped large amount of text)

On Thu, Mar 11, 2004 at 07:17:47PM -0600, listmember@orkun.us wrote:
Hi,
May I humbly request that you guys do not quote the whole patch over and over again!
Touche!
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
participants (5)
-
Brad Kemp
-
Ed Okerson
-
George G. Davis
-
listmember@orkun.us
-
Matthew S. McClintock