9
0
Fork 0

Some code cleanup

This commit is contained in:
Wolfgang Denk 2006-04-16 10:51:58 +02:00
parent 807522fc9a
commit cf48eb9abd
17 changed files with 570 additions and 563 deletions

View File

@ -1,19 +1,20 @@
====================================================================== ======================================================================
Changes since U-Boot 1.1.4: Changes since U-Boot 1.1.4:
====================================================================== ======================================================================
* Fix dbau1x00 Board
- Fix dbau1x00 boards broken by dbau1550 patch * Some code cleanup
PLL:s were not set for boards other than 1550.
Flash CFI caused card to hang due to undefined CFG_FLASH_BANKS_LIST. * Fix dbau1x00 boards broken by dbau1550 patch
Default boot is now bootp for cards other than 1550. PLL:s were not set for boards other than 1550.
Patch by Thomas Lange Aug 10 2005 Flash CFI caused card to hang due to undefined CFG_FLASH_BANKS_LIST.
Default boot is now bootp for cards other than 1550.
Patch by Thomas Lange, 10 Aug 2005
* Fixes common/cmd_flash.c: * Fixes common/cmd_flash.c:
- fix some compiler/parser error, if using m68k tool chain
- fix some compiler/parser error, if using m68k tool chain - optical fix for protect on/off all messages, if using more
- optical fix for protect on/off all messages, if using more then one bank
then one bank Patch by Jens Scharsig, 28 Jul 2005
Patch by Jens Scharsig, 28 July 2005
* Fix Quad UART mapping on MCC200 board due to new HW revision * Fix Quad UART mapping on MCC200 board due to new HW revision
@ -57,18 +58,18 @@ Changes since U-Boot 1.1.4:
* Updates to common PPC4xx onboard (DDR)SDRAM init code (405 and 440) * Updates to common PPC4xx onboard (DDR)SDRAM init code (405 and 440)
405 SDRAM: - The SDRAM parameters can now be defined in the board 405 SDRAM: - The SDRAM parameters can now be defined in the board
config file and the 405 SDRAM controller values will config file and the 405 SDRAM controller values will
be calculated upon bootup (see PPChameleonEVB). be calculated upon bootup (see PPChameleonEVB).
When those settings are not defined in the board When those settings are not defined in the board
config file, the register setup will be as it is now, config file, the register setup will be as it is now,
so this implementation should not break any current so this implementation should not break any current
design using this code. design using this code.
Thanks to Andrea Marson from DAVE for this patch. Thanks to Andrea Marson from DAVE for this patch.
440 DDR: - Added function sdram_tr1_set to auto calculate the 440 DDR: - Added function sdram_tr1_set to auto calculate the
TR1 value for the DDR. TR1 value for the DDR.
- Added ECC support (see p3p440). - Added ECC support (see p3p440).
Patch by Stefan Roese, 17 Mar 2006 Patch by Stefan Roese, 17 Mar 2006
@ -442,7 +443,7 @@ Changes since U-Boot 1.1.4:
are removed from the default U-Boot build. are removed from the default U-Boot build.
Enable DEBUG for lib_arm/board.c to enable debug messages. Enable DEBUG for lib_arm/board.c to enable debug messages.
New CONFIG_DISPLAY_CPUINFO and CONFIG_DISPLAY_BOARDINFO options. New CONFIG_DISPLAY_CPUINFO and CONFIG_DISPLAY_BOARDINFO options.
Patch by Stefan Roese, 24 Jan 2006 Patch by Stefan Roese, 24 Jan 2006
* Fix various compiler warnings on ppc4xx builds (ELDK 4.0) * Fix various compiler warnings on ppc4xx builds (ELDK 4.0)
Patch by Stefan Roese, 18 Jan 2006 Patch by Stefan Roese, 18 Jan 2006
@ -588,11 +589,11 @@ Changes for U-Boot 1.1.4:
* Add support for multiple PHYs. * Add support for multiple PHYs.
Tested on the following boards: Tested on the following boards:
cmcpu2 (at91rm9200/ether.c) cmcpu2 (at91rm9200/ether.c)
PPChameleon (ppc4xx/4xx_enet.c) PPChameleon (ppc4xx/4xx_enet.c)
yukon (mpc8220/fec.c) yukon (mpc8220/fec.c)
uc100 (mpc8xx/fec.c) uc100 (mpc8xx/fec.c)
tqm834x (mpc834x/tsec.c) with EEPRO100 tqm834x (mpc834x/tsec.c) with EEPRO100
lite5200 (mpc5xxx/fec.c) with EEPRO100 card (drivers/eepro100.c) lite5200 (mpc5xxx/fec.c) with EEPRO100 card (drivers/eepro100.c)
Main changes include: Main changes include:
common/miiphyutil.c common/miiphyutil.c
@ -1132,18 +1133,18 @@ Changes for U-Boot 1.1.3:
The first one is to define a single, static partition: The first one is to define a single, static partition:
#undef CONFIG_JFFS2_CMDLINE #undef CONFIG_JFFS2_CMDLINE
#define CONFIG_JFFS2_DEV "nor0" #define CONFIG_JFFS2_DEV "nor0"
#define CONFIG_JFFS2_PART_SIZE 0xFFFFFFFF /* use whole device */ #define CONFIG_JFFS2_PART_SIZE 0xFFFFFFFF /* use whole device */
#define CONFIG_JFFS2_PART_SIZE 0x00100000 /* use 1MB */ #define CONFIG_JFFS2_PART_SIZE 0x00100000 /* use 1MB */
#define CONFIG_JFFS2_PART_OFFSET 0x00000000 #define CONFIG_JFFS2_PART_OFFSET 0x00000000
The second method uses the mtdparts command line option and dynamic The second method uses the mtdparts command line option and dynamic
partitioning: partitioning:
/* mtdparts command line support */ /* mtdparts command line support */
#define CONFIG_JFFS2_CMDLINE #define CONFIG_JFFS2_CMDLINE
#define MTDIDS_DEFAULT "nor1=zuma-1,nor2=zuma-2" #define MTDIDS_DEFAULT "nor1=zuma-1,nor2=zuma-2"
#define MTDPARTS_DEFAULT "mtdparts=zuma-1:-(jffs2),zuma-2:-(user)" #define MTDPARTS_DEFAULT "mtdparts=zuma-1:-(jffs2),zuma-2:-(user)"
Command line of course produces bigger images, and may be inappropriate Command line of course produces bigger images, and may be inappropriate
for some targets, so by default it's off. for some targets, so by default it's off.
@ -3456,7 +3457,7 @@ Changes for U-Boot 1.0.1:
Bring ARM memory layout in sync with the documentation: Bring ARM memory layout in sync with the documentation:
stack and malloc-heap are now located _below_ the U-Boot code stack and malloc-heap are now located _below_ the U-Boot code
* Accelerate booting on TRAB board: read and check autoupdate image * Accelerate booting on TRAB board: read and check autoupdate image
headers first instead of always reading the whole images. headers first instead of always reading the whole images.
* Fix type in MPC5XXX code (pointed out by Victor Wren) * Fix type in MPC5XXX code (pointed out by Victor Wren)
@ -3576,7 +3577,7 @@ Changes for U-Boot 1.0.0:
* Make 5200 reset command _really_ reset the board, without running * Make 5200 reset command _really_ reset the board, without running
any other code after it any other code after it
* Fix errors with flash erase when range spans across banks * Fix errors with flash erase when range spans across banks
that are mapped in reverse order that are mapped in reverse order
* Fix flash mapping and display on P3G4 board * Fix flash mapping and display on P3G4 board
@ -3820,7 +3821,7 @@ Changes for U-Boot 0.4.8:
or 1 x AM29LV652 (two LV065 in one chip = 16 MB); or 1 x AM29LV652 (two LV065 in one chip = 16 MB);
Run IPB at 133 Mhz; adjust the MII clock frequency accordingly Run IPB at 133 Mhz; adjust the MII clock frequency accordingly
* Set BRG_CLK on PM825/826 to 64MHz (VCO_OUT / 4, instead of 16 MHz) * Set BRG_CLK on PM825/826 to 64MHz (VCO_OUT / 4, instead of 16 MHz)
to allow for more accurate baudrate settings to allow for more accurate baudrate settings
(error now 0.7% at 115 kbps, instead of 3.5% before) (error now 0.7% at 115 kbps, instead of 3.5% before)
@ -4307,7 +4308,7 @@ Changes for U-Boot 0.4.0:
Update for MPC8266ADS board Update for MPC8266ADS board
* Get (mostly) rid of CFG_MONITOR_LEN definition; compute real length * Get (mostly) rid of CFG_MONITOR_LEN definition; compute real length
instead CFG_MONITOR_LEN is now only used to determine _at_compile_ instead CFG_MONITOR_LEN is now only used to determine _at_compile_
_time_ (!) if the environment is embedded within the U-Boot image, _time_ (!) if the environment is embedded within the U-Boot image,
or in a separate flash sector. or in a separate flash sector.
@ -4357,7 +4358,7 @@ Changes for U-Boot 0.4.0:
* Patch by Thomas Schäfer, 28 Apr 2003: * Patch by Thomas Schäfer, 28 Apr 2003:
Fix SPD handling for 256 ECC DIMM on Walnut Fix SPD handling for 256 ECC DIMM on Walnut
* Add support for arbitrary bitmaps for TRAB's VFD command; * Add support for arbitrary bitmaps for TRAB's VFD command;
allow to pass boot bitmap addresses in environment variables; allow to pass boot bitmap addresses in environment variables;
allow for zero boot delay allow for zero boot delay
@ -4700,7 +4701,7 @@ Changes for U-Boot 0.3.0:
* Add VFD type detection to trab board * Add VFD type detection to trab board
* extend drivers/cs8900.c driver to synchronize ethaddr environment * extend drivers/cs8900.c driver to synchronize ethaddr environment
variable with value in the EEPROM variable with value in the EEPROM
* Patch by Stefan Roese, 10 Feb 2003: * Patch by Stefan Roese, 10 Feb 2003:
@ -4860,7 +4861,7 @@ Changes for U-Boot 0.2.0:
* Patch by Pierre Aubert, 05 Nov 2002 * Patch by Pierre Aubert, 05 Nov 2002
Add support for slave serial Spartan 2 FPGAs Add support for slave serial Spartan 2 FPGAs
* Fix uninitialized memory (MAC address) in 8xx SCC/FEC ethernet * Fix uninitialized memory (MAC address) in 8xx SCC/FEC ethernet
drivers drivers
* Add support for log buffer which can be passed to Linux kernel's * Add support for log buffer which can be passed to Linux kernel's

