xref: /OK3568_Linux_fs/u-boot/arch/arm/mach-rockchip/spl_resource_img.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #include <common.h>
7*4882a593Smuzhiyun #include <linux/list.h>
8*4882a593Smuzhiyun #include <asm/arch/spl_resource_img.h>
9*4882a593Smuzhiyun 
spl_resource_image_check_header(const struct resource_img_hdr * hdr)10*4882a593Smuzhiyun int spl_resource_image_check_header(const struct resource_img_hdr *hdr)
11*4882a593Smuzhiyun {
12*4882a593Smuzhiyun 	int ret;
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun 	ret = memcmp(RESOURCE_MAGIC, hdr->magic, RESOURCE_MAGIC_SIZE);
15*4882a593Smuzhiyun 	if (ret) {
16*4882a593Smuzhiyun 		debug("bad resource image magic: %s\n",
17*4882a593Smuzhiyun 		      hdr->magic ? hdr->magic : "none");
18*4882a593Smuzhiyun 		ret = -EINVAL;
19*4882a593Smuzhiyun 	}
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun 	debug("resource image header:\n");
22*4882a593Smuzhiyun 	debug("magic:%s\n", hdr->magic);
23*4882a593Smuzhiyun 	debug("version:%d\n", hdr->version);
24*4882a593Smuzhiyun 	debug("c_version:%d\n", hdr->c_version);
25*4882a593Smuzhiyun 	debug("blks:%d\n", hdr->blks);
26*4882a593Smuzhiyun 	debug("c_offset:%d\n", hdr->c_offset);
27*4882a593Smuzhiyun 	debug("e_blks:%d\n", hdr->e_blks);
28*4882a593Smuzhiyun 	debug("e_num:%d\n", hdr->e_nums);
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 	return ret;
31*4882a593Smuzhiyun }
32*4882a593Smuzhiyun 
spl_resource_image_get_dtb_entry(const struct resource_img_hdr * hdr)33*4882a593Smuzhiyun struct resource_entry *spl_resource_image_get_dtb_entry(const struct
34*4882a593Smuzhiyun 							resource_img_hdr *hdr)
35*4882a593Smuzhiyun {
36*4882a593Smuzhiyun 	int i;
37*4882a593Smuzhiyun 	struct resource_entry *entry = NULL;
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun 	if (!hdr)
40*4882a593Smuzhiyun 		return NULL;
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun 	for (i = 0; i < hdr->e_nums; i++) {
43*4882a593Smuzhiyun 		entry = (struct resource_entry *)((char *)hdr
44*4882a593Smuzhiyun 				+ (hdr->blks + hdr->e_blks * i) * 512);
45*4882a593Smuzhiyun 		if (!memcmp(entry->name, DEFAULT_DTB_FILE, strlen(DEFAULT_DTB_FILE)))
46*4882a593Smuzhiyun 			break;
47*4882a593Smuzhiyun 	}
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun 	return entry;
50*4882a593Smuzhiyun }
51