From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com
Subject: drivers/i2c/busses/i2c-qup.c:1807:2: warning: Value stored to 'hw_ver' is never read [clang-analyzer-deadcode.DeadStores]
Date: Mon, 6 Feb 2023 06:04:33 +0800 [thread overview]
Message-ID: <202302060613.5bFNldFC-lkp@intel.com> (raw)
::::::
:::::: 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
reply other threads:[~2023-02-05 22:04 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202302060613.5bFNldFC-lkp@intel.com \
--to=lkp@intel.com \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.