Re: [PATCH v1] can: mcp251xfd: Enable transceiver using gpio

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

 



Hi Anup,

kernel test robot noticed the following build warnings:

[auto build test WARNING on mkl-can-next/testing]
[also build test WARNING on net-next/main net/main linus/master v6.11-rc2 next-20240806]
[cannot apply to mani-mhi/mhi-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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Anup-Kulkarni/can-mcp251xfd-Enable-transceiver-using-gpio/20240806-175105
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git testing
patch link:    https://lore.kernel.org/r/20240806090339.785712-1-quic_anupkulk%40quicinc.com
patch subject: [PATCH v1] can: mcp251xfd: Enable transceiver using gpio
config: x86_64-buildonly-randconfig-001-20240806 (https://download.01.org/0day-ci/archive/20240807/202408071217.7AvSrhxI-lkp@xxxxxxxxx/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240807/202408071217.7AvSrhxI-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/202408071217.7AvSrhxI-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c:2081:69: warning: variable 'priv' is uninitialized when used here [-Wuninitialized]
    2081 |         err = device_property_read_u32(&spi->dev, "gpio-transceiver-pin", &priv->transceiver_pin);
         |                                                                            ^~~~
   drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c:2035:29: note: initialize the variable 'priv' to silence this warning
    2035 |         struct mcp251xfd_priv *priv;
         |                                    ^
         |                                     = NULL
   1 warning generated.


vim +/priv +2081 drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c

  2031	
  2032	static int mcp251xfd_probe(struct spi_device *spi)
  2033	{
  2034		struct net_device *ndev;
  2035		struct mcp251xfd_priv *priv;
  2036		struct gpio_desc *rx_int;
  2037		struct regulator *reg_vdd, *reg_xceiver;
  2038		struct clk *clk;
  2039		bool pll_enable = false;
  2040		u32 freq = 0;
  2041		int err;
  2042	
  2043		if (!spi->irq)
  2044			return dev_err_probe(&spi->dev, -ENXIO,
  2045					     "No IRQ specified (maybe node \"interrupts-extended\" in DT missing)!\n");
  2046	
  2047		rx_int = devm_gpiod_get_optional(&spi->dev, "microchip,rx-int",
  2048						 GPIOD_IN);
  2049		if (IS_ERR(rx_int))
  2050			return dev_err_probe(&spi->dev, PTR_ERR(rx_int),
  2051					     "Failed to get RX-INT!\n");
  2052	
  2053		reg_vdd = devm_regulator_get_optional(&spi->dev, "vdd");
  2054		if (PTR_ERR(reg_vdd) == -ENODEV)
  2055			reg_vdd = NULL;
  2056		else if (IS_ERR(reg_vdd))
  2057			return dev_err_probe(&spi->dev, PTR_ERR(reg_vdd),
  2058					     "Failed to get VDD regulator!\n");
  2059	
  2060		reg_xceiver = devm_regulator_get_optional(&spi->dev, "xceiver");
  2061		if (PTR_ERR(reg_xceiver) == -ENODEV)
  2062			reg_xceiver = NULL;
  2063		else if (IS_ERR(reg_xceiver))
  2064			return dev_err_probe(&spi->dev, PTR_ERR(reg_xceiver),
  2065					     "Failed to get Transceiver regulator!\n");
  2066	
  2067		clk = devm_clk_get_optional(&spi->dev, NULL);
  2068		if (IS_ERR(clk))
  2069			return dev_err_probe(&spi->dev, PTR_ERR(clk),
  2070					     "Failed to get Oscillator (clock)!\n");
  2071		if (clk) {
  2072			freq = clk_get_rate(clk);
  2073		} else {
  2074			err = device_property_read_u32(&spi->dev, "clock-frequency",
  2075						       &freq);
  2076			if (err)
  2077				return dev_err_probe(&spi->dev, err,
  2078						     "Failed to get clock-frequency!\n");
  2079		}
  2080	
> 2081		err = device_property_read_u32(&spi->dev, "gpio-transceiver-pin", &priv->transceiver_pin);
  2082			if (err)
  2083				return dev_err_probe(&spi->dev, err,
  2084						     "Failed to get gpio transceiver pin!\n");
  2085	
  2086		/* Sanity check */
  2087		if (freq < MCP251XFD_SYSCLOCK_HZ_MIN ||
  2088		    freq > MCP251XFD_SYSCLOCK_HZ_MAX) {
  2089			dev_err(&spi->dev,
  2090				"Oscillator frequency (%u Hz) is too low or high.\n",
  2091				freq);
  2092			return -ERANGE;
  2093		}
  2094	
  2095		if (freq <= MCP251XFD_SYSCLOCK_HZ_MAX / MCP251XFD_OSC_PLL_MULTIPLIER)
  2096			pll_enable = true;
  2097	
  2098		ndev = alloc_candev(sizeof(struct mcp251xfd_priv),
  2099				    MCP251XFD_TX_OBJ_NUM_MAX);
  2100		if (!ndev)
  2101			return -ENOMEM;
  2102	
  2103		SET_NETDEV_DEV(ndev, &spi->dev);
  2104	
  2105		ndev->netdev_ops = &mcp251xfd_netdev_ops;
  2106		ndev->irq = spi->irq;
  2107		ndev->flags |= IFF_ECHO;
  2108	
  2109		priv = netdev_priv(ndev);
  2110		spi_set_drvdata(spi, priv);
  2111		priv->can.clock.freq = freq;
  2112		if (pll_enable)
  2113			priv->can.clock.freq *= MCP251XFD_OSC_PLL_MULTIPLIER;
  2114		priv->can.do_set_mode = mcp251xfd_set_mode;
  2115		priv->can.do_get_berr_counter = mcp251xfd_get_berr_counter;
  2116		priv->can.bittiming_const = &mcp251xfd_bittiming_const;
  2117		priv->can.data_bittiming_const = &mcp251xfd_data_bittiming_const;
  2118		priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
  2119			CAN_CTRLMODE_LISTENONLY | CAN_CTRLMODE_BERR_REPORTING |
  2120			CAN_CTRLMODE_FD | CAN_CTRLMODE_FD_NON_ISO |
  2121			CAN_CTRLMODE_CC_LEN8_DLC;
  2122		set_bit(MCP251XFD_FLAGS_DOWN, priv->flags);
  2123		priv->ndev = ndev;
  2124		priv->spi = spi;
  2125		priv->rx_int = rx_int;
  2126		priv->clk = clk;
  2127		priv->pll_enable = pll_enable;
  2128		priv->reg_vdd = reg_vdd;
  2129		priv->reg_xceiver = reg_xceiver;
  2130		priv->devtype_data = *(struct mcp251xfd_devtype_data *)spi_get_device_match_data(spi);
  2131	
  2132		/* Errata Reference:
  2133		 * mcp2517fd: DS80000792C 5., mcp2518fd: DS80000789E 4.,
  2134		 * mcp251863: DS80000984A 4.
  2135		 *
  2136		 * The SPI can write corrupted data to the RAM at fast SPI
  2137		 * speeds:
  2138		 *
  2139		 * Simultaneous activity on the CAN bus while writing data to
  2140		 * RAM via the SPI interface, with high SCK frequency, can
  2141		 * lead to corrupted data being written to RAM.
  2142		 *
  2143		 * Fix/Work Around:
  2144		 * Ensure that FSCK is less than or equal to 0.85 *
  2145		 * (FSYSCLK/2).
  2146		 *
  2147		 * Known good combinations are:
  2148		 *
  2149		 * MCP	ext-clk	SoC			SPI			SPI-clk		max-clk	parent-clk	config
  2150		 *
  2151		 * 2518	20 MHz	allwinner,sun8i-h3	allwinner,sun8i-h3-spi	 8333333 Hz	 83.33%	600000000 Hz	assigned-clocks = <&ccu CLK_SPIx>
  2152		 * 2518	40 MHz	allwinner,sun8i-h3	allwinner,sun8i-h3-spi	16666667 Hz	 83.33%	600000000 Hz	assigned-clocks = <&ccu CLK_SPIx>
  2153		 * 2517	40 MHz	atmel,sama5d27		atmel,at91rm9200-spi	16400000 Hz	 82.00%	 82000000 Hz	default
  2154		 * 2518	40 MHz	atmel,sama5d27		atmel,at91rm9200-spi	16400000 Hz	 82.00%	 82000000 Hz	default
  2155		 * 2518	40 MHz	fsl,imx6dl		fsl,imx51-ecspi		15000000 Hz	 75.00%	 30000000 Hz	default
  2156		 * 2517	20 MHz	fsl,imx8mm		fsl,imx51-ecspi		 8333333 Hz	 83.33%	 16666667 Hz	assigned-clocks = <&clk IMX8MM_CLK_ECSPIx_ROOT>
  2157		 *
  2158		 */
  2159		priv->spi_max_speed_hz_orig = spi->max_speed_hz;
  2160		priv->spi_max_speed_hz_slow = min(spi->max_speed_hz,
  2161						  freq / 2 / 1000 * 850);
  2162		if (priv->pll_enable)
  2163			priv->spi_max_speed_hz_fast = min(spi->max_speed_hz,
  2164							  freq *
  2165							  MCP251XFD_OSC_PLL_MULTIPLIER /
  2166							  2 / 1000 * 850);
  2167		else
  2168			priv->spi_max_speed_hz_fast = priv->spi_max_speed_hz_slow;
  2169		spi->max_speed_hz = priv->spi_max_speed_hz_slow;
  2170		spi->bits_per_word = 8;
  2171		spi->rt = true;
  2172		err = spi_setup(spi);
  2173		if (err)
  2174			goto out_free_candev;
  2175	
  2176		err = mcp251xfd_regmap_init(priv);
  2177		if (err)
  2178			goto out_free_candev;
  2179	
  2180		err = can_rx_offload_add_manual(ndev, &priv->offload,
  2181						MCP251XFD_NAPI_WEIGHT);
  2182		if (err)
  2183			goto out_free_candev;
  2184	
  2185		err = mcp251xfd_register(priv);
  2186		if (err) {
  2187			dev_err_probe(&spi->dev, err, "Failed to detect %s.\n",
  2188				      mcp251xfd_get_model_str(priv));
  2189			goto out_can_rx_offload_del;
  2190		}
  2191	
  2192		return 0;
  2193	
  2194	out_can_rx_offload_del:
  2195		can_rx_offload_del(&priv->offload);
  2196	out_free_candev:
  2197		spi->max_speed_hz = priv->spi_max_speed_hz_orig;
  2198	
  2199		free_candev(ndev);
  2200	
  2201		return err;
  2202	}
  2203	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux