Re: [PATCH v5 4/4] thermal: k3_j72xx_bandgap: Add the bandgap driver support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Keerthy,

url:    https://github.com/intel-lab-lkp/linux/commits/Keerthy/thermal-k3_j72xx_bandgap-Add-the-bandgap-driver-support/20220412-193526
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: arc-randconfig-m031-20220411 (https://download.01.org/0day-ci/archive/20220415/202204151117.NLsoANXl-lkp@xxxxxxxxx/config)
compiler: arc-elf-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>

smatch warnings:
drivers/thermal/k3_j72xx_bandgap.c:570 k3_j72xx_bandgap_probe() warn: passing devm_ allocated variable to kfree. 'ref_table'

vim +/ref_table +570 drivers/thermal/k3_j72xx_bandgap.c

de47884b9759d9 Keerthy 2022-04-12  411  static int k3_j72xx_bandgap_probe(struct platform_device *pdev)
de47884b9759d9 Keerthy 2022-04-12  412  {
de47884b9759d9 Keerthy 2022-04-12  413  	int ret = 0, cnt, val, id, table_size = 1024;
de47884b9759d9 Keerthy 2022-04-12  414  	int high_max, low_temp;
de47884b9759d9 Keerthy 2022-04-12  415  	struct resource *res;
de47884b9759d9 Keerthy 2022-04-12  416  	struct device *dev = &pdev->dev;
de47884b9759d9 Keerthy 2022-04-12  417  	struct k3_j72xx_bandgap *bgp;
de47884b9759d9 Keerthy 2022-04-12  418  	struct k3_thermal_data *data;
de47884b9759d9 Keerthy 2022-04-12  419  	int workaround_needed = 0;
de47884b9759d9 Keerthy 2022-04-12  420  	const struct k3_j72xx_bandgap_data *driver_data;
de47884b9759d9 Keerthy 2022-04-12  421  	struct thermal_zone_device *ti_thermal;
de47884b9759d9 Keerthy 2022-04-12  422  	int *ref_table;
de47884b9759d9 Keerthy 2022-04-12  423  	struct err_values err_vals;
de47884b9759d9 Keerthy 2022-04-12  424  
de47884b9759d9 Keerthy 2022-04-12  425  	s64 golden_factors[] = {
de47884b9759d9 Keerthy 2022-04-12  426  		-490019999999999936,
de47884b9759d9 Keerthy 2022-04-12  427  		3251200000000000,
de47884b9759d9 Keerthy 2022-04-12  428  		-1705800000000,
de47884b9759d9 Keerthy 2022-04-12  429  		603730000,
de47884b9759d9 Keerthy 2022-04-12  430  		-92627,
de47884b9759d9 Keerthy 2022-04-12  431  	};
de47884b9759d9 Keerthy 2022-04-12  432  
de47884b9759d9 Keerthy 2022-04-12  433  	s64 pvt_wa_factors[] = {
de47884b9759d9 Keerthy 2022-04-12  434  		-415230000000000000,
de47884b9759d9 Keerthy 2022-04-12  435  		3126600000000000,
de47884b9759d9 Keerthy 2022-04-12  436  		-1157800000000,
de47884b9759d9 Keerthy 2022-04-12  437  	};
de47884b9759d9 Keerthy 2022-04-12  438  
de47884b9759d9 Keerthy 2022-04-12  439  	bgp = devm_kzalloc(&pdev->dev, sizeof(*bgp), GFP_KERNEL);
de47884b9759d9 Keerthy 2022-04-12  440  	if (!bgp)
de47884b9759d9 Keerthy 2022-04-12  441  		return -ENOMEM;
de47884b9759d9 Keerthy 2022-04-12  442  
de47884b9759d9 Keerthy 2022-04-12  443  	bgp->dev = dev;
de47884b9759d9 Keerthy 2022-04-12  444  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
de47884b9759d9 Keerthy 2022-04-12  445  	bgp->base = devm_ioremap_resource(dev, res);
de47884b9759d9 Keerthy 2022-04-12  446  	if (IS_ERR(bgp->base))
de47884b9759d9 Keerthy 2022-04-12  447  		return PTR_ERR(bgp->base);
de47884b9759d9 Keerthy 2022-04-12  448  
de47884b9759d9 Keerthy 2022-04-12  449  	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
de47884b9759d9 Keerthy 2022-04-12  450  	bgp->cfg2_base = devm_ioremap_resource(dev, res);
de47884b9759d9 Keerthy 2022-04-12  451  	if (IS_ERR(bgp->cfg2_base))
de47884b9759d9 Keerthy 2022-04-12  452  		return PTR_ERR(bgp->cfg2_base);
de47884b9759d9 Keerthy 2022-04-12  453  
de47884b9759d9 Keerthy 2022-04-12  454  	res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
de47884b9759d9 Keerthy 2022-04-12  455  	bgp->fuse_base = devm_ioremap_resource(dev, res);
de47884b9759d9 Keerthy 2022-04-12  456  	if (IS_ERR(bgp->fuse_base))
de47884b9759d9 Keerthy 2022-04-12  457  		return PTR_ERR(bgp->fuse_base);
de47884b9759d9 Keerthy 2022-04-12  458  
de47884b9759d9 Keerthy 2022-04-12  459  	driver_data = of_device_get_match_data(dev);
de47884b9759d9 Keerthy 2022-04-12  460  	if (driver_data)
de47884b9759d9 Keerthy 2022-04-12  461  		workaround_needed = driver_data->has_errata_i2128;
de47884b9759d9 Keerthy 2022-04-12  462  
de47884b9759d9 Keerthy 2022-04-12  463  	pm_runtime_enable(dev);
de47884b9759d9 Keerthy 2022-04-12  464  	ret = pm_runtime_get_sync(dev);
de47884b9759d9 Keerthy 2022-04-12  465  	if (ret < 0) {
de47884b9759d9 Keerthy 2022-04-12  466  		pm_runtime_put_noidle(dev);
de47884b9759d9 Keerthy 2022-04-12  467  		pm_runtime_disable(dev);
de47884b9759d9 Keerthy 2022-04-12  468  		return ret;
de47884b9759d9 Keerthy 2022-04-12  469  	}
de47884b9759d9 Keerthy 2022-04-12  470  
de47884b9759d9 Keerthy 2022-04-12  471  	/* Get the sensor count in the VTM */
de47884b9759d9 Keerthy 2022-04-12  472  	val = readl(bgp->base + K3_VTM_DEVINFO_PWR0_OFFSET);
de47884b9759d9 Keerthy 2022-04-12  473  	cnt = val & K3_VTM_DEVINFO_PWR0_TEMPSENS_CT_MASK;
de47884b9759d9 Keerthy 2022-04-12  474  	cnt >>= __ffs(K3_VTM_DEVINFO_PWR0_TEMPSENS_CT_MASK);
de47884b9759d9 Keerthy 2022-04-12  475  
de47884b9759d9 Keerthy 2022-04-12  476  	data = devm_kcalloc(bgp->dev, cnt, sizeof(*data), GFP_KERNEL);
de47884b9759d9 Keerthy 2022-04-12  477  	if (!data) {
de47884b9759d9 Keerthy 2022-04-12  478  		ret = -ENOMEM;
de47884b9759d9 Keerthy 2022-04-12  479  		goto err_alloc;
de47884b9759d9 Keerthy 2022-04-12  480  	}
de47884b9759d9 Keerthy 2022-04-12  481  
de47884b9759d9 Keerthy 2022-04-12  482  	ref_table = devm_kzalloc(bgp->dev, sizeof(*ref_table) * table_size,
de47884b9759d9 Keerthy 2022-04-12  483  				 GFP_KERNEL);

This should be allocated with regular kzalloc() because it's freed at
the end of the function.  It doesn't stay for the life of the device.

de47884b9759d9 Keerthy 2022-04-12  484  	if (!ref_table) {
de47884b9759d9 Keerthy 2022-04-12  485  		ret = -ENOMEM;
de47884b9759d9 Keerthy 2022-04-12  486  		goto err_alloc;
de47884b9759d9 Keerthy 2022-04-12  487  	}
de47884b9759d9 Keerthy 2022-04-12  488  
de47884b9759d9 Keerthy 2022-04-12  489  	derived_table = devm_kzalloc(bgp->dev, sizeof(*derived_table) * table_size,
de47884b9759d9 Keerthy 2022-04-12  490  				     GFP_KERNEL);
de47884b9759d9 Keerthy 2022-04-12  491  	if (!derived_table) {
de47884b9759d9 Keerthy 2022-04-12  492  		ret = -ENOMEM;
de47884b9759d9 Keerthy 2022-04-12  493  		goto err_alloc;
de47884b9759d9 Keerthy 2022-04-12  494  	}
de47884b9759d9 Keerthy 2022-04-12  495  
de47884b9759d9 Keerthy 2022-04-12  496  	/* Workaround not needed if bit30/bit31 is set even for J721e */
de47884b9759d9 Keerthy 2022-04-12  497  	if (workaround_needed && (readl(bgp->fuse_base + 0x0) & 0xc0000000) == 0xc0000000)
de47884b9759d9 Keerthy 2022-04-12  498  		workaround_needed = false;
de47884b9759d9 Keerthy 2022-04-12  499  
de47884b9759d9 Keerthy 2022-04-12  500  	dev_dbg(bgp->dev, "Work around %sneeded\n",
de47884b9759d9 Keerthy 2022-04-12  501  		workaround_needed ? "not " : "");
de47884b9759d9 Keerthy 2022-04-12  502  
de47884b9759d9 Keerthy 2022-04-12  503  	if (!workaround_needed)
de47884b9759d9 Keerthy 2022-04-12  504  		init_table(5, ref_table, golden_factors);
de47884b9759d9 Keerthy 2022-04-12  505  	else
de47884b9759d9 Keerthy 2022-04-12  506  		init_table(3, ref_table, pvt_wa_factors);
de47884b9759d9 Keerthy 2022-04-12  507  
de47884b9759d9 Keerthy 2022-04-12  508  	/* Register the thermal sensors */
de47884b9759d9 Keerthy 2022-04-12  509  	for (id = 0; id < cnt; id++) {
de47884b9759d9 Keerthy 2022-04-12  510  		data[id].bgp = bgp;
de47884b9759d9 Keerthy 2022-04-12  511  		data[id].ctrl_offset = K3_VTM_TMPSENS0_CTRL_OFFSET + id * 0x20;
de47884b9759d9 Keerthy 2022-04-12  512  		data[id].stat_offset = data[id].ctrl_offset +
de47884b9759d9 Keerthy 2022-04-12  513  					K3_VTM_TMPSENS_STAT_OFFSET;
de47884b9759d9 Keerthy 2022-04-12  514  
de47884b9759d9 Keerthy 2022-04-12  515  		if (workaround_needed) {
de47884b9759d9 Keerthy 2022-04-12  516  			/* ref adc values for -40C, 30C & 125C respectively */
de47884b9759d9 Keerthy 2022-04-12  517  			err_vals.refs[0] = MINUS40CREF;
de47884b9759d9 Keerthy 2022-04-12  518  			err_vals.refs[1] = PLUS30CREF;
de47884b9759d9 Keerthy 2022-04-12  519  			err_vals.refs[2] = PLUS125CREF;
de47884b9759d9 Keerthy 2022-04-12  520  			err_vals.refs[3] = PLUS150CREF;
de47884b9759d9 Keerthy 2022-04-12  521  			get_efuse_values(id, &data[id], err_vals.errs, bgp);
de47884b9759d9 Keerthy 2022-04-12  522  		}
de47884b9759d9 Keerthy 2022-04-12  523  
de47884b9759d9 Keerthy 2022-04-12  524  		if (id == 0 && workaround_needed)
de47884b9759d9 Keerthy 2022-04-12  525  			prep_lookup_table(&err_vals, ref_table);
de47884b9759d9 Keerthy 2022-04-12  526  		else if (id == 0 && !workaround_needed)
de47884b9759d9 Keerthy 2022-04-12  527  			memcpy(derived_table, ref_table, table_size * 4);
de47884b9759d9 Keerthy 2022-04-12  528  
de47884b9759d9 Keerthy 2022-04-12  529  		val = readl(data[id].bgp->cfg2_base + data[id].ctrl_offset);
de47884b9759d9 Keerthy 2022-04-12  530  		val |= (K3_VTM_TMPSENS_CTRL_MAXT_OUTRG_EN |
de47884b9759d9 Keerthy 2022-04-12  531  			K3_VTM_TMPSENS_CTRL_SOC |
de47884b9759d9 Keerthy 2022-04-12  532  			K3_VTM_TMPSENS_CTRL_CLRZ | BIT(4));
de47884b9759d9 Keerthy 2022-04-12  533  		writel(val, data[id].bgp->cfg2_base + data[id].ctrl_offset);
de47884b9759d9 Keerthy 2022-04-12  534  
de47884b9759d9 Keerthy 2022-04-12  535  		bgp->ts_data[id] = &data[id];
de47884b9759d9 Keerthy 2022-04-12  536  		ti_thermal =
de47884b9759d9 Keerthy 2022-04-12  537  		devm_thermal_zone_of_sensor_register(bgp->dev, id,
de47884b9759d9 Keerthy 2022-04-12  538  						     &data[id],
de47884b9759d9 Keerthy 2022-04-12  539  						     &k3_of_thermal_ops);
de47884b9759d9 Keerthy 2022-04-12  540  		if (IS_ERR(ti_thermal)) {
de47884b9759d9 Keerthy 2022-04-12  541  			dev_err(bgp->dev, "thermal zone device is NULL\n");
de47884b9759d9 Keerthy 2022-04-12  542  			ret = PTR_ERR(ti_thermal);
de47884b9759d9 Keerthy 2022-04-12  543  			goto err_alloc;
de47884b9759d9 Keerthy 2022-04-12  544  		}
de47884b9759d9 Keerthy 2022-04-12  545  	}
de47884b9759d9 Keerthy 2022-04-12  546  
de47884b9759d9 Keerthy 2022-04-12  547  	/*
de47884b9759d9 Keerthy 2022-04-12  548  	 * Program TSHUT thresholds
de47884b9759d9 Keerthy 2022-04-12  549  	 * Step 1: set the thresholds to ~123C and 105C WKUP_VTM_MISC_CTRL2
de47884b9759d9 Keerthy 2022-04-12  550  	 * Step 2: WKUP_VTM_TMPSENS_CTRL_j set the MAXT_OUTRG_EN  bit
de47884b9759d9 Keerthy 2022-04-12  551  	 *         This is already taken care as per of init
de47884b9759d9 Keerthy 2022-04-12  552  	 * Step 3: WKUP_VTM_MISC_CTRL set the ANYMAXT_OUTRG_ALERT_EN  bit
de47884b9759d9 Keerthy 2022-04-12  553  	 */
de47884b9759d9 Keerthy 2022-04-12  554  	high_max = k3_j72xx_bandgap_temp_to_adc_code(MAX_TEMP);
de47884b9759d9 Keerthy 2022-04-12  555  	low_temp = k3_j72xx_bandgap_temp_to_adc_code(COOL_DOWN_TEMP);
de47884b9759d9 Keerthy 2022-04-12  556  
de47884b9759d9 Keerthy 2022-04-12  557  	writel((low_temp << 16) | high_max, data[0].bgp->cfg2_base +
de47884b9759d9 Keerthy 2022-04-12  558  	       K3_VTM_MISC_CTRL2_OFFSET);
de47884b9759d9 Keerthy 2022-04-12  559  	mdelay(100);
de47884b9759d9 Keerthy 2022-04-12  560  	writel(K3_VTM_ANYMAXT_OUTRG_ALERT_EN, data[0].bgp->cfg2_base +
de47884b9759d9 Keerthy 2022-04-12  561  	       K3_VTM_MISC_CTRL_OFFSET);
de47884b9759d9 Keerthy 2022-04-12  562  
de47884b9759d9 Keerthy 2022-04-12  563  	platform_set_drvdata(pdev, bgp);
de47884b9759d9 Keerthy 2022-04-12  564  
de47884b9759d9 Keerthy 2022-04-12  565  	print_look_up_table(dev, ref_table);
de47884b9759d9 Keerthy 2022-04-12  566  	/*
de47884b9759d9 Keerthy 2022-04-12  567  	 * Now that the derived_table has the appropriate look up values
de47884b9759d9 Keerthy 2022-04-12  568  	 * Free up the ref_table
de47884b9759d9 Keerthy 2022-04-12  569  	 */
de47884b9759d9 Keerthy 2022-04-12 @570  	kfree(ref_table);

The first free of a double free.  Get rid of the devm_ and add kfrees
on the error path.

de47884b9759d9 Keerthy 2022-04-12  571  
de47884b9759d9 Keerthy 2022-04-12  572  	return 0;
de47884b9759d9 Keerthy 2022-04-12  573  
de47884b9759d9 Keerthy 2022-04-12  574  err_alloc:
de47884b9759d9 Keerthy 2022-04-12  575  	pm_runtime_put_sync(&pdev->dev);
de47884b9759d9 Keerthy 2022-04-12  576  	pm_runtime_disable(&pdev->dev);
de47884b9759d9 Keerthy 2022-04-12  577  
de47884b9759d9 Keerthy 2022-04-12  578  	return ret;
de47884b9759d9 Keerthy 2022-04-12  579  }

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux