@@ -1536,6 +1536,7 @@ static struct msr_counter_arch_info msr_counter_arch_infos[] = {
1536
1536
#define PMT_COUNTER_MTL_DC6_LSB 0
1537
1537
#define PMT_COUNTER_MTL_DC6_MSB 63
1538
1538
#define PMT_MTL_DC6_GUID 0x1a067102
1539
+ #define PMT_MTL_DC6_SEQ 0
1539
1540
1540
1541
#define PMT_COUNTER_NAME_SIZE_BYTES 16
1541
1542
#define PMT_COUNTER_TYPE_NAME_SIZE_BYTES 32
@@ -9083,14 +9084,19 @@ void *pmt_get_counter_pointer(struct pmt_mmio *pmmio, unsigned long counter_offs
9083
9084
return ret ;
9084
9085
}
9085
9086
9086
- struct pmt_mmio * pmt_add_guid (unsigned int guid )
9087
+ struct pmt_mmio * pmt_add_guid (unsigned int guid , unsigned int seq )
9087
9088
{
9088
9089
struct pmt_mmio * ret ;
9089
9090
9090
9091
ret = pmt_mmio_find (guid );
9091
9092
if (!ret )
9092
9093
ret = pmt_mmio_open (guid );
9093
9094
9095
+ while (ret && seq ) {
9096
+ ret = ret -> next ;
9097
+ -- seq ;
9098
+ }
9099
+
9094
9100
return ret ;
9095
9101
}
9096
9102
@@ -9137,7 +9143,7 @@ void pmt_counter_add_domain(struct pmt_counter *pcounter, unsigned long *pmmio,
9137
9143
pcounter -> domains [domain_id ].pcounter = pmmio ;
9138
9144
}
9139
9145
9140
- int pmt_add_counter (unsigned int guid , const char * name , enum pmt_datatype type ,
9146
+ int pmt_add_counter (unsigned int guid , unsigned int seq , const char * name , enum pmt_datatype type ,
9141
9147
unsigned int lsb , unsigned int msb , unsigned int offset , enum counter_scope scope ,
9142
9148
enum counter_format format , unsigned int domain_id , enum pmt_open_mode mode )
9143
9149
{
@@ -9157,10 +9163,10 @@ int pmt_add_counter(unsigned int guid, const char *name, enum pmt_datatype type,
9157
9163
exit (1 );
9158
9164
}
9159
9165
9160
- mmio = pmt_add_guid (guid );
9166
+ mmio = pmt_add_guid (guid , seq );
9161
9167
if (!mmio ) {
9162
9168
if (mode != PMT_OPEN_TRY ) {
9163
- fprintf (stderr , "%s: failed to map PMT MMIO for guid %x\n" , __func__ , guid );
9169
+ fprintf (stderr , "%s: failed to map PMT MMIO for guid %x, seq %u \n" , __func__ , guid , seq );
9164
9170
exit (1 );
9165
9171
}
9166
9172
@@ -9216,9 +9222,9 @@ int pmt_add_counter(unsigned int guid, const char *name, enum pmt_datatype type,
9216
9222
void pmt_init (void )
9217
9223
{
9218
9224
if (BIC_IS_ENABLED (BIC_Diec6 )) {
9219
- pmt_add_counter (PMT_MTL_DC6_GUID , "Die%c6" , PMT_TYPE_XTAL_TIME , PMT_COUNTER_MTL_DC6_LSB ,
9220
- PMT_COUNTER_MTL_DC6_MSB , PMT_COUNTER_MTL_DC6_OFFSET , SCOPE_PACKAGE , FORMAT_DELTA ,
9221
- 0 , PMT_OPEN_TRY );
9225
+ pmt_add_counter (PMT_MTL_DC6_GUID , PMT_MTL_DC6_SEQ , "Die%c6" , PMT_TYPE_XTAL_TIME ,
9226
+ PMT_COUNTER_MTL_DC6_LSB , PMT_COUNTER_MTL_DC6_MSB , PMT_COUNTER_MTL_DC6_OFFSET ,
9227
+ SCOPE_PACKAGE , FORMAT_DELTA , 0 , PMT_OPEN_TRY );
9222
9228
}
9223
9229
}
9224
9230
@@ -9699,6 +9705,7 @@ void parse_add_command_pmt(char *add_command)
9699
9705
unsigned int lsb ;
9700
9706
unsigned int msb ;
9701
9707
unsigned int guid ;
9708
+ unsigned int seq = 0 ; /* By default, pick first file in a sequence with a given GUID. */
9702
9709
unsigned int domain_id ;
9703
9710
enum counter_scope scope = 0 ;
9704
9711
enum pmt_datatype type = PMT_TYPE_RAW ;
@@ -9778,6 +9785,10 @@ void parse_add_command_pmt(char *add_command)
9778
9785
goto next ;
9779
9786
}
9780
9787
9788
+ if (sscanf (add_command , "seq=%x" , & seq ) == 1 ) {
9789
+ goto next ;
9790
+ }
9791
+
9781
9792
next :
9782
9793
add_command = strchr (add_command , ',' );
9783
9794
if (add_command ) {
@@ -9864,7 +9875,7 @@ void parse_add_command_pmt(char *add_command)
9864
9875
exit (1 );
9865
9876
}
9866
9877
9867
- pmt_add_counter (guid , name , type , lsb , msb , offset , scope , format , domain_id , PMT_OPEN_REQUIRED );
9878
+ pmt_add_counter (guid , seq , name , type , lsb , msb , offset , scope , format , domain_id , PMT_OPEN_REQUIRED );
9868
9879
}
9869
9880
9870
9881
void parse_add_command (char * add_command )
0 commit comments