@@ -190,18 +190,21 @@ void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
190
190
const struct device * dev = priv -> dev ;
191
191
const struct udc_stm32_config * cfg = dev -> config ;
192
192
struct udc_ep_config * ep ;
193
+ HAL_StatusTypeDef __maybe_unused hal_ret ;
193
194
194
195
/* Re-Enable control endpoints */
195
196
ep = udc_get_ep_cfg (dev , USB_CONTROL_EP_OUT );
196
197
if (ep && ep -> stat .enabled ) {
197
- HAL_PCD_EP_Open (& priv -> pcd , USB_CONTROL_EP_OUT , cfg -> ep0_mps ,
198
- EP_TYPE_CTRL );
198
+ hal_ret = HAL_PCD_EP_Open (& priv -> pcd , USB_CONTROL_EP_OUT , cfg -> ep0_mps ,
199
+ EP_TYPE_CTRL );
200
+ __ASSERT_NO_MSG (hal_ret == HAL_OK );
199
201
}
200
202
201
203
ep = udc_get_ep_cfg (dev , USB_CONTROL_EP_IN );
202
204
if (ep && ep -> stat .enabled ) {
203
- HAL_PCD_EP_Open (& priv -> pcd , USB_CONTROL_EP_IN , cfg -> ep0_mps ,
204
- EP_TYPE_CTRL );
205
+ hal_ret = HAL_PCD_EP_Open (& priv -> pcd , USB_CONTROL_EP_IN , cfg -> ep0_mps ,
206
+ EP_TYPE_CTRL );
207
+ __ASSERT_NO_MSG (hal_ret == HAL_OK );
205
208
}
206
209
207
210
udc_set_suspended (dev , false);
@@ -271,7 +274,9 @@ static int usbd_ctrl_feed_dout(const struct device *dev, const size_t length)
271
274
272
275
k_fifo_put (& cfg -> fifo , buf );
273
276
274
- HAL_PCD_EP_Receive (& priv -> pcd , cfg -> addr , buf -> data , buf -> size );
277
+ if (HAL_PCD_EP_Receive (& priv -> pcd , cfg -> addr , buf -> data , buf -> size ) != HAL_OK ) {
278
+ return - EIO ;
279
+ }
275
280
276
281
return 0 ;
277
282
}
@@ -280,8 +285,10 @@ static void udc_stm32_flush_tx_fifo(const struct device *dev)
280
285
{
281
286
struct udc_stm32_data * priv = udc_get_private (dev );
282
287
struct udc_ep_config * cfg = udc_get_ep_cfg (dev , USB_CONTROL_EP_OUT );
288
+ HAL_StatusTypeDef __maybe_unused hal_ret ;
283
289
284
290
HAL_PCD_EP_Receive (& priv -> pcd , cfg -> addr , NULL , 0 );
291
+ __ASSERT_NO_MSG (hal_ret == HAL_OK );
285
292
}
286
293
287
294
static int udc_stm32_tx (const struct device * dev , struct udc_ep_config * epcfg ,
@@ -432,6 +439,7 @@ static void handle_msg_data_in(struct udc_stm32_data *priv, uint8_t epnum)
432
439
struct udc_ep_config * epcfg ;
433
440
uint8_t ep = epnum | USB_EP_DIR_IN ;
434
441
struct net_buf * buf ;
442
+ HAL_StatusTypeDef hal_ret ;
435
443
436
444
LOG_DBG ("DataIn ep 0x%02x" , ep );
437
445
@@ -447,7 +455,12 @@ static void handle_msg_data_in(struct udc_stm32_data *priv, uint8_t epnum)
447
455
const struct udc_stm32_config * cfg = dev -> config ;
448
456
uint32_t len = MIN (cfg -> ep0_mps , buf -> len );
449
457
450
- HAL_PCD_EP_Transmit (& priv -> pcd , ep , buf -> data , len );
458
+ hal_ret = HAL_PCD_EP_Transmit (& priv -> pcd , ep , buf -> data , len );
459
+ if (hal_ret != HAL_OK ) {
460
+ LOG_ERR ("HAL_PCD_EP_Transmit failed: %d" , hal_ret );
461
+ __ASSERT_NO_MSG (0 );
462
+ return ;
463
+ }
451
464
452
465
buf -> len -= len ;
453
466
buf -> data += len ;
@@ -457,7 +470,11 @@ static void handle_msg_data_in(struct udc_stm32_data *priv, uint8_t epnum)
457
470
458
471
if (udc_ep_buf_has_zlp (buf )) {
459
472
udc_ep_buf_clear_zlp (buf );
460
- HAL_PCD_EP_Transmit (& priv -> pcd , ep , buf -> data , 0 );
473
+ hal_ret = HAL_PCD_EP_Transmit (& priv -> pcd , ep , buf -> data , 0 );
474
+ if (hal_ret != HAL_OK ) {
475
+ LOG_ERR ("HAL_PCD_EP_Transmit failed: %d" , hal_ret );
476
+ __ASSERT_NO_MSG (0 );
477
+ }
461
478
462
479
return ;
463
480
}
@@ -497,6 +514,7 @@ static void handle_msg_setup(struct udc_stm32_data *priv)
497
514
{
498
515
struct usb_setup_packet * setup = (void * )priv -> pcd .Setup ;
499
516
const struct device * dev = priv -> dev ;
517
+ HAL_StatusTypeDef hal_ret ;
500
518
struct net_buf * buf ;
501
519
int err ;
502
520
@@ -518,7 +536,11 @@ static void handle_msg_setup(struct udc_stm32_data *priv)
518
536
519
537
if ((setup -> bmRequestType == 0 ) && (setup -> bRequest == USB_SREQ_SET_ADDRESS )) {
520
538
/* HAL requires we set the address before submitting status */
521
- HAL_PCD_SetAddress (& priv -> pcd , setup -> wValue );
539
+ hal_ret = HAL_PCD_SetAddress (& priv -> pcd , setup -> wValue );
540
+ if (hal_ret != HAL_OK ) {
541
+ LOG_ERR ("HAL_PCD_SetAddress() fialed: %d" , hal_ret );
542
+ __ASSERT_NO_MSG (0 );
543
+ }
522
544
}
523
545
524
546
if (udc_ctrl_stage_is_data_out (dev )) {
@@ -592,18 +614,22 @@ int udc_stm32_init(const struct device *dev)
592
614
return - EIO ;
593
615
}
594
616
595
- HAL_PCD_Stop (& priv -> pcd );
617
+ if (HAL_PCD_Stop (& priv -> pcd ) != HAL_OK ) {
618
+ return - EIO ;
619
+ }
596
620
597
621
return 0 ;
598
622
}
599
623
600
624
#if defined(USB ) || defined(USB_DRD_FS )
601
- static inline void udc_stm32_mem_init (const struct device * dev )
625
+ static int udc_stm32_mem_init (const struct device * dev )
602
626
{
603
627
struct udc_stm32_data * priv = udc_get_private (dev );
604
628
const struct udc_stm32_config * cfg = dev -> config ;
605
629
606
630
priv -> occupied_mem = cfg -> pma_offset ;
631
+
632
+ return 0 ;
607
633
}
608
634
609
635
static int udc_stm32_ep_mem_config (const struct device * dev ,
@@ -627,15 +653,16 @@ static int udc_stm32_ep_mem_config(const struct device *dev,
627
653
}
628
654
629
655
/* Configure PMA offset for the endpoint */
630
- HAL_PCDEx_PMAConfig (& priv -> pcd , ep -> addr , PCD_SNG_BUF ,
631
- priv -> occupied_mem );
656
+ if (HAL_PCDEx_PMAConfig (& priv -> pcd , ep -> addr , PCD_SNG_BUF , priv -> occupied_mem ) != HAL_OK ) {
657
+ return - EIO ;
658
+ }
632
659
633
660
priv -> occupied_mem += size ;
634
661
635
662
return 0 ;
636
663
}
637
664
#else
638
- static void udc_stm32_mem_init (const struct device * dev )
665
+ static int udc_stm32_mem_init (const struct device * dev )
639
666
{
640
667
struct udc_stm32_data * priv = udc_get_private (dev );
641
668
const struct udc_stm32_config * cfg = dev -> config ;
@@ -646,24 +673,32 @@ static void udc_stm32_mem_init(const struct device *dev)
646
673
if (cfg -> ep_mps % 4 || cfg -> ep0_mps % 4 ) {
647
674
LOG_ERR ("Not a 32-bit word multiple: ep0(%u)|ep(%u)" ,
648
675
cfg -> ep0_mps , cfg -> ep_mps );
649
- return ;
676
+ return - EINVAL ;
650
677
}
651
678
652
679
/* The documentation is not clear at all about RX FiFo size requirement,
653
680
* 160 has been selected through trial and error.
654
681
*/
655
682
words = MAX (160 , cfg -> ep_mps / 4 );
656
- HAL_PCDEx_SetRxFiFo (& priv -> pcd , words );
683
+ if (HAL_PCDEx_SetRxFiFo (& priv -> pcd , words ) != HAL_OK ) {
684
+ return - EIO ;
685
+ }
657
686
priv -> occupied_mem = words * 4 ;
658
687
659
688
/* For EP0 TX, reserve only one MPS */
660
- HAL_PCDEx_SetTxFiFo (& priv -> pcd , 0 , cfg -> ep0_mps / 4 );
689
+ if (HAL_PCDEx_SetTxFiFo (& priv -> pcd , 0 , cfg -> ep0_mps / 4 ) != HAL_OK ) {
690
+ return - EIO ;
691
+ }
661
692
priv -> occupied_mem += cfg -> ep0_mps ;
662
693
663
694
/* Reset TX allocs */
664
695
for (unsigned int i = 1U ; i < cfg -> num_endpoints ; i ++ ) {
665
- HAL_PCDEx_SetTxFiFo (& priv -> pcd , i , 0 );
696
+ if (HAL_PCDEx_SetTxFiFo (& priv -> pcd , i , 0 ) != HAL_OK ) {
697
+ return - EIO ;
698
+ }
666
699
}
700
+
701
+ return 0 ;
667
702
}
668
703
669
704
static int udc_stm32_ep_mem_config (const struct device * dev ,
@@ -685,7 +720,9 @@ static int udc_stm32_ep_mem_config(const struct device *dev,
685
720
if (priv -> occupied_mem >= (words * 4 )) {
686
721
priv -> occupied_mem -= (words * 4 );
687
722
}
688
- HAL_PCDEx_SetTxFiFo (& priv -> pcd , USB_EP_GET_IDX (ep -> addr ), 0 );
723
+ if (HAL_PCDEx_SetTxFiFo (& priv -> pcd , USB_EP_GET_IDX (ep -> addr ), 0 ) != HAL_OK ) {
724
+ return - EIO ;
725
+ }
689
726
return 0 ;
690
727
}
691
728
@@ -694,7 +731,9 @@ static int udc_stm32_ep_mem_config(const struct device *dev,
694
731
return - ENOMEM ;
695
732
}
696
733
697
- HAL_PCDEx_SetTxFiFo (& priv -> pcd , USB_EP_GET_IDX (ep -> addr ), words );
734
+ if (HAL_PCDEx_SetTxFiFo (& priv -> pcd , USB_EP_GET_IDX (ep -> addr ), words ) != HAL_OK ) {
735
+ return - EIO ;
736
+ }
698
737
699
738
priv -> occupied_mem += words * 4 ;
700
739
@@ -711,7 +750,10 @@ static int udc_stm32_enable(const struct device *dev)
711
750
712
751
LOG_DBG ("Enable UDC" );
713
752
714
- udc_stm32_mem_init (dev );
753
+ ret = udc_stm32_mem_init (dev );
754
+ if (ret != 0 ) {
755
+ return ret ;
756
+ }
715
757
716
758
status = HAL_PCD_Start (& priv -> pcd );
717
759
if (status != HAL_OK ) {
0 commit comments