comparison loadtools/ltflash.c @ 56:d98137625c0d

fc-loadtool flash: total_size logic implemented
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 23 Jun 2013 20:50:41 +0000
parents 278052b6afda
children 1f9302b6f342
comparison
equal deleted inserted replaced
55:278052b6afda 56:d98137625c0d
52 int lineno_for_errs; 52 int lineno_for_errs;
53 { 53 {
54 char *cp, *np, *ep; 54 char *cp, *np, *ep;
55 struct flash_device_desc *tp; 55 struct flash_device_desc *tp;
56 int bank; 56 int bank;
57 struct flash_bank_info *bi;
57 58
58 if (selected_flash_device) { 59 if (selected_flash_device) {
59 fprintf(stderr, "%s line %d: duplicate flash setting\n", 60 fprintf(stderr, "%s line %d: duplicate flash setting\n",
60 filename_for_errs, lineno_for_errs); 61 filename_for_errs, lineno_for_errs);
61 exit(1); 62 exit(1);
91 goto too_few_arg; 92 goto too_few_arg;
92 for (np = cp; *cp && !isspace(*cp); cp++) 93 for (np = cp; *cp && !isspace(*cp); cp++)
93 ; 94 ;
94 if (*cp) 95 if (*cp)
95 *cp++ = '\0'; 96 *cp++ = '\0';
96 flash_bank_info[bank].base_addr = strtoul(np, &ep, 16); 97 bi = flash_bank_info + bank;
98 bi->base_addr = strtoul(np, &ep, 16);
97 if (*ep) { 99 if (*ep) {
98 fprintf(stderr, 100 fprintf(stderr,
99 "%s line %d: syntax error (base addr expected after flash device type)\n", 101 "%s line %d: syntax error (base addr expected after flash device type)\n",
100 filename_for_errs, lineno_for_errs); 102 filename_for_errs, lineno_for_errs);
101 exit(1); 103 exit(1);
102 } 104 }
103 /* the rest comes from the flash device type */ 105 /* the rest comes from the flash device type */
104 flash_bank_info[bank].bank_desc = 106 bi->bank_desc = selected_flash_device->bank_desc + bank;
105 selected_flash_device->bank_desc + bank; 107 compute_flash_totsize_nsecs(bank);
106 /* TODO: call function to init total_size and nsectors */ 108 if (count_ones(bi->total_size) != 1) {
109 fprintf(stderr,
110 "fc-loadtool internal bug: flash bank %d size for %s is not a power of 2\n",
111 bank, selected_flash_device->name);
112 exit(1);
113 }
114 if (bi->base_addr & (bi->total_size - 1)) {
115 fprintf(stderr,
116 "%s line %d: flash bank %d base addr is not aligned to the bank size (0x%lx)\n",
117 filename_for_errs, lineno_for_errs, bank,
118 (u_long) bi->total_size);
119 exit(1);
120 }
107 } 121 }
108 while (isspace(*cp)) 122 while (isspace(*cp))
109 cp++; 123 cp++;
110 if (*cp && *cp != '#') { 124 if (*cp && *cp != '#') {
111 fprintf(stderr, 125 fprintf(stderr,