video: rockchip: vpu: add core&cabac&niu_a|h reset
authorJung Zhao <jung.zhao@rock-chips.com>
Mon, 31 Jul 2017 09:11:21 +0000 (17:11 +0800)
committerJung Zhao <jung.zhao@rock-chips.com>
Mon, 31 Jul 2017 10:08:33 +0000 (18:08 +0800)
Change-Id: Ied8f16b79ac0142fadbc1ce3a3f47ede7d22790b
Signed-off-by: Jung Zhao <jung.zhao@rock-chips.com>
arch/arm64/boot/dts/rockchip/rk3399.dtsi
drivers/video/rockchip/vcodec/vcodec_service.c

index 154aae30667bb84af7f02898b4f42bbc236b358d..163861efd3a15d38f16d660a21d580ea07e006f8 100644 (file)
                         <&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";
index 13a0adc31958519bf9d26051fe87cd9d35ca342e..d4156bf16804a54cb2582aa3aa1c6a2f9fd46932 100644 (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);