Re: [PATCH v3 07/29] media: iris: implement video firmware load/unload

kernel test robot
2024-08-27T23:14:24Z

Hi Dikshita,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 31aaa7d95e09892c81df0d7c49ae85640fa4e202]

url: https://github.com/intel-lab-lkp/linux/commits/Dikshita-Agarwal-via-B4-Relay/dt-bindings-media-Add-sm8550-dt-schema/20240827-181059
base: 31aaa7d95e09892c81df0d7c49ae85640fa4e202
patch link: https://lore.kernel.org/r/20240827-iris_v3-v3-7-c5fdbbe65e70%40quicinc.com
patch subject: [PATCH v3 07/29] media: iris: implement video firmware load/unload
config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20240828/202408280657.WziT1uXM-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240828/202408280657.WziT1uXM-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408280657.WziT1uXM-lkp@intel.com/

All warnings (new ones prefixed by >>):

In file included from include/linux/device.h:15,
from include/linux/of_reserved_mem.h:5,
from drivers/media/platform/qcom/iris/iris_firmware.c:9:
drivers/media/platform/qcom/iris/iris_firmware.c: In function 'iris_load_fw_to_memory':
>> drivers/media/platform/qcom/iris/iris_firmware.c:80:36: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'ssize_t' {aka 'int'} [-Wformat=]
80 | dev_err(core->dev, "out of bound fw image fw size: %ld, res_size: %lu\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:30: note: in definition of macro 'dev_printk_index_wrap'
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
| ^~~
include/linux/dev_printk.h:154:56: note: in expansion of macro 'dev_fmt'
154 | dev_printk_index_wrap(_dev_err, KERN_ERR, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~
drivers/media/platform/qcom/iris/iris_firmware.c:80:17: note: in expansion of macro 'dev_err'
80 | dev_err(core->dev, "out of bound fw image fw size: %ld, res_size: %lu\n",
| ^~~~~~~
drivers/media/platform/qcom/iris/iris_firmware.c:80:70: note: format string is defined here
80 | dev_err(core->dev, "out of bound fw image fw size: %ld, res_size: %lu\n",
| ~~^
| |
| long int
| %d
>> drivers/media/platform/qcom/iris/iris_firmware.c:80:36: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'size_t' {aka 'unsigned int'} [-Wformat=]
80 | dev_err(core->dev, "out of bound fw image fw size: %ld, res_size: %lu\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:30: note: in definition of macro 'dev_printk_index_wrap'
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
| ^~~
include/linux/dev_printk.h:154:56: note: in expansion of macro 'dev_fmt'
154 | dev_printk_index_wrap(_dev_err, KERN_ERR, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~
drivers/media/platform/qcom/iris/iris_firmware.c:80:17: note: in expansion of macro 'dev_err'
80 | dev_err(core->dev, "out of bound fw image fw size: %ld, res_size: %lu\n",
| ^~~~~~~
drivers/media/platform/qcom/iris/iris_firmware.c:80:85: note: format string is defined here
80 | dev_err(core->dev, "out of bound fw image fw size: %ld, res_size: %lu\n",
| ~~^
| |
| long unsigned int
| %u

vim +80 drivers/media/platform/qcom/iris/iris_firmware.c

> 9 #include <linux/of_reserved_mem.h>
10 #include <linux/soc/qcom/mdt_loader.h>
11
12 #include "iris_core.h"
13 #include "iris_firmware.h"
14
15 #define MAX_FIRMWARE_NAME_SIZE 128
16
17 static int iris_protect_cp_mem(struct iris_core *core)
18 {
19 struct tz_cp_config *cp_config;
20 int ret;
21
22 cp_config = core->iris_platform_data->tz_cp_config_data;
23
24 ret = qcom_scm_mem_protect_video_var(cp_config->cp_start,
25 cp_config->cp_size,
26 cp_config->cp_nonpixel_start,
27 cp_config->cp_nonpixel_size);
28 if (ret)
29 dev_err(core->dev, "failed to protect memory(%d)\n", ret);
30
31 return ret;
32 }
33
34 static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_name)
35 {
36 const struct firmware *firmware = NULL;
37 struct device_node *node = NULL;
38 struct reserved_mem *rmem;
39 phys_addr_t mem_phys = 0;
40 void *mem_virt = NULL;
41 size_t res_size = 0;
42 ssize_t fw_size = 0;
43 struct device *dev;
44 int pas_id = 0;
45 int ret;
46
47 if (!fw_name || !(*fw_name) || !core)
48 return -EINVAL;
49
50 dev = core->dev;
51
52 if (strlen(fw_name) >= MAX_FIRMWARE_NAME_SIZE - 4)
53 return -EINVAL;
54
55 pas_id = core->iris_platform_data->pas_id;
56
57 node = of_parse_phandle(dev->of_node, "memory-region", 0);
58 if (!node)
59 return -EINVAL;
60
61 rmem = of_reserved_mem_lookup(node);
62 if (!rmem) {
63 ret = -EINVAL;
64 goto err_put_node;
65 }
66
67 mem_phys = rmem->base;
68 res_size = rmem->size;
69
70 ret = request_firmware(&firmware, fw_name, dev);
71 if (ret) {
72 dev_err(core->dev, "failed to request fw \"%s\", error %d\n",
73 fw_name, ret);
74 goto err_put_node;
75 }
76
77 fw_size = qcom_mdt_get_size(firmware);
78 if (fw_size < 0 || res_size < (size_t)fw_size) {
79 ret = -EINVAL;
> 80 dev_err(core->dev, "out of bound fw image fw size: %ld, res_size: %lu\n",
81 fw_size, res_size);
82 goto err_release_fw;
83 }
84
85 mem_virt = memremap(mem_phys, res_size, MEMREMAP_WC);
86 if (!mem_virt) {
87 dev_err(core->dev, "failed to remap fw memory phys %pa[p]\n",
88 &mem_phys);
89 goto err_release_fw;
90 }
91
92 ret = qcom_mdt_load(dev, firmware, fw_name,
93 pas_id, mem_virt, mem_phys, res_size, NULL);
94 if (ret) {
95 dev_err(core->dev, "error %d loading fw \"%s\"\n",
96 ret, fw_name);
97 goto err_mem_unmap;
98 }
99 ret = qcom_scm_pas_auth_and_reset(pas_id);
100 if (ret) {
101 dev_err(core->dev, "error %d authenticating fw \"%s\"\n",
102 ret, fw_name);
103 goto err_mem_unmap;
104 }
105
106 return ret;
107
108 err_mem_unmap:
109 memunmap(mem_virt);
110 err_release_fw:
111 release_firmware(firmware);
112 err_put_node:
113 of_node_put(node);
114 return ret;
115 }
116

--
0-DAY CI Kernel Test Service