OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/devs/flash/arm/ebsa285
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/v2_0/cdl/flash_ebsa285.cdl
0,0 → 1,92
# ====================================================================
#
# flash_ebsa285.cdl
#
# FLASH memory - Hardware support on StrongARM EBSA-285
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## 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
## 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
## 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.,
## 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
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## 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.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): gthomas
# Original data: gthomas
# Contributors:
# Date: 2000-07-26
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_DEVS_FLASH_EBSA285 {
display "StrongARM EBSA-285 FLASH memory support"
 
parent CYGPKG_IO_FLASH
active_if CYGPKG_IO_FLASH
requires CYGPKG_HAL_ARM_EBSA285
 
implements CYGHWR_IO_FLASH_DEVICE
implements CYGHWR_IO_FLASH_DEVICE_NOT_IN_RAM
 
include_dir .
include_files ; # none _exported_ whatsoever
description "FLASH memory device support for StrongARM EBSA-285"
compile ebsa285_flash.c
 
make -priority 1 {
flash_erase_block.o: $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c
$(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c
echo " .globl flash_erase_block_end" >>flash_erase_block.s
echo "flash_erase_block_end:" >>flash_erase_block.s
$(CC) -c -o flash_erase_block.o flash_erase_block.s
$(AR) rcs $(PREFIX)/lib/libtarget.a flash_erase_block.o
}
make -priority 1 {
flash_program_buf.o: $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c
$(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c
echo " .globl flash_program_buf_end" >>flash_program_buf.s
echo "flash_program_buf_end:" >>flash_program_buf.s
$(CC) -c -o flash_program_buf.o flash_program_buf.s
$(AR) rcs $(PREFIX)/lib/libtarget.a flash_program_buf.o
}
make -priority 1 {
flash_query.o: $(REPOSITORY)/$(PACKAGE)/src/flash_query.c
$(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_query.c
echo " .globl flash_query_end" >>flash_query.s
echo "flash_query_end:" >>flash_query.s
$(CC) -c -o flash_query.o flash_query.s
$(AR) rcs $(PREFIX)/lib/libtarget.a flash_query.o
}
}
 
/v2_0/src/flash_program_buf.c
0,0 → 1,103
//==========================================================================
//
// flash_program_buf.c
//
// Flash programming
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// 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
// 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
// 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.,
// 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
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// 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.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas
// Date: 2000-07-14
// Purpose:
// Description:
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include "flash.h"
 
#include <pkgconf/hal.h>
#include <cyg/hal/hal_arch.h>
#include <cyg/hal/hal_cache.h>
 
//
// CAUTION! This code must be copied to RAM before execution. Therefore,
// it must not contain any code which might be position dependent!
//
 
int
flash_program_buf(volatile unsigned long *addr, unsigned long *data, int len)
{
unsigned long stat;
int timeout = 5000000;
int cache_on;
volatile unsigned long *orig_addr = addr;
 
HAL_DCACHE_IS_ENABLED(cache_on);
if (cache_on) {
HAL_DCACHE_SYNC();
HAL_DCACHE_DISABLE();
}
 
// Clear any error conditions
*addr = FLASH_Clear_Status;
 
while (len > 0) {
*addr = FLASH_Program;
*addr = *data++;
timeout = 5000000;
while(((stat = *addr) & FLASH_Status_Ready) != FLASH_Status_Ready) {
if (--timeout == 0) {
goto bad;
}
}
addr++;
len -= sizeof(unsigned long);
}
 
// Restore ROM to "normal" mode
bad:
*orig_addr = FLASH_Reset;
 
if (cache_on) {
HAL_DCACHE_ENABLE();
}
 
return stat;
}
/v2_0/src/flash.h
0,0 → 1,74
//==========================================================================
//
// flash.h
//
// Flash programming - device constants, etc.
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// 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
// 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
// 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.,
// 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
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// 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.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas
// Date: 2000-07-26
// Purpose:
// Description:
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#ifndef _FLASH_HWR_H_
#define _FLASH_HWR_H_
 
// EBSA-285 FLASH layout
// 4x 28F008SA, one device per byte-lane
// each device is 16x64k blocks
 
#define FLASH_Read_ID 0x90909090
#define FLASH_Read_Status 0x70707070
#define FLASH_Clear_Status 0x50505050
#define FLASH_Status_Ready 0x80808080
#define FLASH_Program 0x10101010
#define FLASH_Block_Erase 0x20202020
#define FLASH_Confirm 0xD0D0D0D0
#define FLASH_Reset 0xFFFFFFFF
 
#define FLASH_BLOCK_SIZE 0x40000
 
#define FLASH_Intel_code 0x89
#define FLASH_28F008SA 0xA2
#define FLASH_28F008SC 0xA6
#endif // _FLASH_HWR_H_
/v2_0/src/flash_query.c
0,0 → 1,95
//==========================================================================
//
// flash_query.c
//
// Flash programming - query device
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// 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
// 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
// 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.,
// 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
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// 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.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas
// Date: 2000-07-26
// Purpose:
// Description:
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include "flash.h"
 
#include <pkgconf/hal.h>
#include <cyg/hal/hal_arch.h>
#include <cyg/hal/hal_cache.h>
 
//
// CAUTION! This code must be copied to RAM before execution. Therefore,
// it must not contain any code which might be position dependent!
//
 
#define CNT 20*1000*10 // Approx 200ms
 
int
flash_query(unsigned char *data)
{
volatile unsigned long *lROM;
volatile unsigned char *cROM;
int i, cnt;
int cache_on;
 
HAL_DCACHE_IS_ENABLED(cache_on);
if (cache_on) {
HAL_DCACHE_SYNC();
HAL_DCACHE_DISABLE();
}
 
lROM = 0x41000000;
cROM = 0x41000000;
 
lROM[0] = FLASH_Read_ID;
for (cnt = CNT; cnt > 0; cnt--) ;
for (i = 0; i < 8; i++) {
*data++ = cROM[i];
}
lROM[0] = FLASH_Reset;
 
if (cache_on) {
HAL_DCACHE_ENABLE();
}
 
return 0;
}
/v2_0/src/ebsa285_flash.c
0,0 → 1,127
//==========================================================================
//
// ebsa285_flash.c
//
// Flash programming
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// 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
// 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
// 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.,
// 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
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// 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.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas
// Date: 2000-07-26
// Purpose:
// Description:
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/hal.h>
#include <cyg/hal/hal_arch.h>
#include <cyg/hal/hal_cache.h>
 
#define _FLASH_PRIVATE_
#include <cyg/io/flash.h>
 
#include "flash.h"
 
int
flash_hwr_init(void)
{
unsigned char data[96];
extern char flash_query, flash_query_end;
typedef int code_fun(unsigned char *);
code_fun *_flash_query;
int code_len, stat, num_regions, region_size, icache_isenabled;
 
// Copy 'program' code to RAM for execution
code_len = (unsigned long)&flash_query_end - (unsigned long)&flash_query;
_flash_query = (code_fun *)flash_info.work_space;
memcpy(_flash_query, &flash_query, code_len);
HAL_ICACHE_IS_ENABLED(icache_isenabled);
HAL_DCACHE_SYNC(); // Should guarantee this code will run
HAL_ICACHE_DISABLE(); // is also required to avoid old contents
 
stat = (*_flash_query)(data);
 
if (icache_isenabled)
HAL_ICACHE_ENABLE();
 
if ((data[0] == FLASH_Intel_code) && ((data[4] == FLASH_28F008SA) ||
(data[4] == FLASH_28F008SC))) {
num_regions = 16;
region_size = 0x40000;
flash_info.block_size = region_size;
flash_info.blocks = num_regions;
flash_info.start = (void *)0x41000000;
flash_info.end = (void *)(0x41000000+(num_regions*region_size));
return FLASH_ERR_OK;
} else {
(*flash_info.pf)("Can't identify FLASH, sorry\n");
diag_dump_buf(data, sizeof(data));
return FLASH_ERR_HWR;
}
}
 
// Map a hardware status to a package error
int
flash_hwr_map_error(int err)
{
if (err & 0x7E) {
if (err & 0x10) {
return FLASH_ERR_PROGRAM;
} else
if (err & 0x20) {
return FLASH_ERR_ERASE;
} else
return FLASH_ERR_HWR; // FIXME
} else {
return FLASH_ERR_OK;
}
}
 
// See if a range of FLASH addresses overlaps currently running code
bool
flash_code_overlaps(void *start, void *end)
{
extern char _stext[], _etext[];
 
return ((((unsigned long)&_stext >= (unsigned long)start) &&
((unsigned long)&_stext < (unsigned long)end)) ||
(((unsigned long)&_etext >= (unsigned long)start) &&
((unsigned long)&_etext < (unsigned long)end)));
}
/v2_0/src/flash_erase_block.c
0,0 → 1,95
//==========================================================================
//
// flash_erase_block.c
//
// Flash programming
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// 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
// 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
// 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.,
// 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
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// 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.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas
// Date: 2000-07-14
// Purpose:
// Description:
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include "flash.h"
 
#include <pkgconf/hal.h>
#include <cyg/hal/hal_arch.h>
#include <cyg/hal/hal_cache.h>
 
//
// CAUTION! This code must be copied to RAM before execution. Therefore,
// it must not contain any code which might be position dependent!
//
 
int
flash_erase_block(volatile unsigned long *block)
{
unsigned long stat;
int timeout = 5000000;
int cache_on;
 
HAL_DCACHE_IS_ENABLED(cache_on);
if (cache_on) {
HAL_DCACHE_SYNC();
HAL_DCACHE_DISABLE();
}
 
// Clear any error conditions
*block = FLASH_Clear_Status;
 
// Set to erase
*block = FLASH_Block_Erase;
*block = FLASH_Confirm;
while(((stat = *block) & FLASH_Status_Ready) != FLASH_Status_Ready) {
if (--timeout == 0) break;
}
 
// Restore ROM to "normal" mode
*block = FLASH_Reset;
 
if (cache_on) {
HAL_DCACHE_ENABLE();
}
 
return stat;
}
/v2_0/ChangeLog
0,0 → 1,80
2001-09-28 Jonathan Larmour <jlarmour@redhat.com>
 
* src/ebsa285_flash.c (flash_hwr_init): Only re-enable icache if it
was enabled before.
 
2001-07-11 Andrew Lunn <andrew.lunn@ascom.ch>
 
* src/flash.h:
* src/ebsa285_flash.c (flash_hwr_init): Support new device 28F008SC.
 
2001-06-11 Gary Thomas <gthomas@redhat.com>
 
* src/ebsa285_flash.c: Remove dependency on printf() via user functions.
 
2001-05-23 Jesper Skov <jskov@redhat.com>
 
* cdl/flash_ebsa285.cdl: Needs IO controller to copy functions to
RAM.
 
2000-12-05 Jonathan Larmour <jlarmour@redhat.com>
 
* src/ebsa285_flash.c (flash_code_overlaps): Define stext/etext
as array types so no assumptions can be made by the compiler about
location.
 
2000-08-29 Gary Thomas <gthomas@redhat.com>
 
* src/ebsa285_flash.c: Improve error decoding.
 
2000-08-22 Hugo Tyson <hmt@cygnus.co.uk>
 
* src/ebsa285_flash.c (flash_hwr_init): Add
HAL_ICACHE_DISABLE/ENABLE pairs around calls to RAM copy of query
function - this is necessary to get reliable operation on EBSA285
and similar. Otherwise, what is in the instruction cache might be
run instead.
 
2000-08-15 Gary Thomas <gthomas@redhat.com>
 
* src/ebsa285_flash.c (flash_code_overlaps):
stext,etext now are _stext,_etext
 
2000-08-14 Gary Thomas <gthomas@redhat.com>
 
* src/ebsa285_flash.c: New file(s).
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// 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
// 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
// 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.,
// 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
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// 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.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.