@@ -539,18 +539,23 @@ int pruss_init( const char* ucodename, struct ucode_signature* signature)
539
539
return 0 ;
540
540
}
541
541
542
+ int pruss_is_halted ( void )
543
+ {
544
+ return ((pruss_rd32 ( PRUSS_PRU_CTRL_CONTROL ) & PRUSS_PRU_CTRL_CONTROL_RUNSTATE ) == 0 );
545
+ }
546
+
542
547
void pruss_wait_for_halt ( void )
543
548
{
544
549
do {
545
550
// The microcode is running, wait for HALT
546
- } while (pruss_rd32 ( PRUSS_PRU_CTRL_CONTROL ) & PRUSS_PRU_CTRL_CONTROL_RUNSTATE );
551
+ } while (! pruss_is_halted () );
547
552
}
548
553
549
554
// return old 'enable' state
550
555
int pruss_stop_pruss ( void )
551
556
{
552
- uint32_t pruss_ctrl = pruss_rd32 ( PRUSS_PRU_CTRL_CONTROL );
553
- if ( pruss_ctrl & PRUSS_PRU_CTRL_CONTROL_RUNSTATE ) {
557
+ if (! pruss_is_halted ()) {
558
+ uint32_t pruss_ctrl = pruss_rd32 ( PRUSS_PRU_CTRL_CONTROL );
554
559
pruss_ctrl &= ~ PRUSS_PRU_CTRL_CONTROL_ENABLE ; // clear enable bit
555
560
pruss_wr32 ( PRUSS_PRU_CTRL_CONTROL , pruss_ctrl );
556
561
pruss_wait_for_halt ();
@@ -588,9 +593,13 @@ void pruss_start_pruss( void)
588
593
int pruss_dump_state ( void )
589
594
{
590
595
int i ;
591
- int pruss_ena = pruss_stop_pruss () ;
596
+ int pruss_ena = 0 ;
592
597
593
- printf ( "PRUSS was halted, extracting debug info...\n" );
598
+ if (!pruss_is_halted ()) {
599
+ pruss_stop_pruss ();
600
+ pruss_ena = 1 ;
601
+ }
602
+ printf ( "PRUSS %shalted, extracting debug info...\n" , (pruss_ena ) ? "is temporarily " : "was found " );
594
603
for (i = 0 ; i < 32 ; ++ i ) {
595
604
uint32_t reg = pruss_rd32 ( PRUSS_DBG_OFFSET + 4 * i );
596
605
printf ( " R%-2d = 0x%08x (%10u)" , i , reg , reg );
@@ -610,11 +619,7 @@ int pruss_dump_state( void)
610
619
611
620
if (pruss_ena ) {
612
621
pruss_start_pruss ();
622
+ printf ( "PRUSS is enabled again\n" );
613
623
}
614
624
return 0 ;
615
625
}
616
-
617
- int pruss_is_halted ( void )
618
- {
619
- return ((pruss_rd32 ( PRUSS_PRU_CTRL_CONTROL ) & PRUSS_PRU_CTRL_CONTROL_RUNSTATE ) == 0 );
620
- }
0 commit comments