.. | .. |
---|
142 | 142 | { |
---|
143 | 143 | __maybe_unused int conf_noffset; |
---|
144 | 144 | disk_partition_t part; |
---|
145 | | - char *part_name; |
---|
| 145 | + char *part_name = PART_BOOT; |
---|
146 | 146 | void *fit, *fdt; |
---|
147 | 147 | int blk_num; |
---|
148 | 148 | |
---|
| 149 | +#ifndef CONFIG_ANDROID_AB |
---|
149 | 150 | if (rockchip_get_boot_mode() == BOOT_MODE_RECOVERY) |
---|
150 | 151 | part_name = PART_RECOVERY; |
---|
151 | | - else |
---|
152 | | - part_name = PART_BOOT; |
---|
| 152 | +#endif |
---|
153 | 153 | |
---|
154 | 154 | if (part_get_info_by_name(dev_desc, part_name, &part) < 0) { |
---|
155 | 155 | FIT_I("No %s partition\n", part_name); |
---|
.. | .. |
---|
201 | 201 | printf("%s: ", fdt_get_name(fit, conf_noffset, NULL)); |
---|
202 | 202 | if (fit_config_verify(fit, conf_noffset)) { |
---|
203 | 203 | puts("\n"); |
---|
| 204 | + /* don't remove this failure handle */ |
---|
204 | 205 | run_command("download", 0); |
---|
205 | 206 | hang(); |
---|
206 | 207 | } |
---|
.. | .. |
---|
246 | 247 | { |
---|
247 | 248 | int ret; |
---|
248 | 249 | |
---|
| 250 | + /* free for fit_image_fixup_alloc(FIT_FDT_PROP) to re-alloc */ |
---|
249 | 251 | if ((gd->flags & GD_FLG_KDTB_READY) && !gd->fdt_blob_kern) |
---|
250 | 252 | sysmem_free((phys_addr_t)gd->fdt_blob); |
---|
251 | 253 | |
---|
.. | .. |
---|
404 | 406 | } |
---|
405 | 407 | |
---|
406 | 408 | #ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGE |
---|
407 | | -static int fit_image_load_resource(const void *fit, struct blk_desc *dev_desc, |
---|
408 | | - disk_partition_t *part, ulong *addr) |
---|
| 409 | +ulong fit_image_init_resource(struct blk_desc *dev_desc) |
---|
409 | 410 | { |
---|
410 | | - int offset, size; |
---|
411 | | - int ret; |
---|
412 | | - void *data; |
---|
413 | | - |
---|
414 | | - ret = fdt_image_get_offset_size(fit, FIT_MULTI_PROP, &offset, &size); |
---|
415 | | - if (ret) |
---|
416 | | - return ret; |
---|
417 | | - |
---|
418 | | - data = malloc(ALIGN(size, dev_desc->blksz)); |
---|
419 | | - if (!data) |
---|
420 | | - return -ENOMEM; |
---|
421 | | - |
---|
422 | | - *addr = (ulong)data; |
---|
423 | | - |
---|
424 | | - return fit_image_load_one(fit, dev_desc, part, FIT_MULTI_PROP, |
---|
425 | | - data, IS_ENABLED(CONFIG_FIT_SIGNATURE)); |
---|
426 | | -} |
---|
427 | | - |
---|
428 | | -int fit_image_init_resource(void) |
---|
429 | | -{ |
---|
430 | | - struct blk_desc *dev_desc; |
---|
431 | 411 | disk_partition_t part; |
---|
| 412 | + void *fit, *buf; |
---|
| 413 | + int offset, size; |
---|
432 | 414 | int ret = 0; |
---|
433 | | - void *fit; |
---|
434 | 415 | |
---|
435 | | - dev_desc = rockchip_get_bootdev(); |
---|
436 | | - if (!dev_desc) { |
---|
437 | | - FIT_I("No dev_desc!\n"); |
---|
| 416 | + if (!dev_desc) |
---|
438 | 417 | return -ENODEV; |
---|
439 | | - } |
---|
440 | 418 | |
---|
441 | 419 | fit = fit_get_blob(dev_desc, &part, true); |
---|
442 | 420 | if (!fit) |
---|
| 421 | + return -EAGAIN; |
---|
| 422 | + |
---|
| 423 | + ret = fdt_image_get_offset_size(fit, FIT_MULTI_PROP, &offset, &size); |
---|
| 424 | + if (ret) |
---|
443 | 425 | return -EINVAL; |
---|
444 | 426 | |
---|
445 | | -#ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGE |
---|
446 | | - ulong rsce; |
---|
| 427 | + buf = memalign(ARCH_DMA_MINALIGN, ALIGN(size, dev_desc->blksz)); |
---|
| 428 | + if (!buf) |
---|
| 429 | + return -ENOMEM; |
---|
447 | 430 | |
---|
448 | | - ret = fit_image_load_resource(fit, dev_desc, &part, &rsce); |
---|
| 431 | + printf("RESC: '%s', blk@0x%08lx\n", part.name, |
---|
| 432 | + part.start + ((FIT_ALIGN(fdt_totalsize(fit)) + offset) / dev_desc->blksz)); |
---|
| 433 | + ret = fit_image_load_one(fit, dev_desc, &part, FIT_MULTI_PROP, buf, 1); |
---|
| 434 | + if (ret) |
---|
| 435 | + return ret; |
---|
| 436 | + |
---|
| 437 | + ret = resource_setup_ram_list(dev_desc, buf); |
---|
449 | 438 | if (ret) { |
---|
450 | | - FIT_I("Failed to load resource\n"); |
---|
| 439 | + FIT_I("Failed to setup resource ram list, ret=%d\n", ret); |
---|
451 | 440 | free(fit); |
---|
452 | 441 | return ret; |
---|
453 | 442 | } |
---|
454 | 443 | |
---|
455 | | - ret = resource_create_ram_list(dev_desc, (void *)rsce); |
---|
456 | | - if (ret) { |
---|
457 | | - FIT_I("Failed to create resource list\n"); |
---|
458 | | - free(fit); |
---|
459 | | - return ret; |
---|
460 | | - } |
---|
461 | | -#endif |
---|
462 | 444 | fit_msg(fit); |
---|
463 | 445 | free(fit); |
---|
464 | 446 | |
---|
465 | | - return ret; |
---|
| 447 | + return 0; |
---|
466 | 448 | } |
---|
467 | 449 | #else |
---|
468 | 450 | int fit_image_read_dtb(void *fdt_addr) |
---|