mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 21:07:02 +09:00
media: video: tegra: avp_svc: Force memory bus to full when avp is enabled
Change-Id: I51382f58f296df939f99d60926ba97f0b4e04aed Signed-off-by: Colin Cross <ccross@android.com>
This commit is contained in:
@@ -82,6 +82,7 @@ struct avp_svc_info {
|
||||
struct avp_clk clks[NUM_CLK_REQUESTS];
|
||||
/* used for dvfs */
|
||||
struct clk *sclk;
|
||||
struct clk *emcclk;
|
||||
|
||||
struct mutex clk_lock;
|
||||
|
||||
@@ -352,6 +353,7 @@ static void do_svc_module_clock(struct avp_svc_info *avp_svc,
|
||||
aclk = &avp_svc->clks[mod->clk_req];
|
||||
if (msg->enable) {
|
||||
if (aclk->refcnt++ == 0) {
|
||||
clk_enable(avp_svc->emcclk);
|
||||
clk_enable(avp_svc->sclk);
|
||||
clk_enable(aclk->clk);
|
||||
}
|
||||
@@ -362,6 +364,7 @@ static void do_svc_module_clock(struct avp_svc_info *avp_svc,
|
||||
} else if (--aclk->refcnt == 0) {
|
||||
clk_disable(aclk->clk);
|
||||
clk_disable(avp_svc->sclk);
|
||||
clk_disable(avp_svc->emcclk);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&avp_svc->clk_lock);
|
||||
@@ -631,8 +634,9 @@ void avp_svc_stop(struct avp_svc_info *avp_svc)
|
||||
pr_info("%s: remote left clock '%s' on\n", __func__,
|
||||
aclk->mod->name);
|
||||
clk_disable(aclk->clk);
|
||||
/* sclk was enabled once for every clock */
|
||||
/* sclk/emcclk was enabled once for every clock */
|
||||
clk_disable(avp_svc->sclk);
|
||||
clk_disable(avp_svc->emcclk);
|
||||
}
|
||||
aclk->refcnt = 0;
|
||||
}
|
||||
@@ -682,6 +686,21 @@ struct avp_svc_info *avp_svc_init(struct platform_device *pdev,
|
||||
ret = -ENOENT;
|
||||
goto err_get_clks;
|
||||
}
|
||||
|
||||
avp_svc->emcclk = clk_get(&pdev->dev, "emc");
|
||||
if (IS_ERR(avp_svc->emcclk)) {
|
||||
pr_err("avp_svc: Couldn't get emcclk for dvfs\n");
|
||||
ret = -ENOENT;
|
||||
goto err_get_clks;
|
||||
}
|
||||
|
||||
/*
|
||||
* The emc is a shared clock, it will be set to the highest
|
||||
* requested rate from any user. Set the rate to ULONG_MAX to
|
||||
* always request the max rate whenever this request is enabled
|
||||
*/
|
||||
clk_set_rate(avp_svc->emcclk, ULONG_MAX);
|
||||
|
||||
avp_svc->rpc_node = rpc_node;
|
||||
|
||||
mutex_init(&avp_svc->clk_lock);
|
||||
@@ -694,6 +713,8 @@ err_get_clks:
|
||||
clk_put(avp_svc->clks[i].clk);
|
||||
if (!IS_ERR_OR_NULL(avp_svc->sclk))
|
||||
clk_put(avp_svc->sclk);
|
||||
if (!IS_ERR_OR_NULL(avp_svc->emcclk))
|
||||
clk_put(avp_svc->emcclk);
|
||||
err_alloc:
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
@@ -705,6 +726,7 @@ void avp_svc_destroy(struct avp_svc_info *avp_svc)
|
||||
for (i = 0; i < NUM_CLK_REQUESTS; i++)
|
||||
clk_put(avp_svc->clks[i].clk);
|
||||
clk_put(avp_svc->sclk);
|
||||
clk_put(avp_svc->emcclk);
|
||||
|
||||
kfree(avp_svc);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user