CC: [email protected]
CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Jianjun Wang <[email protected]>
CC: Lorenzo Pieralisi <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   68453767131a5deec1e8f9ac92a9042f929e585d
commit: d3bf75b579b980b9d83a76d3b4d8bfb9f55b24ca PCI: mediatek-gen3: Add 
MediaTek Gen3 driver for MT8192
date:   11 months ago
:::::: branch date: 13 hours ago
:::::: commit date: 11 months ago
config: riscv-randconfig-c006-20220307 
(https://download.01.org/0day-ci/archive/20220312/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
d271fc04d5b97b12e6b797c6067d3c96a8d7470e)
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 riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d3bf75b579b980b9d83a76d3b4d8bfb9f55b24ca
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout d3bf75b579b980b9d83a76d3b4d8bfb9f55b24ca
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:709:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   drivers/pci/controller/pcie-mediatek-gen3.c:229:2: note: Taking false branch
           resource_list_for_each_entry(entry, &host->windows) {
           ^
   include/linux/resource_ext.h:64:2: note: expanded from macro 
'resource_list_for_each_entry'
           list_for_each_entry((entry), (list), node)
           ^
   include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   include/linux/compiler_types.h:320:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:308:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:300:3: note: expanded from macro 
'__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   drivers/pci/controller/pcie-mediatek-gen3.c:229:2: note: Loop condition is 
false.  Exiting loop
           resource_list_for_each_entry(entry, &host->windows) {
           ^
   include/linux/resource_ext.h:64:2: note: expanded from macro 
'resource_list_for_each_entry'
           list_for_each_entry((entry), (list), node)
           ^
   include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   include/linux/compiler_types.h:320:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:308:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:298:2: note: expanded from macro 
'__compiletime_assert'
           do {                                                            \
           ^
   drivers/pci/controller/pcie-mediatek-gen3.c:229:2: note: Loop condition is 
true.  Entering loop body
           resource_list_for_each_entry(entry, &host->windows) {
           ^
   include/linux/resource_ext.h:64:2: note: expanded from macro 
'resource_list_for_each_entry'
           list_for_each_entry((entry), (list), node)
           ^
   include/linux/list.h:628:2: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
           ^
   drivers/pci/controller/pcie-mediatek-gen3.c:237:7: note: Assuming 'type' is 
equal to IORESOURCE_IO
                   if (type == IORESOURCE_IO) {
                       ^~~~~~~~~~~~~~~~~~~~~
   drivers/pci/controller/pcie-mediatek-gen3.c:237:3: note: Taking true branch
                   if (type == IORESOURCE_IO) {
                   ^
   drivers/pci/controller/pcie-mediatek-gen3.c:249:9: note: Calling 
'mtk_pcie_set_trans_table'
                   err = mtk_pcie_set_trans_table(port, cpu_addr, pci_addr, 
size,
                         
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/pci/controller/pcie-mediatek-gen3.c:154:6: note: 'num' is < 
PCIE_MAX_TRANS_TABLES
           if (num >= PCIE_MAX_TRANS_TABLES) {
               ^~~
   drivers/pci/controller/pcie-mediatek-gen3.c:154:2: note: Taking false branch
           if (num >= PCIE_MAX_TRANS_TABLES) {
           ^
   drivers/pci/controller/pcie-mediatek-gen3.c:163:2: note: Loop condition is 
false.  Exiting loop
           writel_relaxed(lower_32_bits(cpu_addr) | PCIE_ATR_SIZE(fls(size) - 
1),
           ^
   arch/riscv/include/asm/mmio.h:120:33: note: expanded from macro 
'writel_relaxed'
   #define writel_relaxed(v, c)    ({ __io_rbw(); writel_cpu((v), (c)); 
__io_raw(); })
                                      ^
   arch/riscv/include/asm/mmio.h:111:21: note: expanded from macro '__io_rbw'
   #define __io_rbw()              do {} while (0)
                                   ^
   drivers/pci/controller/pcie-mediatek-gen3.c:163:43: note: The result of the 
left shift is undefined because the left operand is negative
           writel_relaxed(lower_32_bits(cpu_addr) | PCIE_ATR_SIZE(fls(size) - 
1),
                                                    ^
   drivers/pci/controller/pcie-mediatek-gen3.c:58:18: note: expanded from macro 
'PCIE_ATR_SIZE'
           (((((size) - 1) << 1) & GENMASK(6, 1)) | PCIE_ATR_EN)
                           ^
   arch/riscv/include/asm/mmio.h:120:57: note: expanded from macro 
'writel_relaxed'
   #define writel_relaxed(v, c)    ({ __io_rbw(); writel_cpu((v), (c)); 
__io_raw(); })
                                                  ~~~~~~~~~~~~^~~~~~~~
   arch/riscv/include/asm/mmio.h:93:71: note: expanded from macro 'writel_cpu'
   #define writel_cpu(v, c)        ((void)__raw_writel((__force 
u32)cpu_to_le32(v), (c)))
                                                                    
~~~~~~~~~~~~^~
   include/uapi/linux/byteorder/little_endian.h:33:51: note: expanded from 
macro '__cpu_to_le32'
   #define __cpu_to_le32(x) ((__force __le32)(__u32)(x))
                                                     ^
>> drivers/pci/controller/pcie-mediatek-gen3.c:239:4: warning: Value stored to 
>> 'range_type' is never read [clang-analyzer-deadcode.DeadStores]
                           range_type = "IO";
                           ^            ~~~~
   drivers/pci/controller/pcie-mediatek-gen3.c:239:4: note: Value stored to 
'range_type' is never read
                           range_type = "IO";
                           ^            ~~~~
   drivers/pci/controller/pcie-mediatek-gen3.c:242:4: warning: Value stored to 
'range_type' is never read [clang-analyzer-deadcode.DeadStores]
                           range_type = "MEM";
                           ^            ~~~~~
   drivers/pci/controller/pcie-mediatek-gen3.c:242:4: note: Value stored to 
'range_type' is never read
                           range_type = "MEM";
                           ^            ~~~~~
   Suppressed 7 warnings (7 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   5 warnings generated.
   Suppressed 5 warnings (5 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   5 warnings generated.
   Suppressed 5 warnings (5 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.
   5 warnings generated.
   Suppressed 5 warnings (5 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.
   5 warnings generated.
   Suppressed 5 warnings (5 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.
   5 warnings generated.
   Suppressed 5 warnings (5 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.
   5 warnings generated.
   Suppressed 5 warnings (5 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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.
   6 warnings generated.
   Suppressed 6 warnings (6 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 +/range_type +239 drivers/pci/controller/pcie-mediatek-gen3.c

d3bf75b579b980 Jianjun Wang 2021-04-20  181  
d3bf75b579b980 Jianjun Wang 2021-04-20  182  static int 
mtk_pcie_startup_port(struct mtk_pcie_port *port)
d3bf75b579b980 Jianjun Wang 2021-04-20  183  {
d3bf75b579b980 Jianjun Wang 2021-04-20  184     struct resource_entry *entry;
d3bf75b579b980 Jianjun Wang 2021-04-20  185     struct pci_host_bridge *host = 
pci_host_bridge_from_priv(port);
d3bf75b579b980 Jianjun Wang 2021-04-20  186     unsigned int table_index = 0;
d3bf75b579b980 Jianjun Wang 2021-04-20  187     int err;
d3bf75b579b980 Jianjun Wang 2021-04-20  188     u32 val;
d3bf75b579b980 Jianjun Wang 2021-04-20  189  
d3bf75b579b980 Jianjun Wang 2021-04-20  190     /* Set as RC mode */
d3bf75b579b980 Jianjun Wang 2021-04-20  191     val = readl_relaxed(port->base 
+ PCIE_SETTING_REG);
d3bf75b579b980 Jianjun Wang 2021-04-20  192     val |= PCIE_RC_MODE;
d3bf75b579b980 Jianjun Wang 2021-04-20  193     writel_relaxed(val, port->base 
+ PCIE_SETTING_REG);
d3bf75b579b980 Jianjun Wang 2021-04-20  194  
d3bf75b579b980 Jianjun Wang 2021-04-20  195     /* Set class code */
d3bf75b579b980 Jianjun Wang 2021-04-20  196     val = readl_relaxed(port->base 
+ PCIE_PCI_IDS_1);
d3bf75b579b980 Jianjun Wang 2021-04-20  197     val &= ~GENMASK(31, 8);
d3bf75b579b980 Jianjun Wang 2021-04-20  198     val |= 
PCI_CLASS(PCI_CLASS_BRIDGE_PCI << 8);
d3bf75b579b980 Jianjun Wang 2021-04-20  199     writel_relaxed(val, port->base 
+ PCIE_PCI_IDS_1);
d3bf75b579b980 Jianjun Wang 2021-04-20  200  
d3bf75b579b980 Jianjun Wang 2021-04-20  201     /* Assert all reset signals */
d3bf75b579b980 Jianjun Wang 2021-04-20  202     val = readl_relaxed(port->base 
+ PCIE_RST_CTRL_REG);
d3bf75b579b980 Jianjun Wang 2021-04-20  203     val |= PCIE_MAC_RSTB | 
PCIE_PHY_RSTB | PCIE_BRG_RSTB | PCIE_PE_RSTB;
d3bf75b579b980 Jianjun Wang 2021-04-20  204     writel_relaxed(val, port->base 
+ PCIE_RST_CTRL_REG);
d3bf75b579b980 Jianjun Wang 2021-04-20  205  
d3bf75b579b980 Jianjun Wang 2021-04-20  206     /*
d3bf75b579b980 Jianjun Wang 2021-04-20  207      * Described in PCIe CEM 
specification setctions 2.2 (PERST# Signal)
d3bf75b579b980 Jianjun Wang 2021-04-20  208      * and 2.2.1 (Initial Power-Up 
(G3 to S0)).
d3bf75b579b980 Jianjun Wang 2021-04-20  209      * The deassertion of PERST# 
should be delayed 100ms (TPVPERL)
d3bf75b579b980 Jianjun Wang 2021-04-20  210      * for the power and clock to 
become stable.
d3bf75b579b980 Jianjun Wang 2021-04-20  211      */
d3bf75b579b980 Jianjun Wang 2021-04-20  212     msleep(100);
d3bf75b579b980 Jianjun Wang 2021-04-20  213  
d3bf75b579b980 Jianjun Wang 2021-04-20  214     /* De-assert reset signals */
d3bf75b579b980 Jianjun Wang 2021-04-20  215     val &= ~(PCIE_MAC_RSTB | 
PCIE_PHY_RSTB | PCIE_BRG_RSTB | PCIE_PE_RSTB);
d3bf75b579b980 Jianjun Wang 2021-04-20  216     writel_relaxed(val, port->base 
+ PCIE_RST_CTRL_REG);
d3bf75b579b980 Jianjun Wang 2021-04-20  217  
d3bf75b579b980 Jianjun Wang 2021-04-20  218     /* Check if the link is up or 
not */
d3bf75b579b980 Jianjun Wang 2021-04-20  219     err = 
readl_poll_timeout(port->base + PCIE_LINK_STATUS_REG, val,
d3bf75b579b980 Jianjun Wang 2021-04-20  220                              !!(val 
& PCIE_PORT_LINKUP), 20,
d3bf75b579b980 Jianjun Wang 2021-04-20  221                              
PCI_PM_D3COLD_WAIT * USEC_PER_MSEC);
d3bf75b579b980 Jianjun Wang 2021-04-20  222     if (err) {
d3bf75b579b980 Jianjun Wang 2021-04-20  223             val = 
readl_relaxed(port->base + PCIE_LTSSM_STATUS_REG);
d3bf75b579b980 Jianjun Wang 2021-04-20  224             dev_err(port->dev, 
"PCIe link down, ltssm reg val: %#x\n", val);
d3bf75b579b980 Jianjun Wang 2021-04-20  225             return err;
d3bf75b579b980 Jianjun Wang 2021-04-20  226     }
d3bf75b579b980 Jianjun Wang 2021-04-20  227  
d3bf75b579b980 Jianjun Wang 2021-04-20  228     /* Set PCIe translation windows 
*/
d3bf75b579b980 Jianjun Wang 2021-04-20  229     
resource_list_for_each_entry(entry, &host->windows) {
d3bf75b579b980 Jianjun Wang 2021-04-20  230             struct resource *res = 
entry->res;
d3bf75b579b980 Jianjun Wang 2021-04-20  231             unsigned long type = 
resource_type(res);
d3bf75b579b980 Jianjun Wang 2021-04-20  232             resource_size_t 
cpu_addr;
d3bf75b579b980 Jianjun Wang 2021-04-20  233             resource_size_t 
pci_addr;
d3bf75b579b980 Jianjun Wang 2021-04-20  234             resource_size_t size;
d3bf75b579b980 Jianjun Wang 2021-04-20  235             const char *range_type;
d3bf75b579b980 Jianjun Wang 2021-04-20  236  
d3bf75b579b980 Jianjun Wang 2021-04-20  237             if (type == 
IORESOURCE_IO) {
d3bf75b579b980 Jianjun Wang 2021-04-20  238                     cpu_addr = 
pci_pio_to_address(res->start);
d3bf75b579b980 Jianjun Wang 2021-04-20 @239                     range_type = 
"IO";
d3bf75b579b980 Jianjun Wang 2021-04-20  240             } else if (type == 
IORESOURCE_MEM) {
d3bf75b579b980 Jianjun Wang 2021-04-20  241                     cpu_addr = 
res->start;
d3bf75b579b980 Jianjun Wang 2021-04-20  242                     range_type = 
"MEM";
d3bf75b579b980 Jianjun Wang 2021-04-20  243             } else {
d3bf75b579b980 Jianjun Wang 2021-04-20  244                     continue;
d3bf75b579b980 Jianjun Wang 2021-04-20  245             }
d3bf75b579b980 Jianjun Wang 2021-04-20  246  
d3bf75b579b980 Jianjun Wang 2021-04-20  247             pci_addr = res->start - 
entry->offset;
d3bf75b579b980 Jianjun Wang 2021-04-20  248             size = 
resource_size(res);
d3bf75b579b980 Jianjun Wang 2021-04-20  249             err = 
mtk_pcie_set_trans_table(port, cpu_addr, pci_addr, size,
d3bf75b579b980 Jianjun Wang 2021-04-20  250                                     
       type, table_index);
d3bf75b579b980 Jianjun Wang 2021-04-20  251             if (err)
d3bf75b579b980 Jianjun Wang 2021-04-20  252                     return err;
d3bf75b579b980 Jianjun Wang 2021-04-20  253  
d3bf75b579b980 Jianjun Wang 2021-04-20  254             dev_dbg(port->dev, "set 
%s trans window[%d]: cpu_addr = %#llx, pci_addr = %#llx, size = %#llx\n",
d3bf75b579b980 Jianjun Wang 2021-04-20  255                     range_type, 
table_index, (unsigned long long)cpu_addr,
d3bf75b579b980 Jianjun Wang 2021-04-20  256                     (unsigned long 
long)pci_addr, (unsigned long long)size);
d3bf75b579b980 Jianjun Wang 2021-04-20  257  
d3bf75b579b980 Jianjun Wang 2021-04-20  258             table_index++;
d3bf75b579b980 Jianjun Wang 2021-04-20  259     }
d3bf75b579b980 Jianjun Wang 2021-04-20  260  
d3bf75b579b980 Jianjun Wang 2021-04-20  261     return 0;
d3bf75b579b980 Jianjun Wang 2021-04-20  262  }
d3bf75b579b980 Jianjun Wang 2021-04-20  263  

---
0-DAY CI Kernel Test Service
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to