MALI: utgard: rockchip: remove code depending on rk_dvfs_module

Set clk_gpu to 200M when initializing.
vdd_gpu isn't initialized explicitly.
DVFS isn't implemented.

Change-Id: I82c242d7929d55b7e40277a24b5c2b06a3121a3c
Signed-off-by: chenzhen <chenzhen@rock-chips.com>
Signed-off-by: Jacob Chen <jacob2.chen@rock-chips.com>
This commit is contained in:
Jacob Chen
2016-07-22 12:41:25 +08:00
committed by Gerrit Code Review
parent 0a41e45e1d
commit 9774b15bc3
5 changed files with 84 additions and 98 deletions

View File

@@ -58,7 +58,7 @@ extern "C" {
#ifdef ENABLE_VERBOSE_LOG
/** Verbose log. */
#define V(fmt, args...) \
pr_debug("V : [File] : %s; [Line] : %d; [Func] : %s(); " fmt \
pr_info("V : [File] : %s; [Line] : %d; [Func] : %s(); " fmt \
"\n", \
__FILE__, \
__LINE__, \
@@ -72,7 +72,7 @@ extern "C" {
#ifdef ENABLE_DEBUG_LOG
/** Debug log. */
#define D(fmt, args...) \
pr_debug("D : [File] : %s; [Line] : %d; [Func] : %s(); " fmt \
pr_info("D : [File] : %s; [Line] : %d; [Func] : %s(); " fmt \
"\n", \
__FILE__, \
__LINE__, \

View File

@@ -41,7 +41,7 @@
container_of(dvfs, struct mali_platform_drv_data, dvfs)
/*---------------------------------------------------------------------------*/
#if 0
static bool mali_dvfs_should_jump_up(const struct mali_dvfs *p_dvfs)
{
return (p_dvfs->m_count_of_requests_to_jump_up
@@ -53,12 +53,13 @@ static bool mali_dvfs_should_jump_down(const struct mali_dvfs *p_dvfs)
return (p_dvfs->m_count_of_requests_to_jump_down
>= NUM_OF_CONTINUOUS_REQUESTS_TO_TRIGGER_REAL_JUMPING_DOWN);
}
#endif
/**
* .KP :
* work_to_handle_mali_utilization_event 的实现主体,
* 将根据 current_mali_utilization_data, 改变 current_dvfs_level.
*/
#if 0
static void mali_dvfs_event_proc(struct work_struct *w)
{
struct mali_dvfs *dvfs = work_to_dvfs(w);/* mali_dvfs_context. */
@@ -151,7 +152,7 @@ MAKE_DVFS_LEVEL_UPDATE_EFFECTIVE:
return;
}
}
#endif
/**
* 返回 mali_dvfs_facility 当前是否被使能.
*/
@@ -213,15 +214,17 @@ int mali_dvfs_event(struct device *dev, u32 utilisation)
dvfs->utilisation = utilisation;
V("mali_utilization_in_percentage : %d", utilisation * 100 / 256);
#if 0
if (dvfs->enabled) {
/* 将 work_to_handle_mali_utilization_event,
* 放置到 kernel_global_workqueue, 待执行. */
schedule_work(&dvfs->work);
}
#endif
return MALI_TRUE;
}
#if 0
static void mali_dvfs_threshold(u32 div,
struct mali_platform_drv_data *drv_data)
{
@@ -262,11 +265,12 @@ static void mali_dvfs_threshold(u32 div,
drv_data->fv_info[level].max);
}
}
#endif
/*---------------------------------------------------------------------------*/
int mali_dvfs_init(struct device *dev)
{
#if 0
struct mali_platform_drv_data *drv_data = dev_get_drvdata(dev);
/*mali_dvfs_context. */
struct mali_dvfs *dvfs = &drv_data->dvfs;
@@ -320,11 +324,13 @@ int mali_dvfs_init(struct device *dev)
dvfs->m_count_of_requests_to_jump_up = 0;
dvfs->m_count_of_requests_to_jump_down = 0;
#endif
return 0;
}
void mali_dvfs_term(struct device *dev)
{
#if 0
struct mali_platform_drv_data *drv_data = dev_get_drvdata(dev);
struct mali_dvfs *dvfs = &drv_data->dvfs;
@@ -333,5 +339,6 @@ void mali_dvfs_term(struct device *dev)
dvfs->enabled = false;
cancel_work_sync(&dvfs->work);
#endif
}

View File

@@ -8,7 +8,7 @@
* by a licensing agreement from ARM Limited.
*/
/**
/*
* @file mali_platform.c
* Platform specific Mali driver functions
* for a default platform
@@ -35,8 +35,7 @@
#include "arm_core_scaling.h"
#include "mali_platform.h"
/**
/*
* 是否使能 core_scaling 机制.
* .DP : core_scaling : 根据当前 mali_utilization_data,
* 配置 mali_gpu 中具体使用的 pp_core 的个数.
@@ -45,12 +44,12 @@ static int mali_core_scaling_enable;
u32 mali_group_error;
/**
/*
* anchor_of_device_of_mali_gpu.
*/
static struct device *mali_dev;
/**
/*
* 设置 current_dvfs_level.
*
* @param level
@@ -89,7 +88,7 @@ int mali_set_level(struct device *dev, int level)
return ret;
}
D("have set gpu_clk to %lu of new_level %d, " "the old_level is %d.",
D("have set gpu_clk to %lu of new_level %d, the old_level is %d.",
freq,
level,
current_level);
@@ -101,60 +100,43 @@ int mali_set_level(struct device *dev, int level)
return 0;
}
/**
/*
* 初始化 gpu_dvfs_node 和 gpu_power_domain.
*/
static int mali_clock_init(struct device *dev)
{
int ret;
struct mali_platform_drv_data *drv_data = dev_get_drvdata(dev);
int err;
unsigned long rate = 200 * 1000 * 1000;
drv_data->pd = devm_clk_get(dev, "pd_gpu");
if (IS_ERR(drv_data->pd)) {
ret = PTR_ERR(drv_data->pd);
/* rk3228 gpu has no power domain,save NULL for compatible*/
if (ret != -ENOENT) {
dev_err(dev, "get pd_clk failed, %d\n", ret);
return ret;
}
drv_data->pd = NULL;
D("to get clk_mali.");
drv_data->clock = clk_get(drv_data->dev, "clk_mali");
if (IS_ERR_OR_NULL(drv_data->clock)) {
err = PTR_ERR(drv_data->clock);
drv_data->clock = NULL;
E("fail to get clk_mali, err : %d", err);
return err;
}
D("to preare and enable clk_mali.");
err = clk_prepare_enable(drv_data->clock);
if (err) {
E("Failed to prepare and enable clock (%d)\n", err);
return err;
}
I("to set freq_of_clk_gpu to %lu.", rate);
err = clk_set_rate(drv_data->clock, rate);
if (err) {
E("Failed to set clock.");
return err;
}
if (drv_data->pd) {
ret = clk_prepare_enable(drv_data->pd);
if (ret) {
dev_err(dev, "prepare pd_clk failed, %d\n", ret);
return ret;
}
}
drv_data->clk = clk_get_dvfs_node("clk_gpu");
if (IS_ERR(drv_data->clk)) {
ret = PTR_ERR(drv_data->clk);
dev_err(dev, "prepare clk gpu failed, %d\n", ret);
return ret;
}
ret = dvfs_clk_prepare_enable(drv_data->clk);
if (ret) {
dev_err(dev, "prepare clk failed, %d\n", ret);
return ret;
}
drv_data->power_state = true;
D("success to init clk_mali.");
return 0;
}
static void mali_clock_term(struct device *dev)
{
struct mali_platform_drv_data *drv_data = dev_get_drvdata(dev);
dvfs_clk_disable_unprepare(drv_data->clk);
if (drv_data->pd)
clk_disable_unprepare(drv_data->pd);
drv_data->power_state = false;
}
/*---------------------------------------------------------------------------*/
@@ -257,9 +239,15 @@ static int error_count_show(struct device *dev,
return sprintf(buf, "%d\n", mali_group_error);
}
static DEVICE_ATTR(available_frequencies, S_IRUGO, show_available_frequencies, NULL);
static DEVICE_ATTR(available_frequencies,
S_IRUGO,
show_available_frequencies,
NULL);
static DEVICE_ATTR(clock, S_IRUGO | S_IWUSR, show_clock, set_clock);
static DEVICE_ATTR(dvfs_enable, S_IRUGO | S_IWUSR, show_dvfs_enable, set_dvfs_enable);
static DEVICE_ATTR(dvfs_enable,
S_IRUGO | S_IWUSR,
show_dvfs_enable,
set_dvfs_enable);
static DEVICE_ATTR(utilisation, S_IRUGO, show_utilisation, NULL);
static DEVICE_ATTR(error_count, 0644, error_count_show, NULL);
@@ -276,7 +264,7 @@ static const struct attribute_group mali_attr_group = {
.attrs = mali_sysfs_entries,
};
/**
/*
* 创建 sysfs_nodes_of_platform_dependent_part.
*/
static int mali_create_sysfs(struct device *dev)
@@ -297,7 +285,7 @@ static void mali_remove_sysfs(struct device *dev)
/*---------------------------------------------------------------------------*/
/**
/*
* 对 platform_device_of_mali_gpu,
* 完成仅和 platform_dependent_part 有关的初始化.
*/
@@ -309,10 +297,8 @@ _mali_osk_errcode_t mali_platform_init(struct platform_device *pdev)
int ret;
mali_drv_data = devm_kzalloc(dev, sizeof(*mali_drv_data), GFP_KERNEL);
if (!mali_drv_data) {
dev_err(dev, "no mem\n");
if (!mali_drv_data)
return _MALI_OSK_ERR_NOMEM;
}
dev_set_drvdata(dev, mali_drv_data);
@@ -320,14 +306,17 @@ _mali_osk_errcode_t mali_platform_init(struct platform_device *pdev)
mali_dev = dev;
D("to c all mali_clock_init.");
ret = mali_clock_init(dev);
if (ret)
goto err_init;
D("to call mali_dvfs_init.");
ret = mali_dvfs_init(dev);
if (ret)
goto err_init;
D("to call mali_create_sysfs.");
ret = mali_create_sysfs(dev);
if (ret)
goto term_clk;
@@ -360,12 +349,14 @@ _mali_osk_errcode_t mali_platform_deinit(struct platform_device *pdev)
/*---------------------------------------------------------------------------*/
/**
* 对 gpu_power_domain(mali_power_domain), "上电, 开 clk" / "下电, 关 clk".
/*
* 对 gpu_power_domain(mali_power_domain),
* "上电, 开 clk" / "下电, 关 clk".
* @param bpower_off
* true, 下电.
* false, 对 gpu_power_domain 上电.
*/
#if 0
static _mali_osk_errcode_t mali_power_domain_control(bool bpower_off)
{
struct mali_platform_drv_data *drv_data = dev_get_drvdata(mali_dev);
@@ -399,47 +390,16 @@ static _mali_osk_errcode_t mali_power_domain_control(bool bpower_off)
return 0;
}
#endif
_mali_osk_errcode_t mali_platform_power_mode_change(
enum mali_power_mode power_mode)
{
bool bpower_off;/* 下电. */
switch (power_mode) {
case MALI_POWER_MODE_ON:
MALI_DEBUG_PRINT(2, ("MALI_POWER_MODE_ON\r\n"));
mali_dvfs_enable(mali_dev);
bpower_off = false;
break;
case MALI_POWER_MODE_LIGHT_SLEEP:
MALI_DEBUG_PRINT(2, ("MALI_POWER_MODE_LIGHT_SLEEP\r\n"));
mali_dvfs_disable(mali_dev);
/* 预置将下电. */
bpower_off = true;
break;
case MALI_POWER_MODE_DEEP_SLEEP:
MALI_DEBUG_PRINT(2, ("MALI_POWER_MODE_DEEP_SLEEP\r\n"));
mali_dvfs_disable(mali_dev);
/* 预置将下电. */
bpower_off = true;
break;
default:
MALI_DEBUG_PRINT(2,
("power_mode(%d) not support\n", power_mode));
return _MALI_OSK_ERR_INVALID_ARGS;
}
mali_power_domain_control(bpower_off);
return 0;
}
/*---------------------------------------------------------------------------*/
/**
/*
* 将注册到 common_part 中的, 对 mali_utilization_event 的 handler,
* 即 common_part 会直接将 mali_utilization_event 通知回调到本函数.
*/

View File

@@ -21,6 +21,7 @@
#include <linux/mali/mali_utgard.h>
#include <linux/rockchip/dvfs.h>
#include <linux/cpufreq.h>
#include <linux/regulator/consumer.h>
#ifdef __cplusplus
extern "C" {
@@ -113,6 +114,15 @@ struct mali_platform_drv_data {
bool power_state;
_mali_osk_mutex_t *clock_set_lock;
/*-------------------------------------------------------*/
/**
* clk_mali.
*/
struct clk *clock;
struct regulator *regulator;
};
/** @brief Platform specific setup and initialisation of MALI

View File

@@ -21,7 +21,7 @@
* .DP : common_parts : ARM 实现的通用的部分.
*/
/* #define ENABLE_DEBUG_LOG */
#define ENABLE_DEBUG_LOG
#include "custom_log.h"
#include <linux/platform_device.h>
@@ -32,6 +32,7 @@
#endif
#include <linux/workqueue.h>
#include <linux/dma-mapping.h>
#include <linux/pm_runtime.h>
#include <linux/rockchip/cpu.h>
#include <linux/mali/mali_utgard.h>
@@ -217,27 +218,35 @@ static void mali_platform_device_add_config(struct platform_device *pdev)
*/
int mali_platform_device_init(struct platform_device *pdev)
{
// error
int err = 0;
int num_pp_cores = 0;
MALI_DEBUG_PRINT(2, ("mali_platform_device_register() called\n"));
D("mali_platform_device_register() called\n");
/*
if (cpu_is_rk312x())
num_pp_cores = 2;
else if (cpu_is_rk3036())
*/
num_pp_cores = 1;
/*
else if (cpu_is_rk3188())
num_pp_cores = 4;
else if (cpu_is_rk3228())
num_pp_cores = 2;
*/
D("to add config.");
mali_platform_device_add_config(pdev);
D("to add data to platform_device..");
/* 将 platform_specific_data 添加到 platform_device_of_mali_gpu.
* 这里的 platform_specific_data 的类型由 common_part 定义. */
err = platform_device_add_data(pdev, &mali_gpu_data,
sizeof(mali_gpu_data));
if (err == 0) {
D("to init internal_platform_specific_code.");
/* .KP : 初始化 platform_device_of_mali_gpu 中,
* 仅和 platform_dependent_part 相关的部分. */
err = mali_platform_init(pdev);