@@ -558,6 +558,146 @@ void _trace_event_mbox_atomic3(uint32_t log_entry, uint32_t param1,
558558 sizeof (uint32_t ) * message_size_dwords );
559559}
560560
561+ /* send trace events only to the local trace buffer */
562+ void _trace_event4 (uint32_t log_entry , uint32_t param1 , uint32_t param2 ,
563+ uint32_t param3 , uint32_t param4 )
564+ {
565+ uint32_t message_size_dwords = MESSAGE_SIZE (4 );
566+ uint32_t payload_offset = sizeof (struct log_entry_header )
567+ / sizeof (uint32_t );
568+ uint32_t dt [MESSAGE_SIZE (4 )];
569+
570+ if (!trace -> enable )
571+ return ;
572+
573+ put_header (dt , platform_timer_get (platform_timer ));
574+
575+ dt [payload_offset ] = log_entry ;
576+ dt [payload_offset + 1 ] = param1 ;
577+ dt [payload_offset + 2 ] = param2 ;
578+ dt [payload_offset + 3 ] = param3 ;
579+ dt [payload_offset + 4 ] = param4 ;
580+ dtrace_event ((const char * )dt , sizeof (uint32_t ) * message_size_dwords );
581+ }
582+
583+ void _trace_event_atomic4 (uint32_t log_entry , uint32_t param1 , uint32_t param2 ,
584+ uint32_t param3 , uint32_t param4 )
585+ {
586+ uint32_t message_size_dwords = MESSAGE_SIZE (4 );
587+ uint32_t payload_offset = sizeof (struct log_entry_header )
588+ / sizeof (uint32_t );
589+ uint32_t dt [MESSAGE_SIZE (4 )];
590+
591+ if (!trace -> enable )
592+ return ;
593+
594+ put_header (dt , platform_timer_get (platform_timer ));
595+
596+ dt [payload_offset ] = log_entry ;
597+ dt [payload_offset + 1 ] = param1 ;
598+ dt [payload_offset + 2 ] = param2 ;
599+ dt [payload_offset + 3 ] = param3 ;
600+ dt [payload_offset + 4 ] = param4 ;
601+ dtrace_event_atomic ((const char * )dt ,
602+ sizeof (uint32_t ) * message_size_dwords );
603+ }
604+
605+ /* send trace events to the local trace buffer and the mailbox */
606+ void _trace_event_mbox4 (uint32_t log_entry , uint32_t param1 , uint32_t param2 ,
607+ uint32_t param3 , uint32_t param4 )
608+ {
609+ unsigned long flags ;
610+ uint32_t message_size_dwords = MESSAGE_SIZE (4 );
611+ uint32_t payload_offset = sizeof (struct log_entry_header )
612+ / sizeof (uint32_t );
613+ uint32_t dt [MESSAGE_SIZE (4 )];
614+ uint64_t time ;
615+
616+ volatile uint32_t * t ;
617+
618+ if (!trace -> enable )
619+ return ;
620+
621+ time = platform_timer_get (platform_timer );
622+
623+ put_header (dt , time );
624+
625+ dt [payload_offset ] = log_entry ;
626+ dt [payload_offset + 1 ] = param1 ;
627+ dt [payload_offset + 2 ] = param2 ;
628+ dt [payload_offset + 3 ] = param3 ;
629+ dt [payload_offset + 4 ] = param4 ;
630+ dtrace_event ((const char * )dt , sizeof (uint32_t ) * message_size_dwords );
631+
632+ /* send event by mail box too. */
633+ spin_lock_irq (& trace -> lock , flags );
634+
635+ /* write timestamp and event to trace buffer */
636+ t = (volatile uint32_t * )(MAILBOX_TRACE_BASE + trace -> pos );
637+ trace -> pos += sizeof (uint32_t ) * message_size_dwords ;
638+
639+ if (trace -> pos > MAILBOX_TRACE_SIZE
640+ - sizeof (uint32_t ) * message_size_dwords )
641+ trace -> pos = 0 ;
642+
643+ spin_unlock_irq (& trace -> lock , flags );
644+
645+ put_header (t , time );
646+ t [payload_offset ] = log_entry ;
647+ t [payload_offset + 1 ] = param1 ;
648+ t [payload_offset + 2 ] = param2 ;
649+ t [payload_offset + 3 ] = param3 ;
650+ t [payload_offset + 4 ] = param4 ;
651+
652+ /* writeback trace data */
653+ dcache_writeback_region ((void * )t ,
654+ sizeof (uint32_t ) * message_size_dwords );
655+ }
656+
657+ void _trace_event_mbox_atomic4 (uint32_t log_entry , uint32_t param1 ,
658+ uint32_t param2 , uint32_t param3 , uint32_t param4 )
659+ {
660+ volatile uint32_t * t ;
661+ uint32_t message_size_dwords = MESSAGE_SIZE (4 );
662+ uint32_t payload_offset = sizeof (struct log_entry_header )
663+ / sizeof (uint32_t );
664+ uint32_t dt [MESSAGE_SIZE (4 )];
665+ uint64_t time ;
666+
667+ if (!trace -> enable )
668+ return ;
669+
670+ time = platform_timer_get (platform_timer );
671+
672+ put_header (dt , time );
673+ dt [payload_offset ] = log_entry ;
674+ dt [payload_offset + 1 ] = param1 ;
675+ dt [payload_offset + 2 ] = param2 ;
676+ dt [payload_offset + 3 ] = param3 ;
677+ dt [payload_offset + 4 ] = param4 ;
678+ dtrace_event_atomic ((const char * )dt ,
679+ sizeof (uint32_t ) * message_size_dwords );
680+
681+ /* write timestamp and event to trace buffer */
682+ t = (volatile uint32_t * )(MAILBOX_TRACE_BASE + trace -> pos );
683+ trace -> pos += sizeof (uint32_t ) * message_size_dwords ;
684+
685+ if (trace -> pos > MAILBOX_TRACE_SIZE
686+ - sizeof (uint32_t ) * message_size_dwords )
687+ trace -> pos = 0 ;
688+
689+ put_header (t , time );
690+ t [payload_offset ] = log_entry ;
691+ t [payload_offset + 1 ] = param1 ;
692+ t [payload_offset + 2 ] = param2 ;
693+ t [payload_offset + 3 ] = param3 ;
694+ t [payload_offset + 4 ] = param4 ;
695+
696+ /* writeback trace data */
697+ dcache_writeback_region ((void * )t ,
698+ sizeof (uint32_t ) * message_size_dwords );
699+ }
700+
561701void trace_flush (void )
562702{
563703 volatile uint64_t * t ;
0 commit comments