Changeset 13140

Show
Ignore:
Timestamp:
10/23/09 16:37:38 (1 month ago)
Author:
BrainSlayer
Message:

experimental version for protected flash memories

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • ar5315_microredboot/microredboot/CHANGELOG

    r13107 r13140  
     123.10.09  
     2    * experimental addition of sector unprotection code 
     3 
     422.10.09 
     5    * remove sector protection check 
     6 
    1719.10.09 
    28    * added pb44 compile target and added some changes to the stub. ar7100 remains untested, dont flash it 
  • ar5315_microredboot/microredboot/boot/src/ramconfig.h

    r13107 r13140  
    11#define RAM_SIZE 0x2000000 
    2 #define AR5312 1 
    3 #define RESETBUTTON 0x06 
     2#define AR7100 1 
    43#define RESETBUTTON 0x18 
  • ar5315_microredboot/microredboot/ecos/packages/devs/flash/amd/am29xxxxx/current/include/flash_am29xxxxx.inl

    r12324 r13140  
    9191 
    9292#define FLASH_unlocked                  FLASHWORD( 0x00 ) 
     93 
     94#define FLASH_CMD_PROTECT               FLASHWORD(0x60) 
     95#define FLASH_CMD_PROTECT_SET           FLASHWORD(0x01) 
     96#define FLASH_CMD_PROTECT_CLEAR         FLASHWORD(0xD0) 
     97#define FLASH_CMD_CLEAR_STATUS          FLASHWORD(0x50) 
     98 
     99 
     100 
    93101 
    94102#ifndef CYGNUM_FLASH_16AS8 
     
    350358 
    351359    while (size > 0) { 
    352 #ifndef CYGHWR_FLASH_AM29XXXXX_NO_WRITE_PROTECT 
     360 
     361 
     362 
     363/* un-protect */ 
     364        b_v = FLASH_P2V(b_p); 
     365        *f_s1 = FLASH_CMD_CLEAR_STATUS; 
     366        *f_s2 = FLASH_CMD_PROTECT; 
     367        *b_v = FLASH_CMD_PROTECT_CLEAR; 
     368 
     369/*#ifndef CYGHWR_FLASH_AM29XXXXX_NO_WRITE_PROTECT 
    353370        // First check whether the block is protected 
    354371        *f_s1 = FLASH_Setup_Code1; 
     
    361378            return FLASH_ERR_PROTECT; 
    362379#endif 
    363  
    364         b_v = FLASH_P2V(b_p); 
     380*/ 
     381 
    365382     
    366383        // Send erase block command - six step sequence 
  • ar5315_microredboot/microredboot/ecos/packages/redboot/current/src/flash.c

    r12452 r13140  
    10391039extern void arm_fis_delete(char *); 
    10401040 
     1041 
     1042#ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING 
     1043 
     1044static void 
     1045fis_lock(int argc, char *argv[]) 
     1046{ 
     1047    char *name; 
     1048    int stat; 
     1049    unsigned long length; 
     1050    CYG_ADDRESS flash_addr; 
     1051    bool flash_addr_set = false; 
     1052    bool length_set = false; 
     1053    void *err_addr; 
     1054    struct option_info opts[2]; 
     1055 
     1056    init_opts(&opts[0], 'f', true, OPTION_ARG_TYPE_NUM,  
     1057              (void *)&flash_addr, (bool *)&flash_addr_set, "FLASH memory base address"); 
     1058    init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM,  
     1059              (void *)&length, (bool *)&length_set, "length"); 
     1060    if (!scan_opts(argc, argv, 2, opts, 2, &name, OPTION_ARG_TYPE_STR, "image name")) 
     1061    { 
     1062        fis_usage("invalid arguments"); 
     1063        return; 
     1064    } 
     1065 
     1066    /* Get parameters from image if specified */ 
     1067    if (name) { 
     1068        struct fis_image_desc *img; 
     1069        if ((img = fis_lookup(name, NULL)) == (struct fis_image_desc *)0) { 
     1070            diag_printf("No image '%s' found\n", name); 
     1071            return; 
     1072        } 
     1073 
     1074        flash_addr = img->flash_base; 
     1075        length = img->size; 
     1076    } else if (!flash_addr_set || !length_set) { 
     1077        fis_usage("missing argument"); 
     1078        return; 
     1079    } 
     1080    if (flash_addr_set && 
     1081        ((stat = flash_verify_addr((void *)flash_addr)) || 
     1082         (stat = flash_verify_addr((void *)(flash_addr+length-1))))) { 
     1083        _show_invalid_flash_address(flash_addr, stat); 
     1084        return; 
     1085    } 
     1086    if ((stat = flash_lock((void *)flash_addr, length, (void **)&err_addr)) != 0) { 
     1087        diag_printf("Error locking at %p: %s\n", err_addr, flash_errmsg(stat)); 
     1088    } 
     1089} 
     1090 
     1091static void 
     1092fis_unlock(int argc, char *argv[]) 
     1093{ 
     1094    char *name; 
     1095    int stat; 
     1096    unsigned long length; 
     1097    CYG_ADDRESS flash_addr; 
     1098    bool flash_addr_set = false; 
     1099    bool length_set = false; 
     1100    void *err_addr; 
     1101    struct option_info opts[2]; 
     1102 
     1103    init_opts(&opts[0], 'f', true, OPTION_ARG_TYPE_NUM,  
     1104              (void *)&flash_addr, (bool *)&flash_addr_set, "FLASH memory base address"); 
     1105    init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM,  
     1106              (void *)&length, (bool *)&length_set, "length"); 
     1107    if (!scan_opts(argc, argv, 2, opts, 2, &name, OPTION_ARG_TYPE_STR, "image name")) 
     1108    { 
     1109        fis_usage("invalid arguments"); 
     1110        return; 
     1111    } 
     1112 
     1113    if (name) { 
     1114        struct fis_image_desc *img; 
     1115        if ((img = fis_lookup(name, NULL)) == (struct fis_image_desc *)0) { 
     1116            diag_printf("No image '%s' found\n", name); 
     1117            return; 
     1118        } 
     1119 
     1120        flash_addr = img->flash_base; 
     1121        length = img->size; 
     1122    } else  if (!flash_addr_set || !length_set) { 
     1123        fis_usage("missing argument"); 
     1124        return; 
     1125    } 
     1126    if (flash_addr_set && 
     1127        ((stat = flash_verify_addr((void *)flash_addr)) || 
     1128         (stat = flash_verify_addr((void *)(flash_addr+length-1))))) { 
     1129        _show_invalid_flash_address(flash_addr, stat); 
     1130        return; 
     1131    } 
     1132 
     1133    if ((stat = flash_unlock((void *)flash_addr, length, (void **)&err_addr)) != 0) { 
     1134        diag_printf("Error unlocking at %p: %s\n", err_addr, flash_errmsg(stat)); 
     1135    } 
     1136} 
     1137#endif 
     1138 
    10411139static void fis_load(int argc, char *argv[]) 
    10421140{