CC: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: Lucas Stach <[email protected]>
TO: Shawn Guo <[email protected]>
TO: Rob Herring <[email protected]>
CC: NXP Linux Team <[email protected]>
CC: Adam Ford <[email protected]>
CC: Frieder Schrempf <[email protected]>
CC: Peng Fan <[email protected]>
CC: Marek Vasut <[email protected]>
CC: [email protected]
CC: [email protected]
CC: [email protected]

Hi Lucas,

I love your patch! Perhaps something to improve:

[auto build test WARNING on shawnguo/for-next]
[also build test WARNING on robh/for-next soc/for-next rockchip/for-next 
v5.14-rc1 next-20210716]
[cannot apply to xlnx/master arm/for-next arm64/for-next/core clk/clk-next 
kvmarm/next keystone/next]
[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/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
:::::: branch date: 4 hours ago
:::::: commit date: 4 hours ago
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 <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

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  149  
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 )) {
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;
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  }
446185fda14696 Lucas Stach 2021-07-17  282  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to