Re: [PATCH V2 4/8] soc: imx: add icc paths for i.MX8MP media blk ctrl
From: kernel test robot
Date: Thu Jun 16 2022 - 19:19:29 EST
Hi "Peng,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on robh/for-next]
[also build test ERROR on shawnguo/for-next linus/master v5.19-rc2 next-20220616]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/intel-lab-lkp/linux/commits/Peng-Fan-OSS/Add-interconnect-for-i-MX8MP-blk-ctrl/20220616-153932
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: hexagon-randconfig-r045-20220616 (https://download.01.org/0day-ci/archive/20220617/202206170720.eTetqCJ6-lkp@xxxxxxxxx/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f0e608de27b3d568000046eebf3712ab542979d6)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/118c632adf7409c5a51e85fa0c61286665116b10
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Peng-Fan-OSS/Add-interconnect-for-i-MX8MP-blk-ctrl/20220616-153932
git checkout 118c632adf7409c5a51e85fa0c61286665116b10
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/soc/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>
All errors (new ones prefixed by >>):
>> drivers/soc/imx/imx8m-blk-ctrl.c:247:9: error: call to undeclared function 'devm_of_icc_bulk_get'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
ret = devm_of_icc_bulk_get(dev, data->num_paths, domain->paths);
^
1 error generated.
vim +/devm_of_icc_bulk_get +247 drivers/soc/imx/imx8m-blk-ctrl.c
178
179 static int imx8m_blk_ctrl_probe(struct platform_device *pdev)
180 {
181 const struct imx8m_blk_ctrl_data *bc_data;
182 struct device *dev = &pdev->dev;
183 struct imx8m_blk_ctrl *bc;
184 void __iomem *base;
185 int i, ret;
186
187 struct regmap_config regmap_config = {
188 .reg_bits = 32,
189 .val_bits = 32,
190 .reg_stride = 4,
191 };
192
193 bc = devm_kzalloc(dev, sizeof(*bc), GFP_KERNEL);
194 if (!bc)
195 return -ENOMEM;
196
197 bc->dev = dev;
198
199 bc_data = of_device_get_match_data(dev);
200
201 base = devm_platform_ioremap_resource(pdev, 0);
202 if (IS_ERR(base))
203 return PTR_ERR(base);
204
205 regmap_config.max_register = bc_data->max_reg;
206 bc->regmap = devm_regmap_init_mmio(dev, base, ®map_config);
207 if (IS_ERR(bc->regmap))
208 return dev_err_probe(dev, PTR_ERR(bc->regmap),
209 "failed to init regmap\n");
210
211 bc->domains = devm_kcalloc(dev, bc_data->num_domains,
212 sizeof(struct imx8m_blk_ctrl_domain),
213 GFP_KERNEL);
214 if (!bc->domains)
215 return -ENOMEM;
216
217 bc->onecell_data.num_domains = bc_data->num_domains;
218 bc->onecell_data.xlate = imx8m_blk_ctrl_xlate;
219 bc->onecell_data.domains =
220 devm_kcalloc(dev, bc_data->num_domains,
221 sizeof(struct generic_pm_domain *), GFP_KERNEL);
222 if (!bc->onecell_data.domains)
223 return -ENOMEM;
224
225 bc->bus_power_dev = genpd_dev_pm_attach_by_name(dev, "bus");
226 if (IS_ERR(bc->bus_power_dev))
227 return dev_err_probe(dev, PTR_ERR(bc->bus_power_dev),
228 "failed to attach power domain\n");
229
230 for (i = 0; i < bc_data->num_domains; i++) {
231 const struct imx8m_blk_ctrl_domain_data *data = &bc_data->domains[i];
232 struct imx8m_blk_ctrl_domain *domain = &bc->domains[i];
233 int j;
234
235 domain->data = data;
236
237 for (j = 0; j < data->num_clks; j++)
238 domain->clks[j].id = data->clk_names[j];
239
240 for (j = 0; j < data->num_paths; j++) {
241 domain->paths[j].name = data->path_names[j];
242 /* Fake value for now, just let ICC could configure NoC mode/priority */
243 domain->paths[j].avg_bw = 1;
244 domain->paths[j].peak_bw = 1;
245 }
246
> 247 ret = devm_of_icc_bulk_get(dev, data->num_paths, domain->paths);
248 if (ret) {
249 dev_err_probe(dev, ret, "failed to get noc entries\n");
250 goto cleanup_pds;
251 }
252
253 ret = devm_clk_bulk_get(dev, data->num_clks, domain->clks);
254 if (ret) {
255 dev_err_probe(dev, ret, "failed to get clock\n");
256 goto cleanup_pds;
257 }
258
259 domain->power_dev =
260 dev_pm_domain_attach_by_name(dev, data->gpc_name);
261 if (IS_ERR(domain->power_dev)) {
262 dev_err_probe(dev, PTR_ERR(domain->power_dev),
263 "failed to attach power domain\n");
264 ret = PTR_ERR(domain->power_dev);
265 goto cleanup_pds;
266 }
267 dev_set_name(domain->power_dev, "%s", data->name);
268
269 domain->genpd.name = data->name;
270 domain->genpd.power_on = imx8m_blk_ctrl_power_on;
271 domain->genpd.power_off = imx8m_blk_ctrl_power_off;
272 domain->bc = bc;
273
274 ret = pm_genpd_init(&domain->genpd, NULL, true);
275 if (ret) {
276 dev_err_probe(dev, ret, "failed to init power domain\n");
277 dev_pm_domain_detach(domain->power_dev, true);
278 goto cleanup_pds;
279 }
280
281 /*
282 * We use runtime PM to trigger power on/off of the upstream GPC
283 * domain, as a strict hierarchical parent/child power domain
284 * setup doesn't allow us to meet the sequencing requirements.
285 * This means we have nested locking of genpd locks, without the
286 * nesting being visible at the genpd level, so we need a
287 * separate lock class to make lockdep aware of the fact that
288 * this are separate domain locks that can be nested without a
289 * self-deadlock.
290 */
291 lockdep_set_class(&domain->genpd.mlock,
292 &blk_ctrl_genpd_lock_class);
293
294 bc->onecell_data.domains[i] = &domain->genpd;
295 }
296
297 ret = of_genpd_add_provider_onecell(dev->of_node, &bc->onecell_data);
298 if (ret) {
299 dev_err_probe(dev, ret, "failed to add power domain provider\n");
300 goto cleanup_pds;
301 }
302
303 bc->power_nb.notifier_call = bc_data->power_notifier_fn;
304 ret = dev_pm_genpd_add_notifier(bc->bus_power_dev, &bc->power_nb);
305 if (ret) {
306 dev_err_probe(dev, ret, "failed to add power notifier\n");
307 goto cleanup_provider;
308 }
309
310 dev_set_drvdata(dev, bc);
311
312 return 0;
313
314 cleanup_provider:
315 of_genpd_del_provider(dev->of_node);
316 cleanup_pds:
317 for (i--; i >= 0; i--) {
318 pm_genpd_remove(&bc->domains[i].genpd);
319 dev_pm_domain_detach(bc->domains[i].power_dev, true);
320 }
321
322 dev_pm_domain_detach(bc->bus_power_dev, true);
323
324 return ret;
325 }
326
--
0-DAY CI Kernel Test Service
https://01.org/lkp