video: rockchip: vpu: add core&cabac&niu_a|h reset

Change-Id: Ied8f16b79ac0142fadbc1ce3a3f47ede7d22790b
Signed-off-by: Jung Zhao <jung.zhao@rock-chips.com>
This commit is contained in:
Jung Zhao
2017-07-31 17:11:21 +08:00
parent c6880daeb7
commit 8dfdd0e349
2 changed files with 29 additions and 6 deletions

View File

@@ -1333,8 +1333,11 @@
<&cru SCLK_VDU_CA>, <&cru SCLK_VDU_CORE>;
clock-names = "aclk_vcodec", "hclk_vcodec",
"clk_cabac", "clk_core";
resets = <&cru SRST_H_VDU>, <&cru SRST_A_VDU>;
reset-names = "video_h", "video_a";
resets = <&cru SRST_H_VDU>, <&cru SRST_A_VDU>,
<&cru SRST_VDU_CORE>, <&cru SRST_VDU_CA>,
<&cru SRST_A_VDU_NOC>, <&cru SRST_H_VDU_NOC>;
reset-names = "video_h", "video_a", "video_core", "video_cabac",
"niu_a", "niu_h";
power-domains = <&power RK3399_PD_VDU>;
dev_mode = <2>;
name = "rkvdec";

View File

@@ -405,6 +405,8 @@ struct vpu_service_info {
struct reset_control *rst_a;
struct reset_control *rst_h;
struct reset_control *rst_v;
struct reset_control *rst_core;
struct reset_control *rst_cabac;
struct reset_control *rst_niu_a;
struct reset_control *rst_niu_h;
#endif
@@ -699,13 +701,17 @@ static void _vpu_reset(struct vpu_subdev_data *data)
try_reset_assert(pservice->rst_v);
try_reset_assert(pservice->rst_a);
try_reset_assert(pservice->rst_h);
try_reset_assert(pservice->rst_core);
try_reset_assert(pservice->rst_cabac);
udelay(5);
try_reset_deassert(pservice->rst_h);
try_reset_deassert(pservice->rst_a);
try_reset_deassert(pservice->rst_v);
try_reset_deassert(pservice->rst_niu_h);
try_reset_deassert(pservice->rst_niu_a);
try_reset_deassert(pservice->rst_v);
try_reset_deassert(pservice->rst_h);
try_reset_deassert(pservice->rst_a);
try_reset_deassert(pservice->rst_core);
try_reset_deassert(pservice->rst_cabac);
rockchip_pmu_idle_request(pservice->dev, false);
clk_set_rate(pservice->aclk_vcodec, rate);
@@ -2551,6 +2557,10 @@ static void vcodec_read_property(struct device_node *np,
pservice->rst_v = devm_reset_control_get(pservice->dev, "video");
pservice->rst_niu_a = devm_reset_control_get(pservice->dev, "niu_a");
pservice->rst_niu_h = devm_reset_control_get(pservice->dev, "niu_h");
pservice->rst_core = devm_reset_control_get(pservice->dev,
"video_core");
pservice->rst_cabac = devm_reset_control_get(pservice->dev,
"video_cabac");
if (IS_ERR_OR_NULL(pservice->rst_a)) {
dev_dbg(pservice->dev, "No aclk reset resource define\n");
@@ -2563,7 +2573,7 @@ static void vcodec_read_property(struct device_node *np,
}
if (IS_ERR_OR_NULL(pservice->rst_v)) {
dev_dbg(pservice->dev, "No core reset resource define\n");
dev_dbg(pservice->dev, "No core rst_v reset resource define\n");
pservice->rst_v = NULL;
}
@@ -2576,6 +2586,16 @@ static void vcodec_read_property(struct device_node *np,
dev_dbg(pservice->dev, "No NIU hclk reset resource define\n");
pservice->rst_niu_h = NULL;
}
if (IS_ERR_OR_NULL(pservice->rst_core)) {
dev_dbg(pservice->dev, "No core reset resource define\n");
pservice->rst_core = NULL;
}
if (IS_ERR_OR_NULL(pservice->rst_cabac)) {
dev_dbg(pservice->dev, "No cabac reset resource define\n");
pservice->rst_cabac = NULL;
}
#endif
of_property_read_string(np, "name", (const char **)&pservice->name);