8
README
View File

@ -307,7 +307,7 @@ The following options need to be configured:
CONFIG_ARMADILLO, CONFIG_AT91RM9200DK, CONFIG_CERF250, CONFIG_ARMADILLO, CONFIG_AT91RM9200DK, CONFIG_CERF250,
CONFIG_CSB637, CONFIG_DELTA, CONFIG_DNP1110, CONFIG_CSB637, CONFIG_DELTA, CONFIG_DNP1110,
CONFIG_EP7312, CONFIG_H2_OMAP1610, CONFIG_HHP_CRADLE, CONFIG_EP7312, CONFIG_H2_OMAP1610, CONFIG_HHP_CRADLE,
CONFIG_IMPA7, CONFIG_INNOVATOROMAP1510, CONFIG_INNOVATOROMAP1610, CONFIG_IMPA7, CONFIG_INNOVATOROMAP1510, CONFIG_INNOVATOROMAP1610,
CONFIG_KB9202, CONFIG_LART, CONFIG_LPD7A400, CONFIG_KB9202, CONFIG_LART, CONFIG_LPD7A400,
CONFIG_LUBBOCK, CONFIG_OSK_OMAP5912, CONFIG_OMAP2420H4, CONFIG_LUBBOCK, CONFIG_OSK_OMAP5912, CONFIG_OMAP2420H4,
CONFIG_SHANNON, CONFIG_P2_OMAP730, CONFIG_SMDK2400, CONFIG_SHANNON, CONFIG_P2_OMAP730, CONFIG_SMDK2400,
@ -388,12 +388,12 @@ The following options need to be configured:
frequency is this value multiplied by 13 MHz. frequency is this value multiplied by 13 MHz.
CFG_MONAHANS_TURBO_RUN_MODE_RATIO CFG_MONAHANS_TURBO_RUN_MODE_RATIO
Defines the Monahans turbo mode to oscillator Defines the Monahans turbo mode to oscillator
ratio. Valid values are 1 (default if undefined) and ratio. Valid values are 1 (default if undefined) and
2. The core frequency as calculated above is multiplied 2. The core frequency as calculated above is multiplied
by this value. by this value.
- Linux Kernel Interface: - Linux Kernel Interface:
CONFIG_CLOCKS_IN_MHZ CONFIG_CLOCKS_IN_MHZ

View File

@ -187,17 +187,17 @@ long int initdram (int board_type)
#endif /* CFG_RAMBOOT */ #endif /* CFG_RAMBOOT */
/* /*
* On MPC5200B we need to set the special configuration delay in the * On MPC5200B we need to set the special configuration delay in the
* DDR controller. Please refer to Freescale's AN3221 "MPC5200B SDRAM * DDR controller. Please refer to Freescale's AN3221 "MPC5200B SDRAM
* Initialization and Configuration", 3.3.1 SDelay--MBAR + 0x0190: * Initialization and Configuration", 3.3.1 SDelay--MBAR + 0x0190:
* *
* "The SDelay should be written to a value of 0x00000004. It is * "The SDelay should be written to a value of 0x00000004. It is
* required to account for changes caused by normal wafer processing * required to account for changes caused by normal wafer processing
* parameters." * parameters."
*/ */
svr = get_svr(); svr = get_svr();
pvr = get_pvr(); pvr = get_pvr();
if ((SVR_MJREV(svr) >= 2) && if ((SVR_MJREV(svr) >= 2) &&
(PVR_MAJ(pvr) == 1) && (PVR_MIN(pvr) == 4)) { (PVR_MAJ(pvr) == 1) && (PVR_MIN(pvr) == 4)) {
*(vu_long *)MPC5XXX_SDRAM_SDELAY = 0x04; *(vu_long *)MPC5XXX_SDRAM_SDELAY = 0x04;

View File

@ -116,14 +116,14 @@ int fixed_sdram(void)
im->ddr.csbnds[2].csbnds = 0x0000000f; im->ddr.csbnds[2].csbnds = 0x0000000f;
im->ddr.cs_config[2] = CFG_DDR_CONFIG; im->ddr.cs_config[2] = CFG_DDR_CONFIG;
/* currently we use only one CS, so disable the other banks */ /* currently we use only one CS, so disable the other banks */
im->ddr.cs_config[0] = 0; im->ddr.cs_config[0] = 0;
im->ddr.cs_config[1] = 0; im->ddr.cs_config[1] = 0;
im->ddr.cs_config[3] = 0; im->ddr.cs_config[3] = 0;
im->ddr.timing_cfg_1 = CFG_DDR_TIMING_1; im->ddr.timing_cfg_1 = CFG_DDR_TIMING_1;
im->ddr.timing_cfg_2 = CFG_DDR_TIMING_2; im->ddr.timing_cfg_2 = CFG_DDR_TIMING_2;
im->ddr.sdram_cfg = im->ddr.sdram_cfg =
SDRAM_CFG_SREN SDRAM_CFG_SREN
#if defined(CONFIG_DDR_2T_TIMING) #if defined(CONFIG_DDR_2T_TIMING)
@ -136,7 +136,7 @@ int fixed_sdram(void)
#endif #endif
im->ddr.sdram_mode = CFG_DDR_MODE; im->ddr.sdram_mode = CFG_DDR_MODE;
im->ddr.sdram_interval = CFG_DDR_INTERVAL; im->ddr.sdram_interval = CFG_DDR_INTERVAL;
udelay(200); udelay(200);
/* enable DDR controller */ /* enable DDR controller */
@ -361,12 +361,12 @@ int do_ecc ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
volatile u32 val; volatile u32 val;
u64 *addr, count, val64; u64 *addr, count, val64;
register u64 *i; register u64 *i;
if (argc > 4) { if (argc > 4) {
printf ("Usage:\n%s\n", cmdtp->usage); printf ("Usage:\n%s\n", cmdtp->usage);
return 1; return 1;
} }
if (argc == 2) { if (argc == 2) {
if (strcmp(argv[1], "status") == 0) { if (strcmp(argv[1], "status") == 0) {
ecc_print_status(); ecc_print_status();
@ -379,8 +379,8 @@ int do_ecc ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
ddr->capture_attributes = 0; ddr->capture_attributes = 0;
return 0; return 0;
} }
} }
if (argc == 3) { if (argc == 3) {
if (strcmp(argv[1], "sbecnt") == 0) { if (strcmp(argv[1], "sbecnt") == 0) {
val = simple_strtoul(argv[2], NULL, 10); val = simple_strtoul(argv[2], NULL, 10);
@ -416,8 +416,8 @@ int do_ecc ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
} else if (strcmp(argv[2], "+mse") == 0) { } else if (strcmp(argv[2], "+mse") == 0) {
val |= ECC_ERROR_DISABLE_MSED; val |= ECC_ERROR_DISABLE_MSED;
} else if (strcmp(argv[2], "+all") == 0) { } else if (strcmp(argv[2], "+all") == 0) {
val |= (ECC_ERROR_DISABLE_SBED | val |= (ECC_ERROR_DISABLE_SBED |
ECC_ERROR_DISABLE_MBED | ECC_ERROR_DISABLE_MBED |
ECC_ERROR_DISABLE_MSED); ECC_ERROR_DISABLE_MSED);
} else if (strcmp(argv[2], "-sbe") == 0) { } else if (strcmp(argv[2], "-sbe") == 0) {
val &= ~ECC_ERROR_DISABLE_SBED; val &= ~ECC_ERROR_DISABLE_SBED;
@ -426,8 +426,8 @@ int do_ecc ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
} else if (strcmp(argv[2], "-mse") == 0) { } else if (strcmp(argv[2], "-mse") == 0) {
val &= ~ECC_ERROR_DISABLE_MSED; val &= ~ECC_ERROR_DISABLE_MSED;
} else if (strcmp(argv[2], "-all") == 0) { } else if (strcmp(argv[2], "-all") == 0) {
val &= ~(ECC_ERROR_DISABLE_SBED | val &= ~(ECC_ERROR_DISABLE_SBED |
ECC_ERROR_DISABLE_MBED | ECC_ERROR_DISABLE_MBED |
ECC_ERROR_DISABLE_MSED); ECC_ERROR_DISABLE_MSED);
} else { } else {
printf("Incorrect err_disable field\n"); printf("Incorrect err_disable field\n");

View File

@ -85,7 +85,7 @@ int board_init (void)
GPCR = 0x000003AB; /* I/O pad driving strength */ GPCR = 0x000003AB; /* I/O pad driving strength */
/* MX1_CS1U = 0x00000A00; *//* SRAM initialization */ /* MX1_CS1U = 0x00000A00; */ /* SRAM initialization */
/* MX1_CS1L = 0x11110601; */ /* MX1_CS1L = 0x11110601; */
MPCTL0 = 0x04632410; /* setting for 150 MHz MCU PLL CLK */ MPCTL0 = 0x04632410; /* setting for 150 MHz MCU PLL CLK */

View File

@ -973,7 +973,7 @@ START:
} }
static int getcxmodem(void) { static int getcxmodem(void) {
if (tstc()) if (tstc())
return (getc()); return (getc());
return -1; return -1;
} }
@ -984,49 +984,51 @@ static ulong load_serial_ymodem (ulong offset)
int err; int err;
int res; int res;
connection_info_t info; connection_info_t info;
char ymodemBuf[1024]; char ymodemBuf[1024];
ulong store_addr = ~0; ulong store_addr = ~0;
ulong addr = 0; ulong addr = 0;
size=0; size = 0;
info.mode=xyzModem_ymodem; info.mode = xyzModem_ymodem;
res=xyzModem_stream_open(&info, &err); res = xyzModem_stream_open (&info, &err);
if (!res) { if (!res) {
while ((res=xyzModem_stream_read(ymodemBuf, 1024, &err)) > 0 ){
store_addr = addr + offset;
size+=res;
addr+=res;
#ifndef CFG_NO_FLASH
if (addr2info(store_addr)) {
int rc;
rc = flash_write((char *)ymodemBuf,store_addr,res); while ((res =
if (rc != 0) { xyzModem_stream_read (ymodemBuf, 1024, &err)) > 0) {
flash_perror (rc); store_addr = addr + offset;
return (~0); size += res;
} addr += res;
} else #ifndef CFG_NO_FLASH
if (addr2info (store_addr)) {
int rc;
rc = flash_write ((char *) ymodemBuf,
store_addr, res);
if (rc != 0) {
flash_perror (rc);
return (~0);
}
} else
#endif #endif
{ {
memcpy ((char *)(store_addr), ymodemBuf, res); memcpy ((char *) (store_addr), ymodemBuf,
} res);
}
}
} }
else { } else {
printf ("%s\n",xyzModem_error(err)); printf ("%s\n", xyzModem_error (err));
} }
xyzModem_stream_close(&err); xyzModem_stream_close (&err);
xyzModem_stream_terminate(false,&getcxmodem); xyzModem_stream_terminate (false, &getcxmodem);
flush_cache (offset, size); flush_cache (offset, size);
printf("## Total Size = 0x%08x = %d Bytes\n", size, size); printf ("## Total Size = 0x%08x = %d Bytes\n", size, size);
sprintf(buf, "%X", size); sprintf (buf, "%X", size);
setenv("filesize", buf); setenv ("filesize", buf);
return offset; return offset;
} }

View File

@ -1,94 +1,96 @@
//========================================================================== /*
// *==========================================================================
// crc16.c *
// * crc16.c
// 16 bit CRC with polynomial x^16+x^12+x^5+1 *
// * 16 bit CRC with polynomial x^16+x^12+x^5+1
//========================================================================== *
//####ECOSGPLCOPYRIGHTBEGIN#### *==========================================================================
// ------------------------------------------- *####ECOSGPLCOPYRIGHTBEGIN####
// This file is part of eCos, the Embedded Configurable Operating System. * -------------------------------------------
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. * This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 2002 Gary Thomas * Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
// * Copyright (C) 2002 Gary Thomas
// eCos 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 * eCos is free software; you can redistribute it and/or modify it under
// Software Foundation; either version 2 or (at your option) any later version. * the terms of the GNU General Public License as published by the Free
// * Software Foundation; either version 2 or (at your option) any later version.
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY *
// WARRANTY; without even the implied warranty of MERCHANTABILITY or * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * WARRANTY; without even the implied warranty of MERCHANTABILITY or
// for more details. * 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 eCos; if not, write to the Free Software Foundation, Inc., * You should have received a copy of the GNU General Public License along
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * with eCos; if not, write to the Free Software Foundation, Inc.,
// * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
// As a special exception, if other files instantiate templates or use macros *
// or inline functions from this file, or you compile this file and link it * As a special exception, if other files instantiate templates or use macros
// with other works to produce a work based on this file, this file does not * or inline functions from this file, or you compile this file and link it
// by itself cause the resulting work to be covered by the GNU General Public * with other works to produce a work based on this file, this file does not
// License. However the source code for this file must still be made available * by itself cause the resulting work to be covered by the GNU General Public
// in accordance with section (3) of the GNU General Public License. * License. However the source code for this file must still be made available
// * in accordance with section (3) of the GNU General Public License.
// This exception does not invalidate any other reasons why a work based on *
// this file might be covered by the GNU General Public License. * This exception does not invalidate any other reasons why a work based on
// * this file might be covered by the GNU General Public License.
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. *
// at http://sources.redhat.com/ecos/ecos-license/ * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// ------------------------------------------- * at http: *sources.redhat.com/ecos/ecos-license/
//####ECOSGPLCOPYRIGHTEND#### * -------------------------------------------
//========================================================================== *####ECOSGPLCOPYRIGHTEND####
//#####DESCRIPTIONBEGIN#### *==========================================================================
// *#####DESCRIPTIONBEGIN####
// Author(s): gthomas *
// Contributors: gthomas,asl * Author(s): gthomas
// Date: 2001-01-31 * Contributors: gthomas,asl
// Purpose: * Date: 2001-01-31
// Description: * Purpose:
// * Description:
// This code is part of eCos (tm). *
// * This code is part of eCos (tm).
//####DESCRIPTIONEND#### *
// *####DESCRIPTIONEND####
//========================================================================== *
*==========================================================================
*/
#include "crc.h" #include "crc.h"
// Table of CRC constants - implements x^16+x^12+x^5+1 /* Table of CRC constants - implements x^16+x^12+x^5+1 */
static const uint16_t crc16_tab[] = { static const uint16_t crc16_tab[] = {
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
}; };
uint16_t uint16_t
@ -103,4 +105,3 @@ cyg_crc16(unsigned char *buf, int len)
} }
return cksum; return cksum;
} }

