* drivers/i2c/busses/i2c-qup.c:1807:2: warning: Value stored to 'hw_ver' is never read [clang-analyzer-deadcode.DeadStores]
@ 2023-02-05 22:04 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-02-05 22:04 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp
::::::
:::::: Manual check reason: "low confidence static check first_new_problem: drivers/i2c/busses/i2c-qup.c:1807:2: warning: Value stored to 'hw_ver' is never read [clang-analyzer-deadcode.DeadStores]"
::::::
BCC: lkp@intel.com
CC: llvm@lists.linux.dev
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Wolfram Sang <wsa-dev@sang-engineering.com>
Hi Wolfram,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: c608f6b58f306ce0e4f459af69a196f5ed6ccf45
commit: 5de717974005fcad2502281e9f82e139ca91f4bb i2c: qup: allow COMPILE_TEST
date: 12 months ago
:::::: branch date: 2 hours ago
:::::: commit date: 12 months ago
config: arm-randconfig-c002-20230202 (https://download.01.org/0day-ci/archive/20230206/202302060613.5bFNldFC-lkp@intel.com/config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 4196ca3278f78c6e19246e54ab0ecb364e37d66a)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5de717974005fcad2502281e9f82e139ca91f4bb
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 5de717974005fcad2502281e9f82e139ca91f4bb
# save the config file
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
clang_analyzer warnings: (new ones prefixed by >>)
drivers/gpu/drm/etnaviv/etnaviv_gem.c:60:21: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
struct drm_device *dev = etnaviv_obj->base.dev;
^~~ ~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/etnaviv/etnaviv_gem.c:60:21: note: Value stored to 'dev' during its initialization is never read
struct drm_device *dev = etnaviv_obj->base.dev;
^~~ ~~~~~~~~~~~~~~~~~~~~~
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
drivers/thermal/tegra/soctherm.c:2248:2: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores]
err = soctherm_interrupts_init(pdev, tegra);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/thermal/tegra/soctherm.c:2248:2: note: Value stored to 'err' is never read
err = soctherm_interrupts_init(pdev, tegra);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
drivers/base/regmap/regmap-mmio.c:52:3: warning: Value stored to 'min_stride' is never read [clang-analyzer-deadcode.DeadStores]
min_stride = 0;
^ ~
drivers/base/regmap/regmap-mmio.c:52:3: note: Value stored to 'min_stride' is never read
min_stride = 0;
^ ~
17 warnings generated.
drivers/i2c/busses/i2c-rk3x.c:897:2: warning: Value stored to 't_low_ns' is never read [clang-analyzer-deadcode.DeadStores]
t_low_ns = div_u64(((u64)calc.div_low + 1) * 8 * 1000000000, clk_rate);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-rk3x.c:897:2: note: Value stored to 't_low_ns' is never read
t_low_ns = div_u64(((u64)calc.div_low + 1) * 8 * 1000000000, clk_rate);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-rk3x.c:898:2: warning: Value stored to 't_high_ns' is never read [clang-analyzer-deadcode.DeadStores]
t_high_ns = div_u64(((u64)calc.div_high + 1) * 8 * 1000000000,
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-rk3x.c:898:2: note: Value stored to 't_high_ns' is never read
t_high_ns = div_u64(((u64)calc.div_high + 1) * 8 * 1000000000,
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
18 warnings generated.
drivers/gpu/drm/radeon/ni.c:780:3: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores]
err = -EINVAL;
^ ~~~~~~~
drivers/gpu/drm/radeon/ni.c:780:3: note: Value stored to 'err' is never read
err = -EINVAL;
^ ~~~~~~~
drivers/gpu/drm/radeon/ni.c:1917:3: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores]
tmp = RREG32(GRBM_SOFT_RESET);
^
drivers/gpu/drm/radeon/ni.c:1917:3: note: Value stored to 'tmp' is never read
drivers/gpu/drm/radeon/ni.c:1931:3: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores]
tmp = RREG32(SRBM_SOFT_RESET);
^
drivers/gpu/drm/radeon/ni.c:1931:3: note: Value stored to 'tmp' is never read
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
16 warnings generated.
>> drivers/i2c/busses/i2c-qup.c:1807:2: warning: Value stored to 'hw_ver' is never read [clang-analyzer-deadcode.DeadStores]
hw_ver = readl(qup->base + QUP_HW_VERSION);
^
drivers/i2c/busses/i2c-qup.c:1807:2: note: Value stored to 'hw_ver' is never read
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
drivers/clocksource/timer-fttmr010.c:99:8: warning: Excessive padding in 'struct fttmr010' (103 padding bytes, where 39 is optimal). Optimal fields order: clkevt, base, tick_rate, t1_enable_val, timer_shutdown, delay_timer, is_aspeed, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding]
struct fttmr010 {
~~~~~~~^~~~~~~~~~
drivers/clocksource/timer-fttmr010.c:99:8: note: Excessive padding in 'struct fttmr010' (103 padding bytes, where 39 is optimal). Optimal fields order: clkevt, base, tick_rate, t1_enable_val, timer_shutdown, delay_timer, is_aspeed, consider reordering the fields or adding explicit padding members
struct fttmr010 {
~~~~~~~^~~~~~~~~~
Suppressed 1 warnings (1 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
drivers/clocksource/timer-ixp4xx.c:48:8: warning: Excessive padding in 'struct ixp4xx_timer' (112 padding bytes, where 48 is optimal). Optimal fields order: clkevt, base, latch, delay_timer, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding]
struct ixp4xx_timer {
~~~~~~~^~~~~~~~~~~~~~
drivers/clocksource/timer-ixp4xx.c:48:8: note: Excessive padding in 'struct ixp4xx_timer' (112 padding bytes, where 48 is optimal). Optimal fields order: clkevt, base, latch, delay_timer, consider reordering the fields or adding explicit padding members
struct ixp4xx_timer {
~~~~~~~^~~~~~~~~~~~~~
Suppressed 1 warnings (1 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
Suppressed 1 warnings (1 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
Suppressed 1 warnings (1 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
Suppressed 1 warnings (1 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
Suppressed 1 warnings (1 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
16 warnings generated.
Suppressed 16 warnings (16 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
16 warnings generated.
Suppressed 16 warnings (16 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
Suppressed 1 warnings (1 with check filters).
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
15 warnings generated.
Suppressed 15 warnings (15 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
vim +/hw_ver +1807 drivers/i2c/busses/i2c-qup.c
902a91a02bdf02 Austin Christ 2018-05-10 1656
10c5a8425968f8 Bjorn Andersson 2014-03-13 1657 static int qup_i2c_probe(struct platform_device *pdev)
10c5a8425968f8 Bjorn Andersson 2014-03-13 1658 {
10c5a8425968f8 Bjorn Andersson 2014-03-13 1659 static const int blk_sizes[] = {4, 16, 32};
10c5a8425968f8 Bjorn Andersson 2014-03-13 1660 struct qup_i2c_dev *qup;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1661 unsigned long one_bit_t;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1662 u32 io_mode, hw_ver, size;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1663 int ret, fs_div, hs_div;
515da746983bc6 Naveen Kaje 2016-10-11 1664 u32 src_clk_freq = DEFAULT_SRC_CLK;
515da746983bc6 Naveen Kaje 2016-10-11 1665 u32 clk_freq = DEFAULT_CLK_FREQ;
9cedf3b2f09946 Sricharan R 2016-02-22 1666 int blocks;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1667 bool is_qup_v1;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1668
10c5a8425968f8 Bjorn Andersson 2014-03-13 1669 qup = devm_kzalloc(&pdev->dev, sizeof(*qup), GFP_KERNEL);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1670 if (!qup)
10c5a8425968f8 Bjorn Andersson 2014-03-13 1671 return -ENOMEM;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1672
10c5a8425968f8 Bjorn Andersson 2014-03-13 1673 qup->dev = &pdev->dev;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1674 init_completion(&qup->xfer);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1675 platform_set_drvdata(pdev, qup);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1676
d9f52281bc09bd Austin Christ 2018-05-10 1677 if (scl_freq) {
d9f52281bc09bd Austin Christ 2018-05-10 1678 dev_notice(qup->dev, "Using override frequency of %u\n", scl_freq);
d9f52281bc09bd Austin Christ 2018-05-10 1679 clk_freq = scl_freq;
d9f52281bc09bd Austin Christ 2018-05-10 1680 } else {
515da746983bc6 Naveen Kaje 2016-10-11 1681 ret = device_property_read_u32(qup->dev, "clock-frequency", &clk_freq);
515da746983bc6 Naveen Kaje 2016-10-11 1682 if (ret) {
515da746983bc6 Naveen Kaje 2016-10-11 1683 dev_notice(qup->dev, "using default clock-frequency %d",
515da746983bc6 Naveen Kaje 2016-10-11 1684 DEFAULT_CLK_FREQ);
515da746983bc6 Naveen Kaje 2016-10-11 1685 }
d9f52281bc09bd Austin Christ 2018-05-10 1686 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1687
191424bb6166f6 Sricharan R 2016-01-19 1688 if (of_device_is_compatible(pdev->dev.of_node, "qcom,i2c-qup-v1.1.1")) {
191424bb6166f6 Sricharan R 2016-01-19 1689 qup->adap.algo = &qup_i2c_algo;
191424bb6166f6 Sricharan R 2016-01-19 1690 qup->adap.quirks = &qup_i2c_quirks;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1691 is_qup_v1 = true;
191424bb6166f6 Sricharan R 2016-01-19 1692 } else {
191424bb6166f6 Sricharan R 2016-01-19 1693 qup->adap.algo = &qup_i2c_algo_v2;
de82bb43185558 Wolfram Sang 2018-07-23 1694 qup->adap.quirks = &qup_i2c_quirks_v2;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1695 is_qup_v1 = false;
902a91a02bdf02 Austin Christ 2018-05-10 1696 if (acpi_match_device(qup_i2c_acpi_match, qup->dev))
902a91a02bdf02 Austin Christ 2018-05-10 1697 goto nodma;
902a91a02bdf02 Austin Christ 2018-05-10 1698 else
9cedf3b2f09946 Sricharan R 2016-02-22 1699 ret = qup_i2c_req_dma(qup);
9cedf3b2f09946 Sricharan R 2016-02-22 1700
9cedf3b2f09946 Sricharan R 2016-02-22 1701 if (ret == -EPROBE_DEFER)
9cedf3b2f09946 Sricharan R 2016-02-22 1702 goto fail_dma;
9cedf3b2f09946 Sricharan R 2016-02-22 1703 else if (ret != 0)
9cedf3b2f09946 Sricharan R 2016-02-22 1704 goto nodma;
9cedf3b2f09946 Sricharan R 2016-02-22 1705
6f2f0f6465acbd Abhishek Sahu 2018-03-12 1706 qup->max_xfer_sg_len = (MX_BLOCKS << 1);
6f2f0f6465acbd Abhishek Sahu 2018-03-12 1707 blocks = (MX_DMA_BLOCKS << 1) + 1;
a86854d0c599b3 Kees Cook 2018-06-12 1708 qup->btx.sg = devm_kcalloc(&pdev->dev,
a86854d0c599b3 Kees Cook 2018-06-12 1709 blocks, sizeof(*qup->btx.sg),
9cedf3b2f09946 Sricharan R 2016-02-22 1710 GFP_KERNEL);
9cedf3b2f09946 Sricharan R 2016-02-22 1711 if (!qup->btx.sg) {
9cedf3b2f09946 Sricharan R 2016-02-22 1712 ret = -ENOMEM;
9cedf3b2f09946 Sricharan R 2016-02-22 1713 goto fail_dma;
9cedf3b2f09946 Sricharan R 2016-02-22 1714 }
9cedf3b2f09946 Sricharan R 2016-02-22 1715 sg_init_table(qup->btx.sg, blocks);
9cedf3b2f09946 Sricharan R 2016-02-22 1716
a86854d0c599b3 Kees Cook 2018-06-12 1717 qup->brx.sg = devm_kcalloc(&pdev->dev,
a86854d0c599b3 Kees Cook 2018-06-12 1718 blocks, sizeof(*qup->brx.sg),
9cedf3b2f09946 Sricharan R 2016-02-22 1719 GFP_KERNEL);
9cedf3b2f09946 Sricharan R 2016-02-22 1720 if (!qup->brx.sg) {
9cedf3b2f09946 Sricharan R 2016-02-22 1721 ret = -ENOMEM;
9cedf3b2f09946 Sricharan R 2016-02-22 1722 goto fail_dma;
9cedf3b2f09946 Sricharan R 2016-02-22 1723 }
9cedf3b2f09946 Sricharan R 2016-02-22 1724 sg_init_table(qup->brx.sg, blocks);
9cedf3b2f09946 Sricharan R 2016-02-22 1725
9cedf3b2f09946 Sricharan R 2016-02-22 1726 /* 2 tag bytes for each block + 5 for start, stop tags */
9cedf3b2f09946 Sricharan R 2016-02-22 1727 size = blocks * 2 + 5;
9cedf3b2f09946 Sricharan R 2016-02-22 1728
685983f4decc5f Sricharan R 2016-06-10 1729 qup->start_tag.start = devm_kzalloc(&pdev->dev,
685983f4decc5f Sricharan R 2016-06-10 1730 size, GFP_KERNEL);
9cedf3b2f09946 Sricharan R 2016-02-22 1731 if (!qup->start_tag.start) {
9cedf3b2f09946 Sricharan R 2016-02-22 1732 ret = -ENOMEM;
9cedf3b2f09946 Sricharan R 2016-02-22 1733 goto fail_dma;
9cedf3b2f09946 Sricharan R 2016-02-22 1734 }
9cedf3b2f09946 Sricharan R 2016-02-22 1735
685983f4decc5f Sricharan R 2016-06-10 1736 qup->brx.tag.start = devm_kzalloc(&pdev->dev, 2, GFP_KERNEL);
9cedf3b2f09946 Sricharan R 2016-02-22 1737 if (!qup->brx.tag.start) {
9cedf3b2f09946 Sricharan R 2016-02-22 1738 ret = -ENOMEM;
9cedf3b2f09946 Sricharan R 2016-02-22 1739 goto fail_dma;
191424bb6166f6 Sricharan R 2016-01-19 1740 }
191424bb6166f6 Sricharan R 2016-01-19 1741
685983f4decc5f Sricharan R 2016-06-10 1742 qup->btx.tag.start = devm_kzalloc(&pdev->dev, 2, GFP_KERNEL);
9cedf3b2f09946 Sricharan R 2016-02-22 1743 if (!qup->btx.tag.start) {
9cedf3b2f09946 Sricharan R 2016-02-22 1744 ret = -ENOMEM;
9cedf3b2f09946 Sricharan R 2016-02-22 1745 goto fail_dma;
9cedf3b2f09946 Sricharan R 2016-02-22 1746 }
9cedf3b2f09946 Sricharan R 2016-02-22 1747 qup->is_dma = true;
9cedf3b2f09946 Sricharan R 2016-02-22 1748 }
9cedf3b2f09946 Sricharan R 2016-02-22 1749
9cedf3b2f09946 Sricharan R 2016-02-22 1750 nodma:
109b8c42b7e28d Austin Christ 2018-05-10 1751 /* We support frequencies up to FAST Mode Plus (1MHz) */
90224e6468e15d Andy Shevchenko 2020-03-24 1752 if (!clk_freq || clk_freq > I2C_MAX_FAST_MODE_PLUS_FREQ) {
10c5a8425968f8 Bjorn Andersson 2014-03-13 1753 dev_err(qup->dev, "clock frequency not supported %d\n",
10c5a8425968f8 Bjorn Andersson 2014-03-13 1754 clk_freq);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1755 return -EINVAL;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1756 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1757
e0442d76213981 Dejin Zheng 2020-04-09 1758 qup->base = devm_platform_ioremap_resource(pdev, 0);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1759 if (IS_ERR(qup->base))
10c5a8425968f8 Bjorn Andersson 2014-03-13 1760 return PTR_ERR(qup->base);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1761
10c5a8425968f8 Bjorn Andersson 2014-03-13 1762 qup->irq = platform_get_irq(pdev, 0);
e42688ed5cf593 Dejin Zheng 2020-04-16 1763 if (qup->irq < 0)
10c5a8425968f8 Bjorn Andersson 2014-03-13 1764 return qup->irq;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1765
515da746983bc6 Naveen Kaje 2016-10-11 1766 if (has_acpi_companion(qup->dev)) {
515da746983bc6 Naveen Kaje 2016-10-11 1767 ret = device_property_read_u32(qup->dev,
515da746983bc6 Naveen Kaje 2016-10-11 1768 "src-clock-hz", &src_clk_freq);
515da746983bc6 Naveen Kaje 2016-10-11 1769 if (ret) {
515da746983bc6 Naveen Kaje 2016-10-11 1770 dev_notice(qup->dev, "using default src-clock-hz %d",
515da746983bc6 Naveen Kaje 2016-10-11 1771 DEFAULT_SRC_CLK);
515da746983bc6 Naveen Kaje 2016-10-11 1772 }
515da746983bc6 Naveen Kaje 2016-10-11 1773 ACPI_COMPANION_SET(&qup->adap.dev, ACPI_COMPANION(qup->dev));
515da746983bc6 Naveen Kaje 2016-10-11 1774 } else {
10c5a8425968f8 Bjorn Andersson 2014-03-13 1775 qup->clk = devm_clk_get(qup->dev, "core");
10c5a8425968f8 Bjorn Andersson 2014-03-13 1776 if (IS_ERR(qup->clk)) {
10c5a8425968f8 Bjorn Andersson 2014-03-13 1777 dev_err(qup->dev, "Could not get core clock\n");
10c5a8425968f8 Bjorn Andersson 2014-03-13 1778 return PTR_ERR(qup->clk);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1779 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1780
10c5a8425968f8 Bjorn Andersson 2014-03-13 1781 qup->pclk = devm_clk_get(qup->dev, "iface");
10c5a8425968f8 Bjorn Andersson 2014-03-13 1782 if (IS_ERR(qup->pclk)) {
10c5a8425968f8 Bjorn Andersson 2014-03-13 1783 dev_err(qup->dev, "Could not get iface clock\n");
10c5a8425968f8 Bjorn Andersson 2014-03-13 1784 return PTR_ERR(qup->pclk);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1785 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1786 qup_i2c_enable_clocks(qup);
515da746983bc6 Naveen Kaje 2016-10-11 1787 src_clk_freq = clk_get_rate(qup->clk);
515da746983bc6 Naveen Kaje 2016-10-11 1788 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1789
10c5a8425968f8 Bjorn Andersson 2014-03-13 1790 /*
10c5a8425968f8 Bjorn Andersson 2014-03-13 1791 * Bootloaders might leave a pending interrupt on certain QUP's,
10c5a8425968f8 Bjorn Andersson 2014-03-13 1792 * so we reset the core before registering for interrupts.
10c5a8425968f8 Bjorn Andersson 2014-03-13 1793 */
10c5a8425968f8 Bjorn Andersson 2014-03-13 1794 writel(1, qup->base + QUP_SW_RESET);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1795 ret = qup_i2c_poll_state_valid(qup);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1796 if (ret)
10c5a8425968f8 Bjorn Andersson 2014-03-13 1797 goto fail;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1798
10c5a8425968f8 Bjorn Andersson 2014-03-13 1799 ret = devm_request_irq(qup->dev, qup->irq, qup_i2c_interrupt,
5fe058b04d017a Tian Tao 2021-03-19 1800 IRQF_TRIGGER_HIGH | IRQF_NO_AUTOEN,
5fe058b04d017a Tian Tao 2021-03-19 1801 "i2c_qup", qup);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1802 if (ret) {
10c5a8425968f8 Bjorn Andersson 2014-03-13 1803 dev_err(qup->dev, "Request %d IRQ failed\n", qup->irq);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1804 goto fail;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1805 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1806
10c5a8425968f8 Bjorn Andersson 2014-03-13 @1807 hw_ver = readl(qup->base + QUP_HW_VERSION);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1808 dev_dbg(qup->dev, "Revision %x\n", hw_ver);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1809
10c5a8425968f8 Bjorn Andersson 2014-03-13 1810 io_mode = readl(qup->base + QUP_IO_MODE);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1811
10c5a8425968f8 Bjorn Andersson 2014-03-13 1812 /*
10c5a8425968f8 Bjorn Andersson 2014-03-13 1813 * The block/fifo size w.r.t. 'actual data' is 1/2 due to 'tag'
10c5a8425968f8 Bjorn Andersson 2014-03-13 1814 * associated with each byte written/received
10c5a8425968f8 Bjorn Andersson 2014-03-13 1815 */
10c5a8425968f8 Bjorn Andersson 2014-03-13 1816 size = QUP_OUTPUT_BLOCK_SIZE(io_mode);
3cf357dfb40b4a Pramod Gurav 2014-08-06 1817 if (size >= ARRAY_SIZE(blk_sizes)) {
3cf357dfb40b4a Pramod Gurav 2014-08-06 1818 ret = -EIO;
3cf357dfb40b4a Pramod Gurav 2014-08-06 1819 goto fail;
3cf357dfb40b4a Pramod Gurav 2014-08-06 1820 }
7545c7dba169c4 Abhishek Sahu 2018-03-12 1821 qup->out_blk_sz = blk_sizes[size];
10c5a8425968f8 Bjorn Andersson 2014-03-13 1822
10c5a8425968f8 Bjorn Andersson 2014-03-13 1823 size = QUP_INPUT_BLOCK_SIZE(io_mode);
3cf357dfb40b4a Pramod Gurav 2014-08-06 1824 if (size >= ARRAY_SIZE(blk_sizes)) {
3cf357dfb40b4a Pramod Gurav 2014-08-06 1825 ret = -EIO;
3cf357dfb40b4a Pramod Gurav 2014-08-06 1826 goto fail;
3cf357dfb40b4a Pramod Gurav 2014-08-06 1827 }
7545c7dba169c4 Abhishek Sahu 2018-03-12 1828 qup->in_blk_sz = blk_sizes[size];
7545c7dba169c4 Abhishek Sahu 2018-03-12 1829
7545c7dba169c4 Abhishek Sahu 2018-03-12 1830 if (is_qup_v1) {
7545c7dba169c4 Abhishek Sahu 2018-03-12 1831 /*
7545c7dba169c4 Abhishek Sahu 2018-03-12 1832 * in QUP v1, QUP_CONFIG uses N as 15 i.e 16 bits constitutes a
7545c7dba169c4 Abhishek Sahu 2018-03-12 1833 * single transfer but the block size is in bytes so divide the
7545c7dba169c4 Abhishek Sahu 2018-03-12 1834 * in_blk_sz and out_blk_sz by 2
7545c7dba169c4 Abhishek Sahu 2018-03-12 1835 */
7545c7dba169c4 Abhishek Sahu 2018-03-12 1836 qup->in_blk_sz /= 2;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1837 qup->out_blk_sz /= 2;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1838 qup->write_tx_fifo = qup_i2c_write_tx_fifo_v1;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1839 qup->read_rx_fifo = qup_i2c_read_rx_fifo_v1;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1840 qup->write_rx_tags = qup_i2c_write_rx_tags_v1;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1841 } else {
7545c7dba169c4 Abhishek Sahu 2018-03-12 1842 qup->write_tx_fifo = qup_i2c_write_tx_fifo_v2;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1843 qup->read_rx_fifo = qup_i2c_read_rx_fifo_v2;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1844 qup->write_rx_tags = qup_i2c_write_rx_tags_v2;
7545c7dba169c4 Abhishek Sahu 2018-03-12 1845 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1846
10c5a8425968f8 Bjorn Andersson 2014-03-13 1847 size = QUP_OUTPUT_FIFO_SIZE(io_mode);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1848 qup->out_fifo_sz = qup->out_blk_sz * (2 << size);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1849
10c5a8425968f8 Bjorn Andersson 2014-03-13 1850 size = QUP_INPUT_FIFO_SIZE(io_mode);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1851 qup->in_fifo_sz = qup->in_blk_sz * (2 << size);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1852
10c5a8425968f8 Bjorn Andersson 2014-03-13 1853 hs_div = 3;
90224e6468e15d Andy Shevchenko 2020-03-24 1854 if (clk_freq <= I2C_MAX_STANDARD_MODE_FREQ) {
71fbafcc45fed7 Austin Christ 2018-05-10 1855 fs_div = ((src_clk_freq / clk_freq) / 2) - 3;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1856 qup->clk_ctl = (hs_div << 8) | (fs_div & 0xff);
71fbafcc45fed7 Austin Christ 2018-05-10 1857 } else {
71fbafcc45fed7 Austin Christ 2018-05-10 1858 /* 33%/66% duty cycle */
71fbafcc45fed7 Austin Christ 2018-05-10 1859 fs_div = ((src_clk_freq / clk_freq) - 6) * 2 / 3;
71fbafcc45fed7 Austin Christ 2018-05-10 1860 qup->clk_ctl = ((fs_div / 2) << 16) | (hs_div << 8) | (fs_div & 0xff);
71fbafcc45fed7 Austin Christ 2018-05-10 1861 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1862
10c5a8425968f8 Bjorn Andersson 2014-03-13 1863 /*
10c5a8425968f8 Bjorn Andersson 2014-03-13 1864 * Time it takes for a byte to be clocked out on the bus.
10c5a8425968f8 Bjorn Andersson 2014-03-13 1865 * Each byte takes 9 clock cycles (8 bits + 1 ack).
10c5a8425968f8 Bjorn Andersson 2014-03-13 1866 */
10c5a8425968f8 Bjorn Andersson 2014-03-13 1867 one_bit_t = (USEC_PER_SEC / clk_freq) + 1;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1868 qup->one_byte_t = one_bit_t * 9;
ecb6e1e5f43520 Abhishek Sahu 2018-03-12 1869 qup->xfer_timeout = TOUT_MIN * HZ +
6f2f0f6465acbd Abhishek Sahu 2018-03-12 1870 usecs_to_jiffies(MX_DMA_TX_RX_LEN * qup->one_byte_t);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1871
10c5a8425968f8 Bjorn Andersson 2014-03-13 1872 dev_dbg(qup->dev, "IN:block:%d, fifo:%d, OUT:block:%d, fifo:%d\n",
10c5a8425968f8 Bjorn Andersson 2014-03-13 1873 qup->in_blk_sz, qup->in_fifo_sz,
10c5a8425968f8 Bjorn Andersson 2014-03-13 1874 qup->out_blk_sz, qup->out_fifo_sz);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1875
10c5a8425968f8 Bjorn Andersson 2014-03-13 1876 i2c_set_adapdata(&qup->adap, qup);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1877 qup->adap.dev.parent = qup->dev;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1878 qup->adap.dev.of_node = pdev->dev.of_node;
9cedf3b2f09946 Sricharan R 2016-02-22 1879 qup->is_last = true;
f74187932d30e4 Sricharan R 2016-01-19 1880
10c5a8425968f8 Bjorn Andersson 2014-03-13 1881 strlcpy(qup->adap.name, "QUP I2C adapter", sizeof(qup->adap.name));
10c5a8425968f8 Bjorn Andersson 2014-03-13 1882
10c5a8425968f8 Bjorn Andersson 2014-03-13 1883 pm_runtime_set_autosuspend_delay(qup->dev, MSEC_PER_SEC);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1884 pm_runtime_use_autosuspend(qup->dev);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1885 pm_runtime_set_active(qup->dev);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1886 pm_runtime_enable(qup->dev);
86b59bbfae2a89 Andy Gross 2014-09-29 1887
86b59bbfae2a89 Andy Gross 2014-09-29 1888 ret = i2c_add_adapter(&qup->adap);
86b59bbfae2a89 Andy Gross 2014-09-29 1889 if (ret)
86b59bbfae2a89 Andy Gross 2014-09-29 1890 goto fail_runtime;
86b59bbfae2a89 Andy Gross 2014-09-29 1891
10c5a8425968f8 Bjorn Andersson 2014-03-13 1892 return 0;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1893
86b59bbfae2a89 Andy Gross 2014-09-29 1894 fail_runtime:
86b59bbfae2a89 Andy Gross 2014-09-29 1895 pm_runtime_disable(qup->dev);
86b59bbfae2a89 Andy Gross 2014-09-29 1896 pm_runtime_set_suspended(qup->dev);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1897 fail:
10c5a8425968f8 Bjorn Andersson 2014-03-13 1898 qup_i2c_disable_clocks(qup);
9cedf3b2f09946 Sricharan R 2016-02-22 1899 fail_dma:
9cedf3b2f09946 Sricharan R 2016-02-22 1900 if (qup->btx.dma)
9cedf3b2f09946 Sricharan R 2016-02-22 1901 dma_release_channel(qup->btx.dma);
9cedf3b2f09946 Sricharan R 2016-02-22 1902 if (qup->brx.dma)
9cedf3b2f09946 Sricharan R 2016-02-22 1903 dma_release_channel(qup->brx.dma);
10c5a8425968f8 Bjorn Andersson 2014-03-13 1904 return ret;
10c5a8425968f8 Bjorn Andersson 2014-03-13 1905 }
10c5a8425968f8 Bjorn Andersson 2014-03-13 1906
:::::: The code at line 1807 was first introduced by commit
:::::: 10c5a8425968f8a43b7039ce6261367fc992289f i2c: qup: New bus driver for the Qualcomm QUP I2C controller
:::::: TO: Bjorn Andersson <bjorn.andersson@sonymobile.com>
:::::: CC: Wolfram Sang <wsa@the-dreams.de>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-02-05 22:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-05 22:04 drivers/i2c/busses/i2c-qup.c:1807:2: warning: Value stored to 'hw_ver' is never read [clang-analyzer-deadcode.DeadStores] 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.