This is an automated email from Gerrit.

Дмитрий Шпак (dis...@yandex.ru) just uploaded a new patch set to Gerrit, which 
you can find at http://openocd.zylin.com/2660

-- gerrit

commit c8dfd85161db8583a09366bb6329622e2a6117ce
Author: DmitryShpak <dis...@yandex.ru>
Date:   Wed Mar 25 16:10:37 2015 +0300

    contrib/loaders/flash/niiet.S : added source code for NIIET flashing 
algorithn
    
    Change-Id: Id00654b1a4371b707843688a76e2a3d6b340d9ec
    Signed-off-by: DmitryShpak <dis...@yandex.ru>

diff --git a/contrib/loaders/flash/niiet.S b/contrib/loaders/flash/niiet.S
new file mode 100644
index 0000000..0406bf9
--- /dev/null
+++ b/contrib/loaders/flash/niiet.S
@@ -0,0 +1,112 @@
+/***************************************************************************
+ *   Copyright (C) 2011 by Andreas Fritiofson                              *
+ *   andreas.fritiof...@gmail.com                                          *
+ *                                                                         *
+ *   Copyright (C) 2013 by Paul Fertser                                    *
+ *   fercer...@gmail.com                                                   *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ ***************************************************************************/
+
+/* Registers addresses */
+#define NIIET_FLASH_BASE 0xA001C000
+#define NIIET_FLASH_FMA 0x00           /* Address reg */
+#define NIIET_FLASH_FMD1 0x04          /* Data reg 1'st word */
+#define NIIET_FLASH_FMC 0x08           /* Command reg */
+#define NIIET_FLASH_FCIS 0x0C          /* Operation Status reg */
+#define NIIET_FLASH_FCIM 0x10          /* Interrupt Mask reg (not used) */
+#define NIIET_FLASH_FCIC 0x14          /* Operation Status Clear reg */
+#define NIIET_FLASH_FMD2 0x50          /* Data reg 2'nd word */
+#define NIIET_FLASH_FMD3 0x54          /* Data reg 3'd word */
+#define NIIET_FLASH_FMD4 0x58          /* Data reg 4'th word*/
+
+/* Magic key*/
+#define NIIET_KEY 0xA4420000
+
+/* Bit masks for regs*/
+#define NIIET_FLASH_WRITE (1 << 0)                                             
        /* Main block write */
+#define NIIET_FLASH_PERASE (1 << 1)                                            
        /* Main block page erase */
+#define NIIET_FLASH_FERASE (1 << 2)                                            
        /* Main block full erase */
+#define NIIET_FLASH_IFBWRITE (1 << 4)                                          
/* Info block write */
+#define NIIET_FLASH_IFBPERASE (1 << 5)                                         
/* Info block erase */
+
+       /* Params:
+        * r0 - flash base (in), status (out)
+        * r1 - count (32bit)
+        * r2 - workarea start
+        * r3 - workarea end
+        * r4 - target address
+        * Clobbered:
+        * r5 - rp
+        * r6 - wp, tmp
+        * r7 - current FLASH_CMD
+        */
+
+
+flasher:
+       ldr r7, [r0, #NIIET_FLASH_FMD1]
+wait_fifo:
+       ldr     r6, [r2, #0]                                                    
/* read wp */
+       cmp     r6, #0                                                          
        /* abort if wp == 0 */
+       beq     exit
+       ldr     r5, [r2, #4]                                                    
/* read rp */
+       cmp     r5, r6                                                          
        /* wait until rp != wp */
+       beq     wait_fifo
+
+        /* "*target_address++ = *rp++"     x4 words*/
+       ldr     r6, [r5]
+       str     r6, [r0, #NIIET_FLASH_FMD1]
+       ldr     r6, [r5, #4]
+       str     r6, [r0, #NIIET_FLASH_FMD2]
+       ldr     r6, [r5, #8]
+       str     r6, [r0, #NIIET_FLASH_FMD3]
+       ldr     r6, [r5, #12]
+       str     r6, [r0, #NIIET_FLASH_FMD4]
+       str     r4, [r0, #NIIET_FLASH_FMA]
+
+       ldr r6, =(NIIET_KEY | NIIET_FLASH_WRITE)
+
+       str r6, [r0, #NIIET_FLASH_FMC]
+       bl waitFCIS                     /* wait for OperationComplete flag */
+
+       adds r5, #16
+       adds r4, #16
+
+       cmp     r5, r3          /* wrap rp at end of buffer */
+       bcc     no_wrap
+       mov     r5, r2
+       adds    r5, #8
+
+
+no_wrap:
+       str     r5, [r2, #4]    /* store rp */
+       subs    r1, r1, #1              /* decrement word count */
+       cmp     r1, #0
+       ble     exit                    /* loop if not done */
+       b       wait_fifo
+
+waitFCIS:
+       /* Loop here until OperationComplete flag is not set */
+       /* If OperationError flag is set instead - quit */
+       ldr r6, [r0, #NIIET_FLASH_FCIS]
+       tst r6, #2
+       bne exit
+       tst r6, #1
+       beq waitFCIS
+       ldr r6, =1
+       str r6, [r0, #NIIET_FLASH_FCIC]
+       bx lr
+
+exit:
+       mov             r0, r6                  /* return status in r0 */
+       bkpt    #0                              /* breakpoint */
+
+.size  flasher, .-flasher

-- 

------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to