View File

@ -1,65 +1,67 @@
//========================================================================== /*
// *==========================================================================
// xyzModem.c *
// * xyzModem.c
// RedBoot stream handler for xyzModem protocol *
// * RedBoot stream handler for xyzModem protocol
//========================================================================== *
//####ECOSGPLCOPYRIGHTBEGIN#### *==========================================================================
// ------------------------------------------- *####ECOSGPLCOPYRIGHTBEGIN####
// This file is part of eCos, the Embedded Configurable Operating System. * -------------------------------------------
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. * This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 2002 Gary Thomas * Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
// * Copyright (C) 2002 Gary Thomas
// eCos 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 * eCos is free software; you can redistribute it and/or modify it under
// Software Foundation; either version 2 or (at your option) any later version. * the terms of the GNU General Public License as published by the Free
// * Software Foundation; either version 2 or (at your option) any later version.
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY *
// WARRANTY; without even the implied warranty of MERCHANTABILITY or * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * WARRANTY; without even the implied warranty of MERCHANTABILITY or
// for more details. * 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 eCos; if not, write to the Free Software Foundation, Inc., * You should have received a copy of the GNU General Public License along
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * with eCos; if not, write to the Free Software Foundation, Inc.,
// * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
// As a special exception, if other files instantiate templates or use macros *
// or inline functions from this file, or you compile this file and link it * As a special exception, if other files instantiate templates or use macros
// with other works to produce a work based on this file, this file does not * or inline functions from this file, or you compile this file and link it
// by itself cause the resulting work to be covered by the GNU General Public * with other works to produce a work based on this file, this file does not
// License. However the source code for this file must still be made available * by itself cause the resulting work to be covered by the GNU General Public
// in accordance with section (3) of the GNU General Public License. * License. However the source code for this file must still be made available
// * in accordance with section (3) of the GNU General Public License.
// This exception does not invalidate any other reasons why a work based on *
// this file might be covered by the GNU General Public License. * This exception does not invalidate any other reasons why a work based on
// * this file might be covered by the GNU General Public License.
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. *
// at http://sources.redhat.com/ecos/ecos-license/ * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// ------------------------------------------- * at http: *sources.redhat.com/ecos/ecos-license/
//####ECOSGPLCOPYRIGHTEND#### * -------------------------------------------
//========================================================================== *####ECOSGPLCOPYRIGHTEND####
//#####DESCRIPTIONBEGIN#### *==========================================================================
// *#####DESCRIPTIONBEGIN####
// Author(s): gthomas *
// Contributors: gthomas, tsmith, Yoshinori Sato * Author(s): gthomas
// Date: 2000-07-14 * Contributors: gthomas, tsmith, Yoshinori Sato
// Purpose: * Date: 2000-07-14
// Description: * Purpose:
// * Description:
// This code is part of RedBoot (tm). *
// * This code is part of RedBoot (tm).
//####DESCRIPTIONEND#### *
// *####DESCRIPTIONEND####
//========================================================================== *
*==========================================================================
*/
#include <common.h> #include <common.h>
#include <xyzModem.h> #include <xyzModem.h>
#include <stdarg.h> #include <stdarg.h>
#include <crc.h> #include <crc.h>
// Assumption - run xyzModem protocol over the console port /* Assumption - run xyzModem protocol over the console port */
// Values magic to the protocol /* Values magic to the protocol */
#define SOH 0x01 #define SOH 0x01
#define STX 0x02 #define STX 0x02
#define EOT 0x04 #define EOT 0x04
@ -67,11 +69,11 @@
#define BSP 0x08 #define BSP 0x08
#define NAK 0x15 #define NAK 0x15
#define CAN 0x18 #define CAN 0x18
#define EOF 0x1A // ^Z for DOS officionados #define EOF 0x1A /* ^Z for DOS officionados */
#define USE_YMODEM_LENGTH #define USE_YMODEM_LENGTH
// Data & state local to the protocol /* Data & state local to the protocol */
static struct { static struct {
#ifdef REDBOOT #ifdef REDBOOT
hal_virtual_comm_table_t* __chan; hal_virtual_comm_table_t* __chan;
@ -80,7 +82,7 @@ static struct {
#endif #endif
unsigned char pkt[1024], *bufp; unsigned char pkt[1024], *bufp;
unsigned char blk,cblk,crc1,crc2; unsigned char blk,cblk,crc1,crc2;
unsigned char next_blk; // Expected block unsigned char next_blk; /* Expected block */
int len, mode, total_retries; int len, mode, total_retries;
int total_SOH, total_STX, total_CAN; int total_SOH, total_STX, total_CAN;
bool crc_mode, at_eof, tx_ack; bool crc_mode, at_eof, tx_ack;
@ -89,13 +91,13 @@ static struct {
#endif #endif
} xyz; } xyz;
#define xyzModem_CHAR_TIMEOUT 2000 // 2 seconds #define xyzModem_CHAR_TIMEOUT 2000 /* 2 seconds */
#define xyzModem_MAX_RETRIES 20 #define xyzModem_MAX_RETRIES 20
#define xyzModem_MAX_RETRIES_WITH_CRC 10 #define xyzModem_MAX_RETRIES_WITH_CRC 10
#define xyzModem_CAN_COUNT 3 // Wait for 3 CAN before quitting #define xyzModem_CAN_COUNT 3 /* Wait for 3 CAN before quitting */
#ifndef REDBOOT //SB #ifndef REDBOOT /*SB */
typedef int cyg_int32; typedef int cyg_int32;
int CYGACC_COMM_IF_GETC_TIMEOUT (char chan,char *c) { int CYGACC_COMM_IF_GETC_TIMEOUT (char chan,char *c) {
#define DELAY 20 #define DELAY 20
@ -115,7 +117,7 @@ void CYGACC_COMM_IF_PUTC(char x,char y) {
putc(y); putc(y);
} }
// Validate a hex character /* Validate a hex character */
__inline__ static bool __inline__ static bool
_is_hex(char c) _is_hex(char c)
{ {
@ -124,7 +126,7 @@ _is_hex(char c)
((c >= 'a') && (c <= 'f'))); ((c >= 'a') && (c <= 'f')));
} }
// Convert a single hex nibble /* Convert a single hex nibble */
__inline__ static int __inline__ static int
_from_hex(char c) _from_hex(char c)
{ {
@ -140,7 +142,7 @@ _from_hex(char c)
return ret; return ret;
} }
// Convert a character to lower case /* Convert a character to lower case */
__inline__ static char __inline__ static char
_tolower(char c) _tolower(char c)
{ {
@ -150,11 +152,7 @@ _tolower(char c)
return c; return c;
} }
/* Parse (scan) a number */
//
// Parse (scan) a number
//
bool bool
parse_num(char *s, unsigned long *val, char **es, char *delim) parse_num(char *s, unsigned long *val, char **es, char *delim)
{ {
@ -173,10 +171,10 @@ parse_num(char *s, unsigned long *val, char **es, char *delim)
first = false; first = false;
c = *s++; c = *s++;
if (_is_hex(c) && ((digit = _from_hex(c)) < radix)) { if (_is_hex(c) && ((digit = _from_hex(c)) < radix)) {
// Valid digit /* Valid digit */
#ifdef CYGPKG_HAL_MIPS #ifdef CYGPKG_HAL_MIPS
// FIXME: tx49 compiler generates 0x2539018 for MUL which /* FIXME: tx49 compiler generates 0x2539018 for MUL which */
// isn't any good. /* isn't any good. */
if (16 == radix) if (16 == radix)
result = result << 4; result = result << 4;
else else
@ -187,12 +185,12 @@ parse_num(char *s, unsigned long *val, char **es, char *delim)
#endif #endif
} else { } else {
if (delim != (char *)0) { if (delim != (char *)0) {
// See if this character is one of the delimiters /* See if this character is one of the delimiters */
char *dp = delim; char *dp = delim;
while (*dp && (c != *dp)) dp++; while (*dp && (c != *dp)) dp++;
if (*dp) break; // Found a good delimiter if (*dp) break; /* Found a good delimiter */
} }
return false; // Malformatted number return false; /* Malformatted number */
} }
} }
*val = result; *val = result;
@ -207,11 +205,11 @@ parse_num(char *s, unsigned long *val, char **es, char *delim)
#define USE_SPRINTF #define USE_SPRINTF
#ifdef DEBUG #ifdef DEBUG
#ifndef USE_SPRINTF #ifndef USE_SPRINTF
// /*
// Note: this debug setup only works if the target platform has two serial ports * Note: this debug setup only works if the target platform has two serial ports
// available so that the other one (currently only port 1) can be used for debug * available so that the other one (currently only port 1) can be used for debug
// messages. * messages.
// */
static int static int
zm_dprintf(char *fmt, ...) zm_dprintf(char *fmt, ...)
{ {
@ -235,9 +233,9 @@ zm_flush(void)
} }
#else #else
// /*
// Note: this debug setup works by storing the strings in a fixed buffer * Note: this debug setup works by storing the strings in a fixed buffer
// */
#define FINAL #define FINAL
#ifdef FINAL #ifdef FINAL
static char *zm_out = (char *)0x00380000; static char *zm_out = (char *)0x00380000;
@ -308,7 +306,7 @@ zm_dump(int line)
#define ZM_DEBUG(x) #define ZM_DEBUG(x)
#endif #endif
// Wait for the line to go idle /* Wait for the line to go idle */
static void static void
xyzModem_flush(void) xyzModem_flush(void)
{ {
@ -330,7 +328,7 @@ xyzModem_get_hdr(void)
unsigned short cksum; unsigned short cksum;
ZM_DEBUG(zm_new()); ZM_DEBUG(zm_new());
// Find the start of a header /* Find the start of a header */
can_total = 0; can_total = 0;
hdr_chars = 0; hdr_chars = 0;
@ -356,11 +354,11 @@ xyzModem_get_hdr(void)
if (++can_total == xyzModem_CAN_COUNT) { if (++can_total == xyzModem_CAN_COUNT) {
return xyzModem_cancel; return xyzModem_cancel;
} else { } else {
// Wait for multiple CAN to avoid early quits /* Wait for multiple CAN to avoid early quits */
break; break;
} }
case EOT: case EOT:
// EOT only supported if no noise /* EOT only supported if no noise */
if (hdr_chars == 1) { if (hdr_chars == 1) {
CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK); CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK);
ZM_DEBUG(zm_dprintf("ACK on EOT #%d\n", __LINE__)); ZM_DEBUG(zm_dprintf("ACK on EOT #%d\n", __LINE__));
@ -368,19 +366,19 @@ xyzModem_get_hdr(void)
return xyzModem_eof; return xyzModem_eof;
} }
default: default:
// Ignore, waiting for start of header /* Ignore, waiting for start of header */
; ;
} }
} else { } else {
// Data stream timed out /* Data stream timed out */
xyzModem_flush(); // Toss any current input xyzModem_flush(); /* Toss any current input */
ZM_DEBUG(zm_dump(__LINE__)); ZM_DEBUG(zm_dump(__LINE__));
CYGACC_CALL_IF_DELAY_US((cyg_int32)250000); CYGACC_CALL_IF_DELAY_US((cyg_int32)250000);
return xyzModem_timeout; return xyzModem_timeout;
} }
} }
// Header found, now read the data /* Header found, now read the data */
res = CYGACC_COMM_IF_GETC_TIMEOUT(*xyz.__chan, &xyz.blk); res = CYGACC_COMM_IF_GETC_TIMEOUT(*xyz.__chan, &xyz.blk);
ZM_DEBUG(zm_save(xyz.blk)); ZM_DEBUG(zm_save(xyz.blk));
if (!res) { if (!res) {
@ -420,18 +418,18 @@ xyzModem_get_hdr(void)
} }
} }
ZM_DEBUG(zm_dump(__LINE__)); ZM_DEBUG(zm_dump(__LINE__));
// Validate the message /* Validate the message */
if ((xyz.blk ^ xyz.cblk) != (unsigned char)0xFF) { if ((xyz.blk ^ xyz.cblk) != (unsigned char)0xFF) {
ZM_DEBUG(zm_dprintf("Framing error - blk: %x/%x/%x\n", xyz.blk, xyz.cblk, (xyz.blk ^ xyz.cblk))); ZM_DEBUG(zm_dprintf("Framing error - blk: %x/%x/%x\n", xyz.blk, xyz.cblk, (xyz.blk ^ xyz.cblk)));
ZM_DEBUG(zm_dump_buf(xyz.pkt, xyz.len)); ZM_DEBUG(zm_dump_buf(xyz.pkt, xyz.len));
xyzModem_flush(); xyzModem_flush();
return xyzModem_frame; return xyzModem_frame;
} }
// Verify checksum/CRC /* Verify checksum/CRC */
if (xyz.crc_mode) { if (xyz.crc_mode) {
cksum = cyg_crc16(xyz.pkt, xyz.len); cksum = cyg_crc16(xyz.pkt, xyz.len);
if (cksum != ((xyz.crc1 << 8) | xyz.crc2)) { if (cksum != ((xyz.crc1 << 8) | xyz.crc2)) {
ZM_DEBUG(zm_dprintf("CRC error - recvd: %02x%02x, computed: %x\n", ZM_DEBUG(zm_dprintf("CRC error - recvd: %02x%02x, computed: %x\n",
xyz.crc1, xyz.crc2, cksum & 0xFFFF)); xyz.crc1, xyz.crc2, cksum & 0xFFFF));
return xyzModem_cksum; return xyzModem_cksum;
} }
@ -445,18 +443,18 @@ xyzModem_get_hdr(void)
return xyzModem_cksum; return xyzModem_cksum;
} }
} }
// If we get here, the message passes [structural] muster /* If we get here, the message passes [structural] muster */
return 0; return 0;
} }
int int
xyzModem_stream_open(connection_info_t *info, int *err) xyzModem_stream_open(connection_info_t *info, int *err)
{ {
int console_chan, stat=0; int console_chan, stat=0;
int retries = xyzModem_MAX_RETRIES; int retries = xyzModem_MAX_RETRIES;
int crc_retries = xyzModem_MAX_RETRIES_WITH_CRC; int crc_retries = xyzModem_MAX_RETRIES_WITH_CRC;
// ZM_DEBUG(zm_out = zm_out_start); /* ZM_DEBUG(zm_out = zm_out_start); */
#ifdef xyzModem_zmodem #ifdef xyzModem_zmodem
if (info->mode == xyzModem_zmodem) { if (info->mode == xyzModem_zmodem) {
*err = xyzModem_noZmodem; *err = xyzModem_noZmodem;
@ -465,7 +463,7 @@ xyzModem_stream_open(connection_info_t *info, int *err)
#endif #endif
#ifdef REDBOOT #ifdef REDBOOT
// Set up the I/O channel. Note: this allows for using a different port in the future /* Set up the I/O channel. Note: this allows for using a different port in the future */
console_chan = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); console_chan = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
if (info->chan >= 0) { if (info->chan >= 0) {
CYGACC_CALL_IF_SET_CONSOLE_COMM(info->chan); CYGACC_CALL_IF_SET_CONSOLE_COMM(info->chan);
@ -477,9 +475,9 @@ xyzModem_stream_open(connection_info_t *info, int *err)
CYGACC_CALL_IF_SET_CONSOLE_COMM(console_chan); CYGACC_CALL_IF_SET_CONSOLE_COMM(console_chan);
CYGACC_COMM_IF_CONTROL(*xyz.__chan, __COMMCTL_SET_TIMEOUT, xyzModem_CHAR_TIMEOUT); CYGACC_COMM_IF_CONTROL(*xyz.__chan, __COMMCTL_SET_TIMEOUT, xyzModem_CHAR_TIMEOUT);
#else #else
// TODO: CHECK ! /* TODO: CHECK ! */
int dummy; int dummy;
xyz.__chan=&dummy; xyz.__chan=&dummy;
#endif #endif
xyz.len = 0; xyz.len = 0;
xyz.crc_mode = true; xyz.crc_mode = true;
@ -494,11 +492,11 @@ xyzModem_stream_open(connection_info_t *info, int *err)
xyz.read_length = 0; xyz.read_length = 0;
xyz.file_length = 0; xyz.file_length = 0;
#endif #endif
CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK)); CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK));
if (xyz.mode == xyzModem_xmodem) { if (xyz.mode == xyzModem_xmodem) {
// X-modem doesn't have an information header - exit here /* X-modem doesn't have an information header - exit here */
xyz.next_blk = 1; xyz.next_blk = 1;
return 0; return 0;
} }
@ -506,24 +504,24 @@ xyzModem_stream_open(connection_info_t *info, int *err)
while (retries-- > 0) { while (retries-- > 0) {
stat = xyzModem_get_hdr(); stat = xyzModem_get_hdr();
if (stat == 0) { if (stat == 0) {
// Y-modem file information header /* Y-modem file information header */
if (xyz.blk == 0) { if (xyz.blk == 0) {
#ifdef USE_YMODEM_LENGTH #ifdef USE_YMODEM_LENGTH
// skip filename /* skip filename */
while (*xyz.bufp++); while (*xyz.bufp++);
// get the length /* get the length */
parse_num(xyz.bufp, &xyz.file_length, NULL, " "); parse_num(xyz.bufp, &xyz.file_length, NULL, " ");
#endif #endif
// The rest of the file name data block quietly discarded /* The rest of the file name data block quietly discarded */
xyz.tx_ack = true; xyz.tx_ack = true;
} }
xyz.next_blk = 1; xyz.next_blk = 1;
xyz.len = 0; xyz.len = 0;
return 0; return 0;
} else } else
if (stat == xyzModem_timeout) { if (stat == xyzModem_timeout) {
if (--crc_retries <= 0) xyz.crc_mode = false; if (--crc_retries <= 0) xyz.crc_mode = false;
CYGACC_CALL_IF_DELAY_US(5*100000); // Extra delay for startup CYGACC_CALL_IF_DELAY_US(5*100000); /* Extra delay for startup */
CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK)); CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK));
xyz.total_retries++; xyz.total_retries++;
ZM_DEBUG(zm_dprintf("NAK (%d)\n", __LINE__)); ZM_DEBUG(zm_dprintf("NAK (%d)\n", __LINE__));
@ -537,7 +535,7 @@ xyzModem_stream_open(connection_info_t *info, int *err)
return -1; return -1;
} }
int int
xyzModem_stream_read(char *buf, int size, int *err) xyzModem_stream_read(char *buf, int size, int *err)
{ {
int stat, total, len; int stat, total, len;
@ -545,7 +543,7 @@ xyzModem_stream_read(char *buf, int size, int *err)
total = 0; total = 0;
stat = xyzModem_cancel; stat = xyzModem_cancel;
// Try and get 'size' bytes into the buffer /* Try and get 'size' bytes into the buffer */
while (!xyz.at_eof && (size > 0)) { while (!xyz.at_eof && (size > 0)) {
if (xyz.len == 0) { if (xyz.len == 0) {
retries = xyzModem_MAX_RETRIES; retries = xyzModem_MAX_RETRIES;
@ -562,8 +560,8 @@ xyzModem_stream_read(char *buf, int size, int *err)
#else #else
if (1) { if (1) {
#endif #endif
// Data blocks can be padded with ^Z (EOF) characters /* Data blocks can be padded with ^Z (EOF) characters */
// This code tries to detect and remove them /* This code tries to detect and remove them */
if ((xyz.bufp[xyz.len-1] == EOF) && if ((xyz.bufp[xyz.len-1] == EOF) &&
(xyz.bufp[xyz.len-2] == EOF) && (xyz.bufp[xyz.len-2] == EOF) &&
(xyz.bufp[xyz.len-3] == EOF)) { (xyz.bufp[xyz.len-3] == EOF)) {
@ -574,10 +572,12 @@ xyzModem_stream_read(char *buf, int size, int *err)
} }
#ifdef USE_YMODEM_LENGTH #ifdef USE_YMODEM_LENGTH
// See if accumulated length exceeds that of the file. /*
// If so, reduce size (i.e., cut out pad bytes) * See if accumulated length exceeds that of the file.
// Only do this for Y-modem (and Z-modem should it ever * If so, reduce size (i.e., cut out pad bytes)
// be supported since it can fall back to Y-modem mode). * Only do this for Y-modem (and Z-modem should it ever
* be supported since it can fall back to Y-modem mode).
*/
if (xyz.mode != xyzModem_xmodem && 0 != xyz.file_length) { if (xyz.mode != xyzModem_xmodem && 0 != xyz.file_length) {
xyz.read_length += xyz.len; xyz.read_length += xyz.len;
if (xyz.read_length > xyz.file_length) { if (xyz.read_length > xyz.file_length) {
@ -587,9 +587,9 @@ xyzModem_stream_read(char *buf, int size, int *err)
#endif #endif
break; break;
} else if (xyz.blk == ((xyz.next_blk - 1) & 0xFF)) { } else if (xyz.blk == ((xyz.next_blk - 1) & 0xFF)) {
// Just re-ACK this so sender will get on with it /* Just re-ACK this so sender will get on with it */
CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK); CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK);
continue; // Need new header continue; /* Need new header */
} else { } else {
stat = xyzModem_sequence; stat = xyzModem_sequence;
} }
@ -604,7 +604,7 @@ xyzModem_stream_read(char *buf, int size, int *err)
CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK)); CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK));
xyz.total_retries++; xyz.total_retries++;
ZM_DEBUG(zm_dprintf("Reading Final Header\n")); ZM_DEBUG(zm_dprintf("Reading Final Header\n"));
stat = xyzModem_get_hdr(); stat = xyzModem_get_hdr();
CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK); CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK);
ZM_DEBUG(zm_dprintf("FINAL ACK (%d)\n", __LINE__)); ZM_DEBUG(zm_dprintf("FINAL ACK (%d)\n", __LINE__));
} }
@ -621,7 +621,7 @@ xyzModem_stream_read(char *buf, int size, int *err)
return total; return total;
} }
} }
// Don't "read" data from the EOF protocol package /* Don't "read" data from the EOF protocol package */
if (!xyz.at_eof) { if (!xyz.at_eof) {
len = xyz.len; len = xyz.len;
if (size < len) len = size; if (size < len) len = size;
@ -639,15 +639,15 @@ xyzModem_stream_read(char *buf, int size, int *err)
void void
xyzModem_stream_close(int *err) xyzModem_stream_close(int *err)
{ {
diag_printf("xyzModem - %s mode, %d(SOH)/%d(STX)/%d(CAN) packets, %d retries\n", diag_printf("xyzModem - %s mode, %d(SOH)/%d(STX)/%d(CAN) packets, %d retries\n",
xyz.crc_mode ? "CRC" : "Cksum", xyz.crc_mode ? "CRC" : "Cksum",
xyz.total_SOH, xyz.total_STX, xyz.total_CAN, xyz.total_SOH, xyz.total_STX, xyz.total_CAN,
xyz.total_retries); xyz.total_retries);
ZM_DEBUG(zm_flush()); ZM_DEBUG(zm_flush());
} }
// Need to be able to clean out the input buffer, so have to take the /* Need to be able to clean out the input buffer, so have to take the */
// getc /* getc */
void xyzModem_stream_terminate(bool abort, int (*getc)(void)) void xyzModem_stream_terminate(bool abort, int (*getc)(void))
{ {
int c; int c;
@ -657,8 +657,8 @@ void xyzModem_stream_terminate(bool abort, int (*getc)(void))
switch (xyz.mode) { switch (xyz.mode) {
case xyzModem_xmodem: case xyzModem_xmodem:
case xyzModem_ymodem: case xyzModem_ymodem:
// The X/YMODEM Spec seems to suggest that multiple CAN followed by an equal /* The X/YMODEM Spec seems to suggest that multiple CAN followed by an equal */
// number of Backspaces is a friendly way to get the other end to abort. /* number of Backspaces is a friendly way to get the other end to abort. */
CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN); CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN);
CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN); CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN);
CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN); CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN);
@ -667,29 +667,33 @@ void xyzModem_stream_terminate(bool abort, int (*getc)(void))
CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP); CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP);
CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP); CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP);
CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP); CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP);
// Now consume the rest of what's waiting on the line. /* Now consume the rest of what's waiting on the line. */
ZM_DEBUG(zm_dprintf("Flushing serial line.\n")); ZM_DEBUG(zm_dprintf("Flushing serial line.\n"));
xyzModem_flush(); xyzModem_flush();
xyz.at_eof = true; xyz.at_eof = true;
break; break;
#ifdef xyzModem_zmodem #ifdef xyzModem_zmodem
case xyzModem_zmodem: case xyzModem_zmodem:
// Might support it some day I suppose. /* Might support it some day I suppose. */
#endif #endif
break; break;
} }
} else { } else {
ZM_DEBUG(zm_dprintf("Engaging cleanup mode...\n")); ZM_DEBUG(zm_dprintf("Engaging cleanup mode...\n"));
// Consume any trailing crap left in the inbuffer from /*
// previous recieved blocks. Since very few files are an exact multiple * Consume any trailing crap left in the inbuffer from
// of the transfer block size, there will almost always be some gunk here. * previous recieved blocks. Since very few files are an exact multiple
// If we don't eat it now, RedBoot will think the user typed it. * of the transfer block size, there will almost always be some gunk here.
* If we don't eat it now, RedBoot will think the user typed it.
*/
ZM_DEBUG(zm_dprintf("Trailing gunk:\n")); ZM_DEBUG(zm_dprintf("Trailing gunk:\n"));
while ((c = (*getc)()) > -1) ; while ((c = (*getc)()) > -1) ;
ZM_DEBUG(zm_dprintf("\n")); ZM_DEBUG(zm_dprintf("\n"));
// Make a small delay to give terminal programs like minicom /*
// time to get control again after their file transfer program * Make a small delay to give terminal programs like minicom
// exits. * time to get control again after their file transfer program
* exits.
*/
CYGACC_CALL_IF_DELAY_US((cyg_int32)250000); CYGACC_CALL_IF_DELAY_US((cyg_int32)250000);
} }
} }
@ -728,12 +732,12 @@ xyzModem_error(int err)
} }
} }
// /*
// RedBoot interface * RedBoot interface
// */
#if 0 // SB #if 0 /* SB */
GETC_IO_FUNCS(xyzModem_io, xyzModem_stream_open, xyzModem_stream_close, GETC_IO_FUNCS(xyzModem_io, xyzModem_stream_open, xyzModem_stream_close,
xyzModem_stream_terminate, xyzModem_stream_read, xyzModem_error); xyzModem_stream_terminate, xyzModem_stream_read, xyzModem_error);
RedBoot_load(xmodem, xyzModem_io, false, false, xyzModem_xmodem); RedBoot_load(xmodem, xyzModem_io, false, false, xyzModem_xmodem);
RedBoot_load(ymodem, xyzModem_io, false, false, xyzModem_ymodem); RedBoot_load(ymodem, xyzModem_io, false, false, xyzModem_ymodem);
#endif #endif

