@@ -266,7 +266,7 @@ impl<'d, T: Instance> Drop for CcPhy<'d, T> {
266
266
// Check if the PdPhy part was dropped already.
267
267
let drop_not_ready = & T :: state ( ) . drop_not_ready ;
268
268
if drop_not_ready. load ( Ordering :: Relaxed ) {
269
- drop_not_ready. store ( true , Ordering :: Relaxed ) ;
269
+ drop_not_ready. store ( false , Ordering :: Relaxed ) ;
270
270
} else {
271
271
r. cfgr1 ( ) . write ( |w| w. set_ucpden ( false ) ) ;
272
272
rcc:: disable :: < T > ( ) ;
@@ -411,13 +411,14 @@ pub struct PdPhy<'d, T: Instance> {
411
411
412
412
impl < ' d , T : Instance > Drop for PdPhy < ' d , T > {
413
413
fn drop ( & mut self ) {
414
- T :: REGS . cr ( ) . modify ( |w| w. set_phyrxen ( false ) ) ;
415
- // Check if the Type-C part was dropped already.
414
+ let r = T :: REGS ;
415
+ r. cr ( ) . modify ( |w| w. set_phyrxen ( false ) ) ;
416
+ // Check if the CcPhy part was dropped already.
416
417
let drop_not_ready = & T :: state ( ) . drop_not_ready ;
417
418
if drop_not_ready. load ( Ordering :: Relaxed ) {
418
- drop_not_ready. store ( true , Ordering :: Relaxed ) ;
419
+ drop_not_ready. store ( false , Ordering :: Relaxed ) ;
419
420
} else {
420
- T :: REGS . cfgr1 ( ) . write ( |w| w. set_ucpden ( false ) ) ;
421
+ r . cfgr1 ( ) . write ( |w| w. set_ucpden ( false ) ) ;
421
422
rcc:: disable :: < T > ( ) ;
422
423
T :: Interrupt :: disable ( ) ;
423
424
}
@@ -453,6 +454,8 @@ impl<'d, T: Instance> PdPhy<'d, T> {
453
454
} ) ;
454
455
} ) ;
455
456
457
+ let mut rxpaysz = 0 ;
458
+
456
459
// Stop DMA reception immediately after receiving a packet, to prevent storing multiple packets in the same buffer.
457
460
poll_fn ( |cx| {
458
461
let sr = r. sr ( ) . read ( ) ;
@@ -466,6 +469,8 @@ impl<'d, T: Instance> PdPhy<'d, T> {
466
469
Poll :: Ready ( Err ( RxError :: HardReset ) )
467
470
} else if sr. rxmsgend ( ) {
468
471
dma. request_stop ( ) ;
472
+ // Should be read immediately on interrupt.
473
+ rxpaysz = r. rx_payszr ( ) . read ( ) . rxpaysz ( ) . into ( ) ;
469
474
470
475
let ret = if sr. rxovr ( ) {
471
476
Err ( RxError :: Overrun )
@@ -501,7 +506,7 @@ impl<'d, T: Instance> PdPhy<'d, T> {
501
506
_ => unreachable ! ( ) ,
502
507
} ;
503
508
504
- Ok ( ( sop, r . rx_payszr ( ) . read ( ) . rxpaysz ( ) . into ( ) ) )
509
+ Ok ( ( sop, rxpaysz) )
505
510
}
506
511
507
512
fn enable_rx_interrupt ( enable : bool ) {
0 commit comments