All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomasz Figa <tfiga@chromium.org>
To: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	linux-arm-msm <linux-arm-msm@vger.kernel.org>,
	vgarodia@codeaurora.org
Subject: Re: [PATCH v2 08/29] venus: hfi_venus: fix suspend function for venus 3xx versions
Date: Sat, 19 May 2018 00:14:54 +0900	[thread overview]
Message-ID: <CAAFQd5AtfQL3-xz6MPSDOuXkJoZaVYU4PECJL0VOZjqYRoV-wQ@mail.gmail.com> (raw)
In-Reply-To: <20180515075859.17217-9-stanimir.varbanov@linaro.org>

On Tue, May 15, 2018 at 5:11 PM Stanimir Varbanov <
stanimir.varbanov@linaro.org> wrote:

> This fixes the suspend function for Venus 3xx versions by
> add a check for WFI (wait for interrupt) bit. This bit
> is on when the ARM9 is idle and entered in low power mode.

> Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
> ---
>   drivers/media/platform/qcom/venus/hfi_venus.c    | 59
++++++++++++++++--------
>   drivers/media/platform/qcom/venus/hfi_venus_io.h |  1 +
>   2 files changed, 41 insertions(+), 19 deletions(-)

> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c
b/drivers/media/platform/qcom/venus/hfi_venus.c
> index 53546174aab8..aac351f699a0 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -1447,7 +1447,7 @@ static int venus_suspend_3xx(struct venus_core
*core)
>   {
>          struct venus_hfi_device *hdev = to_hfi_priv(core);
>          struct device *dev = core->dev;
> -       u32 ctrl_status, wfi_status;
> +       u32 ctrl_status, cpu_status;
>          int ret;
>          int cnt = 100;

> @@ -1463,29 +1463,50 @@ static int venus_suspend_3xx(struct venus_core
*core)
>                  return -EINVAL;
>          }