View File

@ -58,7 +58,7 @@ int checkcpu (void)
break; break;
} }
printf (" v%d.%d, Core v%d.%d", SVR_MJREV (svr), SVR_MNREV (svr), printf (" v%d.%d, Core v%d.%d", SVR_MJREV (svr), SVR_MNREV (svr),
PVR_MAJ(pvr), PVR_MIN(pvr)); PVR_MAJ(pvr), PVR_MIN(pvr));
#endif #endif
printf (" at %s MHz\n", strmhz (buf, clock)); printf (" at %s MHz\n", strmhz (buf, clock));

View File

@ -260,7 +260,7 @@ int dma_xfer(void *dest, u32 count, void *src)
dmamr0 = (DMA_CHANNEL_TRANSFER_MODE_DIRECT | dmamr0 = (DMA_CHANNEL_TRANSFER_MODE_DIRECT |
DMA_CHANNEL_SOURCE_ADDRESS_HOLD_8B | DMA_CHANNEL_SOURCE_ADDRESS_HOLD_8B |
DMA_CHANNEL_SOURCE_ADRESSS_HOLD_EN); DMA_CHANNEL_SOURCE_ADRESSS_HOLD_EN);
dma->dmamr0 = swab32(dmamr0); dma->dmamr0 = swab32(dmamr0);
__asm__ __volatile__ ("sync"); __asm__ __volatile__ ("sync");

