Hi Pawel, Thank you for the patch! Yet something to improve: [auto build test ERROR on usb/usb-testing] [also build test ERROR on peter.chen-usb/ci-for-usb-next v5.9-rc7] [cannot apply to balbi-usb/testing/next next-20200928] [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/Pawel-Laszczak/Introduced-new-Cadence-USBSSP-DRD-Driver/20200928-213141 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: arc-allyesconfig (attached as .config) compiler: arceb-elf-gcc (GCC) 9.3.0 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 # https://github.com/0day-ci/linux/commit/842d0440dd389220f5ad794e6200d0bb253deece git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Pawel-Laszczak/Introduced-new-Cadence-USBSSP-DRD-Driver/20200928-213141 git checkout 842d0440dd389220f5ad794e6200d0bb253deece # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>): drivers/usb/cdns3/core.c: In function 'cdns_core_init_role': >> drivers/usb/cdns3/core.c:192:2: error: implicit declaration of function 'cdns3_exit_roles'; did you mean 'cdns_exit_roles'? [-Werror=implicit-function-declaration] 192 | cdns3_exit_roles(cdns); | ^~~~~~~~~~~~~~~~ | cdns_exit_roles cc1: some warnings being treated as errors vim +192 drivers/usb/cdns3/core.c 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 77 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 78 /** 842d0440dd38922 Pawel Laszczak 2020-09-28 79 * cdns_core_init_role - initialize role of operation 842d0440dd38922 Pawel Laszczak 2020-09-28 80 * @cdns: Pointer to cdns structure 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 81 * 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 82 * Returns 0 on success otherwise negative errno 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 83 */ 842d0440dd38922 Pawel Laszczak 2020-09-28 84 static int cdns_core_init_role(struct cdns *cdns) 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 85 { 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 86 struct device *dev = cdns->dev; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 87 enum usb_dr_mode best_dr_mode; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 88 enum usb_dr_mode dr_mode; 27afe1661275213 Pawel Laszczak 2020-07-13 89 int ret; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 90 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 91 dr_mode = usb_get_dr_mode(dev); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 92 cdns->role = USB_ROLE_NONE; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 93 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 94 /* 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 95 * If driver can't read mode by means of usb_get_dr_mode function then 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 96 * chooses mode according with Kernel configuration. This setting 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 97 * can be restricted later depending on strap pin configuration. 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 98 */ 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 99 if (dr_mode == USB_DR_MODE_UNKNOWN) { eae92a4ab847878 Pawel Laszczak 2020-09-28 100 if (cdns->version == CDNSP_CONTROLLER_V2) { eae92a4ab847878 Pawel Laszczak 2020-09-28 101 if (IS_ENABLED(CONFIG_USB_CDNSP_HOST) && eae92a4ab847878 Pawel Laszczak 2020-09-28 102 IS_ENABLED(CONFIG_USB_CDNSP_GADGET)) eae92a4ab847878 Pawel Laszczak 2020-09-28 103 dr_mode = USB_DR_MODE_OTG; eae92a4ab847878 Pawel Laszczak 2020-09-28 104 else if (IS_ENABLED(CONFIG_USB_CDNSP_HOST)) eae92a4ab847878 Pawel Laszczak 2020-09-28 105 dr_mode = USB_DR_MODE_HOST; eae92a4ab847878 Pawel Laszczak 2020-09-28 106 else if (IS_ENABLED(CONFIG_USB_CDNSP_GADGET)) eae92a4ab847878 Pawel Laszczak 2020-09-28 107 dr_mode = USB_DR_MODE_PERIPHERAL; eae92a4ab847878 Pawel Laszczak 2020-09-28 108 } else { 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 109 if (IS_ENABLED(CONFIG_USB_CDNS3_HOST) && 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 110 IS_ENABLED(CONFIG_USB_CDNS3_GADGET)) 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 111 dr_mode = USB_DR_MODE_OTG; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 112 else if (IS_ENABLED(CONFIG_USB_CDNS3_HOST)) 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 113 dr_mode = USB_DR_MODE_HOST; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 114 else if (IS_ENABLED(CONFIG_USB_CDNS3_GADGET)) 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 115 dr_mode = USB_DR_MODE_PERIPHERAL; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 116 } eae92a4ab847878 Pawel Laszczak 2020-09-28 117 } 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 118 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 119 /* 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 120 * At this point cdns->dr_mode contains strap configuration. 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 121 * Driver try update this setting considering kernel configuration 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 122 */ 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 123 best_dr_mode = cdns->dr_mode; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 124 842d0440dd38922 Pawel Laszczak 2020-09-28 125 ret = cdns_idle_init(cdns); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 126 if (ret) 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 127 return ret; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 128 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 129 if (dr_mode == USB_DR_MODE_OTG) { 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 130 best_dr_mode = cdns->dr_mode; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 131 } else if (cdns->dr_mode == USB_DR_MODE_OTG) { 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 132 best_dr_mode = dr_mode; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 133 } else if (cdns->dr_mode != dr_mode) { 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 134 dev_err(dev, "Incorrect DRD configuration\n"); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 135 return -EINVAL; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 136 } 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 137 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 138 dr_mode = best_dr_mode; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 139 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 140 if (dr_mode == USB_DR_MODE_OTG || dr_mode == USB_DR_MODE_HOST) { 842d0440dd38922 Pawel Laszczak 2020-09-28 141 ret = cdns_host_init(cdns); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 142 if (ret) { 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 143 dev_err(dev, "Host initialization failed with %d\n", 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 144 ret); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 145 goto err; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 146 } 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 147 } 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 148 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 149 if (dr_mode == USB_DR_MODE_OTG || dr_mode == USB_DR_MODE_PERIPHERAL) { 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 150 ret = cdns3_gadget_init(cdns); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 151 if (ret) { 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 152 dev_err(dev, "Device initialization failed with %d\n", 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 153 ret); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 154 goto err; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 155 } 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 156 } 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 157 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 158 cdns->dr_mode = dr_mode; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 159 842d0440dd38922 Pawel Laszczak 2020-09-28 160 ret = cdns_drd_update_mode(cdns); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 161 if (ret) 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 162 goto err; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 163 02ffc26df96b487 Roger Quadros 2019-10-07 164 /* Initialize idle role to start with */ 842d0440dd38922 Pawel Laszczak 2020-09-28 165 ret = cdns_role_start(cdns, USB_ROLE_NONE); 02ffc26df96b487 Roger Quadros 2019-10-07 166 if (ret) 02ffc26df96b487 Roger Quadros 2019-10-07 167 goto err; 02ffc26df96b487 Roger Quadros 2019-10-07 168 02ffc26df96b487 Roger Quadros 2019-10-07 169 switch (cdns->dr_mode) { 02ffc26df96b487 Roger Quadros 2019-10-07 170 case USB_DR_MODE_OTG: 842d0440dd38922 Pawel Laszczak 2020-09-28 171 ret = cdns_hw_role_switch(cdns); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 172 if (ret) 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 173 goto err; 02ffc26df96b487 Roger Quadros 2019-10-07 174 break; 02ffc26df96b487 Roger Quadros 2019-10-07 175 case USB_DR_MODE_PERIPHERAL: 842d0440dd38922 Pawel Laszczak 2020-09-28 176 ret = cdns_role_start(cdns, USB_ROLE_DEVICE); 02ffc26df96b487 Roger Quadros 2019-10-07 177 if (ret) 02ffc26df96b487 Roger Quadros 2019-10-07 178 goto err; 02ffc26df96b487 Roger Quadros 2019-10-07 179 break; 02ffc26df96b487 Roger Quadros 2019-10-07 180 case USB_DR_MODE_HOST: 842d0440dd38922 Pawel Laszczak 2020-09-28 181 ret = cdns_role_start(cdns, USB_ROLE_HOST); 02ffc26df96b487 Roger Quadros 2019-10-07 182 if (ret) 02ffc26df96b487 Roger Quadros 2019-10-07 183 goto err; 02ffc26df96b487 Roger Quadros 2019-10-07 184 break; 9794476942d8704 Roger Quadros 2019-10-17 185 default: 9794476942d8704 Roger Quadros 2019-10-17 186 ret = -EINVAL; 9794476942d8704 Roger Quadros 2019-10-17 187 goto err; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 188 } 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 189 27afe1661275213 Pawel Laszczak 2020-07-13 190 return 0; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 191 err: 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 @192 cdns3_exit_roles(cdns); 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 193 return ret; 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 194 } 7733f6c32e36ff9 Pawel Laszczak 2019-08-26 195 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org