decoder->record.phys_addr = ip;
                        break;
                case ARM_SPE_COUNTER:
+                       if (idx == SPE_CNT_PKT_HDR_INDEX_TOTAL_LAT)
+                               decoder->record.latency = payload;
                        break;
                case ARM_SPE_CONTEXT:
                        decoder->record.context_id = payload;
 
        sample.addr = record->virt_addr;
        sample.phys_addr = record->phys_addr;
        sample.data_src = data_src;
+       sample.weight = record->latency;
 
        return arm_spe_deliver_synth_event(spe, speq, event, &sample);
 }
        sample.id = spe_events_id;
        sample.stream_id = spe_events_id;
        sample.addr = record->to_ip;
+       sample.weight = record->latency;
 
        return arm_spe_deliver_synth_event(spe, speq, event, &sample);
 }
        attr.type = PERF_TYPE_HARDWARE;
        attr.sample_type = evsel->core.attr.sample_type & PERF_SAMPLE_MASK;
        attr.sample_type |= PERF_SAMPLE_IP | PERF_SAMPLE_TID |
-                           PERF_SAMPLE_PERIOD | PERF_SAMPLE_DATA_SRC;
+                           PERF_SAMPLE_PERIOD | PERF_SAMPLE_DATA_SRC |
+                           PERF_SAMPLE_WEIGHT;
        if (spe->timeless_decoding)
                attr.sample_type &= ~(u64)PERF_SAMPLE_TIME;
        else