Changeset 12294


Ignore:
Timestamp:
06/16/09 03:47:57 (4 years ago)
Author:
BrainSlayer
Message:

merge linux flash code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ar5315_microredboot/microredboot/boot/src/misc_lzma.c

    r12288 r12294  
    215215        puts("no bootable image found, try default location 0xbfc10000\r\n"); 
    216216        bootoffset = 0x80041000; 
    217         output_data = 0x80041000; 
     217        output_data = (uch *)0x80041000; 
    218218        return 0xbfc10000; 
    219219} 
     
    230230                error("ran out of input data"); 
    231231        if (resettrigger) { 
    232                 inbuf = linuxaddr; 
     232                inbuf = (uch *)linuxaddr; 
    233233                insize = 0x400000; 
    234234                inptr = 1; 
     
    332332 *  
    333333 */ 
    334 static void delay_us(int us) 
     334static void udelay(int us) 
    335335{ 
    336336        unsigned int val1, val2; 
     
    406406#define ARB_RETRY                   0x00000100  /* retry policy, debug only */ 
    407407 
    408 #define AR531XPLUS_SPI              0xB1300000  /* SPI FLASH MMR */ 
     408#define AR531XPLUS_SPI              0x11300000  /* SPI FLASH MMR */ 
    409409 
    410410#define FLASH_1MB  1 
     
    539539} 
    540540 
     541 
     542#define busy_wait(condition, wait) \ 
     543        do { \ 
     544                while (condition) { \ 
     545                        if (!wait) \ 
     546                            udelay(1); \ 
     547                        else \ 
     548                            udelay(wait*1000); \ 
     549                } \ 
     550        } while (0) 
     551 
    541552static __u32 spiflash_sendcmd(int op, u32 addr) 
    542553{ 
     
    546557 
    547558        ptr_opcode = &stm_opcodes[op]; 
    548         do { 
    549                 reg = spiflash_regread32(SPI_FLASH_CTL); 
    550         } while (reg & SPI_CTL_BUSY); 
     559        busy_wait((reg = spiflash_regread32(SPI_FLASH_CTL)) & SPI_CTL_BUSY, 0); 
    551560 
    552561        spiflash_regwrite32(SPI_FLASH_OPCODE, 
     
    558567        spiflash_regwrite32(SPI_FLASH_CTL, reg); 
    559568 
    560         do { 
    561                 reg = spiflash_regread32(SPI_FLASH_CTL); 
    562         } while (reg & SPI_CTL_BUSY); 
     569        busy_wait(spiflash_regread32(SPI_FLASH_CTL) & SPI_CTL_BUSY, 0); 
    563570 
    564571        if (!ptr_opcode->rx_cnt) 
     
    621628        unsigned int res; 
    622629        unsigned int offset = flashsize - (blocksize * 3); 
    623         puts("erasing nvram....\r\n"); 
    624         spiflash_sendcmd(STM_OP_WR_ENABLE, 0); 
    625         do { 
    626                 res = spiflash_sendcmd(STM_OP_RD_STATUS, 0); 
    627                 if ((res & 0x3) == 0x2) { 
    628                         break; 
    629                 } 
    630                 delay_us(20); 
    631                 spiflash_sendcmd(STM_OP_WR_ENABLE, 0); 
    632         } while (1); 
    633         spiflash_sendcmd(STM_OP_SECTOR_ERASE, offset); 
    634         while (true) { 
    635                 res = spiflash_sendcmd(STM_OP_RD_STATUS, 0); 
    636                 if ((res & STM_STATUS_WIP) == 0) { 
    637                         break; 
    638                 } 
    639         } 
     630        struct opcodes *ptr_opcode; 
     631        __u32 temp, reg; 
     632        puts("erasing nvram at "); 
     633        print_hex(offset); 
     634        puts("\r\n"); 
     635 
     636 
     637        ptr_opcode = &stm_opcodes[SPI_SECTOR_ERASE]; 
     638 
     639        temp = ((__u32)offset << 8) | (__u32)(ptr_opcode->code); 
     640        spiflash_sendcmd(SPI_WRITE_ENABLE,0); 
     641        busy_wait((reg = spiflash_regread32(SPI_FLASH_CTL)) & SPI_CTL_BUSY, 0); 
     642 
     643        spiflash_regwrite32(SPI_FLASH_OPCODE, temp); 
     644 
     645        reg = (reg & ~SPI_CTL_TX_RX_CNT_MASK) | ptr_opcode->tx_cnt | SPI_CTL_START; 
     646        spiflash_regwrite32(SPI_FLASH_CTL, reg); 
     647 
     648        busy_wait(spiflash_sendcmd(SPI_RD_STATUS, 0) & SPI_STATUS_WIP, 20); 
     649 
     650 
    640651        puts("done\r\n"); 
    641652        return 0; 
     
    651662        arch_decomp_setup(); 
    652663 
    653         puts("MicroRedBoot v1.1, (c) 2009 DD-WRT.COM ("); 
     664        puts("MicroRedBoot v1.2, (c) 2009 DD-WRT.COM ("); 
    654665        puts(__DATE__); 
    655666        puts(")\r\n"); 
     
    660671                        if (!resetTouched()) // check if reset button is unpressed again 
    661672                                break; 
    662                         delay_us(1000000); 
     673                        udelay(1000000); 
    663674                } 
    664675                if (!count) { 
     
    699710                regtmp = sysRegRead(AR2316_RESET); 
    700711                sysRegWrite(AR2316_RESET, regtmp | mask); 
    701                 delay_us(10000); 
     712                udelay(10000); 
    702713 
    703714                regtmp = sysRegRead(AR2316_RESET); 
    704715                sysRegWrite(AR2316_RESET, regtmp & ~mask); 
    705                 delay_us(10000); 
     716                udelay(10000); 
    706717 
    707718                regtmp = sysRegRead(AR2316_IF_CTL); 
Note: See TracChangeset for help on using the changeset viewer.