summaryrefslogtreecommitdiff
path: root/mali_kbase/ipa
diff options
context:
space:
mode:
authorSidath Senanayake <sidaths@google.com>2018-12-06 09:09:59 +0100
committerSidath Senanayake <sidaths@google.com>2018-12-06 09:09:59 +0100
commita970431fa55f99aba31ea4263fdc8e70019a9ccd (patch)
tree91bb7f49a4869c0385338fe144f53ac8b98468ea /mali_kbase/ipa
parentf10b3de5283d0c196459f18160161e48cfadae81 (diff)
downloadgpu-a970431fa55f99aba31ea4263fdc8e70019a9ccd.tar.gz
Mali Bifrost DDK r16p0 KMD
Provenance: aa8b3ff0f (collaborate/EAC/b_r16p0) BX304L01B-BU-00000-r16p0-01rel0 BX304L06A-BU-00000-r16p0-01rel0 BX304X07X-BU-00000-r16p0-01rel0 Signed-off-by: Sidath Senanayake <sidaths@google.com> Change-Id: I96125862b7cf6596d1b7109853fb4ca39e851056
Diffstat (limited to 'mali_kbase/ipa')
-rw-r--r--mali_kbase/ipa/mali_kbase_ipa.c46
-rw-r--r--mali_kbase/ipa/mali_kbase_ipa.h33
-rw-r--r--mali_kbase/ipa/mali_kbase_ipa_simple.c3
-rw-r--r--mali_kbase/ipa/mali_kbase_ipa_vinstr_common.c126
-rw-r--r--mali_kbase/ipa/mali_kbase_ipa_vinstr_common.h10
-rw-r--r--mali_kbase/ipa/mali_kbase_ipa_vinstr_g7x.c65
6 files changed, 154 insertions, 129 deletions
diff --git a/mali_kbase/ipa/mali_kbase_ipa.c b/mali_kbase/ipa/mali_kbase_ipa.c
index 520f8fc..9da2878 100644
--- a/mali_kbase/ipa/mali_kbase_ipa.c
+++ b/mali_kbase/ipa/mali_kbase_ipa.c
@@ -38,16 +38,15 @@
#endif
#define KBASE_IPA_FALLBACK_MODEL_NAME "mali-simple-power-model"
-#define KBASE_IPA_G71_MODEL_NAME "mali-g71-power-model"
-#define KBASE_IPA_G72_MODEL_NAME "mali-g72-power-model"
-#define KBASE_IPA_TNOX_MODEL_NAME "mali-tnox-power-model"
-#define KBASE_IPA_TGOX_R1_MODEL_NAME "mali-tgox_r1-power-model"
-static struct kbase_ipa_model_ops *kbase_ipa_all_model_ops[] = {
+static const struct kbase_ipa_model_ops *kbase_ipa_all_model_ops[] = {
&kbase_simple_ipa_model_ops,
&kbase_g71_ipa_model_ops,
&kbase_g72_ipa_model_ops,
- &kbase_tnox_ipa_model_ops
+ &kbase_g76_ipa_model_ops,
+ &kbase_g52_ipa_model_ops,
+ &kbase_g52_r1_ipa_model_ops,
+ &kbase_g51_ipa_model_ops
};
int kbase_ipa_model_recalculate(struct kbase_ipa_model *model)
@@ -68,13 +67,13 @@ int kbase_ipa_model_recalculate(struct kbase_ipa_model *model)
return err;
}
-static struct kbase_ipa_model_ops *kbase_ipa_model_ops_find(struct kbase_device *kbdev,
+const struct kbase_ipa_model_ops *kbase_ipa_model_ops_find(struct kbase_device *kbdev,
const char *name)
{
int i;
for (i = 0; i < ARRAY_SIZE(kbase_ipa_all_model_ops); ++i) {
- struct kbase_ipa_model_ops *ops = kbase_ipa_all_model_ops[i];
+ const struct kbase_ipa_model_ops *ops = kbase_ipa_all_model_ops[i];
if (!strcmp(ops->name, name))
return ops;
@@ -84,6 +83,7 @@ static struct kbase_ipa_model_ops *kbase_ipa_model_ops_find(struct kbase_device
return NULL;
}
+KBASE_EXPORT_TEST_API(kbase_ipa_model_ops_find);
const char *kbase_ipa_model_name_from_id(u32 gpu_id)
{
@@ -93,18 +93,20 @@ const char *kbase_ipa_model_name_from_id(u32 gpu_id)
if (GPU_ID_IS_NEW_FORMAT(prod_id)) {
switch (GPU_ID2_MODEL_MATCH_VALUE(prod_id)) {
case GPU_ID2_PRODUCT_TMIX:
- return KBASE_IPA_G71_MODEL_NAME;
+ return "mali-g71-power-model";
case GPU_ID2_PRODUCT_THEX:
- return KBASE_IPA_G72_MODEL_NAME;
+ return "mali-g72-power-model";
case GPU_ID2_PRODUCT_TNOX:
- return KBASE_IPA_TNOX_MODEL_NAME;
+ return "mali-g76-power-model";
+ case GPU_ID2_PRODUCT_TSIX:
+ return "mali-g51-power-model";
case GPU_ID2_PRODUCT_TGOX:
if ((gpu_id & GPU_ID2_VERSION_MAJOR) ==
(0 << GPU_ID2_VERSION_MAJOR_SHIFT))
- /* TGOX r0 shares a power model with TNOX */
- return KBASE_IPA_TNOX_MODEL_NAME;
+ /* g52 aliased to g76 power-model's ops */
+ return "mali-g52-power-model";
else
- return KBASE_IPA_TGOX_R1_MODEL_NAME;
+ return "mali-g52_r1-power-model";
default:
return KBASE_IPA_FALLBACK_MODEL_NAME;
}
@@ -112,6 +114,7 @@ const char *kbase_ipa_model_name_from_id(u32 gpu_id)
return KBASE_IPA_FALLBACK_MODEL_NAME;
}
+KBASE_EXPORT_TEST_API(kbase_ipa_model_name_from_id);
static struct device_node *get_model_dt_node(struct kbase_ipa_model *model)
{
@@ -244,7 +247,7 @@ void kbase_ipa_term_model(struct kbase_ipa_model *model)
KBASE_EXPORT_TEST_API(kbase_ipa_term_model);
struct kbase_ipa_model *kbase_ipa_init_model(struct kbase_device *kbdev,
- struct kbase_ipa_model_ops *ops)
+ const struct kbase_ipa_model_ops *ops)
{
struct kbase_ipa_model *model;
int err;
@@ -298,7 +301,7 @@ int kbase_ipa_init(struct kbase_device *kbdev)
{
const char *model_name;
- struct kbase_ipa_model_ops *ops;
+ const struct kbase_ipa_model_ops *ops;
struct kbase_ipa_model *default_model = NULL;
int err;
@@ -371,6 +374,8 @@ void kbase_ipa_term(struct kbase_device *kbdev)
mutex_lock(&kbdev->ipa.lock);
kbase_ipa_term_locked(kbdev);
mutex_unlock(&kbdev->ipa.lock);
+
+ mutex_destroy(&kbdev->ipa.lock);
}
KBASE_EXPORT_TEST_API(kbase_ipa_term);
@@ -517,6 +522,9 @@ static unsigned long kbase_get_static_power(unsigned long voltage)
struct kbase_device *kbdev = kbase_find_device(-1);
#endif
+ if (!kbdev)
+ return 0ul;
+
mutex_lock(&kbdev->ipa.lock);
model = get_current_model(kbdev);
@@ -552,6 +560,9 @@ static unsigned long kbase_get_dynamic_power(unsigned long freq,
struct kbase_device *kbdev = kbase_find_device(-1);
#endif
+ if (!kbdev)
+ return 0ul;
+
mutex_lock(&kbdev->ipa.lock);
model = kbdev->ipa.fallback_model;
@@ -627,6 +638,9 @@ int kbase_get_real_power(struct devfreq *df, u32 *power,
int ret;
struct kbase_device *kbdev = dev_get_drvdata(&df->dev);
+ if (!kbdev)
+ return -ENODEV;
+
mutex_lock(&kbdev->ipa.lock);
ret = kbase_get_real_power_locked(kbdev, power, freq, voltage);
mutex_unlock(&kbdev->ipa.lock);
diff --git a/mali_kbase/ipa/mali_kbase_ipa.h b/mali_kbase/ipa/mali_kbase_ipa.h
index 4656ded..7462048 100644
--- a/mali_kbase/ipa/mali_kbase_ipa.h
+++ b/mali_kbase/ipa/mali_kbase_ipa.h
@@ -40,7 +40,7 @@ struct devfreq;
struct kbase_ipa_model {
struct kbase_device *kbdev;
void *model_data;
- struct kbase_ipa_model_ops *ops;
+ const struct kbase_ipa_model_ops *ops;
struct list_head params;
bool missing_dt_node_warning;
};
@@ -154,6 +154,25 @@ void kbase_ipa_term(struct kbase_device *kbdev);
int kbase_ipa_model_recalculate(struct kbase_ipa_model *model);
/**
+ * kbase_ipa_model_ops_find - Lookup an IPA model using its name
+ * @kbdev: pointer to kbase device
+ * @name: name of model to lookup
+ *
+ * Return: Pointer to model's 'ops' structure, or NULL if the lookup failed.
+ */
+const struct kbase_ipa_model_ops *kbase_ipa_model_ops_find(struct kbase_device *kbdev,
+ const char *name);
+
+/**
+ * kbase_ipa_model_name_from_id - Find the best model for a given GPU ID
+ * @gpu_id: GPU ID of GPU the model will be used for
+ *
+ * Return: The name of the appropriate counter-based model, or the name of the
+ * fallback model if no counter model exists.
+ */
+const char *kbase_ipa_model_name_from_id(u32 gpu_id);
+
+/**
* kbase_ipa_init_model - Initilaize the particular IPA model
* @kbdev: pointer to kbase device
* @ops: pointer to object containing model specific methods.
@@ -164,7 +183,7 @@ int kbase_ipa_model_recalculate(struct kbase_ipa_model *model);
* Return: pointer to kbase_ipa_model on success, NULL on error
*/
struct kbase_ipa_model *kbase_ipa_init_model(struct kbase_device *kbdev,
- struct kbase_ipa_model_ops *ops);
+ const struct kbase_ipa_model_ops *ops);
/**
* kbase_ipa_term_model - Terminate the particular IPA model
* @model: pointer to the IPA model object, already initialized
@@ -183,10 +202,12 @@ void kbase_ipa_term_model(struct kbase_ipa_model *model);
*/
void kbase_ipa_protection_mode_switch_event(struct kbase_device *kbdev);
-extern struct kbase_ipa_model_ops kbase_g71_ipa_model_ops;
-extern struct kbase_ipa_model_ops kbase_g72_ipa_model_ops;
-extern struct kbase_ipa_model_ops kbase_tnox_ipa_model_ops;
-extern struct kbase_ipa_model_ops kbase_tgox_r1_ipa_model_ops;
+extern const struct kbase_ipa_model_ops kbase_g71_ipa_model_ops;
+extern const struct kbase_ipa_model_ops kbase_g72_ipa_model_ops;
+extern const struct kbase_ipa_model_ops kbase_g76_ipa_model_ops;
+extern const struct kbase_ipa_model_ops kbase_g52_ipa_model_ops;
+extern const struct kbase_ipa_model_ops kbase_g52_r1_ipa_model_ops;
+extern const struct kbase_ipa_model_ops kbase_g51_ipa_model_ops;
/**
* kbase_get_real_power() - get the real power consumption of the GPU
diff --git a/mali_kbase/ipa/mali_kbase_ipa_simple.c b/mali_kbase/ipa/mali_kbase_ipa_simple.c
index e684df4..c8399ab 100644
--- a/mali_kbase/ipa/mali_kbase_ipa_simple.c
+++ b/mali_kbase/ipa/mali_kbase_ipa_simple.c
@@ -268,8 +268,9 @@ static int kbase_simple_power_model_init(struct kbase_ipa_model *model)
(void *) model_data,
"mali-simple-power-model-temp-poll");
if (IS_ERR(model_data->poll_temperature_thread)) {
+ err = PTR_ERR(model_data->poll_temperature_thread);
kfree(model_data);
- return PTR_ERR(model_data->poll_temperature_thread);
+ return err;
}
err = add_params(model);
diff --git a/mali_kbase/ipa/mali_kbase_ipa_vinstr_common.c b/mali_kbase/ipa/mali_kbase_ipa_vinstr_common.c
index 69c3230..1a6ba01 100644
--- a/mali_kbase/ipa/mali_kbase_ipa_vinstr_common.c
+++ b/mali_kbase/ipa/mali_kbase_ipa_vinstr_common.c
@@ -44,7 +44,7 @@ static inline u32 kbase_ipa_read_hwcnt(
struct kbase_ipa_model_vinstr_data *model_data,
u32 offset)
{
- u8 *p = model_data->vinstr_buffer;
+ u8 *p = (u8 *)model_data->dump_buf.dump_buf;
return *(u32 *)&p[offset];
}
@@ -118,125 +118,69 @@ s64 kbase_ipa_single_counter(
return counter_value * (s64) coeff;
}
-#ifndef CONFIG_MALI_NO_MALI
-/**
- * kbase_ipa_gpu_active - Inform IPA that GPU is now active
- * @model_data: Pointer to model data
- *
- * This function may cause vinstr to become active.
- */
-static void kbase_ipa_gpu_active(struct kbase_ipa_model_vinstr_data *model_data)
+int kbase_ipa_attach_vinstr(struct kbase_ipa_model_vinstr_data *model_data)
{
+ int errcode;
struct kbase_device *kbdev = model_data->kbdev;
+ struct kbase_hwcnt_virtualizer *hvirt = kbdev->hwcnt_gpu_virt;
+ struct kbase_hwcnt_enable_map enable_map;
+ const struct kbase_hwcnt_metadata *metadata =
+ kbase_hwcnt_virtualizer_metadata(hvirt);
- lockdep_assert_held(&kbdev->pm.lock);
+ if (!metadata)
+ return -1;
- if (!kbdev->ipa.vinstr_active) {
- kbdev->ipa.vinstr_active = true;
- kbase_vinstr_resume_client(model_data->vinstr_cli);
+ errcode = kbase_hwcnt_enable_map_alloc(metadata, &enable_map);
+ if (errcode) {
+ dev_err(kbdev->dev, "Failed to allocate IPA enable map");
+ return errcode;
}
-}
-/**
- * kbase_ipa_gpu_idle - Inform IPA that GPU is now idle
- * @model_data: Pointer to model data
- *
- * This function may cause vinstr to become idle.
- */
-static void kbase_ipa_gpu_idle(struct kbase_ipa_model_vinstr_data *model_data)
-{
- struct kbase_device *kbdev = model_data->kbdev;
+ kbase_hwcnt_enable_map_enable_all(&enable_map);
- lockdep_assert_held(&kbdev->pm.lock);
-
- if (kbdev->ipa.vinstr_active) {
- kbase_vinstr_suspend_client(model_data->vinstr_cli);
- kbdev->ipa.vinstr_active = false;
+ errcode = kbase_hwcnt_virtualizer_client_create(
+ hvirt, &enable_map, &model_data->hvirt_cli);
+ kbase_hwcnt_enable_map_free(&enable_map);
+ if (errcode) {
+ dev_err(kbdev->dev, "Failed to register IPA with virtualizer");
+ model_data->hvirt_cli = NULL;
+ return errcode;
}
-}
-#endif
-
-int kbase_ipa_attach_vinstr(struct kbase_ipa_model_vinstr_data *model_data)
-{
- struct kbase_device *kbdev = model_data->kbdev;
- struct kbase_ioctl_hwcnt_reader_setup setup;
- size_t dump_size;
- dump_size = kbase_vinstr_dump_size(kbdev);
- model_data->vinstr_buffer = kzalloc(dump_size, GFP_KERNEL);
- if (!model_data->vinstr_buffer) {
+ errcode = kbase_hwcnt_dump_buffer_alloc(
+ metadata, &model_data->dump_buf);
+ if (errcode) {
dev_err(kbdev->dev, "Failed to allocate IPA dump buffer");
- return -1;
- }
-
- setup.jm_bm = ~0u;
- setup.shader_bm = ~0u;
- setup.tiler_bm = ~0u;
- setup.mmu_l2_bm = ~0u;
- model_data->vinstr_cli = kbase_vinstr_hwcnt_kernel_setup(kbdev->vinstr_ctx,
- &setup, model_data->vinstr_buffer);
- if (!model_data->vinstr_cli) {
- dev_err(kbdev->dev, "Failed to register IPA with vinstr core");
- kfree(model_data->vinstr_buffer);
- model_data->vinstr_buffer = NULL;
- return -1;
+ kbase_hwcnt_virtualizer_client_destroy(model_data->hvirt_cli);
+ model_data->hvirt_cli = NULL;
+ return errcode;
}
- kbase_vinstr_hwc_clear(model_data->vinstr_cli);
-
-#ifndef CONFIG_MALI_NO_MALI
- kbdev->ipa.gpu_active_callback = kbase_ipa_gpu_active;
- kbdev->ipa.gpu_idle_callback = kbase_ipa_gpu_idle;
- kbdev->ipa.model_data = model_data;
- kbdev->ipa.vinstr_active = false;
- /* Suspend vinstr, to ensure that the GPU is powered off until there is
- * something to execute.
- */
- kbase_vinstr_suspend_client(model_data->vinstr_cli);
-#else
- kbdev->ipa.gpu_active_callback = NULL;
- kbdev->ipa.gpu_idle_callback = NULL;
- kbdev->ipa.vinstr_active = true;
-#endif
-
return 0;
}
void kbase_ipa_detach_vinstr(struct kbase_ipa_model_vinstr_data *model_data)
{
- struct kbase_device *kbdev = model_data->kbdev;
-
- kbdev->ipa.gpu_active_callback = NULL;
- kbdev->ipa.gpu_idle_callback = NULL;
- kbdev->ipa.model_data = NULL;
- kbdev->ipa.vinstr_active = false;
-
- if (model_data->vinstr_cli)
- kbase_vinstr_detach_client(model_data->vinstr_cli);
-
- model_data->vinstr_cli = NULL;
- kfree(model_data->vinstr_buffer);
- model_data->vinstr_buffer = NULL;
+ if (model_data->hvirt_cli) {
+ kbase_hwcnt_virtualizer_client_destroy(model_data->hvirt_cli);
+ kbase_hwcnt_dump_buffer_free(&model_data->dump_buf);
+ model_data->hvirt_cli = NULL;
+ }
}
int kbase_ipa_vinstr_dynamic_coeff(struct kbase_ipa_model *model, u32 *coeffp)
{
struct kbase_ipa_model_vinstr_data *model_data =
(struct kbase_ipa_model_vinstr_data *)model->model_data;
- struct kbase_device *kbdev = model_data->kbdev;
s64 energy = 0;
size_t i;
u64 coeff = 0, coeff_mul = 0;
+ u64 start_ts_ns, end_ts_ns;
u32 active_cycles;
int err = 0;
- if (!kbdev->ipa.vinstr_active) {
- err = -ENODATA;
- goto err0; /* GPU powered off - no counters to collect */
- }
-
- err = kbase_vinstr_hwc_dump(model_data->vinstr_cli,
- BASE_HWCNT_READER_EVENT_MANUAL);
+ err = kbase_hwcnt_virtualizer_client_dump(model_data->hvirt_cli,
+ &start_ts_ns, &end_ts_ns, &model_data->dump_buf);
if (err)
goto err0;
diff --git a/mali_kbase/ipa/mali_kbase_ipa_vinstr_common.h b/mali_kbase/ipa/mali_kbase_ipa_vinstr_common.h
index 0deafae..46e3cd4 100644
--- a/mali_kbase/ipa/mali_kbase_ipa_vinstr_common.h
+++ b/mali_kbase/ipa/mali_kbase_ipa_vinstr_common.h
@@ -24,6 +24,8 @@
#define _KBASE_IPA_VINSTR_COMMON_H_
#include "mali_kbase.h"
+#include "mali_kbase_hwcnt_virtualizer.h"
+#include "mali_kbase_hwcnt_types.h"
/* Maximum number of IPA groups for an IPA model. */
#define KBASE_IPA_MAX_GROUP_DEF_NUM 16
@@ -49,8 +51,8 @@ typedef u32 (*kbase_ipa_get_active_cycles_callback)(struct kbase_ipa_model_vinst
* @groups_def_num: Number of elements in the array of IPA groups.
* @get_active_cycles: Callback to return number of active cycles during
* counter sample period
- * @vinstr_cli: vinstr client handle
- * @vinstr_buffer: buffer to dump hardware counters onto
+ * @hvirt_cli: hardware counter virtualizer client handle
+ * @dump_buf: buffer to dump hardware counters onto
* @reference_voltage: voltage, in mV, of the operating point used when
* deriving the power model coefficients. Range approx
* 0.1V - 5V (~= 8V): 2^7 <= reference_voltage <= 2^13
@@ -72,8 +74,8 @@ struct kbase_ipa_model_vinstr_data {
const struct kbase_ipa_group *groups_def;
size_t groups_def_num;
kbase_ipa_get_active_cycles_callback get_active_cycles;
- struct kbase_vinstr_client *vinstr_cli;
- void *vinstr_buffer;
+ struct kbase_hwcnt_virtualizer_client *hvirt_cli;
+ struct kbase_hwcnt_dump_buffer dump_buf;
s32 reference_voltage;
s32 scaling_factor;
s32 min_sample_cycles;
diff --git a/mali_kbase/ipa/mali_kbase_ipa_vinstr_g7x.c b/mali_kbase/ipa/mali_kbase_ipa_vinstr_g7x.c
index 8366033..6365d2f 100644
--- a/mali_kbase/ipa/mali_kbase_ipa_vinstr_g7x.c
+++ b/mali_kbase/ipa/mali_kbase_ipa_vinstr_g7x.c
@@ -248,7 +248,7 @@ static const struct kbase_ipa_group ipa_groups_def_g72[] = {
},
};
-static const struct kbase_ipa_group ipa_groups_def_tnox[] = {
+static const struct kbase_ipa_group ipa_groups_def_g76[] = {
{
.name = "gpu_active",
.default_value = 122000,
@@ -281,7 +281,7 @@ static const struct kbase_ipa_group ipa_groups_def_tnox[] = {
},
};
-static const struct kbase_ipa_group ipa_groups_def_tgox_r1[] = {
+static const struct kbase_ipa_group ipa_groups_def_g52_r1[] = {
{
.name = "gpu_active",
.default_value = 224200,
@@ -314,6 +314,48 @@ static const struct kbase_ipa_group ipa_groups_def_tgox_r1[] = {
},
};
+static const struct kbase_ipa_group ipa_groups_def_g51[] = {
+ {
+ .name = "gpu_active",
+ .default_value = 201400,
+ .op = kbase_g7x_jm_single_counter,
+ .counter_block_offset = JM_GPU_ACTIVE,
+ },
+ {
+ .name = "exec_instr_count",
+ .default_value = 392700,
+ .op = kbase_g7x_sum_all_shader_cores,
+ .counter_block_offset = SC_EXEC_INSTR_COUNT,
+ },
+ {
+ .name = "vary_instr",
+ .default_value = 274000,
+ .op = kbase_g7x_sum_all_shader_cores,
+ .counter_block_offset = SC_VARY_INSTR,
+ },
+ {
+ .name = "tex_tfch_num_operations",
+ .default_value = 528000,
+ .op = kbase_g7x_sum_all_shader_cores,
+ .counter_block_offset = SC_TEX_TFCH_NUM_OPERATIONS,
+ },
+ {
+ .name = "l2_access",
+ .default_value = 506400,
+ .op = kbase_g7x_sum_all_memsys_blocks,
+ .counter_block_offset = MEMSYS_L2_ANY_LOOKUP,
+ },
+};
+
+#define IPA_POWER_MODEL_OPS(gpu, init_token) \
+ const struct kbase_ipa_model_ops kbase_ ## gpu ## _ipa_model_ops = { \
+ .name = "mali-" #gpu "-power-model", \
+ .init = kbase_ ## init_token ## _power_model_init, \
+ .term = kbase_ipa_vinstr_common_model_term, \
+ .get_dynamic_coeff = kbase_ipa_vinstr_dynamic_coeff, \
+ }; \
+ KBASE_EXPORT_TEST_API(kbase_ ## gpu ## _ipa_model_ops)
+
#define STANDARD_POWER_MODEL(gpu, reference_voltage) \
static int kbase_ ## gpu ## _power_model_init(\
struct kbase_ipa_model *model) \
@@ -326,15 +368,16 @@ static const struct kbase_ipa_group ipa_groups_def_tgox_r1[] = {
kbase_g7x_get_active_cycles, \
(reference_voltage)); \
} \
- struct kbase_ipa_model_ops kbase_ ## gpu ## _ipa_model_ops = { \
- .name = "mali-" #gpu "-power-model", \
- .init = kbase_ ## gpu ## _power_model_init, \
- .term = kbase_ipa_vinstr_common_model_term, \
- .get_dynamic_coeff = kbase_ipa_vinstr_dynamic_coeff, \
- }; \
- KBASE_EXPORT_TEST_API(kbase_ ## gpu ## _ipa_model_ops)
+ IPA_POWER_MODEL_OPS(gpu, gpu)
+
+#define ALIAS_POWER_MODEL(gpu, as_gpu) \
+ IPA_POWER_MODEL_OPS(gpu, as_gpu)
STANDARD_POWER_MODEL(g71, 800);
STANDARD_POWER_MODEL(g72, 800);
-STANDARD_POWER_MODEL(tnox, 800);
-STANDARD_POWER_MODEL(tgox_r1, 1000);
+STANDARD_POWER_MODEL(g76, 800);
+STANDARD_POWER_MODEL(g52_r1, 1000);
+STANDARD_POWER_MODEL(g51, 1000);
+
+/* g52 is an alias of g76 (TNOX) for IPA */
+ALIAS_POWER_MODEL(g52, g76);