Hi Peter, I love your patch! Perhaps something to improve: [auto build test WARNING on usb/usb-testing] [also build test WARNING on balbi-usb/testing/next shawnguo/for-next peter.chen-usb/ci-for-usb-next v5.9-rc2 next-20200824] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Peter-Chen/usb-cdns3-add-runtime-pm-support/20200821-105133 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: i386-randconfig-s002-20200824 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.2-191-g10164920-dirty # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> sparse warnings: (new ones prefixed by >>) >> drivers/usb/cdns3/cdns3-imx.c:256:35: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void [noderef] __iomem *otg_regs @@ got void * @@ >> drivers/usb/cdns3/cdns3-imx.c:256:35: sparse: expected void [noderef] __iomem *otg_regs >> drivers/usb/cdns3/cdns3-imx.c:256:35: sparse: got void * # https://github.com/0day-ci/linux/commit/7645672191d1842aa5744b38c0b8cc7df217dde3 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Peter-Chen/usb-cdns3-add-runtime-pm-support/20200821-105133 git checkout 7645672191d1842aa5744b38c0b8cc7df217dde3 vim +256 drivers/usb/cdns3/cdns3-imx.c 249 250 static int cdns_imx_platform_suspend(struct device *dev, 251 bool suspend, bool wakeup) 252 { 253 struct cdns3 *cdns = dev_get_drvdata(dev); 254 struct device *parent = dev->parent; 255 struct cdns_imx *data = dev_get_drvdata(parent); > 256 void __iomem *otg_regs = (void *)(cdns->otg_regs); 257 void __iomem *xhci_regs = cdns->xhci_regs; 258 u32 value; 259 int ret = 0; 260 261 if (cdns->role != USB_ROLE_HOST) 262 return 0; 263 264 if (suspend) { 265 /* SW request low power when all usb ports allow to it ??? */ 266 value = readl(xhci_regs + XECP_PM_PMCSR); 267 value &= ~PS_MASK; 268 value |= PS_D1; 269 writel(value, xhci_regs + XECP_PM_PMCSR); 270 271 /* mdctrl_clk_sel */ 272 value = cdns_imx_readl(data, USB3_CORE_CTRL1); 273 value |= MDCTRL_CLK_SEL; 274 cdns_imx_writel(data, USB3_CORE_CTRL1, value); 275 276 /* wait for mdctrl_clk_status */ 277 value = cdns_imx_readl(data, USB3_CORE_STATUS); 278 ret = readl_poll_timeout(data->noncore + USB3_CORE_STATUS, value, 279 (value & MDCTRL_CLK_STATUS) == MDCTRL_CLK_STATUS, 280 10, 100000); 281 if (ret) 282 dev_warn(parent, "wait mdctrl_clk_status timeout\n"); 283 284 /* wait lpm_clk_req to be 0 */ 285 value = cdns_imx_readl(data, USB3_INT_REG); 286 ret = readl_poll_timeout(data->noncore + USB3_INT_REG, value, 287 (value & LPM_CLK_REQ) != LPM_CLK_REQ, 288 10, 100000); 289 if (ret) 290 dev_warn(parent, "wait lpm_clk_req timeout\n"); 291 292 /* wait phy_refclk_req to be 0 */ 293 value = cdns_imx_readl(data, USB3_SSPHY_STATUS); 294 ret = readl_poll_timeout(data->noncore + USB3_SSPHY_STATUS, value, 295 (value & PHY_REFCLK_REQ) != PHY_REFCLK_REQ, 296 10, 100000); 297 if (ret) 298 dev_warn(parent, "wait phy_refclk_req timeout\n"); 299 300 cdns3_set_wakeup(data, wakeup); 301 } else { 302 cdns3_set_wakeup(data, false); 303 304 /* SW request D0 */ 305 value = readl(xhci_regs + XECP_PM_PMCSR); 306 value &= ~PS_MASK; 307 value |= PS_D0; 308 writel(value, xhci_regs + XECP_PM_PMCSR); 309 310 /* clr CFG_RXDET_P3_EN */ 311 value = readl(xhci_regs + XECP_AUX_CTRL_REG1); 312 value &= ~CFG_RXDET_P3_EN; 313 writel(value, xhci_regs + XECP_AUX_CTRL_REG1); 314 315 /* clear mdctrl_clk_sel */ 316 value = cdns_imx_readl(data, USB3_CORE_CTRL1); 317 value &= ~MDCTRL_CLK_SEL; 318 cdns_imx_writel(data, USB3_CORE_CTRL1, value); 319 320 /* wait CLK_125_REQ to be 1 */ 321 value = cdns_imx_readl(data, USB3_INT_REG); 322 ret = readl_poll_timeout(data->noncore + USB3_INT_REG, value, 323 (value & CLK_125_REQ) == CLK_125_REQ, 324 10, 100000); 325 if (ret) 326 dev_warn(parent, "wait CLK_125_REQ timeout\n"); 327 328 /* wait for mdctrl_clk_status is cleared */ 329 value = cdns_imx_readl(data, USB3_CORE_STATUS); 330 ret = readl_poll_timeout(data->noncore + USB3_CORE_STATUS, value, 331 (value & MDCTRL_CLK_STATUS) != MDCTRL_CLK_STATUS, 332 10, 100000); 333 if (ret) 334 dev_warn(parent, "wait mdctrl_clk_status cleared timeout\n"); 335 336 /* Wait until OTG_NRDY is 0 */ 337 value = readl(otg_regs + OTGSTS); 338 ret = readl_poll_timeout(otg_regs + OTGSTS, value, 339 (value & OTG_NRDY) != OTG_NRDY, 340 10, 100000); 341 if (ret) 342 dev_warn(parent, "wait OTG ready timeout\n"); 343 } 344 345 return ret; 346 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip