linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vikash Garodia <vgarodia@codeaurora.org>
To: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-msm@vger.kernel.org, linux-media-owner@vger.kernel.org
Subject: Re: [PATCH 08/28] venus: hfi_venus: add suspend function for 4xx version
Date: Wed, 09 May 2018 19:44:41 +0530	[thread overview]
Message-ID: <4bb351351a9725db42bf06da1e778290@codeaurora.org> (raw)
In-Reply-To: <ce03189a-b56e-e73e-852f-1ad10d4c8bd3@linaro.org>

Hi Stanimir,

On 2018-05-09 16:45, Stanimir Varbanov wrote:
> Hi Vikash,
> 
> On 05/02/2018 09:07 AM, vgarodia@codeaurora.org wrote:
>> Hello Stanimir,
>> 
>> On 2018-04-24 18:14, Stanimir Varbanov wrote:
>>> This adds suspend (power collapse) function with slightly
>>> different order of calls comparing with Venus 3xx.
>>> 
>>> Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
>>> ---
>>>  drivers/media/platform/qcom/venus/hfi_venus.c | 52
>>> +++++++++++++++++++++++++++
>>>  1 file changed, 52 insertions(+)
>>> 
>>> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c
>>> b/drivers/media/platform/qcom/venus/hfi_venus.c
>>> index 53546174aab8..f61d34bf61b4 100644
>>> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
>>> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
>>> @@ -1443,6 +1443,55 @@ static int venus_suspend_1xx(struct venus_core
>>> *core)
>>>      return 0;
>>>  }
>>> 
>>> +static int venus_suspend_4xx(struct venus_core *core)
>>> +{
>>> +    struct venus_hfi_device *hdev = to_hfi_priv(core);
>>> +    struct device *dev = core->dev;
>>> +    u32 val;
>>> +    int ret;
>>> +
>>> +    if (!hdev->power_enabled || hdev->suspended)
>>> +        return 0;
>>> +
>>> +    mutex_lock(&hdev->lock);
>>> +    ret = venus_is_valid_state(hdev);
>>> +    mutex_unlock(&hdev->lock);
>>> +
>>> +    if (!ret) {
>>> +        dev_err(dev, "bad state, cannot suspend\n");
>>> +        return -EINVAL;
>>> +    }
>>> +
>>> +    ret = venus_prepare_power_collapse(hdev, false);
>>> +    if (ret) {
>>> +        dev_err(dev, "prepare for power collapse fail (%d)\n", ret);
>>> +        return ret;
>>> +    }
>>> +
>>> +    ret = readl_poll_timeout(core->base + CPU_CS_SCIACMDARG0, val,
>>> +                 val & CPU_CS_SCIACMDARG0_PC_READY,
>>> +                 POLL_INTERVAL_US, 100000);
>>> +    if (ret) {
>>> +        dev_err(dev, "Polling power collapse ready timed out\n");
>>> +        return ret;
>>> +    }
>>> +
>>> +    mutex_lock(&hdev->lock);
>>> +
>>> +    ret = venus_power_off(hdev);
>>> +    if (ret) {
>>> +        dev_err(dev, "venus_power_off (%d)\n", ret);
>>> +        mutex_unlock(&hdev->lock);
>>> +        return ret;
>>> +    }
>>> +
>>> +    hdev->suspended = true;
>>> +
>>> +    mutex_unlock(&hdev->lock);
>>> +
>>> +    return 0;
>>> +}
>>> +
>>>  static int venus_suspend_3xx(struct venus_core *core)
>>>  {
>>>      struct venus_hfi_device *hdev = to_hfi_priv(core);
>>> @@ -1507,6 +1556,9 @@ static int venus_suspend(struct venus_core 
>>> *core)
>>>      if (core->res->hfi_version == HFI_VERSION_3XX)
>>>          return venus_suspend_3xx(core);
>>> 
>>> +    if (core->res->hfi_version == HFI_VERSION_4XX)
>>> +        return venus_suspend_4xx(core);
>>> +
>>>      return venus_suspend_1xx(core);
>>>  }
>> 
>> Let me brief on the power collapse sequence for Venus_4xx
>> 1. Host checks for ARM9 and Video core to be idle.
>>    This can be done by checking for WFI bit (bit 0) in CPU status
>> register for ARM9 and by checking bit 30 in Control status reg for 
>> video
>> core/s.
>> 2. Host then sends command to ARM9 to prepare for power collapse.
>> 3. Host then checks for WFI bit and PC_READY bit before withdrawing
>> going for power off.
>> 
>> As per this patch, host is preparing for power collapse without 
>> checking
>> for #1.
>> Update the code to handle #3.
> 
> This looks similar to suspend for Venus 3xx. Can you confirm that the
> sequence of checks for 4xx is the same as 3xx?

