@@ -390,6 +390,18 @@ static struct uncore_event_desc snb_uncore_imc_events[] = {
390
390
INTEL_UNCORE_EVENT_DESC (data_writes .scale , "6.103515625e-5" ),
391
391
INTEL_UNCORE_EVENT_DESC (data_writes .unit , "MiB" ),
392
392
393
+ INTEL_UNCORE_EVENT_DESC (gt_requests , "event=0x03" ),
394
+ INTEL_UNCORE_EVENT_DESC (gt_requests .scale , "6.103515625e-5" ),
395
+ INTEL_UNCORE_EVENT_DESC (gt_requests .unit , "MiB" ),
396
+
397
+ INTEL_UNCORE_EVENT_DESC (ia_requests , "event=0x04" ),
398
+ INTEL_UNCORE_EVENT_DESC (ia_requests .scale , "6.103515625e-5" ),
399
+ INTEL_UNCORE_EVENT_DESC (ia_requests .unit , "MiB" ),
400
+
401
+ INTEL_UNCORE_EVENT_DESC (io_requests , "event=0x05" ),
402
+ INTEL_UNCORE_EVENT_DESC (io_requests .scale , "6.103515625e-5" ),
403
+ INTEL_UNCORE_EVENT_DESC (io_requests .unit , "MiB" ),
404
+
393
405
{ /* end: all zeroes */ },
394
406
};
395
407
@@ -405,13 +417,35 @@ static struct uncore_event_desc snb_uncore_imc_events[] = {
405
417
#define SNB_UNCORE_PCI_IMC_DATA_WRITES_BASE 0x5054
406
418
#define SNB_UNCORE_PCI_IMC_CTR_BASE SNB_UNCORE_PCI_IMC_DATA_READS_BASE
407
419
420
+ /* BW break down- legacy counters */
421
+ #define SNB_UNCORE_PCI_IMC_GT_REQUESTS 0x3
422
+ #define SNB_UNCORE_PCI_IMC_GT_REQUESTS_BASE 0x5040
423
+ #define SNB_UNCORE_PCI_IMC_IA_REQUESTS 0x4
424
+ #define SNB_UNCORE_PCI_IMC_IA_REQUESTS_BASE 0x5044
425
+ #define SNB_UNCORE_PCI_IMC_IO_REQUESTS 0x5
426
+ #define SNB_UNCORE_PCI_IMC_IO_REQUESTS_BASE 0x5048
427
+
408
428
enum perf_snb_uncore_imc_freerunning_types {
409
- SNB_PCI_UNCORE_IMC_DATA = 0 ,
429
+ SNB_PCI_UNCORE_IMC_DATA_READS = 0 ,
430
+ SNB_PCI_UNCORE_IMC_DATA_WRITES ,
431
+ SNB_PCI_UNCORE_IMC_GT_REQUESTS ,
432
+ SNB_PCI_UNCORE_IMC_IA_REQUESTS ,
433
+ SNB_PCI_UNCORE_IMC_IO_REQUESTS ,
434
+
410
435
SNB_PCI_UNCORE_IMC_FREERUNNING_TYPE_MAX ,
411
436
};
412
437
413
438
static struct freerunning_counters snb_uncore_imc_freerunning [] = {
414
- [SNB_PCI_UNCORE_IMC_DATA ] = { SNB_UNCORE_PCI_IMC_DATA_READS_BASE , 0x4 , 0x0 , 2 , 32 },
439
+ [SNB_PCI_UNCORE_IMC_DATA_READS ] = { SNB_UNCORE_PCI_IMC_DATA_READS_BASE ,
440
+ 0x0 , 0x0 , 1 , 32 },
441
+ [SNB_PCI_UNCORE_IMC_DATA_READS ] = { SNB_UNCORE_PCI_IMC_DATA_WRITES_BASE ,
442
+ 0x0 , 0x0 , 1 , 32 },
443
+ [SNB_PCI_UNCORE_IMC_GT_REQUESTS ] = { SNB_UNCORE_PCI_IMC_GT_REQUESTS_BASE ,
444
+ 0x0 , 0x0 , 1 , 32 },
445
+ [SNB_PCI_UNCORE_IMC_IA_REQUESTS ] = { SNB_UNCORE_PCI_IMC_IA_REQUESTS_BASE ,
446
+ 0x0 , 0x0 , 1 , 32 },
447
+ [SNB_PCI_UNCORE_IMC_IO_REQUESTS ] = { SNB_UNCORE_PCI_IMC_IO_REQUESTS_BASE ,
448
+ 0x0 , 0x0 , 1 , 32 },
415
449
};
416
450
417
451
static struct attribute * snb_uncore_imc_formats_attr [] = {
@@ -525,6 +559,18 @@ static int snb_uncore_imc_event_init(struct perf_event *event)
525
559
base = SNB_UNCORE_PCI_IMC_DATA_WRITES_BASE ;
526
560
idx = UNCORE_PMC_IDX_FREERUNNING ;
527
561
break ;
562
+ case SNB_UNCORE_PCI_IMC_GT_REQUESTS :
563
+ base = SNB_UNCORE_PCI_IMC_GT_REQUESTS_BASE ;
564
+ idx = UNCORE_PMC_IDX_FREERUNNING ;
565
+ break ;
566
+ case SNB_UNCORE_PCI_IMC_IA_REQUESTS :
567
+ base = SNB_UNCORE_PCI_IMC_IA_REQUESTS_BASE ;
568
+ idx = UNCORE_PMC_IDX_FREERUNNING ;
569
+ break ;
570
+ case SNB_UNCORE_PCI_IMC_IO_REQUESTS :
571
+ base = SNB_UNCORE_PCI_IMC_IO_REQUESTS_BASE ;
572
+ idx = UNCORE_PMC_IDX_FREERUNNING ;
573
+ break ;
528
574
default :
529
575
return - EINVAL ;
530
576
}
@@ -598,7 +644,7 @@ static struct intel_uncore_ops snb_uncore_imc_ops = {
598
644
599
645
static struct intel_uncore_type snb_uncore_imc = {
600
646
.name = "imc" ,
601
- .num_counters = 2 ,
647
+ .num_counters = 5 ,
602
648
.num_boxes = 1 ,
603
649
.num_freerunning_types = SNB_PCI_UNCORE_IMC_FREERUNNING_TYPE_MAX ,
604
650
.mmio_map_size = SNB_UNCORE_PCI_IMC_MAP_SIZE ,
0 commit comments