View File

@ -1,7 +1,7 @@
/* /*
* (C) Copyright 2006 * (C) Copyright 2006
* Wolfgang Denk, DENX Software Engineering, wd@denx.de. * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
* *
* Copyright 2004 Freescale Semiconductor. * Copyright 2004 Freescale Semiconductor.
* (C) Copyright 2003 Motorola Inc. * (C) Copyright 2003 Motorola Inc.
* Xianghua Xiao (X.Xiao@motorola.com) * Xianghua Xiao (X.Xiao@motorola.com)
@ -426,7 +426,7 @@ static __inline__ unsigned long get_tbms (void)
/* /*
* Initialize all of memory for ECC, then enable errors. * Initialize all of memory for ECC, then enable errors.
*/ */
//#define CONFIG_DDR_ECC_INIT_VIA_DMA /* #define CONFIG_DDR_ECC_INIT_VIA_DMA */
void ddr_enable_ecc(unsigned int dram_size) void ddr_enable_ecc(unsigned int dram_size)
{ {
uint *p; uint *p;

View File

@ -18,7 +18,7 @@
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
@ -38,17 +38,17 @@
#ifndef CFG_SDRAM_TABLE #ifndef CFG_SDRAM_TABLE
sdram_conf_t mb0cf[] = { sdram_conf_t mb0cf[] = {
{(128 << 20), 13, 0x000A4001}, /* (0-128MB) Address Mode 3, 13x10(4) */ {(128 << 20), 13, 0x000A4001}, /* (0-128MB) Address Mode 3, 13x10(4) */
{(64 << 20), 13, 0x00084001}, /* (0-64MB) Address Mode 3, 13x9(4) */ {(64 << 20), 13, 0x00084001}, /* (0-64MB) Address Mode 3, 13x9(4) */
{(32 << 20), 12, 0x00062001}, /* (0-32MB) Address Mode 2, 12x9(4) */ {(32 << 20), 12, 0x00062001}, /* (0-32MB) Address Mode 2, 12x9(4) */
{(16 << 20), 12, 0x00046001}, /* (0-16MB) Address Mode 4, 12x8(4) */ {(16 << 20), 12, 0x00046001}, /* (0-16MB) Address Mode 4, 12x8(4) */
{(4 << 20), 11, 0x00008001}, /* (0-4MB) Address Mode 5, 11x8(2) */ {(4 << 20), 11, 0x00008001}, /* (0-4MB) Address Mode 5, 11x8(2) */
}; };
#else #else
sdram_conf_t mb0cf[] = CFG_SDRAM_TABLE; sdram_conf_t mb0cf[] = CFG_SDRAM_TABLE;
#endif #endif
#define N_MB0CF (sizeof(mb0cf) / sizeof(mb0cf[0])) #define N_MB0CF (sizeof(mb0cf) / sizeof(mb0cf[0]))
#ifndef CONFIG_440 #ifndef CONFIG_440
@ -65,76 +65,76 @@ static ulong ns2clks(ulong ns)
static ulong compute_sdtr1(ulong speed) static ulong compute_sdtr1(ulong speed)
{ {
#ifdef CFG_SDRAM_CASL #ifdef CFG_SDRAM_CASL
ulong tmp; ulong tmp;
ulong sdtr1 = 0; ulong sdtr1 = 0;
/* CASL */ /* CASL */
if (CFG_SDRAM_CASL < 2) if (CFG_SDRAM_CASL < 2)
sdtr1 |= (1 << SDRAM0_TR_CASL); sdtr1 |= (1 << SDRAM0_TR_CASL);
else else
if (CFG_SDRAM_CASL > 4) if (CFG_SDRAM_CASL > 4)
sdtr1 |= (3 << SDRAM0_TR_CASL); sdtr1 |= (3 << SDRAM0_TR_CASL);
else else
sdtr1 |= ((CFG_SDRAM_CASL-1) << SDRAM0_TR_CASL); sdtr1 |= ((CFG_SDRAM_CASL-1) << SDRAM0_TR_CASL);
/* PTA */ /* PTA */
tmp = ns2clks(CFG_SDRAM_PTA); tmp = ns2clks(CFG_SDRAM_PTA);
if ((tmp >= 2) && (tmp <= 4)) if ((tmp >= 2) && (tmp <= 4))
sdtr1 |= ((tmp-1) << SDRAM0_TR_PTA); sdtr1 |= ((tmp-1) << SDRAM0_TR_PTA);
else else
sdtr1 |= ((4-1) << SDRAM0_TR_PTA); sdtr1 |= ((4-1) << SDRAM0_TR_PTA);
/* CTP */ /* CTP */
tmp = ns2clks(CFG_SDRAM_CTP); tmp = ns2clks(CFG_SDRAM_CTP);
if ((tmp >= 2) && (tmp <= 4)) if ((tmp >= 2) && (tmp <= 4))
sdtr1 |= ((tmp-1) << SDRAM0_TR_CTP); sdtr1 |= ((tmp-1) << SDRAM0_TR_CTP);
else else
sdtr1 |= ((4-1) << SDRAM0_TR_CTP); sdtr1 |= ((4-1) << SDRAM0_TR_CTP);
/* LDF */ /* LDF */
tmp = ns2clks(CFG_SDRAM_LDF); tmp = ns2clks(CFG_SDRAM_LDF);
if ((tmp >= 2) && (tmp <= 4)) if ((tmp >= 2) && (tmp <= 4))
sdtr1 |= ((tmp-1) << SDRAM0_TR_LDF); sdtr1 |= ((tmp-1) << SDRAM0_TR_LDF);
else else
sdtr1 |= ((2-1) << SDRAM0_TR_LDF); sdtr1 |= ((2-1) << SDRAM0_TR_LDF);
/* RFTA */ /* RFTA */
tmp = ns2clks(CFG_SDRAM_RFTA); tmp = ns2clks(CFG_SDRAM_RFTA);
if ((tmp >= 4) && (tmp <= 10)) if ((tmp >= 4) && (tmp <= 10))
sdtr1 |= ((tmp-4) << SDRAM0_TR_RFTA); sdtr1 |= ((tmp-4) << SDRAM0_TR_RFTA);
else else
sdtr1 |= ((10-4) << SDRAM0_TR_RFTA); sdtr1 |= ((10-4) << SDRAM0_TR_RFTA);
/* RCD */ /* RCD */
tmp = ns2clks(CFG_SDRAM_RCD); tmp = ns2clks(CFG_SDRAM_RCD);
if ((tmp >= 2) && (tmp <= 4)) if ((tmp >= 2) && (tmp <= 4))
sdtr1 |= ((tmp-1) << SDRAM0_TR_RCD); sdtr1 |= ((tmp-1) << SDRAM0_TR_RCD);
else else
sdtr1 |= ((4-1) << SDRAM0_TR_RCD); sdtr1 |= ((4-1) << SDRAM0_TR_RCD);
return sdtr1; return sdtr1;
#else /* CFG_SDRAM_CASL */ #else /* CFG_SDRAM_CASL */
/* /*
* If no values are configured in the board config file * If no values are configured in the board config file
* use the default values, which seem to be ok for most * use the default values, which seem to be ok for most
* boards. * boards.
* *
* REMARK: * REMARK:
* For new board ports we strongly recommend to define the * For new board ports we strongly recommend to define the
* correct values for the used SDRAM chips in your board * correct values for the used SDRAM chips in your board
* config file (see PPChameleonEVB.h) * config file (see PPChameleonEVB.h)
*/ */
if (speed > 100000000) { if (speed > 100000000) {
/* /*
* 133 MHz SDRAM * 133 MHz SDRAM
*/ */
return 0x01074015; return 0x01074015;
} else { } else {
/* /*
* default: 100 MHz SDRAM * default: 100 MHz SDRAM
*/ */
return 0x0086400d; return 0x0086400d;
} }
#endif /* CFG_SDRAM_CASL */ #endif /* CFG_SDRAM_CASL */
} }
@ -142,24 +142,24 @@ static ulong compute_sdtr1(ulong speed)
static ulong compute_rtr(ulong speed, ulong rows, ulong refresh) static ulong compute_rtr(ulong speed, ulong rows, ulong refresh)
{ {
#ifdef CFG_SDRAM_CASL #ifdef CFG_SDRAM_CASL
ulong tmp; ulong tmp;
tmp = ((refresh*1000*1000) / (1 << rows)) * (speed / 1000); tmp = ((refresh*1000*1000) / (1 << rows)) * (speed / 1000);
tmp /= 1000000; tmp /= 1000000;
return ((tmp & 0x00003FF8) << 16); return ((tmp & 0x00003FF8) << 16);
#else /* CFG_SDRAM_CASL */ #else /* CFG_SDRAM_CASL */
if (speed > 100000000) { if (speed > 100000000) {
/* /*
* 133 MHz SDRAM * 133 MHz SDRAM
*/ */
return 0x07f00000; return 0x07f00000;
} else { } else {
/* /*
* default: 100 MHz SDRAM * default: 100 MHz SDRAM
*/ */
return 0x05f00000; return 0x05f00000;
} }
#endif /* CFG_SDRAM_CASL */ #endif /* CFG_SDRAM_CASL */
} }
@ -172,19 +172,19 @@ void sdram_init(void)
ulong sdtr1; ulong sdtr1;
int i; int i;
/* /*
* Determine SDRAM speed * Determine SDRAM speed
*/ */
speed = get_bus_freq(0); /* parameter not used on ppc4xx */ speed = get_bus_freq(0); /* parameter not used on ppc4xx */
/* /*
* sdtr1 (register SDRAM0_TR) must take into account timings listed * sdtr1 (register SDRAM0_TR) must take into account timings listed
* in SDRAM chip datasheet. rtr (register SDRAM0_RTR) must take into * in SDRAM chip datasheet. rtr (register SDRAM0_RTR) must take into
* account actual SDRAM size. So we can set up sdtr1 according to what * account actual SDRAM size. So we can set up sdtr1 according to what
* is specified in board configuration file while rtr dependds on SDRAM * is specified in board configuration file while rtr dependds on SDRAM
* size we are assuming before detection. * size we are assuming before detection.
*/ */
sdtr1 = compute_sdtr1(speed); sdtr1 = compute_sdtr1(speed);
for (i=0; i<N_MB0CF; i++) { for (i=0; i<N_MB0CF; i++) {
/* /*
@ -343,8 +343,8 @@ static void ecc_init(ulong start, ulong size)
* Autodetect onboard DDR SDRAM on 440 platforms * Autodetect onboard DDR SDRAM on 440 platforms
* *
* NOTE: Some of the hardcoded values are hardware dependant, * NOTE: Some of the hardcoded values are hardware dependant,
* so this should be extended for other future boards * so this should be extended for other future boards
* using this routine! * using this routine!
*/ */
long int initdram(int board_type) long int initdram(int board_type)
{ {
@ -360,11 +360,11 @@ long int initdram(int board_type)
/* /*
* Setup some default * Setup some default
*/ */
mtsdram(mem_uabba, 0x00000000); /* ubba=0 (default) */ mtsdram(mem_uabba, 0x00000000); /* ubba=0 (default) */
mtsdram(mem_slio, 0x00000000); /* rdre=0 wrre=0 rarw=0 */ mtsdram(mem_slio, 0x00000000); /* rdre=0 wrre=0 rarw=0 */
mtsdram(mem_devopt, 0x00000000); /* dll=0 ds=0 (normal) */ mtsdram(mem_devopt, 0x00000000); /* dll=0 ds=0 (normal) */
mtsdram(mem_wddctr, 0x00000000); /* wrcp=0 dcd=0 */ mtsdram(mem_wddctr, 0x00000000); /* wrcp=0 dcd=0 */
mtsdram(mem_clktr, 0x40000000); /* clkp=1 (90 deg wr) dcdt=0 */ mtsdram(mem_clktr, 0x40000000); /* clkp=1 (90 deg wr) dcdt=0 */
/* /*
* Following for CAS Latency = 2.5 @ 133 MHz PLB * Following for CAS Latency = 2.5 @ 133 MHz PLB
@ -379,7 +379,7 @@ long int initdram(int board_type)
/* /*
* Enable the controller, then wait for DCEN to complete * Enable the controller, then wait for DCEN to complete
*/ */
mtsdram(mem_cfg0, 0x86000000); /* DCEN=1, PMUD=1, 64-bit */ mtsdram(mem_cfg0, 0x86000000); /* DCEN=1, PMUD=1, 64-bit */
udelay(10000); udelay(10000);
if (get_ram_size(0, mb0cf[i].size) == mb0cf[i].size) { if (get_ram_size(0, mb0cf[i].size) == mb0cf[i].size) {

View File

@ -152,5 +152,3 @@ Observe that Single-Bit Error is 'on' which means that Single-Bit Error Counter
reached Single-Bit Error Threshold. Multiple Memory Errors bit is also 'on', that reached Single-Bit Error Threshold. Multiple Memory Errors bit is also 'on', that
is Counter reached Threshold more than one time (it wraps back after reaching is Counter reached Threshold more than one time (it wraps back after reaching
Threshold). Threshold).

View File

@ -75,13 +75,13 @@
/* /*
* 32-bit data path mode. * 32-bit data path mode.
* *
* Please note that using this mode for devices with the real density of 64-bit * Please note that using this mode for devices with the real density of 64-bit
* effectively reduces the amount of available memory due to the effect of * effectively reduces the amount of available memory due to the effect of
* wrapping around while translating address to row/columns, for example in the * wrapping around while translating address to row/columns, for example in the
* 256MB module the upper 128MB get aliased with contents of the lower * 256MB module the upper 128MB get aliased with contents of the lower
* 128MB); normally this define should be used for devices with real 32-bit * 128MB); normally this define should be used for devices with real 32-bit
* data path. * data path.
*/ */
#undef CONFIG_DDR_32BIT #undef CONFIG_DDR_32BIT

View File

@ -1,56 +1,58 @@
//========================================================================== /*
// *==========================================================================
// crc.h *
// * crc.h
// Interface for the CRC algorithms. *
// * Interface for the CRC algorithms.
//========================================================================== *
//####ECOSGPLCOPYRIGHTBEGIN#### *==========================================================================
// ------------------------------------------- *####ECOSGPLCOPYRIGHTBEGIN####
// This file is part of eCos, the Embedded Configurable Operating System. * -------------------------------------------
// Copyright (C) 2002 Andrew Lunn * This file is part of eCos, the Embedded Configurable Operating System.
// * Copyright (C) 2002 Andrew Lunn
// eCos 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 * eCos is free software; you can redistribute it and/or modify it under
// Software Foundation; either version 2 or (at your option) any later version. * the terms of the GNU General Public License as published by the Free
// * Software Foundation; either version 2 or (at your option) any later version.
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY *
// WARRANTY; without even the implied warranty of MERCHANTABILITY or * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * WARRANTY; without even the implied warranty of MERCHANTABILITY or
// for more details. * 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 eCos; if not, write to the Free Software Foundation, Inc., * You should have received a copy of the GNU General Public License along
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * with eCos; if not, write to the Free Software Foundation, Inc.,
// * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
// As a special exception, if other files instantiate templates or use macros *
// or inline functions from this file, or you compile this file and link it * As a special exception, if other files instantiate templates or use macros
// with other works to produce a work based on this file, this file does not * or inline functions from this file, or you compile this file and link it
// by itself cause the resulting work to be covered by the GNU General Public * with other works to produce a work based on this file, this file does not
// License. However the source code for this file must still be made available * by itself cause the resulting work to be covered by the GNU General Public
// in accordance with section (3) of the GNU General Public License. * License. However the source code for this file must still be made available
// * in accordance with section (3) of the GNU General Public License.
// This exception does not invalidate any other reasons why a work based on *
// this file might be covered by the GNU General Public License. * This exception does not invalidate any other reasons why a work based on
// * this file might be covered by the GNU General Public License.
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. *
// at http://sources.redhat.com/ecos/ecos-license/ * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// ------------------------------------------- * at http: *sources.redhat.com/ecos/ecos-license/
//####ECOSGPLCOPYRIGHTEND#### * -------------------------------------------
//========================================================================== *####ECOSGPLCOPYRIGHTEND####
//#####DESCRIPTIONBEGIN#### *==========================================================================
// *#####DESCRIPTIONBEGIN####
// Author(s): Andrew Lunn *
// Contributors: Andrew Lunn * Author(s): Andrew Lunn
// Date: 2002-08-06 * Contributors: Andrew Lunn
// Purpose: * Date: 2002-08-06
// Description: * Purpose:
// * Description:
// This code is part of eCos (tm). *
// * This code is part of eCos (tm).
//####DESCRIPTIONEND#### *
// *####DESCRIPTIONEND####
//========================================================================== *
*==========================================================================
*/
#ifndef _SERVICES_CRC_CRC_H_ #ifndef _SERVICES_CRC_CRC_H_
#define _SERVICES_CRC_CRC_H_ #define _SERVICES_CRC_CRC_H_
@ -65,37 +67,34 @@
# endif # endif
#endif #endif
// Compute a CRC, using the POSIX 1003 definition /* Compute a CRC, using the POSIX 1003 definition */
extern uint32_t extern uint32_t
cyg_posix_crc32(unsigned char *s, int len); cyg_posix_crc32(unsigned char *s, int len);
// Gary S. Brown's 32 bit CRC /* Gary S. Brown's 32 bit CRC */
extern uint32_t extern uint32_t
cyg_crc32(unsigned char *s, int len); cyg_crc32(unsigned char *s, int len);
// Gary S. Brown's 32 bit CRC, but accumulate the result from a /* Gary S. Brown's 32 bit CRC, but accumulate the result from a */
// previous CRC calculation /* previous CRC calculation */
extern uint32_t extern uint32_t
cyg_crc32_accumulate(uint32_t crc, unsigned char *s, int len); cyg_crc32_accumulate(uint32_t crc, unsigned char *s, int len);
// Ethernet FCS Algorithm /* Ethernet FCS Algorithm */
extern uint32_t extern uint32_t
cyg_ether_crc32(unsigned char *s, int len); cyg_ether_crc32(unsigned char *s, int len);
// Ethernet FCS algorithm, but accumulate the result from a previous /* Ethernet FCS algorithm, but accumulate the result from a previous */
// CRC calculation. /* CRC calculation. */
extern uint32_t extern uint32_t
cyg_ether_crc32_accumulate(uint32_t crc, unsigned char *s, int len); cyg_ether_crc32_accumulate(uint32_t crc, unsigned char *s, int len);
// 16 bit CRC with polynomial x^16+x^12+x^5+1 /* 16 bit CRC with polynomial x^16+x^12+x^5+1 */
extern uint16_t cyg_crc16(unsigned char *s, int len); extern uint16_t cyg_crc16(unsigned char *s, int len);
#endif // _SERVICES_CRC_CRC_H_ #endif /* _SERVICES_CRC_CRC_H_ */

View File

@ -1,65 +1,67 @@
//========================================================================== /*
// *==========================================================================
// xyzModem.h *
// * xyzModem.h
// RedBoot stream handler for xyzModem protocol *
// * RedBoot stream handler for xyzModem protocol
//========================================================================== *
//####ECOSGPLCOPYRIGHTBEGIN#### *==========================================================================
// ------------------------------------------- *####ECOSGPLCOPYRIGHTBEGIN####
// This file is part of eCos, the Embedded Configurable Operating System. * -------------------------------------------
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. * This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 2002 Gary Thomas * Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
// * Copyright (C) 2002 Gary Thomas
// eCos 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 * eCos is free software; you can redistribute it and/or modify it under
// Software Foundation; either version 2 or (at your option) any later version. * the terms of the GNU General Public License as published by the Free
// * Software Foundation; either version 2 or (at your option) any later version.
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY *
// WARRANTY; without even the implied warranty of MERCHANTABILITY or * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * WARRANTY; without even the implied warranty of MERCHANTABILITY or
// for more details. * 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 eCos; if not, write to the Free Software Foundation, Inc., * You should have received a copy of the GNU General Public License along
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * with eCos; if not, write to the Free Software Foundation, Inc.,
// * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
// As a special exception, if other files instantiate templates or use macros *
// or inline functions from this file, or you compile this file and link it * As a special exception, if other files instantiate templates or use macros
// with other works to produce a work based on this file, this file does not * or inline functions from this file, or you compile this file and link it
// by itself cause the resulting work to be covered by the GNU General Public * with other works to produce a work based on this file, this file does not
// License. However the source code for this file must still be made available * by itself cause the resulting work to be covered by the GNU General Public
// in accordance with section (3) of the GNU General Public License. * License. However the source code for this file must still be made available
// * in accordance with section (3) of the GNU General Public License.
// This exception does not invalidate any other reasons why a work based on *
// this file might be covered by the GNU General Public License. * This exception does not invalidate any other reasons why a work based on
// * this file might be covered by the GNU General Public License.
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. *
// at http://sources.redhat.com/ecos/ecos-license/ * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// ------------------------------------------- * at http: *sources.redhat.com/ecos/ecos-license/
//####ECOSGPLCOPYRIGHTEND#### * -------------------------------------------
//========================================================================== *####ECOSGPLCOPYRIGHTEND####
//#####DESCRIPTIONBEGIN#### *==========================================================================
// *#####DESCRIPTIONBEGIN####
// Author(s): gthomas *
// Contributors: gthomas * Author(s): gthomas
// Date: 2000-07-14 * Contributors: gthomas
// Purpose: * Date: 2000-07-14
// Description: * Purpose:
// * Description:
// This code is part of RedBoot (tm). *
// * This code is part of RedBoot (tm).
//####DESCRIPTIONEND#### *
// *####DESCRIPTIONEND####
//========================================================================== *
*==========================================================================
*/
#ifndef _XYZMODEM_H_ #ifndef _XYZMODEM_H_
#define _XYZMODEM_H_ #define _XYZMODEM_H_
#define xyzModem_xmodem 1 #define xyzModem_xmodem 1
#define xyzModem_ymodem 2 #define xyzModem_ymodem 2
// Don't define this until the protocol support is in place /* Don't define this until the protocol support is in place */
//#define xyzModem_zmodem 3 /*#define xyzModem_zmodem 3 */
#define xyzModem_access -1 #define xyzModem_access -1
#define xyzModem_noZmodem -2 #define xyzModem_noZmodem -2
@ -103,10 +105,10 @@ typedef unsigned int bool;
#endif #endif
int xyzModem_stream_open(connection_info_t *info, int *err); int xyzModem_stream_open(connection_info_t *info, int *err);
void xyzModem_stream_close(int *err); void xyzModem_stream_close(int *err);
void xyzModem_stream_terminate(bool method, int (*getc)(void)); void xyzModem_stream_terminate(bool method, int (*getc)(void));
int xyzModem_stream_read(char *buf, int size, int *err); int xyzModem_stream_read(char *buf, int size, int *err);
char *xyzModem_error(int err); char *xyzModem_error(int err);
#endif // _XYZMODEM_H_ #endif /* _XYZMODEM_H_ */

View File

@ -116,7 +116,7 @@ void rtc_get (struct rtc_time *tm){
/* /*
* Since the reads are being performed one byte at a time, * Since the reads are being performed one byte at a time,
* there is a chance that a carry will occur during the read. * there is a chance that a carry will occur during the read.
* To detect this, 2 reads are performed and compared. * To detect this, 2 reads are performed and compared.
*/ */
limit = 10; limit = 10;