@@ -571,6 +571,11 @@ static const struct midr_range ampereone_ds_encoding_cpus[] = {
571
571
{},
572
572
};
573
573
574
+ static const struct midr_range hisi_hip_ds_encoding_cpus [] = {
575
+ MIDR_ALL_VERSIONS (MIDR_HISI_HIP12 ),
576
+ {},
577
+ };
578
+
574
579
static void arm_spe__sample_flags (struct arm_spe_queue * speq )
575
580
{
576
581
const struct arm_spe_record * record = & speq -> decoder -> record ;
@@ -718,9 +723,100 @@ static void arm_spe__synth_data_source_ampereone(const struct arm_spe_record *re
718
723
arm_spe__synth_data_source_common (& common_record , data_src );
719
724
}
720
725
726
+ static void arm_spe__synth_data_source_hisi_hip (const struct arm_spe_record * record ,
727
+ union perf_mem_data_src * data_src )
728
+ {
729
+ /* Use common synthesis method to handle store operations */
730
+ if (record -> op & ARM_SPE_OP_ST ) {
731
+ arm_spe__synth_data_source_common (record , data_src );
732
+ return ;
733
+ }
734
+
735
+ switch (record -> source ) {
736
+ case ARM_SPE_HISI_HIP_PEER_CPU :
737
+ data_src -> mem_lvl = PERF_MEM_LVL_L2 | PERF_MEM_LVL_HIT ;
738
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L2 ;
739
+ data_src -> mem_snoopx = PERF_MEM_SNOOPX_PEER ;
740
+ break ;
741
+ case ARM_SPE_HISI_HIP_PEER_CPU_HITM :
742
+ data_src -> mem_lvl = PERF_MEM_LVL_L2 | PERF_MEM_LVL_HIT ;
743
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L2 ;
744
+ data_src -> mem_snoop = PERF_MEM_SNOOP_HITM ;
745
+ data_src -> mem_snoopx = PERF_MEM_SNOOPX_PEER ;
746
+ break ;
747
+ case ARM_SPE_HISI_HIP_L3 :
748
+ data_src -> mem_lvl = PERF_MEM_LVL_L3 | PERF_MEM_LVL_HIT ;
749
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L3 ;
750
+ data_src -> mem_snoop = PERF_MEM_SNOOP_HIT ;
751
+ break ;
752
+ case ARM_SPE_HISI_HIP_L3_HITM :
753
+ data_src -> mem_lvl = PERF_MEM_LVL_L3 | PERF_MEM_LVL_HIT ;
754
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L3 ;
755
+ data_src -> mem_snoop = PERF_MEM_SNOOP_HITM ;
756
+ break ;
757
+ case ARM_SPE_HISI_HIP_PEER_CLUSTER :
758
+ data_src -> mem_lvl = PERF_MEM_LVL_REM_CCE1 | PERF_MEM_LVL_HIT ;
759
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L3 ;
760
+ data_src -> mem_snoopx = PERF_MEM_SNOOPX_PEER ;
761
+ break ;
762
+ case ARM_SPE_HISI_HIP_PEER_CLUSTER_HITM :
763
+ data_src -> mem_lvl = PERF_MEM_LVL_REM_CCE1 | PERF_MEM_LVL_HIT ;
764
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L3 ;
765
+ data_src -> mem_snoop = PERF_MEM_SNOOP_HITM ;
766
+ data_src -> mem_snoopx = PERF_MEM_SNOOPX_PEER ;
767
+ break ;
768
+ case ARM_SPE_HISI_HIP_REMOTE_SOCKET :
769
+ data_src -> mem_lvl = PERF_MEM_LVL_REM_CCE2 ;
770
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_ANY_CACHE ;
771
+ data_src -> mem_remote = PERF_MEM_REMOTE_REMOTE ;
772
+ data_src -> mem_snoopx = PERF_MEM_SNOOPX_PEER ;
773
+ break ;
774
+ case ARM_SPE_HISI_HIP_REMOTE_SOCKET_HITM :
775
+ data_src -> mem_lvl = PERF_MEM_LVL_REM_CCE2 ;
776
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_ANY_CACHE ;
777
+ data_src -> mem_snoop = PERF_MEM_SNOOP_HITM ;
778
+ data_src -> mem_remote = PERF_MEM_REMOTE_REMOTE ;
779
+ data_src -> mem_snoopx = PERF_MEM_SNOOPX_PEER ;
780
+ break ;
781
+ case ARM_SPE_HISI_HIP_LOCAL_MEM :
782
+ data_src -> mem_lvl = PERF_MEM_LVL_LOC_RAM | PERF_MEM_LVL_HIT ;
783
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_RAM ;
784
+ data_src -> mem_snoop = PERF_MEM_SNOOP_NONE ;
785
+ break ;
786
+ case ARM_SPE_HISI_HIP_REMOTE_MEM :
787
+ data_src -> mem_lvl = PERF_MEM_LVL_REM_RAM1 | PERF_MEM_LVL_HIT ;
788
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_RAM ;
789
+ data_src -> mem_remote = PERF_MEM_REMOTE_REMOTE ;
790
+ break ;
791
+ case ARM_SPE_HISI_HIP_NC_DEV :
792
+ data_src -> mem_lvl = PERF_MEM_LVL_IO | PERF_MEM_LVL_HIT ;
793
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_IO ;
794
+ data_src -> mem_snoop = PERF_MEM_SNOOP_NONE ;
795
+ break ;
796
+ case ARM_SPE_HISI_HIP_L2 :
797
+ data_src -> mem_lvl = PERF_MEM_LVL_L2 | PERF_MEM_LVL_HIT ;
798
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L2 ;
799
+ data_src -> mem_snoop = PERF_MEM_SNOOP_NONE ;
800
+ break ;
801
+ case ARM_SPE_HISI_HIP_L2_HITM :
802
+ data_src -> mem_lvl = PERF_MEM_LVL_L2 | PERF_MEM_LVL_HIT ;
803
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L2 ;
804
+ data_src -> mem_snoop = PERF_MEM_SNOOP_HITM ;
805
+ break ;
806
+ case ARM_SPE_HISI_HIP_L1 :
807
+ data_src -> mem_lvl = PERF_MEM_LVL_L1 | PERF_MEM_LVL_HIT ;
808
+ data_src -> mem_lvl_num = PERF_MEM_LVLNUM_L1 ;
809
+ data_src -> mem_snoop = PERF_MEM_SNOOP_NONE ;
810
+ break ;
811
+ default :
812
+ break ;
813
+ }
814
+ }
815
+
721
816
static const struct data_source_handle data_source_handles [] = {
722
817
DS (common_ds_encoding_cpus , data_source_common ),
723
818
DS (ampereone_ds_encoding_cpus , data_source_ampereone ),
819
+ DS (hisi_hip_ds_encoding_cpus , data_source_hisi_hip ),
724
820
};
725
821
726
822
static void arm_spe__synth_memory_level (const struct arm_spe_record * record ,
0 commit comments