perfmon = v3d_get_simulator_perfmon(fd, file->active_perfid);
if (perfmon)
- v3d41_simulator_perfmon_stop(sim_state.v3d,
- perfmon->ncounters,
- perfmon->values);
+ v3d_X_simulator(perfmon_stop)(sim_state.v3d,
+ perfmon->ncounters,
+ perfmon->values);
perfmon = v3d_get_simulator_perfmon(fd, perfid);
if (perfmon)
- v3d41_simulator_perfmon_start(sim_state.v3d,
- perfmon->ncounters,
- perfmon->counters);
+ v3d_X_simulator(perfmon_start)(sim_state.v3d,
+ perfmon->ncounters,
+ perfmon->counters);
file->active_perfid = perfid;
}
bin_fd = fd;
v3d_simulator_perfmon_switch(fd, submit->perfmon_id);
-
- switch(sim_state.ver) {
- case 33:
- v3d33_simulator_submit_cl_ioctl(sim_state.v3d, submit, file->gmp->ofs);
- break;
- case 41:
- case 42:
- v3d41_simulator_submit_cl_ioctl(sim_state.v3d, submit, file->gmp->ofs);
- break;
- case 71:
- v3d71_simulator_submit_cl_ioctl(sim_state.v3d, submit, file->gmp->ofs);
- break;
- default:
- unreachable("Unsupported V3D version\n");
- }
+ v3d_X_simulator(submit_cl_ioctl)(sim_state.v3d, submit, file->gmp->ofs);
util_dynarray_foreach(&sim_state.bin_oom, struct v3d_simulator_bo *,
sim_bo) {
}
static int
-v3d_simulator_get_param_ioctl(int fd, struct drm_v3d_get_param *args)
-{
- switch(sim_state.ver) {
- case 33:
- return v3d33_simulator_get_param_ioctl(sim_state.v3d, args);
- case 41:
- case 42:
- return v3d41_simulator_get_param_ioctl(sim_state.v3d, args);
- case 71:
- return v3d71_simulator_get_param_ioctl(sim_state.v3d, args);
- default:
- unreachable("Unsupported V3D version\n");
- }
-}
-
-static int
v3d_simulator_submit_tfu_ioctl(int fd, struct drm_v3d_submit_tfu *args)
{
struct v3d_simulator_file *file = v3d_get_simulator_file_for_fd(fd);
v3d_simulator_copy_in_handle(file, args->bo_handles[2]);
v3d_simulator_copy_in_handle(file, args->bo_handles[3]);
- switch(sim_state.ver) {
- case 33:
- ret = v3d33_simulator_submit_tfu_ioctl(sim_state.v3d, args);
- break;
- case 41:
- case 42:
- ret = v3d41_simulator_submit_tfu_ioctl(sim_state.v3d, args);
- break;
- case 71:
- ret = v3d71_simulator_submit_tfu_ioctl(sim_state.v3d, args);
- break;
- default:
- unreachable("Unsupported V3D version\n");
- }
+ ret = v3d_X_simulator(submit_tfu_ioctl)(sim_state.v3d, args);
v3d_simulator_copy_out_handle(file, args->bo_handles[0]);
v3d_simulator_perfmon_switch(fd, args->perfmon_id);
- switch(sim_state.ver) {
- case 41:
- case 42:
- ret = v3d41_simulator_submit_csd_ioctl(sim_state.v3d, args,
- file->gmp->ofs);
- break;
- case 71:
- ret = v3d71_simulator_submit_csd_ioctl(sim_state.v3d, args,
- file->gmp->ofs);
- break;
- default:
- ret = -1;
- }
+ ret = v3d_X_simulator(submit_csd_ioctl)(sim_state.v3d, args,
+ file->gmp->ofs);
for (int i = 0; i < args->bo_handle_count; i++)
v3d_simulator_copy_out_handle(file, bo_handles[i]);
return 0;
case DRM_IOCTL_V3D_GET_PARAM:
- return v3d_simulator_get_param_ioctl(fd, args);
+ return v3d_X_simulator(get_param_ioctl)(sim_state.v3d, args);
case DRM_IOCTL_GEM_CLOSE:
return v3d_simulator_gem_close_ioctl(fd, args);
util_dynarray_init(&sim_state.bin_oom, NULL);
- switch(sim_state.ver) {
- case 33:
- v3d33_simulator_init_regs(sim_state.v3d);
- sim_state.perfcnt_total = 0;
- break;
- case 41:
- case 42:
- v3d41_simulator_init_regs(sim_state.v3d);
- sim_state.perfcnt_total = 87;
- break;
- case 71:
- v3d71_simulator_init_regs(sim_state.v3d);
- sim_state.perfcnt_total = 93;
- break;
- default:
- unreachable("Not supported V3D version\n");
- }
+ v3d_X_simulator(init_regs)(sim_state.v3d);
+ v3d_X_simulator(get_perfcnt_total)(&sim_state.perfcnt_total);
}
struct v3d_simulator_file *
#include "v3d_simulator.h"
#include "v3d_simulator_wrapper.h"
+#include "common/v3d_performance_counters.h"
+
#include "util/macros.h"
#include "util/bitscan.h"
#include "drm-uapi/v3d_drm.h"
return 0;
}
-#if V3D_VERSION >= 41
int
v3dX(simulator_submit_csd_ioctl)(struct v3d_hw *v3d,
struct drm_v3d_submit_csd *args,
uint32_t gmp_ofs)
{
+#if V3D_VERSION >= 41
int last_completed_jobs = (V3D_READ(V3D_CSD_0_STATUS) &
V3D_CSD_0_STATUS_NUM_COMPLETED_JOBS_SET);
g_gmp_ofs = gmp_ofs;
v3d_flush_caches(v3d);
return 0;
-}
+#else
+ return -1;
#endif
+}
int
v3dX(simulator_get_param_ioctl)(struct v3d_hw *v3d,
#define V3D_PCTR_0_SRC_N(x) (V3D_PCTR_0_SRC_0_3 + 4 * (x))
#define V3D_PCTR_0_SRC_N_SHIFT(x) ((x) * 8)
#define V3D_PCTR_0_SRC_N_MASK(x) (BITFIELD_RANGE(V3D_PCTR_0_SRC_N_SHIFT(x), \
- V3D_PCTR_0_SRC_N_SHIFT(x) + 6))
+ V3D_PCTR_0_SRC_N_SHIFT(x) + \
+ V3D_PCTR_0_SRC_0_3_PCTRS0_MSB))
#endif
void
#endif
}
+void v3dX(simulator_get_perfcnt_total)(uint32_t *count)
+{
+ *count = ARRAY_SIZE(v3d_performance_counters);
+}
+
#endif /* USE_V3D_SIMULATOR */