Linux Media Controller development
 help / color / mirror / Atom feed
From: Kamil Debski <k.debski@samsung.com>
To: 'Kiran AVND' <avnd.kiran@samsung.com>, linux-media@vger.kernel.org
Cc: wuchengli@chromium.org, posciak@chromium.org, arun.m@samsung.com,
	ihf@chromium.org, prathyush.k@samsung.com, arun.kk@samsung.com
Subject: RE: [PATCH 10/17] [media] s5p-mfc: modify mfc wakeup sequence for V8
Date: Mon, 15 Sep 2014 16:42:47 +0200	[thread overview]
Message-ID: <022d01cfd0f3$519eb6a0$f4dc23e0$%debski@samsung.com> (raw)
In-Reply-To: <1410763393-12183-11-git-send-email-avnd.kiran@samsung.com>

Hi Kiran,

> From: Kiran AVND [mailto:avnd.kiran@samsung.com]
> Sent: Monday, September 15, 2014 8:43 AM
> 
> From: Arun Mankuzhi <arun.m@samsung.com>
> 
> From MFC V8, the MFC wakeup sequence has changed.
> MFC wakeup command has to be sent after the host receives firmware load
> complete status from risc.
> 
> Signed-off-by: Arun Mankuzhi <arun.m@samsung.com>
> Signed-off-by: Kiran AVND <avnd.kiran@samsung.com>
> ---
>  drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c |   78
> +++++++++++++++++++-----
>  1 files changed, 61 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
> b/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
> index 24d5252..8531c72 100644
> --- a/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
> +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
> @@ -352,6 +352,58 @@ int s5p_mfc_sleep(struct s5p_mfc_dev *dev)
>  	return ret;
>  }
> 
> +static int s5p_mfc_v8_wait_wakeup(struct s5p_mfc_dev *dev) {
> +	int ret;
> +
> +	/* Release reset signal to the RISC */
> +	dev->risc_on = 1;
> +	mfc_write(dev, 0x1, S5P_FIMV_RISC_ON_V6);
> +
> +	if (s5p_mfc_wait_for_done_dev(dev,
> S5P_MFC_R2H_CMD_FW_STATUS_RET)) {
> +		mfc_err("Failed to reset MFCV8\n");
> +		return -EIO;
> +	}
> +	mfc_debug(2, "Write command to wakeup MFCV8\n");
> +	ret = s5p_mfc_hw_call(dev->mfc_cmds, wakeup_cmd, dev);
> +	if (ret) {
> +		mfc_err("Failed to send command to MFCV8 - timeout\n");
> +		return ret;
> +	}
> +
> +	if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_WAKEUP_RET)) {
> +		mfc_err("Failed to wakeup MFC\n");
> +		return -EIO;
> +	}
> +	return ret;
> +}
> +
> +static int s5p_mfc_wait_wakeup(struct s5p_mfc_dev *dev) {
> +	int ret;
> +
> +	/* Send MFC wakeup command */
> +	ret = s5p_mfc_hw_call(dev->mfc_cmds, wakeup_cmd, dev);
> +	if (ret) {
> +		mfc_err("Failed to send command to MFC - timeout\n");
> +		return ret;
> +	}
> +
> +	/* Release reset signal to the RISC */
> +	if (IS_MFCV6_PLUS(dev)) {
> +		dev->risc_on = 1;
> +		mfc_write(dev, 0x1, S5P_FIMV_RISC_ON_V6);
> +	} else {
> +		mfc_write(dev, 0x3ff, S5P_FIMV_SW_RESET);
> +	}
> +
> +	if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_WAKEUP_RET)) {
> +		mfc_err("Failed to wakeup MFC\n");
> +		return -EIO;
> +	}
> +	return ret;
> +}
> +
>  int s5p_mfc_wakeup(struct s5p_mfc_dev *dev)  {
>  	int ret;
> @@ -364,6 +416,7 @@ int s5p_mfc_wakeup(struct s5p_mfc_dev *dev)
>  	ret = s5p_mfc_reset(dev);
>  	if (ret) {
>  		mfc_err("Failed to reset MFC - timeout\n");
> +		s5p_mfc_clock_off();
>  		return ret;
>  	}
>  	mfc_debug(2, "Done MFC reset..\n");
> @@ -372,25 +425,16 @@ int s5p_mfc_wakeup(struct s5p_mfc_dev *dev)
>  	/* 2. Initialize registers of channel I/F */
>  	s5p_mfc_clear_cmds(dev);
>  	s5p_mfc_clean_dev_int_flags(dev);
> -	/* 3. Initialize firmware */
> -	ret = s5p_mfc_hw_call(dev->mfc_cmds, wakeup_cmd, dev);
> -	if (ret) {
> -		mfc_err("Failed to send command to MFC - timeout\n");
> -		return ret;
> -	}
> -	/* 4. Release reset signal to the RISC */
> -	if (IS_MFCV6_PLUS(dev)) {
> -		dev->risc_on = 1;
> -		mfc_write(dev, 0x1, S5P_FIMV_RISC_ON_V6);
> -	}
> +	/* 3. Send MFC wakeup command and wait for completion*/
> +	if (IS_MFCV8(dev))
> +		ret = s5p_mfc_v8_wait_wakeup(dev);
>  	else
> -		mfc_write(dev, 0x3ff, S5P_FIMV_SW_RESET);

I think that this solution is messy. There are two functions - one
for v8, another for other versions. In the latter there are if conditions
that further change its behaviour accordingly to the version.

I think there are two possible solutions:
- introduce one function per version
- use one function with if statements to change its behaviour for various
  MFC versions

The former will introduce repeated code, hence I suggest the latter
solution.

Best wishes,
-- 
Kamil Debski
Samsung R&D Institute Poland

> -	mfc_debug(2, "Ok, now will write a command to wakeup the
> system\n");
> -	if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_WAKEUP_RET)) {
> -		mfc_err("Failed to load firmware\n");
> -		return -EIO;
> -	}
> +		ret = s5p_mfc_wait_wakeup(dev);
> +
>  	s5p_mfc_clock_off();
> +	if (ret)
> +		return ret;
> +
>  	dev->int_cond = 0;
>  	if (dev->int_err != 0 || dev->int_type !=
>  						S5P_MFC_R2H_CMD_WAKEUP_RET)
{
> --
> 1.7.3.rc2


  reply	other threads:[~2014-09-15 14:42 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-15  6:42 [PATCH 00/17] Fixes from Chrome OS tree for MFC driver Kiran AVND
2014-09-15  6:42 ` [PATCH 01/17] [media] s5p-mfc: support MIN_BUFFERS query for encoder Kiran AVND
2014-09-15  6:42 ` [PATCH 02/17] [media] s5p-mfc: Fix REQBUFS(0) " Kiran AVND
2014-09-15  6:42 ` [PATCH 03/17] [media] s5p-mfc: set B-frames as 2 while encoding Kiran AVND
2014-09-15 14:42   ` Kamil Debski
     [not found]     ` <CAFHkUjjjK4TOSfYj=xS12LPcUAusKrMaDG1WYiVegG+B9K6w3A@mail.gmail.com>
2014-09-16 14:20       ` Kamil Debski
2014-09-15  6:42 ` [PATCH 04/17] [media] s5p-mfc: clear 'enter_suspend' flag if suspend fails Kiran AVND
2014-09-15  6:43 ` [PATCH 05/17] [media] s5p-mfc: don't disable clock when next ctx is pending Kiran AVND
2014-09-16 14:20   ` Kamil Debski
2014-09-17  9:25     ` Kiran Avnd
2014-09-17  9:57       ` Kamil Debski
2014-09-17 10:55         ` Kiran Avnd
2014-09-15  6:43 ` [PATCH 06/17] [media] s5p-mfc: Only set timestamp/timecode for new frames Kiran AVND
2014-09-15  6:43 ` [PATCH 07/17] [media] s5p-mfc: keep RISC ON during reset for V7/V8 Kiran AVND
2014-09-15  6:43 ` [PATCH 08/17] [media] s5p-mfc: check mfc bus ctrl before reset Kiran AVND
2014-09-15  6:43 ` [PATCH 09/17] [media] s5p-mfc: Don't crash the kernel if the watchdog kicks in Kiran AVND
2014-09-15  6:43 ` [PATCH 10/17] [media] s5p-mfc: modify mfc wakeup sequence for V8 Kiran AVND
2014-09-15 14:42   ` Kamil Debski [this message]
2014-09-15  6:43 ` [PATCH 11/17] [media] s5p-mfc: De-init MFC when watchdog kicks in Kiran AVND
2014-09-15  6:43 ` [PATCH 12/17] [media] s5p-mfc: flush dpbs when resolution changes Kiran AVND
2014-09-15  6:43 ` [PATCH 13/17] [media] s5p-mfc: Remove unused alloc field from private buffer struct Kiran AVND
2014-09-15  6:43 ` [PATCH 14/17] [media] s5p-mfc: fix V4L2_CID_MIN_BUFFERS_FOR_CAPTURE on resolution change Kiran AVND
2014-09-15  6:43 ` [PATCH 15/17] [media] s5p-mfc: remove reduntant clock on & clock off Kiran AVND
2014-09-15 14:42   ` Kamil Debski
2014-09-15  6:43 ` [PATCH 16/17] [media] s5p-mfc: fix a race in interrupt flags handling Kiran AVND
2014-09-15 14:42   ` Kamil Debski
2014-09-15  6:43 ` [PATCH 17/17] [media] s5p-mfc: Don't change the image size to smaller than the request Kiran AVND

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='022d01cfd0f3$519eb6a0$f4dc23e0$%debski@samsung.com' \
    --to=k.debski@samsung.com \
    --cc=arun.kk@samsung.com \
    --cc=arun.m@samsung.com \
    --cc=avnd.kiran@samsung.com \
    --cc=ihf@chromium.org \
    --cc=linux-media@vger.kernel.org \
    --cc=posciak@chromium.org \
    --cc=prathyush.k@samsung.com \
    --cc=wuchengli@chromium.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