X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=board%2Fmpl%2Fcommon%2Fcommon_util.c;h=8454420f10551ac8e08d589dbadd0a0a26592561;hb=225f0eaa745adfae05931848543d99942798756a;hp=9c98c93b5484e04acc0902f51dc3df38c93693d2;hpb=d4ca31c40e8888b36635967522ec7ea03fd7e70b;p=platform%2Fkernel%2Fu-boot.git diff --git a/board/mpl/common/common_util.c b/board/mpl/common/common_util.c index 9c98c93..8454420 100644 --- a/board/mpl/common/common_util.c +++ b/board/mpl/common/common_util.c @@ -36,14 +36,20 @@ #ifdef CONFIG_PIP405 #include "../pip405/pip405.h" -#include <405gp_pci.h> +#include #endif #ifdef CONFIG_MIP405 #include "../mip405/mip405.h" -#include <405gp_pci.h> +#include #endif -extern int gunzip(void *, int, uchar *, int *); +DECLARE_GLOBAL_DATA_PTR; + +#if defined(CONFIG_PATI) +#define FIRM_START 0xFFF00000 +#endif + +extern int gunzip(void *, int, uchar *, unsigned long *); extern int mem_test(ulong start, ulong ramsize, int quiet); #define I2C_BACKUP_ADDR 0x7C00 /* 0x200 bytes for backup */ @@ -51,24 +57,24 @@ extern int mem_test(ulong start, ulong ramsize, int quiet); extern flash_info_t flash_info[]; /* info for FLASH chips */ -static image_header_t header; - - static int mpl_prg(uchar *src, ulong size) { ulong start; flash_info_t *info; int i, rc; -#if defined(CONFIG_PIP405) || defined(CONFIG_MIP405) +#if defined(CONFIG_PATI) + int start_sect; +#endif +#if defined(CONFIG_PIP405) || defined(CONFIG_MIP405) || defined(CONFIG_PATI) char *copystr = (char *)src; ulong *magic = (ulong *)src; #endif info = &flash_info[0]; -#if defined(CONFIG_PIP405) || defined(CONFIG_MIP405) - if (ntohl(magic[0]) != IH_MAGIC) { +#if defined(CONFIG_PIP405) || defined(CONFIG_MIP405) || defined(CONFIG_PATI) + if (uimage_to_cpu (magic[0]) != IH_MAGIC) { puts("Bad Magic number\n"); return -1; } @@ -90,6 +96,7 @@ mpl_prg(uchar *src, ulong size) printf("Wrong Firmware Image: %s\n", ©str[i]); return -1; } +#if !defined(CONFIG_PATI) start = 0 - size; for (i = info->sector_count-1; i > 0; i--) { info->protect[i] = 0; /* unprotect this sector */ @@ -106,6 +113,36 @@ mpl_prg(uchar *src, ulong size) return (1); } +#else /* #if !defined(CONFIG_PATI */ + start = FIRM_START; + start_sect = -1; + for (i = 0; i < info->sector_count; i++) { + if (start < info->start[i]) { + start_sect = i - 1; + break; + } + } + + info->protect[i - 1] = 0; /* unprotect this sector */ + for (; i < info->sector_count; i++) { + if ((start + size) < info->start[i]) + break; + info->protect[i] = 0; /* unprotect this sector */ + } + + i--; + /* set-up flash location */ + /* now erase flash */ + printf ("Erasing at %lx to %lx (sector %d to %d) (%lx to %lx)\n", + start, start + size, start_sect, i, + info->start[start_sect], info->start[i]); + if ((rc = flash_erase (info, start_sect, i)) != 0) { + puts ("ERROR "); + flash_perror (rc); + return (1); + } +#endif /* defined(CONFIG_PATI) */ + #elif defined(CONFIG_VCMA9) start = 0; for (i = 0; i sector_count; i++) { @@ -126,7 +163,7 @@ mpl_prg(uchar *src, ulong size) #endif printf("flash erased, programming from 0x%lx 0x%lx Bytes\n", (ulong)src, size); - if ((rc = flash_write (src, start, size)) != 0) { + if ((rc = flash_write ((char *)src, start, size)) != 0) { puts("ERROR "); flash_perror(rc); return (1); @@ -139,55 +176,57 @@ mpl_prg(uchar *src, ulong size) static int mpl_prg_image(uchar *ld_addr) { - unsigned long len, checksum; + unsigned long len; uchar *data; - image_header_t *hdr = &header; + image_header_t *hdr = (image_header_t *)ld_addr; int rc; - /* Copy header so we can blank CRC field for re-calculation */ - memcpy (&header, (char *)ld_addr, sizeof(image_header_t)); - if (ntohl(hdr->ih_magic) != IH_MAGIC) { +#if defined(CONFIG_FIT) + if (genimg_get_format ((void *)hdr) != IMAGE_FORMAT_LEGACY) { + puts ("Non legacy image format not supported\n"); + return -1; + } +#endif + + if (!image_check_magic (hdr)) { puts("Bad Magic Number\n"); return 1; } - print_image_hdr(hdr); - if (hdr->ih_os != IH_OS_U_BOOT) { + image_print_contents (hdr); + if (!image_check_os (hdr, IH_OS_U_BOOT)) { puts("No U-Boot Image\n"); return 1; } - if (hdr->ih_type != IH_TYPE_FIRMWARE) { + if (!image_check_type (hdr, IH_TYPE_FIRMWARE)) { puts("No Firmware Image\n"); return 1; } - data = (uchar *)&header; - len = sizeof(image_header_t); - checksum = ntohl(hdr->ih_hcrc); - hdr->ih_hcrc = 0; - if (crc32 (0, (char *)data, len) != checksum) { + if (!image_check_hcrc (hdr)) { puts("Bad Header Checksum\n"); return 1; } - data = ld_addr + sizeof(image_header_t); - len = ntohl(hdr->ih_size); puts("Verifying Checksum ... "); - if (crc32 (0, (char *)data, len) != ntohl(hdr->ih_dcrc)) { + if (!image_check_dcrc (hdr)) { puts("Bad Data CRC\n"); return 1; } puts("OK\n"); - if (hdr->ih_comp != IH_COMP_NONE) { + data = (uchar *)image_get_data (hdr); + len = image_get_data_size (hdr); + + if (image_get_comp (hdr) != IH_COMP_NONE) { uchar *buf; /* reserve space for uncompressed image */ if ((buf = malloc(IMAGE_SIZE)) == NULL) { - puts("Insufficient space for decompression\n"); + puts("Insufficient space for decompression\n"); return 1; } - switch (hdr->ih_comp) { + switch (image_get_comp (hdr)) { case IH_COMP_GZIP: puts("Uncompressing (GZIP) ... "); - rc = gunzip ((void *)(buf), IMAGE_SIZE, data, (int *)&len); + rc = gunzip ((void *)(buf), IMAGE_SIZE, data, &len); if (rc != 0) { puts("GUNZIP ERROR\n"); free(buf); @@ -195,7 +234,7 @@ mpl_prg_image(uchar *ld_addr) } puts("OK\n"); break; -#if CONFIG_BZIP2 +#ifdef CONFIG_BZIP2 case IH_COMP_BZIP2: puts("Uncompressing (BZIP2) ... "); { @@ -213,7 +252,8 @@ mpl_prg_image(uchar *ld_addr) break; #endif default: - printf ("Unimplemented compression type %d\n", hdr->ih_comp); + printf ("Unimplemented compression type %d\n", + image_get_comp (hdr)); free(buf); return 1; } @@ -227,7 +267,7 @@ mpl_prg_image(uchar *ld_addr) return(rc); } - +#if !defined(CONFIG_PATI) void get_backup_values(backup_t *buf) { i2c_read(CFG_DEF_EEPROM_ADDR, I2C_BACKUP_ADDR,2,(void *)buf,sizeof(backup_t)); @@ -269,7 +309,7 @@ void clear_env_values(void) memset(&back,0xff,sizeof(backup_t)); memset(env_crc,0x00,4); i2c_write(CFG_DEF_EEPROM_ADDR,I2C_BACKUP_ADDR,2,(void *)&back,sizeof(backup_t)); - i2c_write(CFG_DEF_EEPROM_ADDR,CFG_ENV_OFFSET,2,(void *)env_crc,4); + i2c_write(CFG_DEF_EEPROM_ADDR,CONFIG_ENV_OFFSET,2,(void *)env_crc,4); } /* @@ -283,7 +323,7 @@ int check_env_old_size(ulong oldsize) /* read old CRC */ eeprom_read (CFG_DEF_EEPROM_ADDR, - CFG_ENV_OFFSET, + CONFIG_ENV_OFFSET, (uchar *)&crc, sizeof(ulong)); new = 0; @@ -293,7 +333,7 @@ int check_env_old_size(ulong oldsize) while (len > 0) { int n = (len > sizeof(buf)) ? sizeof(buf) : len; - eeprom_read (CFG_DEF_EEPROM_ADDR, CFG_ENV_OFFSET+off, buf, n); + eeprom_read (CFG_DEF_EEPROM_ADDR, CONFIG_ENV_OFFSET+off, buf, n); new = crc32 (new, buf, n); len -= n; off += n; @@ -317,12 +357,12 @@ void copy_old_env(ulong size) unsigned off; uchar *name, *value; - name=&name_buf[0]; - value=&value_buf[0]; + name = &name_buf[0]; + value = &value_buf[0]; len=size; off = sizeof(long); while (len > off) { - eeprom_read (CFG_DEF_EEPROM_ADDR, CFG_ENV_OFFSET+off, &c, 1); + eeprom_read (CFG_DEF_EEPROM_ADDR, CONFIG_ENV_OFFSET+off, &c, 1); if(c != '=') { *name++=c; off++; @@ -331,16 +371,16 @@ void copy_old_env(ulong size) *name++='\0'; off++; do { - eeprom_read (CFG_DEF_EEPROM_ADDR, CFG_ENV_OFFSET+off, &c, 1); + eeprom_read (CFG_DEF_EEPROM_ADDR, CONFIG_ENV_OFFSET+off, &c, 1); *value++=c; off++; if(c == '\0') break; } while(len > off); - name=&name_buf[0]; - value=&value_buf[0]; - if(strncmp(name,"baudrate",8)!=0) { - setenv(name,value); + name = &name_buf[0]; + value = &value_buf[0]; + if(strncmp((char *)name,"baudrate",8)!=0) { + setenv((char *)name,(char *)value); } } @@ -350,7 +390,7 @@ void copy_old_env(ulong size) void check_env(void) { - unsigned char *s; + char *s; int i=0; char buf[32]; backup_t back; @@ -417,24 +457,27 @@ void show_stdio_dev(void) } } +#endif /* #if !defined(CONFIG_PATI) */ int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { - ulong size,src,ld_addr; + ulong size,src,ld_addr; int result; +#if !defined(CONFIG_PATI) backup_t back; src = MULTI_PURPOSE_SOCKET_ADDR; size = IMAGE_SIZE; +#endif if (strcmp(argv[1], "flash") == 0) { -#if (CONFIG_COMMANDS & CFG_CMD_FDC) +#if defined(CONFIG_CMD_FDC) if (strcmp(argv[2], "floppy") == 0) { - char *local_args[3]; + char *local_args[3]; extern int do_fdcboot (cmd_tbl_t *, int, int, char *[]); puts("\nupdating bootloader image from floppy\n"); local_args[0] = argv[0]; - if(argc==4) { + if(argc==4) { local_args[1] = argv[3]; local_args[2] = NULL; ld_addr=simple_strtoul(argv[3], NULL, 16); @@ -448,9 +491,9 @@ int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) result=mpl_prg_image((uchar *)ld_addr); return result; } -#endif /* (CONFIG_COMMANDS & CFG_CMD_FDC) */ +#endif if (strcmp(argv[2], "mem") == 0) { - if(argc==4) { + if(argc==4) { ld_addr=simple_strtoul(argv[3], NULL, 16); } else { @@ -460,11 +503,13 @@ int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) result=mpl_prg_image((uchar *)ld_addr); return result; } +#if !defined(CONFIG_PATI) if (strcmp(argv[2], "mps") == 0) { puts("\nupdating bootloader image from MPS\n"); result=mpl_prg((uchar *)src,size); return result; } +#endif /* #if !defined(CONFIG_PATI) */ } if (strcmp(argv[1], "mem") == 0) { @@ -479,7 +524,7 @@ int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) src&=0xfff00000; size=0; do { - size++; + size++; printf("\n\nPass %ld\n",size); mem_test(CFG_MEMTEST_START,src,1); if(ctrlc()) @@ -490,9 +535,10 @@ int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) }while(result); return 0; } +#if !defined(CONFIG_PATI) if (strcmp(argv[1], "clearenvvalues") == 0) { - if (strcmp(argv[2], "yes") == 0) + if (strcmp(argv[2], "yes") == 0) { clear_env_values(); return 0; @@ -512,13 +558,13 @@ int do_mplcommon(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) set_backup_values(1); return 0; } +#endif printf("Usage:\n%s\n", cmdtp->usage); return 1; } -#if (CONFIG_COMMANDS & CFG_CMD_DOC) -extern void doc_probe(ulong physadr); +#if defined(CONFIG_CMD_DOC) void doc_init (void) { doc_probe(MULTI_PURPOSE_SOCKET_ADDR); @@ -540,15 +586,14 @@ extern int get_boot_mode(void); void video_get_info_str (int line_number, char *info) { /* init video info strings for graphic console */ - DECLARE_GLOBAL_DATA_PTR; - PPC405_SYS_INFO sys_info; + PPC4xx_SYS_INFO sys_info; char rev; int i,boot; unsigned long pvr; char buf[64]; char tmp[16]; char cpustr[16]; - unsigned char *s, *e, bc; + char *s, *e, bc; switch (line_number) { case 2: @@ -590,12 +635,12 @@ void video_get_info_str (int line_number, char *info) ++s; break; } - buf[i++]=*s; + buf[i++] = *s; } sprintf(&buf[i]," SN "); i+=4; for (; s < e; ++s) { - buf[i++]=*s; + buf[i++] = *s; } buf[i++]=0; }