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