[U-Boot-Users] strange byte order on MPC8270 64bit flash bus using flash_write_cfibuffer

DING Fengping dingfp at gmail.com
Tue Jun 24 09:14:58 CEST 2008


just ignore the last incomplete mail, sorry for the inconvenience.


Hi,

    I'm porting u-boot-1.3.2 on my MPC8270 board and using FLASH_CFI_DRIVER.
The board has 4 x 28F256J3C using the same CS4, make up 64-bit wide
128MBytes flash memory at 0x10000000.

    I add flash write/read command in cmd_flash.c as bellow, and write the
data as the following command:
U-boot-> flwrite 0x10000000 0x01 0x100           /*It's supposed to write
0x0102030405060708..... to the flash. */

U-boot-> flread 0x10000000 0x100     /* strange byte order when read back*/
0x10000000:  01020304000f000f
0x10000008:  090a0b0c05060708
0x10000010:  111213140d0e0f10
0x10000018:  191a1b1c15161718
0x10000020:  212223241d1e1f20

I wonder how the function flash_write64 in cfi_flash.c works to load 8bytes
to 64bit wide 60x-bus?
Is there anyone have similar issue before?

int do_flwrite ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
        ulong data_addr;
        uchar data_data;
        ulong data_count;
        ulong data_increase;
        ulong i,j,k;
        uchat data_buffer[128];
        if (argc < 3) {
                printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }

        data_addr = simple_strtoul(argv[1], NULL, 16);
        if ((data_addr < CFG_FLASH1_BASE ) || (data_addr > (CFG_FLASH1_BASE
+ (CFG_FLASH1_SIZE<<20) - 1) )) {
                printf ("Address is out of Bulk FLASH range, %x to %x
supported\n",
                        CFG_FLASH1_BASE, CFG_FLASH1_BASE +
(CFG_FLASH1_SIZE<<20) -1);
                return 1;
        }
        data_data = simple_strtoul(argv[2], NULL, 16);
        if (argc == 3) {
                data_count = 1;
        }else{
                data_count = simple_strtoul(argv[3], NULL, 16);
        }

        if (argc == 4) {
                data_increase = 1;
        }else{
                data_increase = 0;
        }

        flash_info_t* info= &(flash_info[1]);
        for(i=0;i<data_count;i+=128){
                k=data_count-i;
                for(j=0;j<128 && j<k;j++){
                        data_buffer[j] = data_data;
                        data_data   += data_increase;
                }
                switch( write_buff(info,data_buffer,data_addr+i,j) ){
                        case 0:
                                printf("Write successfully.\n");
                                break;
                        case 1:
                                printf("Write timeout.\n");
                                break;
                        case 2:
                                printf("Flash not erased.\n");
                                break;
                }
        }
        return 0;
}
int do_flread ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
        ulong data_addr;
        ulong data_count;
        int i;
        flash_info_t* info= &(flash_info[1]);
        if (argc < 2 ) {
                printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
        data_addr = simple_strtoul(argv[1], NULL, 16);
        if ((data_addr < CFG_FLASH1_BASE ) || (data_addr > (CFG_FLASH1_BASE
+ (CFG_FLASH1_SIZE<<20) - 1) )) {
                printf ("Address is out of Bulk FLASH range, %x to %x
supported\n",
                        CFG_FLASH1_BASE, CFG_FLASH1_BASE +
(CFG_FLASH1_SIZE<<20) -1);
                return 1;
        }
        data_addr &= ~(info->portwidth - 1);
        if (argc == 2)
                data_count = 1;
        else
                data_count = simple_strtoul(argv[2], NULL, 16);

        char str[17];
        str[16]='\0';
        for(i=0;i<data_count;i+=8){
                flash_readll(str,data_addr+i);
                printf ("0x%08X:  %s\n",data_addr+i,str);
        }
        return 0;
}

/*add flash_readll in cfi_flash.c*/
void flash_readll(char *str,void *addr)
{
        print_longlong(str,flash_read64(addr));
}


-- 
Best Regards,
Eagle DING
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.denx.de/pipermail/u-boot/attachments/20080624/9f932f12/attachment.htm 


More information about the U-Boot mailing list