All of lore.kernel.org
 help / color / mirror / Atom feed
* [xilinx-xlnx:xlnx_rebase_v6.1_LTS 898/1370] drivers/mtd/spi-nor/core.c:1726:34: warning: variable 'offset' is uninitialized when used here
@ 2023-10-02  4:03 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-10-02  4:03 UTC (permalink / raw)
  To: Amit Kumar Mahapatra; +Cc: llvm, oe-kbuild-all, git, Michal Simek

tree:   https://github.com/Xilinx/linux-xlnx xlnx_rebase_v6.1_LTS
head:   a19da02cf5b44420ec6afb1eef348c21d9e8cda2
commit: 5fee19c6329ff527e553bfb9b158869c482b1c27 [898/1370] mtd: spi-nor: Add EAR support
config: arm-dove_defconfig (https://download.01.org/0day-ci/archive/20231002/202310021105.2DxpIQvB-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231002/202310021105.2DxpIQvB-lkp@intel.com/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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202310021105.2DxpIQvB-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/mtd/spi-nor/core.c:593:5: warning: no previous prototype for function 'spi_nor_write_ear' [-Wmissing-prototypes]
     593 | int spi_nor_write_ear(struct spi_nor *nor, u32 addr)
         |     ^
   drivers/mtd/spi-nor/core.c:593:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     593 | int spi_nor_write_ear(struct spi_nor *nor, u32 addr)
         | ^
         | static 
>> drivers/mtd/spi-nor/core.c:1726:34: warning: variable 'offset' is uninitialized when used here [-Wuninitialized]
    1726 |                                 ret = spi_nor_write_ear(nor, offset);
         |                                                              ^~~~~~
   drivers/mtd/spi-nor/core.c:1565:23: note: initialize the variable 'offset' to silence this warning
    1565 |         u32 addr, len, offset, cur_cs_num = 0;
         |                              ^
         |                               = 0
   2 warnings generated.


vim +/offset +1726 drivers/mtd/spi-nor/core.c

  1556	
  1557	/*
  1558	 * Erase an address range on the nor chip.  The address range may extend
  1559	 * one or more erase sectors. Return an error if there is a problem erasing.
  1560	 */
  1561	static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
  1562	{
  1563		struct spi_nor *nor = mtd_to_spi_nor(mtd);
  1564		struct spi_nor_flash_parameter *params;
  1565		u32 addr, len, offset, cur_cs_num = 0;
  1566		uint32_t rem;
  1567		int ret;
  1568		u64 sz;
  1569	
  1570		dev_dbg(nor->dev, "at 0x%llx, len %lld\n", (long long)instr->addr,
  1571				(long long)instr->len);
  1572	
  1573		params = spi_nor_get_params(nor, 0);
  1574		sz = params->size;
  1575	
  1576		if (spi_nor_has_uniform_erase(nor)) {
  1577			div_u64_rem(instr->len, mtd->erasesize, &rem);
  1578			if (rem)
  1579				return -EINVAL;
  1580		}
  1581	
  1582		addr = instr->addr;
  1583		len = instr->len;
  1584	
  1585		ret = spi_nor_lock_and_prep(nor);
  1586		if (ret)
  1587			return ret;
  1588	
  1589		if (!(nor->flags & SNOR_F_HAS_PARALLEL)) {
  1590			/* whole-chip erase? */
  1591			if (len == mtd->size && !(nor->flags & SNOR_F_NO_OP_CHIP_ERASE)) {
  1592				unsigned long timeout;
  1593	
  1594				while ((cur_cs_num < SNOR_FLASH_CNT_MAX) && params) {
  1595					nor->spimem->spi->cs_index_mask = 1 << cur_cs_num;
  1596					ret = spi_nor_write_enable(nor);
  1597					if (ret)
  1598						goto erase_err;
  1599	
  1600					ret = spi_nor_erase_chip(nor);
  1601					if (ret)
  1602						goto erase_err;
  1603	
  1604					/*
  1605					 * Scale the timeout linearly with the size of the flash, with
  1606					 * a minimum calibrated to an old 2MB flash. We could try to
  1607					 * pull these from CFI/SFDP, but these values should be good
  1608					 * enough for now.
  1609					 */
  1610					timeout = max(CHIP_ERASE_2MB_READY_WAIT_JIFFIES,
  1611						      CHIP_ERASE_2MB_READY_WAIT_JIFFIES *
  1612						      (unsigned long)(params->size /
  1613								      SZ_2M));
  1614					ret = spi_nor_wait_till_ready_with_timeout(nor, timeout);
  1615					if (ret)
  1616						goto erase_err;
  1617	
  1618					cur_cs_num++;
  1619					params = spi_nor_get_params(nor, cur_cs_num);
  1620				}
  1621	
  1622			/* REVISIT in some cases we could speed up erasing large regions
  1623			 * by using SPINOR_OP_SE instead of SPINOR_OP_BE_4K.  We may have set up
  1624			 * to use "small sector erase", but that's not always optimal.
  1625			 */
  1626	
  1627			/* "sector"-at-a-time erase */
  1628			} else if (spi_nor_has_uniform_erase(nor)) {
  1629				/* Determine the flash from which the operation need to start */
  1630				while ((cur_cs_num < SNOR_FLASH_CNT_MAX) &&
  1631				       (addr > sz - 1) && params) {
  1632					cur_cs_num++;
  1633					params = spi_nor_get_params(nor, cur_cs_num);
  1634					sz += params->size;
  1635				}
  1636				while (len) {
  1637					nor->spimem->spi->cs_index_mask = 1 << cur_cs_num;
  1638					ret = spi_nor_write_enable(nor);
  1639					if (ret)
  1640						goto erase_err;
  1641	
  1642					offset = addr;
  1643					if (nor->flags & SNOR_F_HAS_STACKED) {
  1644						params = spi_nor_get_params(nor, cur_cs_num);
  1645						offset -= (sz - params->size);
  1646					}
  1647	
  1648					if (nor->addr_nbytes == 3) {
  1649						/* Update Extended Address Register */
  1650						ret = spi_nor_write_ear(nor, offset);
  1651						if (ret)
  1652							goto erase_err;
  1653					}
  1654					ret = spi_nor_wait_till_ready(nor);
  1655					if (ret)
  1656						goto erase_err;
  1657	
  1658					ret = spi_nor_write_enable(nor);
  1659					if (ret)
  1660						goto erase_err;
  1661	
  1662					ret = spi_nor_erase_sector(nor, offset);
  1663					if (ret)
  1664						goto erase_err;
  1665	
  1666					ret = spi_nor_wait_till_ready(nor);
  1667					if (ret)
  1668						goto erase_err;
  1669	
  1670					addr += mtd->erasesize;
  1671					len -= mtd->erasesize;
  1672	
  1673					/*
  1674					 * Flash cross over condition in stacked mode.
  1675					 */
  1676					if ((nor->flags & SNOR_F_HAS_STACKED) && (addr > sz - 1)) {
  1677						cur_cs_num++;
  1678						params = spi_nor_get_params(nor, cur_cs_num);
  1679						sz += params->size;
  1680					}
  1681				}
  1682	
  1683			/* erase multiple sectors */
  1684			} else {
  1685				u64 erase_len = 0;
  1686	
  1687				/* Determine the flash from which the operation need to start */
  1688				while ((cur_cs_num < SNOR_FLASH_CNT_MAX) &&
  1689				       (addr > sz - 1) && params) {
  1690					cur_cs_num++;
  1691					params = spi_nor_get_params(nor, cur_cs_num);
  1692					sz += params->size;
  1693				}
  1694				/* perform multi sector erase onec per Flash*/
  1695				while (len) {
  1696					erase_len = (len > (sz - addr)) ? (sz - addr) : len;
  1697					offset = addr;
  1698					nor->spimem->spi->cs_index_mask = 1 << cur_cs_num;
  1699					if (nor->flags & SNOR_F_HAS_STACKED) {
  1700						params = spi_nor_get_params(nor, cur_cs_num);
  1701						offset -= (sz - params->size);
  1702					}
  1703					ret = spi_nor_erase_multi_sectors(nor, offset, erase_len);
  1704					if (ret)
  1705						goto erase_err;
  1706					len -= erase_len;
  1707					addr += erase_len;
  1708					params = spi_nor_get_params(nor, cur_cs_num);
  1709					sz += params->size;
  1710				}
  1711			}
  1712		} else {
  1713			nor->spimem->spi->cs_index_mask = SPI_NOR_ENABLE_MULTI_CS;
  1714	
  1715			/* whole-chip erase? */
  1716			if (len == mtd->size && !(nor->flags &
  1717						  SNOR_F_NO_OP_CHIP_ERASE)) {
  1718				unsigned long timeout;
  1719	
  1720				ret = spi_nor_write_enable(nor);
  1721				if (ret)
  1722					goto erase_err;
  1723	
  1724				if (nor->addr_nbytes == 3) {
  1725					/* Update Extended Address Register */
> 1726					ret = spi_nor_write_ear(nor, offset);
  1727					if (ret)
  1728						goto erase_err;
  1729				}
  1730				ret = spi_nor_wait_till_ready(nor);
  1731				if (ret)
  1732					goto erase_err;
  1733	
  1734				ret = spi_nor_write_enable(nor);
  1735				if (ret)
  1736					goto erase_err;
  1737	
  1738				ret = spi_nor_erase_chip(nor);
  1739				if (ret)
  1740					goto erase_err;
  1741	
  1742				/*
  1743				 * Scale the timeout linearly with the size of the flash, with
  1744				 * a minimum calibrated to an old 2MB flash. We could try to
  1745				 * pull these from CFI/SFDP, but these values should be good
  1746				 * enough for now.
  1747				 */
  1748				timeout = max(CHIP_ERASE_2MB_READY_WAIT_JIFFIES,
  1749					      CHIP_ERASE_2MB_READY_WAIT_JIFFIES *
  1750					      (unsigned long)(mtd->size / SZ_2M));
  1751				ret = spi_nor_wait_till_ready_with_timeout(nor, timeout);
  1752				if (ret)
  1753					goto erase_err;
  1754	
  1755			/* REVISIT in some cases we could speed up erasing large regions
  1756			 * by using SPINOR_OP_SE instead of SPINOR_OP_BE_4K.  We may have set up
  1757			 * to use "small sector erase", but that's not always optimal.
  1758			 */
  1759	
  1760			/* "sector"-at-a-time erase */
  1761			} else if (spi_nor_has_uniform_erase(nor)) {
  1762				while (len) {
  1763					ret = spi_nor_write_enable(nor);
  1764					if (ret)
  1765						goto erase_err;
  1766	
  1767					offset = addr / 2;
  1768	
  1769					if (nor->addr_nbytes == 3) {
  1770						/* Update Extended Address Register */
  1771						ret = spi_nor_write_ear(nor, offset);
  1772						if (ret)
  1773							goto erase_err;
  1774					}
  1775					ret = spi_nor_wait_till_ready(nor);
  1776					if (ret)
  1777						goto erase_err;
  1778	
  1779					ret = spi_nor_write_enable(nor);
  1780					if (ret)
  1781						goto erase_err;
  1782	
  1783					ret = spi_nor_erase_sector(nor, offset);
  1784					if (ret)
  1785						goto erase_err;
  1786	
  1787					ret = spi_nor_wait_till_ready(nor);
  1788					if (ret)
  1789						goto erase_err;
  1790	
  1791					addr += mtd->erasesize;
  1792					len -= mtd->erasesize;
  1793				}
  1794	
  1795			/* erase multiple sectors */
  1796			} else {
  1797				offset = addr / 2;
  1798				ret = spi_nor_erase_multi_sectors(nor, offset, len);
  1799				if (ret)
  1800					goto erase_err;
  1801			}
  1802		}
  1803		ret = spi_nor_write_disable(nor);
  1804	
  1805	erase_err:
  1806		spi_nor_unlock_and_unprep(nor);
  1807	
  1808		return ret;
  1809	}
  1810	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-10-02  4:03 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-02  4:03 [xilinx-xlnx:xlnx_rebase_v6.1_LTS 898/1370] drivers/mtd/spi-nor/core.c:1726:34: warning: variable 'offset' is uninitialized when used here kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.