| .. | .. |
|---|
| 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) |
|---|