Do you mean the driver implementation for Suspend Venus 3xx or the 
hardware
expectation for Venus 3xx ? If hardware expectation wise, the sequence 
is
same for 3xx and 4xx.
In the suspend implementation for 3xx, i see that the host just reads 
the WFI
and idle status bits, but does not validate those bit value before 
preparing
Venus for power collapse. Sequence #2 and #3 is followed for Venus 3xx
implementation.

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

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-24 12:44 [PATCH 00/28] Venus updates Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 01/28] venus: hfi_msgs: correct pointer increment Stanimir Varbanov
2018-05-18  8:33   ` Tomasz Figa
2018-05-18  8:52     ` Stanimir Varbanov
2018-05-18  8:56       ` Tomasz Figa
2018-04-24 12:44 ` [PATCH 02/28] venus: hfi: preparation to support venus 4xx Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 03/28] venus: hfi: update sequence event to handle more properties Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 04/28] venus: hfi_cmds: add set_properties for 4xx version Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 05/28] venus: hfi: support session continue " Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 06/28] venus: hfi: handle buffer output2 type as well Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 07/28] venus: hfi_venus: add halt AXI support for Venus 4xx Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 08/28] venus: hfi_venus: add suspend function for 4xx version Stanimir Varbanov
2018-05-02  6:07   ` vgarodia
2018-05-09 11:15     ` Stanimir Varbanov
2018-05-09 14:14       ` Vikash Garodia [this message]
2018-05-09 14:26         ` Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 09/28] venus: venc,vdec: adds clocks needed for venus 4xx Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 10/28] venus: vdec: call session_continue in insufficient event Stanimir Varbanov
2018-05-02  6:26   ` Vikash Garodia
2018-05-03 11:36     ` Stanimir Varbanov
2018-05-04 11:09       ` Vikash Garodia
2018-05-09  8:15         ` Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 11/28] venus: add common capability parser Stanimir Varbanov
2018-04-26  9:03   ` kbuild test robot
2018-04-24 12:44 ` [PATCH 12/28] venus: helpers: make a commmon function for power_enable Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 13/28] venus: core: delete not used flag for buffer mode Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 14/28] venus: helpers: rename a helper function and use buffer mode from caps Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 15/28] venus: add a helper function to set dynamic buffer mode Stanimir Varbanov
2018-05-07 10:32   ` Hans Verkuil
2018-04-24 12:44 ` [PATCH 16/28] venus: add helper function to set actual buffer size Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 17/28] venus: delete no longer used bufmode flag from instance Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 18/28] venus: helpers: add buffer type argument to a helper Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 19/28] venus: helpers: add a new helper to set raw format Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 20/28] venus: helpers,vdec,venc: add helpers to set work mode and core usage Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 21/28] venus: helpers: extend set_num_bufs helper with one more argument Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 22/28] venus: helpers: add a helper to return opb buffer sizes Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 23/28] venus: vdec: get required input buffers as well Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 24/28] venus: vdec: new function for output configuration Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 25/28] venus: move frame size calculations in common place Stanimir Varbanov
2018-04-24 12:44 ` [PATCH 26/28] venus: implementing multi-stream support Stanimir Varbanov
2018-05-02  7:40   ` Vikash Garodia
2018-05-02 13:28     ` Nicolas Dufresne
2018-05-02 14:04       ` Vikash Garodia
2018-05-03  7:12     ` Stanimir Varbanov
2018-05-03 11:46       ` Vikash Garodia
2018-04-24 12:44 ` [PATCH 27/28] venus: add sdm845 compatible and resource data Stanimir Varbanov
2018-05-01 13:42   ` Rob Herring
2018-04-24 12:44 ` [PATCH 28/28] venus: add HEVC codec support Stanimir Varbanov
2018-05-07 10:39   ` Hans Verkuil
2018-05-07 19:24     ` Stanimir Varbanov
2018-05-07 10:41 ` [PATCH 00/28] Venus updates Hans Verkuil
2018-05-07 23:26   ` Stanimir Varbanov

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=4bb351351a9725db42bf06da1e778290@codeaurora.org \
    --to=vgarodia@codeaurora.org \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media-owner@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=stanimir.varbanov@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).