Hi Tanmay, kernel test robot noticed the following build warnings: [auto build test WARNING on a7d272979d3a89b117ca2c547dc8a465c4f28635] url: https://github.com/intel-lab-lkp/linux/commits/Tanmay-Shah/dt-bindings-remoteproc-add-Tightly-Coupled-Memory-TCM-bindings/20231017-120805 base: a7d272979d3a89b117ca2c547dc8a465c4f28635 patch link: https://lore.kernel.org/r/20231013042229.3954527-5-tanmay.shah%40amd.com patch subject: [PATCH v6 4/4] remoteproc: zynqmp: parse TCM from device tree config: arm64-randconfig-002-20231019 (https://download.01.org/0day-ci/archive/20231019/202310191806.NjLsejwM-lkp@xxxxxxxxx/config) compiler: aarch64-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231019/202310191806.NjLsejwM-lkp@xxxxxxxxx/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@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202310191806.NjLsejwM-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): drivers/remoteproc/xlnx_r5_remoteproc.c: In function 'zynqmp_r5_get_tcm_node_from_dt': >> drivers/remoteproc/xlnx_r5_remoteproc.c:1162:28: warning: array subscript 'struct mem_bank_data[0]' is partly outside array bounds of 'unsigned char[8]' [-Warray-bounds=] 1162 | tcm->da = (u32)abs_addr; | ^~ In file included from include/linux/dma-mapping.h:8, from drivers/remoteproc/xlnx_r5_remoteproc.c:8: In function 'devm_kzalloc', inlined from 'zynqmp_r5_get_tcm_node_from_dt' at drivers/remoteproc/xlnx_r5_remoteproc.c:1143:10: include/linux/device.h:314:16: note: object of size 8 allocated by 'devm_kmalloc' 314 | return devm_kmalloc(dev, size, gfp | __GFP_ZERO); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/remoteproc/xlnx_r5_remoteproc.c: In function 'zynqmp_r5_get_tcm_node_from_dt': drivers/remoteproc/xlnx_r5_remoteproc.c:1163:28: warning: array subscript 'struct mem_bank_data[0]' is partly outside array bounds of 'unsigned char[8]' [-Warray-bounds=] 1163 | tcm->size = (u32)size; | ^~ In function 'devm_kzalloc', inlined from 'zynqmp_r5_get_tcm_node_from_dt' at drivers/remoteproc/xlnx_r5_remoteproc.c:1143:10: include/linux/device.h:314:16: note: object of size 8 allocated by 'devm_kmalloc' 314 | return devm_kmalloc(dev, size, gfp | __GFP_ZERO); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/remoteproc/xlnx_r5_remoteproc.c: In function 'zynqmp_r5_get_tcm_node_from_dt': drivers/remoteproc/xlnx_r5_remoteproc.c:1172:28: warning: array subscript 'struct mem_bank_data[0]' is partly outside array bounds of 'unsigned char[8]' [-Warray-bounds=] 1172 | tcm->addr = (u32)res->start; | ^~ In function 'devm_kzalloc', inlined from 'zynqmp_r5_get_tcm_node_from_dt' at drivers/remoteproc/xlnx_r5_remoteproc.c:1143:10: include/linux/device.h:314:16: note: object of size 8 allocated by 'devm_kmalloc' 314 | return devm_kmalloc(dev, size, gfp | __GFP_ZERO); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/remoteproc/xlnx_r5_remoteproc.c: In function 'zynqmp_r5_get_tcm_node_from_dt': drivers/remoteproc/xlnx_r5_remoteproc.c:1173:28: warning: array subscript 'struct mem_bank_data[0]' is partly outside array bounds of 'unsigned char[8]' [-Warray-bounds=] 1173 | tcm->bank_name = (char *)res->name; | ^~ In function 'devm_kzalloc', inlined from 'zynqmp_r5_get_tcm_node_from_dt' at drivers/remoteproc/xlnx_r5_remoteproc.c:1143:10: include/linux/device.h:314:16: note: object of size 8 allocated by 'devm_kmalloc' 314 | return devm_kmalloc(dev, size, gfp | __GFP_ZERO); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from include/linux/device.h:17: drivers/remoteproc/xlnx_r5_remoteproc.c: In function 'zynqmp_r5_get_tcm_node_from_dt': drivers/remoteproc/xlnx_r5_remoteproc.c:1174:74: warning: array subscript 'struct mem_bank_data[0]' is partly outside array bounds of 'unsigned char[8]' [-Warray-bounds=] 1174 | res = devm_request_mem_region(dev, tcm->addr, tcm->size, | ^~ include/linux/ioport.h:306:63: note: in definition of macro 'devm_request_mem_region' 306 | __devm_request_region(dev, &iomem_resource, (start), (n), (name)) | ^ In function 'devm_kzalloc', inlined from 'zynqmp_r5_get_tcm_node_from_dt' at drivers/remoteproc/xlnx_r5_remoteproc.c:1143:10: include/linux/device.h:314:16: note: object of size 8 allocated by 'devm_kmalloc' 314 | return devm_kmalloc(dev, size, gfp | __GFP_ZERO); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +1162 drivers/remoteproc/xlnx_r5_remoteproc.c 1108 1109 static int zynqmp_r5_get_tcm_node_from_dt(struct zynqmp_r5_cluster *cluster) 1110 { 1111 struct zynqmp_r5_core *r5_core; 1112 int i, j, tcm_bank_count, ret; 1113 struct platform_device *cpdev; 1114 struct mem_bank_data *tcm; 1115 struct device_node *np; 1116 struct resource *res; 1117 u64 abs_addr, size; 1118 struct device *dev; 1119 1120 for (i = 0; i < cluster->core_count; i++) { 1121 r5_core = cluster->r5_cores[i]; 1122 dev = r5_core->dev; 1123 np = dev_of_node(dev); 1124 1125 /* we have address cell 2 and size cell as 2 */ 1126 ret = of_property_count_elems_of_size(np, "reg", 1127 4 * sizeof(u32)); 1128 if (ret <= 0) { 1129 dev_err(dev, "can't get reg property err %d\n", ret); 1130 return -EINVAL; 1131 } 1132 1133 tcm_bank_count = ret; 1134 1135 r5_core->tcm_banks = devm_kcalloc(dev, tcm_bank_count, 1136 sizeof(struct mem_bank_data *), 1137 GFP_KERNEL); 1138 if (!r5_core->tcm_banks) 1139 ret = -ENOMEM; 1140 1141 r5_core->tcm_bank_count = tcm_bank_count; 1142 for (j = 0; j < tcm_bank_count; j++) { 1143 tcm = devm_kzalloc(dev, sizeof(struct mem_bank_data *), 1144 GFP_KERNEL); 1145 if (!tcm) 1146 return -ENOMEM; 1147 1148 r5_core->tcm_banks[j] = tcm; 1149 1150 /* get tcm address without translation */ 1151 ret = of_property_read_reg(np, j, &abs_addr, &size); 1152 if (ret) { 1153 dev_err(dev, "failed to get reg property\n"); 1154 return ret; 1155 } 1156 1157 /* 1158 * remote processor can address only 32 bits 1159 * so convert 64-bits into 32-bits. This will discard 1160 * any unwanted upper 32-bits. 1161 */ > 1162 tcm->da = (u32)abs_addr; 1163 tcm->size = (u32)size; 1164 1165 cpdev = to_platform_device(dev); 1166 res = platform_get_resource(cpdev, IORESOURCE_MEM, j); 1167 if (!res) { 1168 dev_err(dev, "failed to get tcm resource\n"); 1169 return -EINVAL; 1170 } 1171 1172 tcm->addr = (u32)res->start; 1173 tcm->bank_name = (char *)res->name; 1174 res = devm_request_mem_region(dev, tcm->addr, tcm->size, 1175 tcm->bank_name); 1176 if (!res) { 1177 dev_err(dev, "failed to request tcm resource\n"); 1178 return -EINVAL; 1179 } 1180 } 1181 } 1182 1183 return 0; 1184 } 1185 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki