[PATCH 09/17] soc: imx: add i.MX8M blk-ctrl driver

Dan Carpenter dan.carpenter at oracle.com
Sun Jul 18 23:12:15 PDT 2021


Hi Lucas,

url:    https://github.com/0day-ci/linux/commits/Lucas-Stach/i-MX8MM-GPC-improvements-and-BLK_CTRL-driver/20210718-102944
base:   https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git for-next
config: i386-randconfig-m021-20210718 (attached as .config)
compiler: gcc-10 (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
Reported-by: Dan Carpenter <dan.carpenter at oracle.com>

smatch warnings:
drivers/soc/imx/imx8m-blk-ctrl.c:222 imx8m_blk_ctrl_probe() warn: missing error code 'ret'

vim +/ret +222 drivers/soc/imx/imx8m-blk-ctrl.c

446185fda14696 Lucas Stach 2021-07-17  150  static int imx8m_blk_ctrl_probe(struct platform_device *pdev)
446185fda14696 Lucas Stach 2021-07-17  151  {
446185fda14696 Lucas Stach 2021-07-17  152  	const struct imx8m_blk_ctrl_data *bc_data;
446185fda14696 Lucas Stach 2021-07-17  153  	struct device *dev = &pdev->dev;
446185fda14696 Lucas Stach 2021-07-17  154  	struct imx8m_blk_ctrl *bc;
446185fda14696 Lucas Stach 2021-07-17  155  	void __iomem *base;
446185fda14696 Lucas Stach 2021-07-17  156  	int i, ret;
446185fda14696 Lucas Stach 2021-07-17  157  
446185fda14696 Lucas Stach 2021-07-17  158  	struct regmap_config regmap_config = {
446185fda14696 Lucas Stach 2021-07-17  159  		.reg_bits	= 32,
446185fda14696 Lucas Stach 2021-07-17  160  		.val_bits	= 32,
446185fda14696 Lucas Stach 2021-07-17  161  		.reg_stride	= 4,
446185fda14696 Lucas Stach 2021-07-17  162  	};
446185fda14696 Lucas Stach 2021-07-17  163  
446185fda14696 Lucas Stach 2021-07-17  164  	bc = devm_kzalloc(dev, sizeof(*bc), GFP_KERNEL);
446185fda14696 Lucas Stach 2021-07-17  165  	if (!bc)
446185fda14696 Lucas Stach 2021-07-17  166  		return -ENOMEM;
446185fda14696 Lucas Stach 2021-07-17  167  
446185fda14696 Lucas Stach 2021-07-17  168  	bc->dev = dev;
446185fda14696 Lucas Stach 2021-07-17  169  
446185fda14696 Lucas Stach 2021-07-17  170  	bc_data = of_device_get_match_data(dev);
446185fda14696 Lucas Stach 2021-07-17  171  
446185fda14696 Lucas Stach 2021-07-17  172  	base = devm_platform_ioremap_resource(pdev, 0);
446185fda14696 Lucas Stach 2021-07-17  173  	if (IS_ERR(base))
446185fda14696 Lucas Stach 2021-07-17  174  		return PTR_ERR(base);
446185fda14696 Lucas Stach 2021-07-17  175  
446185fda14696 Lucas Stach 2021-07-17  176  	regmap_config.max_register = bc_data->max_reg;
446185fda14696 Lucas Stach 2021-07-17  177  	bc->regmap = devm_regmap_init_mmio(dev, base, &regmap_config);
446185fda14696 Lucas Stach 2021-07-17  178  	if (IS_ERR(bc->regmap))
446185fda14696 Lucas Stach 2021-07-17  179  		return dev_err_probe(dev, PTR_ERR(bc->regmap),
446185fda14696 Lucas Stach 2021-07-17  180  				     "failed to init regmap \n");
446185fda14696 Lucas Stach 2021-07-17  181  
446185fda14696 Lucas Stach 2021-07-17  182  	bc->domains = devm_kcalloc(dev, bc_data->num_domains,
446185fda14696 Lucas Stach 2021-07-17  183  				    sizeof(struct imx8m_blk_ctrl_domain),
446185fda14696 Lucas Stach 2021-07-17  184  				    GFP_KERNEL);
446185fda14696 Lucas Stach 2021-07-17  185  	if (!bc->domains)
446185fda14696 Lucas Stach 2021-07-17  186  		return -ENOMEM;
446185fda14696 Lucas Stach 2021-07-17  187  
446185fda14696 Lucas Stach 2021-07-17  188  	bc->onecell_data.num_domains = bc_data->num_domains;
446185fda14696 Lucas Stach 2021-07-17  189  	bc->onecell_data.xlate = imx8m_blk_ctrl_xlate;
446185fda14696 Lucas Stach 2021-07-17  190  	bc->onecell_data.domains =
446185fda14696 Lucas Stach 2021-07-17  191  		devm_kcalloc(dev, bc_data->num_domains,
446185fda14696 Lucas Stach 2021-07-17  192  			     sizeof(struct generic_pm_domain *), GFP_KERNEL);
446185fda14696 Lucas Stach 2021-07-17  193  	if (!bc->onecell_data.domains)
446185fda14696 Lucas Stach 2021-07-17  194  		return -ENOMEM;
446185fda14696 Lucas Stach 2021-07-17  195  
446185fda14696 Lucas Stach 2021-07-17  196  	bc->bus_power_dev = genpd_dev_pm_attach_by_name(dev, "bus");
446185fda14696 Lucas Stach 2021-07-17  197  	if (IS_ERR(bc->bus_power_dev))
446185fda14696 Lucas Stach 2021-07-17  198  		return dev_err_probe(dev, PTR_ERR(bc->bus_power_dev),
446185fda14696 Lucas Stach 2021-07-17  199  				     "failed to attach power domain\n");
446185fda14696 Lucas Stach 2021-07-17  200  
446185fda14696 Lucas Stach 2021-07-17  201  	for (i = 0; i < bc_data->num_domains; i++) {
446185fda14696 Lucas Stach 2021-07-17  202  		const struct imx8m_blk_ctrl_domain_data *data = &bc_data->domains[i];
446185fda14696 Lucas Stach 2021-07-17  203  		struct imx8m_blk_ctrl_domain *domain = &bc->domains[i];
446185fda14696 Lucas Stach 2021-07-17  204  		int j;
446185fda14696 Lucas Stach 2021-07-17  205  
446185fda14696 Lucas Stach 2021-07-17  206  		domain->data = data;
446185fda14696 Lucas Stach 2021-07-17  207  
446185fda14696 Lucas Stach 2021-07-17  208  		for (j = 0; j < data->num_clks; j++)
446185fda14696 Lucas Stach 2021-07-17  209  			domain->clks[j].id = data->clk_names[j];
446185fda14696 Lucas Stach 2021-07-17  210  
446185fda14696 Lucas Stach 2021-07-17  211  		ret = devm_clk_bulk_get(dev, data->num_clks, domain->clks);
446185fda14696 Lucas Stach 2021-07-17  212  		if (ret) {
446185fda14696 Lucas Stach 2021-07-17  213  			dev_err_probe(dev, ret, "failed to get clock\n");
446185fda14696 Lucas Stach 2021-07-17  214  			goto cleanup_pds;
446185fda14696 Lucas Stach 2021-07-17  215  		}
446185fda14696 Lucas Stach 2021-07-17  216  
446185fda14696 Lucas Stach 2021-07-17  217  		domain->power_dev =
446185fda14696 Lucas Stach 2021-07-17  218  			dev_pm_domain_attach_by_name(dev, data->gpc_name);
446185fda14696 Lucas Stach 2021-07-17  219  		if (IS_ERR(domain->power_dev )) {
                                                                                    ^
Extra space character.

446185fda14696 Lucas Stach 2021-07-17  220  			dev_err_probe(dev, PTR_ERR(domain->power_dev),
446185fda14696 Lucas Stach 2021-07-17  221  				      "failed to attach power domain\n");
446185fda14696 Lucas Stach 2021-07-17 @222  			goto cleanup_pds;

	ret = PTR_ERR(domain->power_dev);

446185fda14696 Lucas Stach 2021-07-17  223  		}
446185fda14696 Lucas Stach 2021-07-17  224  
446185fda14696 Lucas Stach 2021-07-17  225  		domain->genpd.name = data->name;
446185fda14696 Lucas Stach 2021-07-17  226  		domain->genpd.power_on = imx8m_blk_ctrl_power_on;
446185fda14696 Lucas Stach 2021-07-17  227  		domain->genpd.power_off = imx8m_blk_ctrl_power_off;
446185fda14696 Lucas Stach 2021-07-17  228  		domain->bc = bc;
446185fda14696 Lucas Stach 2021-07-17  229  
446185fda14696 Lucas Stach 2021-07-17  230  		ret = pm_genpd_init(&domain->genpd, NULL, true);
446185fda14696 Lucas Stach 2021-07-17  231  		if (ret) {
446185fda14696 Lucas Stach 2021-07-17  232  			dev_err_probe(dev, ret, "failed to init power domain\n");
446185fda14696 Lucas Stach 2021-07-17  233  			dev_pm_domain_detach(domain->power_dev, true);
446185fda14696 Lucas Stach 2021-07-17  234  			goto cleanup_pds;
446185fda14696 Lucas Stach 2021-07-17  235  		}
446185fda14696 Lucas Stach 2021-07-17  236  
446185fda14696 Lucas Stach 2021-07-17  237  		/*
446185fda14696 Lucas Stach 2021-07-17  238  		 * We use runtime PM to trigger power on/off of the upstream GPC
446185fda14696 Lucas Stach 2021-07-17  239  		 * domain, as a strict hierarchical parent/child power domain
446185fda14696 Lucas Stach 2021-07-17  240  		 * setup doesn't allow us to meet the sequencing requirements.
446185fda14696 Lucas Stach 2021-07-17  241  		 * This means we have nested locking of genpd locks, without the
446185fda14696 Lucas Stach 2021-07-17  242  		 * nesting being visible at the genpd level, so we need a
446185fda14696 Lucas Stach 2021-07-17  243  		 * separate lock class to make lockdep aware of the fact that
446185fda14696 Lucas Stach 2021-07-17  244  		 * this are separate domain locks that can be nested without a
446185fda14696 Lucas Stach 2021-07-17  245  		 * self-deadlock.
446185fda14696 Lucas Stach 2021-07-17  246  		 */
446185fda14696 Lucas Stach 2021-07-17  247  		lockdep_set_class(&domain->genpd.mlock,
446185fda14696 Lucas Stach 2021-07-17  248  				  &blk_ctrl_genpd_lock_class);
446185fda14696 Lucas Stach 2021-07-17  249  
446185fda14696 Lucas Stach 2021-07-17  250  		bc->onecell_data.domains[i] = &domain->genpd;
446185fda14696 Lucas Stach 2021-07-17  251  	}
446185fda14696 Lucas Stach 2021-07-17  252  
446185fda14696 Lucas Stach 2021-07-17  253  	ret = of_genpd_add_provider_onecell(dev->of_node, &bc->onecell_data);
446185fda14696 Lucas Stach 2021-07-17  254  	if (ret) {
446185fda14696 Lucas Stach 2021-07-17  255  		dev_err_probe(dev, ret, "failed to add power domain provider\n");
446185fda14696 Lucas Stach 2021-07-17  256  		goto cleanup_pds;
446185fda14696 Lucas Stach 2021-07-17  257  	}
446185fda14696 Lucas Stach 2021-07-17  258  
446185fda14696 Lucas Stach 2021-07-17  259  	bc->power_nb.notifier_call = bc_data->power_notifier_fn;
446185fda14696 Lucas Stach 2021-07-17  260  	ret = dev_pm_genpd_add_notifier(bc->bus_power_dev, &bc->power_nb);
446185fda14696 Lucas Stach 2021-07-17  261  	if (ret) {
446185fda14696 Lucas Stach 2021-07-17  262  		dev_err_probe(dev, ret, "failed to add power notifier\n");
446185fda14696 Lucas Stach 2021-07-17  263  		goto cleanup_provider;
446185fda14696 Lucas Stach 2021-07-17  264  	}
446185fda14696 Lucas Stach 2021-07-17  265  
446185fda14696 Lucas Stach 2021-07-17  266  	dev_set_drvdata(dev, bc);
446185fda14696 Lucas Stach 2021-07-17  267  
446185fda14696 Lucas Stach 2021-07-17  268  	return 0;
446185fda14696 Lucas Stach 2021-07-17  269  
446185fda14696 Lucas Stach 2021-07-17  270  cleanup_provider:
446185fda14696 Lucas Stach 2021-07-17  271  	of_genpd_del_provider(dev->of_node);
446185fda14696 Lucas Stach 2021-07-17  272  cleanup_pds:
446185fda14696 Lucas Stach 2021-07-17  273  	for (i--; i >= 0; i--) {
446185fda14696 Lucas Stach 2021-07-17  274  		pm_genpd_remove(&bc->domains[i].genpd);
446185fda14696 Lucas Stach 2021-07-17  275  		dev_pm_domain_detach(bc->domains[i].power_dev, true);
446185fda14696 Lucas Stach 2021-07-17  276  	}
446185fda14696 Lucas Stach 2021-07-17  277  
446185fda14696 Lucas Stach 2021-07-17  278  	dev_pm_domain_detach(bc->bus_power_dev, true);
446185fda14696 Lucas Stach 2021-07-17  279  
446185fda14696 Lucas Stach 2021-07-17  280  	return ret;
446185fda14696 Lucas Stach 2021-07-17  281  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org




More information about the linux-arm-kernel mailing list