]> git.karo-electronics.de Git - karo-tx-redboot.git/blobdiff - packages/devs/flash/arm/at91/v2_0/src/flash_query.c
Initial revision
[karo-tx-redboot.git] / packages / devs / flash / arm / at91 / v2_0 / src / flash_query.c
diff --git a/packages/devs/flash/arm/at91/v2_0/src/flash_query.c b/packages/devs/flash/arm/at91/v2_0/src/flash_query.c
new file mode 100644 (file)
index 0000000..da53191
--- /dev/null
@@ -0,0 +1,109 @@
+//==========================================================================
+//
+//      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:         2001-07-17
+// Purpose:      
+// Description:  
+//              
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include "flash.h"
+
+#include <pkgconf/hal.h>
+#include <cyg/hal/hal_arch.h>
+#include <cyg/hal/hal_cache.h>
+#include CYGHWR_MEMORY_LAYOUT_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 2000*1000*10  // At least 20ms
+
+int
+flash_query(unsigned short *data)
+{
+    volatile unsigned short *ROM;
+    int cnt, cache_on;
+
+    HAL_DCACHE_IS_ENABLED(cache_on);
+    if (cache_on) {
+        HAL_DCACHE_SYNC();
+        HAL_DCACHE_DISABLE();
+    }
+
+    ROM = (volatile unsigned short *)0x01010000;
+
+    // Send lead-in sequence
+    ROM[FLASH_Key_Addr0] = FLASH_Key0;
+    ROM[FLASH_Key_Addr1] = FLASH_Key1;
+
+    // Send 'identify' command
+    ROM[FLASH_Key_Addr0] = FLASH_Read_ID;
+
+    // Need a delay of 20ms!
+    for (cnt = 0;  cnt < 50000;  cnt++) ;
+
+    data[0] = ROM[0];  // Manufacturer code
+    data[1] = ROM[1];  // Device identifier
+
+    // Send lead-in sequence
+    ROM[FLASH_Key_Addr0] = FLASH_Key0;
+    ROM[FLASH_Key_Addr1] = FLASH_Key1;
+
+    // Send 'reset' command
+    ROM[FLASH_Key_Addr0] = FLASH_Reset;
+
+    // Need a delay of 20ms!
+    for (cnt = 0;  cnt < 50000;  cnt++) ;
+
+    if (cache_on) {
+        HAL_DCACHE_ENABLE();
+    }
+
+    return 0;
+}