@@ -190,7 +190,7 @@ static int asmedia_wait_reset(struct pci_dev *pdev)
190190 return ret ;
191191}
192192
193- static u8 asmedia_read_reg (struct usb_hcd * hcd , u16 addr ) {
193+ static int asmedia_read_reg (struct usb_hcd * hcd , u16 addr , u8 * val ) {
194194 void __iomem * regs = hcd -> regs ;
195195 u8 status ;
196196 int ret ;
@@ -202,7 +202,7 @@ static u8 asmedia_read_reg(struct usb_hcd *hcd, u16 addr) {
202202 if (ret ) {
203203 dev_err (hcd -> self .controller ,
204204 "Read reg wait timed out ([%04x])\n" , addr );
205- return ~ 0 ;
205+ return ret ;
206206 }
207207
208208 writew_relaxed (addr , regs + ASMT_REG_ADDR );
@@ -214,13 +214,14 @@ static u8 asmedia_read_reg(struct usb_hcd *hcd, u16 addr) {
214214 if (ret ) {
215215 dev_err (hcd -> self .controller ,
216216 "Read reg addr timed out ([%04x])\n" , addr );
217- return ~ 0 ;
217+ return ret ;
218218 }
219219
220- return readb_relaxed (regs + ASMT_REG_RDATA );
220+ * val = readb_relaxed (regs + ASMT_REG_RDATA );
221+ return 0 ;
221222}
222223
223- static void asmedia_write_reg (struct usb_hcd * hcd , u16 addr , u8 data , bool wait ) {
224+ static int asmedia_write_reg (struct usb_hcd * hcd , u16 addr , u8 data , bool wait ) {
224225 void __iomem * regs = hcd -> regs ;
225226 u8 status ;
226227 int ret , i ;
@@ -231,35 +232,45 @@ static void asmedia_write_reg(struct usb_hcd *hcd, u16 addr, u8 data, bool wait)
231232 !(status & ASMT_REG_STATUS_BUSY ),
232233 1000 , TIMEOUT_USEC );
233234
234- if (ret )
235+ if (ret ) {
235236 dev_err (hcd -> self .controller ,
236237 "Write reg addr timed out ([%04x] = %02x)\n" ,
237238 addr , data );
239+ return ret ;
240+ }
238241
239242 writeb_relaxed (data , regs + ASMT_REG_WDATA );
240243
241244 ret = readb_poll_timeout (regs + ASMT_REG_STATUS , status ,
242245 !(status & ASMT_REG_STATUS_BUSY ),
243246 1000 , TIMEOUT_USEC );
244247
245- if (ret )
248+ if (ret ) {
246249 dev_err (hcd -> self .controller ,
247250 "Write reg data timed out ([%04x] = %02x)\n" ,
248251 addr , data );
252+ return ret ;
253+ }
249254
250255 if (!wait )
251- return ;
256+ return 0 ;
252257
253258 for (i = 0 ; i < TIMEOUT_USEC ; i ++ ) {
254- if (asmedia_read_reg (hcd , addr ) == data )
259+ ret = asmedia_read_reg (hcd , addr , & status );
260+ if (ret )
261+ return ret ;
262+ if (status == data )
255263 break ;
256264 }
257265
258266 if (i >= TIMEOUT_USEC ) {
259267 dev_err (hcd -> self .controller ,
260268 "Verify register timed out ([%04x] = %02x)\n" ,
261269 addr , data );
270+ return - ETIMEDOUT ;
262271 }
272+
273+ return 0 ;
263274}
264275
265276static int asmedia_load_fw (struct pci_dev * pdev , const struct firmware * fw )
@@ -276,23 +287,31 @@ static int asmedia_load_fw(struct pci_dev *pdev, const struct firmware *fw)
276287 hcd = dev_get_drvdata (& pdev -> dev );
277288 regs = hcd -> regs ;
278289
279- asmedia_write_reg (hcd , ASMT_MMIO_CPU_MODE_NEXT ,
280- ASMT_MMIO_CPU_MODE_HALFSPEED , false);
290+ ret = asmedia_write_reg (hcd , ASMT_MMIO_CPU_MODE_NEXT ,
291+ ASMT_MMIO_CPU_MODE_HALFSPEED , false);
292+ if (ret )
293+ return ret ;
281294
282- asmedia_write_reg (hcd , ASMT_MMIO_CPU_EXEC_CTRL ,
283- ASMT_MMIO_CPU_EXEC_CTRL_RESET , false);
295+ ret = asmedia_write_reg (hcd , ASMT_MMIO_CPU_EXEC_CTRL ,
296+ ASMT_MMIO_CPU_EXEC_CTRL_RESET , false);
297+ if (ret )
298+ return ret ;
284299
285300 ret = asmedia_wait_reset (pdev );
286301 if (ret ) {
287302 dev_err (hcd -> self .controller , "Failed pre-upload reset\n" );
288303 return ret ;
289304 }
290305
291- asmedia_write_reg (hcd , ASMT_MMIO_CPU_EXEC_CTRL ,
292- ASMT_MMIO_CPU_EXEC_CTRL_HALT , false);
306+ ret = asmedia_write_reg (hcd , ASMT_MMIO_CPU_EXEC_CTRL ,
307+ ASMT_MMIO_CPU_EXEC_CTRL_HALT , false);
308+ if (ret )
309+ return ret ;
293310
294- asmedia_write_reg (hcd , ASMT_MMIO_CPU_MISC ,
295- ASMT_MMIO_CPU_MISC_CODE_RAM_WR , true);
311+ ret = asmedia_write_reg (hcd , ASMT_MMIO_CPU_MISC ,
312+ ASMT_MMIO_CPU_MISC_CODE_RAM_WR , true);
313+ if (ret )
314+ return ret ;
296315
297316 pci_write_config_byte (pdev , ASMT_CFG_SRAM_ACCESS ,
298317 ASMT_CFG_SRAM_ACCESS_ENABLE );
@@ -328,13 +347,19 @@ static int asmedia_load_fw(struct pci_dev *pdev, const struct firmware *fw)
328347
329348 pci_write_config_byte (pdev , ASMT_CFG_SRAM_ACCESS , 0 );
330349
331- asmedia_write_reg (hcd , ASMT_MMIO_CPU_MISC , 0 , true);
350+ ret = asmedia_write_reg (hcd , ASMT_MMIO_CPU_MISC , 0 , true);
351+ if (ret )
352+ return ret ;
332353
333- asmedia_write_reg (hcd , ASMT_MMIO_CPU_MODE_NEXT ,
334- ASMT_MMIO_CPU_MODE_RAM |
335- ASMT_MMIO_CPU_MODE_HALFSPEED , false);
354+ ret = asmedia_write_reg (hcd , ASMT_MMIO_CPU_MODE_NEXT ,
355+ ASMT_MMIO_CPU_MODE_RAM |
356+ ASMT_MMIO_CPU_MODE_HALFSPEED , false);
357+ if (ret )
358+ return ret ;
336359
337- asmedia_write_reg (hcd , ASMT_MMIO_CPU_EXEC_CTRL , 0 , false);
360+ ret = asmedia_write_reg (hcd , ASMT_MMIO_CPU_EXEC_CTRL , 0 , false);
361+ if (ret )
362+ return ret ;
338363
339364 ret = asmedia_wait_reset (pdev );
340365 if (ret ) {
0 commit comments