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]
