source: trunk/package/uboot-lantiq/patches/062-cfi-addr-fixup.patch @ 20561

Last change on this file since 20561 was 20561, checked in by nbd, 7 years ago

add uboot-lantiq (based on a patch contributed by Lantiq)

File size: 7.9 KB
  • drivers/mtd/cfi_flash.c

    a b flash_info_t flash_info[CFI_MAX_FLASH_BA 
    8585#define CONFIG_SYS_FLASH_CFI_WIDTH      FLASH_CFI_8BIT 
    8686#endif 
    8787 
     88/* 
     89 * Check if address fixup macros are defined, define defaults otherwise 
     90 */ 
     91#ifndef FLASH_FIXUP_ADDR_8 
     92#define FLASH_FIXUP_ADDR_8(addr)        (addr) 
     93#endif 
     94#ifndef FLASH_FIXUP_ADDR_16 
     95#define FLASH_FIXUP_ADDR_16(addr)       (addr) 
     96#endif 
     97#ifndef FLASH_FIXUP_ADDR_32 
     98#define FLASH_FIXUP_ADDR_32(addr)       (addr) 
     99#endif 
     100#ifndef FLASH_FIXUP_ADDR_64 
     101#define FLASH_FIXUP_ADDR_64(addr)       (addr) 
     102#endif 
     103 
    88104static void __flash_write8(u8 value, void *addr) 
    89105{ 
    90106        __raw_writeb(value, addr); 
    static inline uchar flash_read_uchar (fl 
    264280 
    265281        cp = flash_map (info, 0, offset); 
    266282#if defined(__LITTLE_ENDIAN) || defined(CONFIG_SYS_WRITE_SWAPPED_DATA) 
    267         retval = flash_read8(cp); 
     283        retval = flash_read8(FLASH_FIXUP_ADDR_8(cp)); 
    268284#else 
    269         retval = flash_read8(cp + info->portwidth - 1); 
     285        retval = flash_read8(FLASH_FIXUP_ADDR_8(cp) + info->portwidth - 1); 
    270286#endif 
    271287        flash_unmap (info, 0, offset, cp); 
    272288        return retval; 
    static inline ushort flash_read_word (fl 
    280296        ushort *addr, retval; 
    281297 
    282298        addr = flash_map (info, 0, offset); 
    283         retval = flash_read16 (addr); 
     299        retval = flash_read16 (FLASH_FIXUP_ADDR_16(addr)); 
    284300        flash_unmap (info, 0, offset, addr); 
    285301        return retval; 
    286302} 
    static ulong flash_read_long (flash_info 
    305321        debug ("long addr is at %p info->portwidth = %d\n", addr, 
    306322               info->portwidth); 
    307323        for (x = 0; x < 4 * info->portwidth; x++) { 
    308                 debug ("addr[%x] = 0x%x\n", x, flash_read8(addr + x)); 
     324                debug ("addr[%x] = 0x%x\n", x, 
     325                        flash_read8(FLASH_FIXUP_ADDR_32(addr) + x)); 
    309326        } 
    310327#endif 
    311328#if defined(__LITTLE_ENDIAN) || defined(CONFIG_SYS_WRITE_SWAPPED_DATA) 
    312         retval = ((flash_read8(addr) << 16) | 
    313                   (flash_read8(addr + info->portwidth) << 24) | 
    314                   (flash_read8(addr + 2 * info->portwidth)) | 
    315                   (flash_read8(addr + 3 * info->portwidth) << 8)); 
     329        retval = ((flash_read8(FLASH_FIXUP_ADDR_8 
     330                              (addr) << 16) | 
     331                  (flash_read8(FLASH_FIXUP_ADDR_8 
     332                              (addr + info->portwidth)) << 24) | 
     333                  (flash_read8(FLASH_FIXUP_ADDR_8 
     334                              (addr + 2 * info->portwidth))) | 
     335                  (flash_read8(FLASH_FIXUP_ADDR_8 
     336                              (addr + 3 * info->portwidth)) << 8)); 
    316337#else 
    317         retval = ((flash_read8(addr + 2 * info->portwidth - 1) << 24) | 
    318                   (flash_read8(addr + info->portwidth - 1) << 16) | 
    319                   (flash_read8(addr + 4 * info->portwidth - 1) << 8) | 
    320                   (flash_read8(addr + 3 * info->portwidth - 1))); 
     338        retval = ((flash_read8(FLASH_FIXUP_ADDR_8 
     339                              (addr + 2 * info->portwidth - 1)) << 24) | 
     340                  (flash_read8(FLASH_FIXUP_ADDR_8 
     341                              (addr + info->portwidth - 1)) << 16) | 
     342                  (flash_read8(FLASH_FIXUP_ADDR_8 
     343                              (addr + 4 * info->portwidth - 1)) << 8) | 
     344                  (flash_read8(FLASH_FIXUP_ADDR_8 
     345                              (addr + 3 * info->portwidth - 1)))); 
    321346#endif 
    322347        flash_unmap(info, sect, offset, addr); 
    323348 
    void flash_write_cmd (flash_info_t * inf 
    338363        flash_make_cmd (info, cmd, &cword); 
    339364        switch (info->portwidth) { 
    340365        case FLASH_CFI_8BIT: 
    341                 debug ("fwc addr %p cmd %x %x 8bit x %d bit\n", addr, cmd, 
    342                        cword.c, info->chipwidth << CFI_FLASH_SHIFT_WIDTH); 
    343                 flash_write8(cword.c, addr); 
     366                debug ("fwc addr %p cmd %x %x 8bit x %d bit\n", 
     367                       FLASH_FIXUP_ADDR_8(addr), cmd, cword.c, 
     368                       info->chipwidth << CFI_FLASH_SHIFT_WIDTH); 
     369                flash_write8(cword.c, FLASH_FIXUP_ADDR_8(addr)); 
    344370                break; 
    345371        case FLASH_CFI_16BIT: 
    346                 debug ("fwc addr %p cmd %x %4.4x 16bit x %d bit\n", addr, 
    347                        cmd, cword.w, 
     372                debug ("fwc addr %p cmd %x %4.4x 16bit x %d bit\n", 
     373                       FLASH_FIXUP_ADDR_16(addr), cmd, cword.w, 
    348374                       info->chipwidth << CFI_FLASH_SHIFT_WIDTH); 
    349                 flash_write16(cword.w, addr); 
     375                flash_write16(cword.w, FLASH_FIXUP_ADDR_16(addr)); 
    350376                break; 
    351377        case FLASH_CFI_32BIT: 
    352                 debug ("fwc addr %p cmd %x %8.8lx 32bit x %d bit\n", addr, 
    353                        cmd, cword.l, 
     378                debug ("fwc addr %p cmd %x %8.8lx 32bit x %d bit\n", 
     379                       FLASH_FIXUP_ADDR_32(addr), cmd, cword.l, 
    354380                       info->chipwidth << CFI_FLASH_SHIFT_WIDTH); 
    355                 flash_write32(cword.l, addr); 
     381                flash_write32(cword.l, FLASH_FIXUP_ADDR_32(addr)); 
    356382                break; 
    357383        case FLASH_CFI_64BIT: 
    358384#ifdef DEBUG 
    void flash_write_cmd (flash_info_t * inf 
    362388                        print_longlong (str, cword.ll); 
    363389 
    364390                        debug ("fwrite addr %p cmd %x %s 64 bit x %d bit\n", 
    365                                addr, cmd, str, 
     391                               FLASH_FIXUP_ADDR_64(addr), cmd, str, 
    366392                               info->chipwidth << CFI_FLASH_SHIFT_WIDTH); 
    367393                } 
    368394#endif 
    369                 flash_write64(cword.ll, addr); 
     395                flash_write64(cword.ll, FLASH_FIXUP_ADDR_64(addr)); 
    370396                break; 
    371397        } 
    372398 
    static int flash_isequal (flash_info_t * 
    397423        debug ("is= cmd %x(%c) addr %p ", cmd, cmd, addr); 
    398424        switch (info->portwidth) { 
    399425        case FLASH_CFI_8BIT: 
    400                 debug ("is= %x %x\n", flash_read8(addr), cword.c); 
    401                 retval = (flash_read8(addr) == cword.c); 
     426                debug ("is= %x %x\n", 
     427                       flash_read8(FLASH_FIXUP_ADDR_8(addr)), cword.c); 
     428                retval = (flash_read8(FLASH_FIXUP_ADDR_8(addr)) == cword.c); 
    402429                break; 
    403430        case FLASH_CFI_16BIT: 
    404                 debug ("is= %4.4x %4.4x\n", flash_read16(addr), cword.w); 
    405                 retval = (flash_read16(addr) == cword.w); 
     431                debug ("is= %4.4x %4.4x\n", 
     432                       flash_read16(FLASH_FIXUP_ADDR_16(addr)), cword.w); 
     433                retval = (flash_read16(FLASH_FIXUP_ADDR_16(addr)) == cword.w); 
    406434                break; 
    407435        case FLASH_CFI_32BIT: 
    408                 debug ("is= %8.8x %8.8lx\n", flash_read32(addr), cword.l); 
    409                 retval = (flash_read32(addr) == cword.l); 
     436                debug ("is= %8.8x %8.8lx\n", 
     437                       flash_read32(FLASH_FIXUP_ADDR_32(addr)), cword.l); 
     438                retval = (flash_read32(FLASH_FIXUP_ADDR_32(addr)) == cword.l); 
    410439                break; 
    411440        case FLASH_CFI_64BIT: 
    412441#ifdef DEBUG 
    static int flash_isequal (flash_info_t * 
    414443                        char str1[20]; 
    415444                        char str2[20]; 
    416445 
    417                         print_longlong (str1, flash_read64(addr)); 
     446                        print_longlong (str1, flash_read64(FLASH_FIXUP_ADDR_64 
     447                                                          (addr))); 
    418448                        print_longlong (str2, cword.ll); 
    419449                        debug ("is= %s %s\n", str1, str2); 
    420450                } 
    421451#endif 
    422                 retval = (flash_read64(addr) == cword.ll); 
     452                retval = (flash_read64(FLASH_FIXUP_ADDR_64(addr)) == cword.ll); 
    423453                break; 
    424454        default: 
    425455                retval = 0; 
    static int flash_isset (flash_info_t * i 
    443473        flash_make_cmd (info, cmd, &cword); 
    444474        switch (info->portwidth) { 
    445475        case FLASH_CFI_8BIT: 
    446                 retval = ((flash_read8(addr) & cword.c) == cword.c); 
     476                retval = ((flash_read8(FLASH_FIXUP_ADDR_8(addr)) 
     477                            & cword.c) == cword.c); 
    447478                break; 
    448479        case FLASH_CFI_16BIT: 
    449                 retval = ((flash_read16(addr) & cword.w) == cword.w); 
     480                retval = ((flash_read16(FLASH_FIXUP_ADDR_16(addr)) 
     481                            & cword.w) == cword.w); 
    450482                break; 
    451483        case FLASH_CFI_32BIT: 
    452                 retval = ((flash_read32(addr) & cword.l) == cword.l); 
     484                retval = ((flash_read32(FLASH_FIXUP_ADDR_32(addr)) 
     485                            & cword.l) == cword.l); 
    453486                break; 
    454487        case FLASH_CFI_64BIT: 
    455                 retval = ((flash_read64(addr) & cword.ll) == cword.ll); 
     488                retval = ((flash_read64(FLASH_FIXUP_ADDR_64(addr)) 
     489                            & cword.ll) == cword.ll); 
    456490                break; 
    457491        default: 
    458492                retval = 0; 
    static int flash_toggle (flash_info_t *  
    476510        flash_make_cmd (info, cmd, &cword); 
    477511        switch (info->portwidth) { 
    478512        case FLASH_CFI_8BIT: 
    479                 retval = flash_read8(addr) != flash_read8(addr); 
     513                retval = flash_read8(FLASH_FIXUP_ADDR_8(addr)) != 
     514                         flash_read8(FLASH_FIXUP_ADDR_8(addr)); 
    480515                break; 
    481516        case FLASH_CFI_16BIT: 
    482                 retval = flash_read16(addr) != flash_read16(addr); 
     517                retval = flash_read16(FLASH_FIXUP_ADDR_16(addr)) != 
     518                         flash_read16(FLASH_FIXUP_ADDR_16(addr)); 
    483519                break; 
    484520        case FLASH_CFI_32BIT: 
    485                 retval = flash_read32(addr) != flash_read32(addr); 
     521                retval = flash_read32(FLASH_FIXUP_ADDR_32(addr)) != 
     522                         flash_read32(FLASH_FIXUP_ADDR_32(addr)); 
    486523                break; 
    487524        case FLASH_CFI_64BIT: 
    488                 retval = ( (flash_read32( addr ) != flash_read32( addr )) || 
    489                            (flash_read32(addr+4) != flash_read32(addr+4)) ); 
     525                retval = ( (flash_read32(FLASH_FIXUP_ADDR_64( addr )) != 
     526                            flash_read32(FLASH_FIXUP_ADDR_64( addr ))) || 
     527                           (flash_read32(FLASH_FIXUP_ADDR_64(addr+4)) != 
     528                            flash_read32(FLASH_FIXUP_ADDR_64(addr+4))) ); 
    490529                break; 
    491530        default: 
    492531                retval = 0; 
Note: See TracBrowser for help on using the repository browser.