tree:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: fb57b1fabcb28f358901b2df90abd2b48abc1ca8
commit: c856b4b0fdb5044bca4c0acf9a66f3b5cc01a37a [8234/10701] USB: EHCI: ehci-mv: fix
error handling in mv_ehci_probe()
config: ia64-randconfig-r023-20200519 (attached as .config)
compiler: ia64-linux-gcc (GCC) 9.3.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout c856b4b0fdb5044bca4c0acf9a66f3b5cc01a37a
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=ia64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>, old ones prefixed by <<):
drivers/usb/host/ehci-mv.c: In function 'mv_ehci_probe':
> drivers/usb/host/ehci-mv.c:170:15: warning: comparison of
unsigned expression < 0 is always false [-Wtype-limits]
170 | if (hcd->irq
< 0) {
| ^
vim +170 drivers/usb/host/ehci-mv.c
103
104 static int mv_ehci_probe(struct platform_device *pdev)
105 {
106 struct mv_usb_platform_data *pdata = dev_get_platdata(&pdev->dev);
107 struct usb_hcd *hcd;
108 struct ehci_hcd *ehci;
109 struct ehci_hcd_mv *ehci_mv;
110 struct resource *r;
111 int retval;
112 u32 offset;
113 u32 status;
114
115 if (usb_disabled())
116 return -ENODEV;
117
118 hcd = usb_create_hcd(&ehci_platform_hc_driver, &pdev->dev,
dev_name(&pdev->dev));
119 if (!hcd)
120 return -ENOMEM;
121
122 platform_set_drvdata(pdev, hcd);
123 ehci_mv = hcd_to_ehci_hcd_mv(hcd);
124
125 ehci_mv->mode = MV_USB_MODE_HOST;
126 if (pdata) {
127 ehci_mv->mode = pdata->mode;
128 ehci_mv->set_vbus = pdata->set_vbus;
129 }
130
131 ehci_mv->phy = devm_phy_optional_get(&pdev->dev, "usb");
132 if (IS_ERR(ehci_mv->phy)) {
133 retval = PTR_ERR(ehci_mv->phy);
134 if (retval != -EPROBE_DEFER)
135 dev_err(&pdev->dev, "Failed to get phy.\n");
136 goto err_put_hcd;
137 }
138
139 ehci_mv->clk = devm_clk_get(&pdev->dev, NULL);
140 if (IS_ERR(ehci_mv->clk)) {
141 dev_err(&pdev->dev, "error getting clock\n");
142 retval = PTR_ERR(ehci_mv->clk);
143 goto err_put_hcd;
144 }
145
146 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
147 ehci_mv->base = devm_ioremap_resource(&pdev->dev, r);
148 if (IS_ERR(ehci_mv->base)) {
149 retval = PTR_ERR(ehci_mv->base);
150 goto err_put_hcd;
151 }
152
153 retval = mv_ehci_enable(ehci_mv);
154 if (retval) {
155 dev_err(&pdev->dev, "init phy error %d\n", retval);
156 goto err_put_hcd;
157 }
158
159 ehci_mv->cap_regs =
160 (void __iomem *) ((unsigned long) ehci_mv->base + U2x_CAPREGS_OFFSET);
161 offset = readl(ehci_mv->cap_regs) & CAPLENGTH_MASK;
162 ehci_mv->op_regs =
163 (void __iomem *) ((unsigned long) ehci_mv->cap_regs + offset);
164
165 hcd->rsrc_start = r->start;
166 hcd->rsrc_len = resource_size(r);
167 hcd->regs = ehci_mv->op_regs;
168
169 hcd->irq = platform_get_irq(pdev, 0);
170 if (hcd->irq < 0) {
171 retval = hcd->irq;
172 goto err_disable_clk;
173 }
174
175 ehci = hcd_to_ehci(hcd);
176 ehci->caps = (struct ehci_caps __iomem *) ehci_mv->cap_regs;
177
178 if (ehci_mv->mode == MV_USB_MODE_OTG) {
179 ehci_mv->otg = devm_usb_get_phy(&pdev->dev, USB_PHY_TYPE_USB2);
180 if (IS_ERR(ehci_mv->otg)) {
181 retval = PTR_ERR(ehci_mv->otg);
182
183 if (retval == -ENXIO)
184 dev_info(&pdev->dev, "MV_USB_MODE_OTG "
185 "must have CONFIG_USB_PHY enabled\n");
186 else
187 dev_err(&pdev->dev,
188 "unable to find transceiver\n");
189 goto err_disable_clk;
190 }
191
192 retval = otg_set_host(ehci_mv->otg->otg, &hcd->self);
193 if (retval < 0) {
194 dev_err(&pdev->dev,
195 "unable to register with transceiver\n");
196 retval = -ENODEV;
197 goto err_disable_clk;
198 }
199 /* otg will enable clock before use as host */
200 mv_ehci_disable(ehci_mv);
201 } else {
202 if (ehci_mv->set_vbus)
203 ehci_mv->set_vbus(1);
204
205 retval = usb_add_hcd(hcd, hcd->irq, IRQF_SHARED);
206 if (retval) {
207 dev_err(&pdev->dev,
208 "failed to add hcd with err %d\n", retval);
209 goto err_set_vbus;
210 }
211 device_wakeup_enable(hcd->self.controller);
212 }
213
214 if (of_usb_get_phy_mode(pdev->dev.of_node) == USBPHY_INTERFACE_MODE_HSIC) {
215 status = ehci_readl(ehci, &ehci->regs->port_status[0]);
216 /* These "reserved" bits actually enable HSIC mode. */
217 status |= BIT(25);
218 status &= ~GENMASK(31, 30);
219 ehci_writel(ehci, status, &ehci->regs->port_status[0]);
220 }
221
222 dev_info(&pdev->dev,
223 "successful find EHCI device with regs 0x%p irq %d"
224 " working in %s mode\n", hcd->regs, hcd->irq,
225 ehci_mv->mode == MV_USB_MODE_OTG ? "OTG" : "Host");
226
227 return 0;
228
229 err_set_vbus:
230 if (ehci_mv->set_vbus)
231 ehci_mv->set_vbus(0);
232 err_disable_clk:
233 mv_ehci_disable(ehci_mv);
234 err_put_hcd:
235 usb_put_hcd(hcd);
236
237 return retval;
238 }
239
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org