mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
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:
@@ -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";
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user