From: kernel test robot <lkp@intel.com>
To: JC Kuo <jckuo@nvidia.com>,
gregkh@linuxfoundation.org, thierry.reding@gmail.com,
robh@kernel.org, jonathanh@nvidia.com, kishon@ti.com
Cc: kbuild-all@lists.01.org, clang-built-linux@googlegroups.com,
linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
nkristam@nvidia.com
Subject: Re: [PATCH v2 08/12] phy: tegra: xusb: t210: support wake and sleepwalk
Date: Tue, 1 Sep 2020 23:14:23 +0800 [thread overview]
Message-ID: <202009012322.ECyJxITw%lkp@intel.com> (raw)
In-Reply-To: <20200831044043.1561074-9-jckuo@nvidia.com>
[-- Attachment #1: Type: text/plain, Size: 13587 bytes --]
Hi JC,
I love your patch! Perhaps something to improve:
[auto build test WARNING on tegra/for-next]
[also build test WARNING on robh/for-next usb/usb-testing char-misc/char-misc-testing staging/staging-testing driver-core/driver-core-testing v5.9-rc3 next-20200828]
[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/JC-Kuo/Tegra-XHCI-controller-ELPG-support/20200831-124234
base: https://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git for-next
config: arm64-randconfig-r014-20200901 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c10e63677f5d20f18010f8f68c631ddc97546f7d)
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 arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/phy/tegra/xusb-tegra210.c:1368:5: warning: no previous prototype for function 'tegra_pmc_utmi_enable_phy_sleepwalk' [-Wmissing-prototypes]
int tegra_pmc_utmi_enable_phy_sleepwalk(struct phy *phy,
^
drivers/phy/tegra/xusb-tegra210.c:1368:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int tegra_pmc_utmi_enable_phy_sleepwalk(struct phy *phy,
^
static
>> drivers/phy/tegra/xusb-tegra210.c:1527:5: warning: no previous prototype for function 'tegra_pmc_utmi_disable_phy_sleepwalk' [-Wmissing-prototypes]
int tegra_pmc_utmi_disable_phy_sleepwalk(struct phy *phy)
^
drivers/phy/tegra/xusb-tegra210.c:1527:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int tegra_pmc_utmi_disable_phy_sleepwalk(struct phy *phy)
^
static
>> drivers/phy/tegra/xusb-tegra210.c:1577:5: warning: no previous prototype for function 'tegra_pmc_hsic_enable_phy_sleepwalk' [-Wmissing-prototypes]
int tegra_pmc_hsic_enable_phy_sleepwalk(struct phy *phy)
^
drivers/phy/tegra/xusb-tegra210.c:1577:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int tegra_pmc_hsic_enable_phy_sleepwalk(struct phy *phy)
^
static
>> drivers/phy/tegra/xusb-tegra210.c:1680:5: warning: no previous prototype for function 'tegra_pmc_hsic_disable_phy_sleepwalk' [-Wmissing-prototypes]
int tegra_pmc_hsic_disable_phy_sleepwalk(struct phy *phy)
^
drivers/phy/tegra/xusb-tegra210.c:1680:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int tegra_pmc_hsic_disable_phy_sleepwalk(struct phy *phy)
^
static
>> drivers/phy/tegra/xusb-tegra210.c:3036:5: warning: no previous prototype for function 'tegra210_xusb_padctl_remote_wake_detected' [-Wmissing-prototypes]
int tegra210_xusb_padctl_remote_wake_detected(struct phy *phy)
^
drivers/phy/tegra/xusb-tegra210.c:3036:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int tegra210_xusb_padctl_remote_wake_detected(struct phy *phy)
^
static
5 warnings generated.
# https://github.com/0day-ci/linux/commit/85501cb657fc0bbb792dc08358e31fad69c8b13c
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review JC-Kuo/Tegra-XHCI-controller-ELPG-support/20200831-124234
git checkout 85501cb657fc0bbb792dc08358e31fad69c8b13c
vim +/tegra_pmc_utmi_enable_phy_sleepwalk +1368 drivers/phy/tegra/xusb-tegra210.c
1366
1367 /* T210 USB2 SLEEPWALK APIs */
> 1368 int tegra_pmc_utmi_enable_phy_sleepwalk(struct phy *phy,
1369 enum usb_device_speed speed)
1370 {
1371 struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1372 struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1373 struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1374 struct device *dev = padctl->dev;
1375 unsigned int port = lane->index;
1376 u32 val, tctrl, pctrl, rpd_ctrl;
1377
1378 if (speed > USB_SPEED_HIGH)
1379 return -EINVAL;
1380
1381 dev_dbg(dev, "phy enable sleepwalk usb2 %d speed %d\n", port, speed);
1382
1383 val = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
1384 tctrl = TCTRL_VALUE(val);
1385 pctrl = PCTRL_VALUE(val);
1386
1387 val = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(port));
1388 rpd_ctrl = RPD_CTRL_VALUE(val);
1389
1390 /* ensure sleepwalk logic is disabled */
1391 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1392 val &= ~UTMIP_MASTER_ENABLE(port);
1393 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1394
1395 /* ensure sleepwalk logics are in low power mode */
1396 val = padctl_pmc_readl(priv, PMC_UTMIP_MASTER_CONFIG);
1397 val |= UTMIP_PWR(port);
1398 padctl_pmc_writel(priv, val, PMC_UTMIP_MASTER_CONFIG);
1399
1400 /* set debounce time */
1401 val = padctl_pmc_readl(priv, PMC_USB_DEBOUNCE_DEL);
1402 val &= ~UTMIP_LINE_DEB_CNT(~0);
1403 val |= UTMIP_LINE_DEB_CNT(0x1);
1404 padctl_pmc_writel(priv, val, PMC_USB_DEBOUNCE_DEL);
1405
1406 /* ensure fake events of sleepwalk logic are desiabled */
1407 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_FAKE(port));
1408 val &= ~(UTMIP_FAKE_USBOP_VAL(port) | UTMIP_FAKE_USBON_VAL(port) |
1409 UTMIP_FAKE_USBOP_EN(port) | UTMIP_FAKE_USBON_EN(port));
1410 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_FAKE(port));
1411
1412 /* ensure wake events of sleepwalk logic are not latched */
1413 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1414 val &= ~UTMIP_LINE_WAKEUP_EN(port);
1415 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1416
1417 /* disable wake event triggers of sleepwalk logic */
1418 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1419 val &= ~UTMIP_WAKE_VAL(port, ~0);
1420 val |= UTMIP_WAKE_VAL_NONE(port);
1421 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1422
1423 /* power down the line state detectors of the pad */
1424 val = padctl_pmc_readl(priv, PMC_USB_AO);
1425 val |= (USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1426 padctl_pmc_writel(priv, val, PMC_USB_AO);
1427
1428 /* save state per speed */
1429 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SAVED_STATE(port));
1430 val &= ~SPEED(port, ~0);
1431 if (speed == USB_SPEED_HIGH)
1432 val |= UTMI_HS(port);
1433 else if (speed == USB_SPEED_FULL)
1434 val |= UTMI_FS(port);
1435 else if (speed == USB_SPEED_LOW)
1436 val |= UTMI_LS(port);
1437 else
1438 val |= UTMI_RST(port);
1439 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_SAVED_STATE(port));
1440
1441 /* enable the trigger of the sleepwalk logic */
1442 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEPWALK_CFG(port));
1443 val |= UTMIP_LINEVAL_WALK_EN(port);
1444 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_SLEEPWALK_CFG(port));
1445
1446 /* reset the walk pointer and clear the alarm of the sleepwalk logic,
1447 * as well as capture the configuration of the USB2.0 pad
1448 */
1449 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1450 val |= (UTMIP_CLR_WALK_PTR(port) | UTMIP_CLR_WAKE_ALARM(port) |
1451 UTMIP_CAP_CFG(port));
1452 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_TRIGGERS);
1453
1454 /* program electrical parameters read from XUSB PADCTL */
1455 val = padctl_pmc_readl(priv, PMC_UTMIP_TERM_PAD_CFG);
1456 val &= ~(TCTRL_VAL(~0) | PCTRL_VAL(~0));
1457 val |= (TCTRL_VAL(tctrl) | PCTRL_VAL(pctrl));
1458 padctl_pmc_writel(priv, val, PMC_UTMIP_TERM_PAD_CFG);
1459
1460 val = padctl_pmc_readl(priv, PMC_UTMIP_PAD_CFGX(port));
1461 val &= ~RPD_CTRL_PX(~0);
1462 val |= RPD_CTRL_PX(rpd_ctrl);
1463 padctl_pmc_writel(priv, val, PMC_UTMIP_PAD_CFGX(port));
1464
1465 /* setup the pull-ups and pull-downs of the signals during the four
1466 * stages of sleepwalk.
1467 * if device is connected, program sleepwalk logic to maintain a J and
1468 * keep driving K upon seeing remote wake.
1469 */
1470 val = padctl_pmc_readl(priv, PMC_UTMIP_SLEEPWALK_PX(port));
1471 val = (UTMIP_USBOP_RPD_A | UTMIP_USBOP_RPD_B | UTMIP_USBOP_RPD_C |
1472 UTMIP_USBOP_RPD_D);
1473 val |= (UTMIP_USBON_RPD_A | UTMIP_USBON_RPD_B | UTMIP_USBON_RPD_C |
1474 UTMIP_USBON_RPD_D);
1475 if (speed == USB_SPEED_UNKNOWN) {
1476 val |= (UTMIP_HIGHZ_A | UTMIP_HIGHZ_B | UTMIP_HIGHZ_C |
1477 UTMIP_HIGHZ_D);
1478 } else if ((speed == USB_SPEED_HIGH) || (speed == USB_SPEED_FULL)) {
1479 /* J state: D+/D- = high/low, K state: D+/D- = low/high */
1480 val |= UTMIP_HIGHZ_A;
1481 val |= UTMIP_AP_A;
1482 val |= (UTMIP_AN_B | UTMIP_AN_C | UTMIP_AN_D);
1483 } else if (speed == USB_SPEED_LOW) {
1484 /* J state: D+/D- = low/high, K state: D+/D- = high/low */
1485 val |= UTMIP_HIGHZ_A;
1486 val |= UTMIP_AN_A;
1487 val |= (UTMIP_AP_B | UTMIP_AP_C | UTMIP_AP_D);
1488 }
1489 padctl_pmc_writel(priv, val, PMC_UTMIP_SLEEPWALK_PX(port));
1490
1491 /* power up the line state detectors of the pad */
1492 val = padctl_pmc_readl(priv, PMC_USB_AO);
1493 val &= ~(USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1494 padctl_pmc_writel(priv, val, PMC_USB_AO);
1495
1496 usleep_range(50, 100);
1497
1498 /* switch the electric control of the USB2.0 pad to PMC */
1499 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1500 val |= (UTMIP_FSLS_USE_PMC(port) | UTMIP_PCTRL_USE_PMC(port) |
1501 UTMIP_TCTRL_USE_PMC(port));
1502 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1503
1504 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1505 val |= (UTMIP_RPD_CTRL_USE_PMC_PX(port) |
1506 UTMIP_RPU_SWITC_LOW_USE_PMC_PX(port));
1507 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1508
1509 /* set the wake signaling trigger events */
1510 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1511 val &= ~UTMIP_WAKE_VAL(port, ~0);
1512 val |= UTMIP_WAKE_VAL_ANY(port);
1513 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1514
1515 /* enable the wake detection */
1516 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1517 val |= UTMIP_MASTER_ENABLE(port);
1518 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1519
1520 val = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1521 val |= UTMIP_LINE_WAKEUP_EN(port);
1522 padctl_pmc_writel(priv, val, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1523
1524 return 0;
1525 }
1526
> 1527 int tegra_pmc_utmi_disable_phy_sleepwalk(struct phy *phy)
1528 {
1529 struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1530 struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1531 struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1532 struct device *dev = padctl->dev;
1533 unsigned int port = lane->index;
1534 u32 value;
1535
1536 dev_dbg(dev, "phy disable sleepwalk usb2 %d\n", port);
1537
1538 /* disable the wake detection */
1539 value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1540 value &= ~UTMIP_MASTER_ENABLE(port);
1541 padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1542
1543 value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1544 value &= ~UTMIP_LINE_WAKEUP_EN(port);
1545 padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1546
1547 /* switch the electric control of the USB2.0 pad to XUSB or USB2 */
1548 value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1549 value &= ~(UTMIP_FSLS_USE_PMC(port) | UTMIP_PCTRL_USE_PMC(port) |
1550 UTMIP_TCTRL_USE_PMC(port));
1551 padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1552
1553 value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1554 value &= ~(UTMIP_RPD_CTRL_USE_PMC_PX(port) |
1555 UTMIP_RPU_SWITC_LOW_USE_PMC_PX(port));
1556 padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1557
1558 /* disable wake event triggers of sleepwalk logic */
1559 value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1560 value &= ~UTMIP_WAKE_VAL(port, ~0);
1561 value |= UTMIP_WAKE_VAL_NONE(port);
1562 padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1563
1564 /* power down the line state detectors of the port */
1565 value = padctl_pmc_readl(priv, PMC_USB_AO);
1566 value |= (USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1567 padctl_pmc_writel(priv, value, PMC_USB_AO);
1568
1569 /* clear alarm of the sleepwalk logic */
1570 value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1571 value |= UTMIP_CLR_WAKE_ALARM(port);
1572 padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1573
1574 return 0;
1575 }
1576
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37356 bytes --]
next prev parent reply other threads:[~2020-09-01 17:15 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-31 4:40 [PATCH v2 00/12] Tegra XHCI controller ELPG support JC Kuo
2020-08-31 4:40 ` [PATCH v2 01/12] clk: tegra: Add PLLE HW power sequencer control JC Kuo
2020-08-31 4:40 ` [PATCH v2 02/12] clk: tegra: don't enable PLLE HW sequencer at init JC Kuo
2020-08-31 4:40 ` [PATCH v2 03/12] phy: tegra: xusb: t210: rearrange UPHY init JC Kuo
2020-08-31 11:42 ` Thierry Reding
2020-09-04 9:10 ` JC Kuo
2020-08-31 4:40 ` [PATCH v2 04/12] phy: tegra: xusb: t210: add lane_iddq operations JC Kuo
2020-08-31 11:53 ` Thierry Reding
2020-09-07 2:26 ` JC Kuo
2020-08-31 4:40 ` [PATCH v2 05/12] phy: tegra: xusb: add sleepwalk and suspend/resume JC Kuo
2020-08-31 11:58 ` Thierry Reding
2020-09-07 2:34 ` JC Kuo
2020-08-31 4:40 ` [PATCH v2 06/12] soc/tegra: pmc: provide usb sleepwalk register map JC Kuo
2020-08-31 12:09 ` Thierry Reding
2020-09-07 3:07 ` JC Kuo
2020-08-31 4:40 ` [PATCH v2 07/12] arm64: tegra210: XUSB PADCTL add "nvidia,pmc" prop JC Kuo
2020-08-31 4:40 ` [PATCH v2 08/12] phy: tegra: xusb: t210: support wake and sleepwalk JC Kuo
2020-08-31 12:37 ` Thierry Reding
2020-09-08 1:14 ` JC Kuo
2020-09-01 15:14 ` kernel test robot [this message]
2020-08-31 4:40 ` [PATCH v2 09/12] phy: tegra: xusb: t186: " JC Kuo
2020-08-31 12:38 ` Thierry Reding
2020-09-01 16:51 ` kernel test robot
2020-08-31 4:40 ` [PATCH v2 10/12] arm64: tegra210/tegra186/tegra194: XUSB PADCTL irq JC Kuo
2020-08-31 4:40 ` [PATCH v2 11/12] usb: host: xhci-tegra: unlink power domain devices JC Kuo
2020-08-31 12:42 ` Thierry Reding
2020-09-08 2:19 ` JC Kuo
2020-08-31 4:40 ` [PATCH v2 12/12] xhci: tegra: enable ELPG for runtime/system PM JC Kuo
2020-08-31 12:50 ` Thierry Reding
2020-09-08 2:29 ` JC Kuo
2020-09-01 20:33 ` Dmitry Osipenko
2020-09-08 2:42 ` JC Kuo
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=202009012322.ECyJxITw%lkp@intel.com \
--to=lkp@intel.com \
--cc=clang-built-linux@googlegroups.com \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=jckuo@nvidia.com \
--cc=jonathanh@nvidia.com \
--cc=kbuild-all@lists.01.org \
--cc=kishon@ti.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=nkristam@nvidia.com \
--cc=robh@kernel.org \
--cc=thierry.reding@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).