Re: [PATCH v3 2/2] usb: roles: intel: Enable static DRD mode for role switch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Saranya,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[cannot apply to v5.3-rc6 next-20190827]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Saranya-Gopal/xhci-ext-caps-c-Add-property-to-disable-Intel-SW-switch/20190829-031957
config: x86_64-allyesconfig (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers/usb/roles/intel-xhci-usb-role-switch.c: In function 'intel_xhci_usb_set_role':
>> drivers/usb/roles/intel-xhci-usb-role-switch.c:55:16: warning: 'drd_config' may be used uninitialized in this function [-Wmaybe-uninitialized]
     u32 glk, val, drd_config;
                   ^~~~~~~~~~

vim +/drd_config +55 drivers/usb/roles/intel-xhci-usb-role-switch.c

    49	
    50	static int intel_xhci_usb_set_role(struct device *dev, enum usb_role role)
    51	{
    52		struct intel_xhci_usb_data *data = dev_get_drvdata(dev);
    53		unsigned long timeout;
    54		acpi_status status;
  > 55		u32 glk, val, drd_config;
    56	
    57		/*
    58		 * On many CHT devices ACPI event (_AEI) handlers read / modify /
    59		 * write the cfg0 register, just like we do. Take the ACPI lock
    60		 * to avoid us racing with the AML code.
    61		 */
    62		status = acpi_acquire_global_lock(ACPI_WAIT_FOREVER, &glk);
    63		if (ACPI_FAILURE(status) && status != AE_NOT_CONFIGURED) {
    64			dev_err(dev, "Error could not acquire lock\n");
    65			return -EIO;
    66		}
    67	
    68		pm_runtime_get_sync(dev);
    69	
    70		/*
    71		 * Set idpin value as requested.
    72		 * Since some devices rely on firmware setting DRD_CONFIG and
    73		 * SW_SWITCH_EN bits to be zero for role switch,
    74		 * do not set these bits for those devices.
    75		 */
    76		val = readl(data->base + DUAL_ROLE_CFG0);
    77		switch (role) {
    78		case USB_ROLE_NONE:
    79			val |= SW_IDPIN;
    80			val &= ~SW_VBUS_VALID;
    81			drd_config = DRD_CONFIG_DYNAMIC;
    82			break;
    83		case USB_ROLE_HOST:
    84			val &= ~SW_IDPIN;
    85			val &= ~SW_VBUS_VALID;
    86			drd_config = DRD_CONFIG_STATIC_HOST;
    87			break;
    88		case USB_ROLE_DEVICE:
    89			val |= SW_IDPIN;
    90			val |= SW_VBUS_VALID;
    91			drd_config = DRD_CONFIG_STATIC_DEVICE;
    92			break;
    93		}
    94		val |= SW_IDPIN_EN;
    95		if (data->enable_sw_switch) {
    96			val &= ~DRD_CONFIG_MASK;
    97			val |= SW_SWITCH_EN | drd_config;
    98		}
    99		writel(val, data->base + DUAL_ROLE_CFG0);
   100	
   101		acpi_release_global_lock(glk);
   102	
   103		/* In most case it takes about 600ms to finish mode switching */
   104		timeout = jiffies + msecs_to_jiffies(DUAL_ROLE_CFG1_POLL_TIMEOUT);
   105	
   106		/* Polling on CFG1 register to confirm mode switch.*/
   107		do {
   108			val = readl(data->base + DUAL_ROLE_CFG1);
   109			if (!!(val & HOST_MODE) == (role == USB_ROLE_HOST)) {
   110				pm_runtime_put(dev);
   111				return 0;
   112			}
   113	
   114			/* Interval for polling is set to about 5 - 10 ms */
   115			usleep_range(5000, 10000);
   116		} while (time_before(jiffies, timeout));
   117	
   118		pm_runtime_put(dev);
   119	
   120		dev_warn(dev, "Timeout waiting for role-switch\n");
   121		return -ETIMEDOUT;
   122	}
   123	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux