1 /* 2 * Copyright © 2024 Raspberry Pi Ltd 3 * SPDX-License-Identifier: MIT 4 */ 5 6 #pragma once 7 8 #include "common/v3d_device_info.h" 9 #include "drm-uapi/v3d_drm.h" 10 #include "perfcntrs/v3d_perfcntrs.h" 11 #include "pps/pps_driver.h" 12 13 namespace pps 14 { 15 16 class V3DDriver : public Driver 17 { 18 public: 19 uint64_t get_min_sampling_period_ns() override; 20 bool init_perfcnt() override; 21 void enable_counter(uint32_t counter_id) override; 22 void enable_all_counters() override; 23 void enable_perfcnt(uint64_t sampling_period_ns) override; 24 void disable_perfcnt() override; 25 bool dump_perfcnt() override; 26 uint64_t next() override; 27 uint32_t gpu_clock_id() const override; 28 uint64_t gpu_timestamp() const override; 29 bool cpu_gpu_timestamp(uint64_t &cpu_timestamp, 30 uint64_t &gpu_timestamp) const override; 31 32 private: 33 struct v3d_device_info devinfo; 34 struct v3d_perfcntrs *perfcntrs; 35 uint64_t last_dump_ts = 0; 36 37 unsigned int perfmon_id; 38 uint64_t values[DRM_V3D_MAX_PERF_COUNTERS]; 39 }; 40 41 } // namespace pps 42