uboot/board/netstar/eeprom_start.S
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2005  2N Telekomunikace
   3 *
   4 * This program is free software; you can redistribute it and/or
   5 * modify it under the terms of the GNU General Public License
   6 * version 2 as published by the Free Software Foundation.
   7 *
   8 */
   9
  10.globl _start
  11_start: b       eeprom
  12
  13#include "crcek.h"
  14
  15/**
  16 * do_crc32 - calculate CRC32 of given buffer
  17 * r0 - crc
  18 * r1 - pointer to buffer
  19 * r2 - buffer len
  20 */
  21        .macro  do_crc32
  22        ldr     r5, FFFFFFFF
  23        eor     r0, r0, r5
  24        adr     r3, CRC32_TABLE
  251:
  26        ldrb    r4, [r1], #1
  27        eor     r4, r4, r0
  28        and     r4, r4, #0xff
  29        ldr     r4, [r3, r4, lsl#2]
  30        eor     r0, r4, r0, lsr#8
  31        subs    r2, r2, #0x1
  32        bne     1b
  33        eor     r0, r0, r5
  34        .endm
  35
  36        .macro crcuj, offset, size
  37        ldr     r1, \offset
  38        ldr     r2, [r1]
  39        cmp     r2, #0          @ no data, no problem
  40        beq     2f
  41        mov     r7, #1
  42        tst     r2, #3          @ unaligned size
  43        bne     2f
  44        mov     r7, #2
  45        ldr     r0, \size
  46        cmp     r2, r0          @ bogus size
  47        bhi     2f
  48        mov     r7, #3
  49        add     r1, r1, #4
  50        mov     r0, #0
  51        do_crc32
  52        ldr     r1, [r1]
  532:
  54        cmp     r0, r1
  55        .endm
  56
  57        .macro wait, reg
  58        mov     \reg, #0x1000
  593:
  60        subs    \reg, \reg, #0x1
  61        bne     3b
  62
  63        .endm
  64.text
  65.globl crcek
  66crcek:
  67        mov     r6, #0
  68@       crcuj   _LOADER1_OFFSET, _LOADER_SIZE
  69@       bne     crc1_bad
  70@       orr     r6, r6, #1
  71crc1_bad:
  72        crcuj   _LOADER2_OFFSET, _LOADER_SIZE
  73        bne     crc2_bad
  74        orr     r6, r6, #2
  75crc2_bad:
  76@       mov     r0, r6
  77        mov     pc, lr
  78        ldr     r3, _LOADER1_OFFSET
  79        ldr     r4, _LOADER2_OFFSET
  80        tst     r6, #3
  81        beq     one_is_bad      @ one of them (or both) has bad crc
  82        ldr     r1, [r3, #4]
  83        ldr     r2, [r4, #4]
  84        cmp     r1, r2          @ boot 2nd loader if versions differ
  85        beq     boot_1st
  86        b       boot_2nd
  87one_is_bad:
  88        tst     r6, #1
  89        bne     boot_1st
  90        tst     r6, #2
  91        bne     boot_2nd
  92@ We are doomed, so let user know.
  93        ldr     r0, GPIO_BASE   @ configure GPIO pins
  94        ldr     r1, GPIO_DIRECTION
  95        strh    r1, [r0, #0x08]
  96blink_loop:
  97        mov     r1, #0x08
  98        strh    r1, [r0, #0x04]
  99        wait    r3
 100        mov     r1, #0x10
 101        strh    r1, [r0, #0x04]
 102        wait    r3
 103        b blink_loop
 104boot_1st:
 105        add     pc, r3, #8
 106boot_2nd:
 107        add     pc, r4, #8
 108
 109_LOADER_SIZE:
 110        .word LOADER_SIZE - 8   @ minus size and crc32
 111_LOADER1_OFFSET:
 112        .word LOADER1_OFFSET
 113_LOADER2_OFFSET:
 114        .word LOADER2_OFFSET
 115
 116FFFFFFFF:
 117        .word 0xffffffff
 118CRC32_TABLE:
 119        .word 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419
 120        .word 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4
 121        .word 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07
 122        .word 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de
 123        .word 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856
 124        .word 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9
 125        .word 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4
 126        .word 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b
 127        .word 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3
 128        .word 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a
 129        .word 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599
 130        .word 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924
 131        .word 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190
 132        .word 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f
 133        .word 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e
 134        .word 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01
 135        .word 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed
 136        .word 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950
 137        .word 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3
 138        .word 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2
 139        .word 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a
 140        .word 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5
 141        .word 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010
 142        .word 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f
 143        .word 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17
 144        .word 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6
 145        .word 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615
 146        .word 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8
 147        .word 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344
 148        .word 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb
 149        .word 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a
 150        .word 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5
 151        .word 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1
 152        .word 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c
 153        .word 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef
 154        .word 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236
 155        .word 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe
 156        .word 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31
 157        .word 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c
 158        .word 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713
 159        .word 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b
 160        .word 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242
 161        .word 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1
 162        .word 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c
 163        .word 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278
 164        .word 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7
 165        .word 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66
 166        .word 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9
 167        .word 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605
 168        .word 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8
 169        .word 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b
 170        .word 0x2d02ef8d
 171
 172GPIO_BASE:
 173        .word 0xfffce000
 174GPIO_DIRECTION:
 175        .word 0x0000ffe7
 176
 177.end
 178