From 3b1503b82976a145710cddd90dea728f6785d088 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Thu, 28 Mar 2019 17:58:09 +0800 Subject: [PATCH] MALI: midgard_for_linux: RK: Add support to get soc infomation Change-Id: I0fcc59bdb978ea85de3c1afb9ae6b368d1fd5e9c Signed-off-by: Finley Xiao --- .../platform/rk/mali_kbase_config_rk.c | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/arm/midgard_for_linux/platform/rk/mali_kbase_config_rk.c b/drivers/gpu/arm/midgard_for_linux/platform/rk/mali_kbase_config_rk.c index 3b223a44a44c..f48ce67cb569 100644 --- a/drivers/gpu/arm/midgard_for_linux/platform/rk/mali_kbase_config_rk.c +++ b/drivers/gpu/arm/midgard_for_linux/platform/rk/mali_kbase_config_rk.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -430,8 +431,55 @@ static void kbase_platform_rk_remove_sysfs_files(struct device *dev) device_remove_file(dev, &dev_attr_utilisation); } +static int rk3288_get_soc_info(struct device *dev, struct device_node *np, + int *bin, int *process) +{ + int ret = -EINVAL, value = -EINVAL; + char *name; + + if (!bin) + goto out; + + if (soc_is_rk3288w()) + name = "performance-w"; + else + name = "performance"; + if (of_property_match_string(np, "nvmem-cell-names", name) >= 0) { + ret = rockchip_get_efuse_value(np, name, &value); + if (ret) { + dev_err(dev, "Failed to get soc performance value\n"); + goto out; + } + if (value & 0x2) + *bin = 3; + else if (value & 0x01) + *bin = 2; + else + *bin = 0; + } else { + dev_err(dev, "Failed to get bin config\n"); + } + if (*bin >= 0) + dev_info(dev, "bin=%d\n", *bin); + +out: + return ret; +} + +static const struct of_device_id rockchip_mali_of_match[] = { + { + .compatible = "rockchip,rk3288", + .data = (void *)&rk3288_get_soc_info, + }, + { + .compatible = "rockchip,rk3288w", + .data = (void *)&rk3288_get_soc_info, + }, + {}, +}; + int kbase_platform_rk_init_opp_table(struct kbase_device *kbdev) { - return rockchip_init_opp_table(kbdev->dev, NULL, + return rockchip_init_opp_table(kbdev->dev, rockchip_mali_of_match, "gpu_leakage", "mali"); }