| .. | .. |
|---|
| 12 | 12 | #include <asm/arch/resource_img.h> |
|---|
| 13 | 13 | #include <asm/arch/uimage.h> |
|---|
| 14 | 14 | |
|---|
| 15 | | -static int uimage_load_one(struct blk_desc *dev_desc, disk_partition_t *part, |
|---|
| 16 | | - int pos_off, int size, void *dst) |
|---|
| 15 | +int uimage_load_one(struct blk_desc *dev_desc, disk_partition_t *part, |
|---|
| 16 | + int pos_off, int size, void *dst) |
|---|
| 17 | 17 | { |
|---|
| 18 | 18 | u32 blknum, blkoff; |
|---|
| 19 | 19 | u32 unused; |
|---|
| .. | .. |
|---|
| 183 | 183 | return 0; |
|---|
| 184 | 184 | } |
|---|
| 185 | 185 | |
|---|
| 186 | | -int uimage_init_resource(void) |
|---|
| 187 | | -{ |
|---|
| 188 | | - struct blk_desc *dev_desc; |
|---|
| 189 | | - disk_partition_t part; |
|---|
| 190 | | - image_header_t *hdr; |
|---|
| 191 | | - char *part_name; |
|---|
| 192 | | - ulong data, offset; |
|---|
| 193 | | - ulong size; |
|---|
| 194 | 186 | #ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGE |
|---|
| 195 | | - ulong dst; |
|---|
| 196 | | - int idx = 3; |
|---|
| 197 | | -#endif |
|---|
| 198 | | - int ret; |
|---|
| 187 | +int uimage_init_resource(struct blk_desc *dev_desc) |
|---|
| 188 | +{ |
|---|
| 189 | + disk_partition_t part; |
|---|
| 190 | + ulong data, offset, size; |
|---|
| 191 | + image_header_t *hdr; |
|---|
| 192 | + char *part_name = PART_BOOT; |
|---|
| 193 | + int ret, idx = 3; |
|---|
| 194 | + void *buf; |
|---|
| 199 | 195 | |
|---|
| 200 | | - dev_desc = rockchip_get_bootdev(); |
|---|
| 201 | | - if (!dev_desc) { |
|---|
| 202 | | - printf("No dev_desc!\n"); |
|---|
| 203 | | - return ENODEV; |
|---|
| 204 | | - } |
|---|
| 196 | + if (!dev_desc) |
|---|
| 197 | + return -ENODEV; |
|---|
| 205 | 198 | |
|---|
| 199 | +#ifndef CONFIG_ANDROID_AB |
|---|
| 206 | 200 | if (rockchip_get_boot_mode() == BOOT_MODE_RECOVERY) |
|---|
| 207 | 201 | part_name = PART_RECOVERY; |
|---|
| 208 | | - else |
|---|
| 209 | | - part_name = PART_BOOT; |
|---|
| 210 | | - |
|---|
| 202 | +#endif |
|---|
| 211 | 203 | if (part_get_info_by_name(dev_desc, part_name, &part) < 0) { |
|---|
| 212 | 204 | UIMG_I("No %s partition\n", part_name); |
|---|
| 213 | 205 | return -ENODEV; |
|---|
| .. | .. |
|---|
| 215 | 207 | |
|---|
| 216 | 208 | hdr = uimage_get_hdr(dev_desc, &part); |
|---|
| 217 | 209 | if (!hdr) |
|---|
| 218 | | - return -ENODEV; |
|---|
| 210 | + return -EAGAIN; |
|---|
| 219 | 211 | |
|---|
| 220 | 212 | image_multi_getimg(hdr, idx, &data, &size); |
|---|
| 221 | 213 | offset = data - (ulong)hdr; |
|---|
| 222 | 214 | free(hdr); |
|---|
| 223 | 215 | |
|---|
| 224 | | -#ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGE |
|---|
| 225 | | - ulong fdt_addr; |
|---|
| 226 | | - |
|---|
| 227 | | - /* reserve enough space before fdt */ |
|---|
| 228 | | - fdt_addr = env_get_ulong("fdt_addr_r", 16, 0); |
|---|
| 229 | | - dst = (ulong)fdt_addr - |
|---|
| 230 | | - ALIGN(size, dev_desc->blksz) - CONFIG_SYS_FDT_PAD; |
|---|
| 231 | | - ret = uimage_load_one(dev_desc, &part, offset, size, (void *)dst); |
|---|
| 232 | | - if (ret) { |
|---|
| 233 | | - UIMG_I("Failed to load resource file, ret=%d\n", ret); |
|---|
| 234 | | - return ret; |
|---|
| 235 | | - } |
|---|
| 236 | | - |
|---|
| 237 | | - if (!sysmem_alloc_base(MEM_RESOURCE, (phys_addr_t)dst, |
|---|
| 238 | | - ALIGN(size, RK_BLK_SIZE))) |
|---|
| 216 | + buf = memalign(ARCH_DMA_MINALIGN, ALIGN(size, dev_desc->blksz)); |
|---|
| 217 | + if (!buf) |
|---|
| 239 | 218 | return -ENOMEM; |
|---|
| 240 | 219 | |
|---|
| 241 | | - ret = resource_create_ram_list(dev_desc, (void *)dst); |
|---|
| 220 | + printf("RESC: '%s', blk@0x%08lx\n", part.name, |
|---|
| 221 | + part.start + (offset / dev_desc->blksz)); |
|---|
| 222 | + ret = uimage_load_one(dev_desc, &part, offset, size, buf); |
|---|
| 223 | + if (ret) |
|---|
| 224 | + return ret; |
|---|
| 225 | + |
|---|
| 226 | + ret = resource_setup_ram_list(dev_desc, buf); |
|---|
| 242 | 227 | if (ret) { |
|---|
| 243 | | - UIMG_I("Failed to create resource list, ret=%d\n", ret); |
|---|
| 228 | + UIMG_I("Failed to setup resource ram list, ret=%d\n", ret); |
|---|
| 244 | 229 | return ret; |
|---|
| 245 | 230 | } |
|---|
| 246 | | -#endif |
|---|
| 247 | 231 | |
|---|
| 248 | 232 | return 0; |
|---|
| 249 | 233 | } |
|---|
| 234 | +#endif |
|---|