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