> -       ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0);
> -       if (!(ctrl_status & CPU_CS_SCIACMDARG0_PC_READY)) {
> -               wfi_status = venus_readl(hdev, WRAPPER_CPU_STATUS);
> +       /*
> +        * Power collapse sequence for Venus 3xx and 4xx versions:
> +        * 1. Check for ARM9 and video core to be idle by checking WFI bit
> +        *    (bit 0) in CPU status register and by checking Idle (bit
30) in
> +        *    Control status register for video core.
> +        * 2. Send a command to prepare for power collapse.
> +        * 3. Check for WFI and PC_READY bits.
> +        */
> +
> +       while (--cnt) {
> +               cpu_status = venus_readl(hdev, WRAPPER_CPU_STATUS);
>                  ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0);

> -               ret = venus_prepare_power_collapse(hdev, false);
> -               if (ret) {
> -                       dev_err(dev, "prepare for power collapse fail
(%d)\n",
> -                               ret);
> -                       return ret;
> -               }
> +               if (cpu_status & WRAPPER_CPU_STATUS_WFI &&
> +                   ctrl_status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
> +                       break;

> -               cnt = 100;
> -               while (cnt--) {
> -                       wfi_status = venus_readl(hdev,
WRAPPER_CPU_STATUS);
> -                       ctrl_status = venus_readl(hdev,
CPU_CS_SCIACMDARG0);
> -                       if (ctrl_status & CPU_CS_SCIACMDARG0_PC_READY &&
> -                           wfi_status & BIT(0))
> -                               break;
> -                       usleep_range(1000, 1500);
> -               }
> +               usleep_range(1000, 1500);
>          }

To avoid opencoding the polling, I'd suggest doing a readx_poll_timeout()
trick:

static bool venus_arm9_and_video_core_idle(struct venus_hfi_device *hdev)
{
         // Read both registers and return true if both have the right bits
set
}

static int venus_suspend_3xx(struct venus_core *core)
{
         bool val;
         int ret;
         // ...
         ret = readx_poll_timeout(venus_arm9_and_video_core_idle, hdev, val,
val, 1500, 100 * 1500);
         if (ret)
                 return ret;
         // ...
}


> +       if (!cnt)
> +               return -ETIMEDOUT;
> +
> +       ret = venus_prepare_power_collapse(hdev, false);
> +       if (ret) {
> +               dev_err(dev, "prepare for power collapse fail (%d)\n",
ret);
> +               return ret;
> +       }
> +
> +       cnt = 100;
> +       while (--cnt) {
> +               cpu_status = venus_readl(hdev, WRAPPER_CPU_STATUS);
> +               ctrl_status = venus_readl(hdev, CPU_CS_SCIACMDARG0);
> +
> +               if (cpu_status & WRAPPER_CPU_STATUS_WFI &&
> +                   ctrl_status & CPU_CS_SCIACMDARG0_PC_READY)
> +                       break;
> +
> +               usleep_range(1000, 1500);
> +       }
> +
> +       if (!cnt)
> +               return -ETIMEDOUT;

Same readx_poll_timeout() trick can be used here, with different helper
function, e.g. venus_arm9_idle_and_pc_ready().

Best regards,
Tomasz

  reply	other threads:[~2018-05-18 15:14 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-15  7:58 [PATCH v2 00/29] Venus updates Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 01/29] venus: hfi_msgs: correct pointer increment Stanimir Varbanov
2018-05-18  8:57   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 02/29] venus: hfi: preparation to support venus 4xx Stanimir Varbanov
2018-05-18  9:44   ` Tomasz Figa
2018-05-21 14:25     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 03/29] venus: hfi: update sequence event to handle more properties Stanimir Varbanov
2018-05-18 13:53   ` Tomasz Figa
2018-05-21 14:31     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 04/29] venus: hfi_cmds: add set_properties for 4xx version Stanimir Varbanov
2018-05-18 14:16   ` Tomasz Figa
2018-05-21 14:53     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 05/29] venus: hfi: support session continue " Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 06/29] venus: hfi: handle buffer output2 type as well Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 07/29] venus: hfi_venus: add halt AXI support for Venus 4xx Stanimir Varbanov
2018-05-18 14:23   ` Tomasz Figa
2018-05-21 12:17     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 08/29] venus: hfi_venus: fix suspend function for venus 3xx versions Stanimir Varbanov
2018-05-18 15:14   ` Tomasz Figa [this message]
2018-05-21 12:18     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 09/29] venus: hfi_venus: move set of default properties to core init Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 10/29] venus: hfi_venus: add suspend functionality for Venus 4xx Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 11/29] venus: venc,vdec: adds clocks needed for venus 4xx Stanimir Varbanov
2018-05-24  6:11   ` Tomasz Figa
2018-05-28  8:47     ` Stanimir Varbanov
2018-05-31  6:50       ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 12/29] venus: add common capability parser Stanimir Varbanov
2018-05-24 14:16   ` Tomasz Figa
2018-05-30 16:21     ` Stanimir Varbanov
2018-05-31  7:06       ` Tomasz Figa
2018-07-02  9:23         ` Tomasz Figa
2018-07-02  9:59           ` Stanimir Varbanov
2018-07-02 10:05             ` Tomasz Figa
2018-07-02 11:00               ` Stanimir Varbanov
2018-07-05  9:45               ` Stanimir Varbanov
2018-07-05 10:14                 ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 13/29] venus: helpers: make a commmon function for power_enable Stanimir Varbanov
2018-05-31  7:34   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 14/29] venus: core: delete not used flag for buffer mode Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 15/29] venus: helpers: rename a helper function and use buffer mode from caps Stanimir Varbanov
2018-05-31  7:59   ` Tomasz Figa
2018-05-31  8:23     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 16/29] venus: add a helper function to set dynamic buffer mode Stanimir Varbanov
2018-05-31  8:56   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 17/29] venus: add helper function to set actual buffer size Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 18/29] venus: delete no longer used bufmode flag from instance Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 19/29] venus: helpers: add buffer type argument to a helper Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 20/29] venus: helpers: add a new helper to set raw format Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 21/29] venus: helpers,vdec,venc: add helpers to set work mode and core usage Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 22/29] venus: helpers: extend set_num_bufs helper with one more argument Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 23/29] venus: helpers: add a helper to return opb buffer sizes Stanimir Varbanov
2018-05-31  9:20   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 24/29] venus: vdec: get required input buffers as well Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 25/29] venus: vdec: new function for output configuration Stanimir Varbanov
2018-05-31  9:27   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 26/29] venus: move frame size calculations in common place Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 27/29] venus: implementing multi-stream support Stanimir Varbanov
2018-05-15  8:17   ` Hans Verkuil
2018-05-15  9:40     ` Stanimir Varbanov
2018-05-18 10:00   ` [PATCH v3 " Stanimir Varbanov
2018-05-31  9:51   ` [PATCH v2 " Tomasz Figa
2018-07-02  9:30     ` Tomasz Figa
2018-07-02 12:43     ` Stanimir Varbanov
2018-07-02 12:52       ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 28/29] venus: add sdm845 compatible and resource data Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 29/29] venus: add HEVC codec support Stanimir Varbanov
2018-05-15  8:19 ` [PATCH v2 00/29] Venus updates Hans Verkuil
2018-05-31  9:55 ` Tomasz Figa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAAFQd5AtfQL3-xz6MPSDOuXkJoZaVYU4PECJL0VOZjqYRoV-wQ@mail.gmail.com \
    --to=tfiga@chromium.org \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=stanimir.varbanov@linaro.org \
    --cc=vgarodia@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.