RE: [PATCH 2/2] v4l: s5p-mfc: Limit enum_fmt to output formats of current version

2014-05-20 Thread Kamil Debski
Hi Pawel,

 From: Pawel Osciak [mailto:posc...@chromium.org]
 Sent: Tuesday, May 20, 2014 3:47 AM
 
 Hi Kamil,
 I like the solution as well. Two suggestions to consider below.
 
 On Fri, May 16, 2014 at 9:03 PM, Kamil Debski k.deb...@samsung.com
 wrote:
  MFC versions support a different set of formats, this specially
  applies to the raw YUV formats. This patch changes enum_fmt, so that
  it only reports formats that are supported by the used MFC version.
 
  Signed-off-by: Kamil Debski k.deb...@samsung.com
  ---
 
  diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
  b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
  index 9370c34..d5efb10 100644
  --- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
  +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
  @@ -223,6 +223,7 @@ struct s5p_mfc_buf_align {  struct
 s5p_mfc_variant
  {
  unsigned int version;
  unsigned int port_num;
  +   u32 version_bit;
  struct s5p_mfc_buf_size *buf_size;
  struct s5p_mfc_buf_align *buf_align;
  char*fw_name;
  @@ -666,6 +667,7 @@ struct s5p_mfc_fmt {
  u32 codec_mode;
  enum s5p_mfc_fmt_type type;
  u32 num_planes;
  +   u32 versions;
   };
 
   /**
  @@ -705,4 +707,9 @@ void set_work_bit_irqsave(struct s5p_mfc_ctx
 *ctx);
   #define IS_MFCV6_PLUS(dev) (dev-variant-version = 0x60 ? 1 :
 0)
   #define IS_MFCV7_PLUS(dev) (dev-variant-version = 0x70 ? 1 :
 0)
 
  +#define MFC_V5 BIT(0)
  +#define MFC_V6 BIT(1)
  +#define MFC_V7 BIT(2)
 
 These may be confusing. I'd suggest at least suffixing those macros
 with _BIT.
 Or better yet, please make this into an enum and also make
 variant-versions of size BITS_TO_LONGS() with max enum value.

I think I'll stick with adding the _BIT suffix. 
 
   /* Get format */
  @@ -384,11 +402,9 @@ static int vidioc_try_fmt(struct file *file,
 void *priv, struct v4l2_format *f)
  mfc_err(Unknown codec\n);
  return -EINVAL;
  }
  -   if (!IS_MFCV6_PLUS(dev)) {
  -   if (fmt-fourcc == V4L2_PIX_FMT_VP8) {
  -   mfc_err(Not supported format.\n);
  -   return -EINVAL;
  -   }
  +   if ((dev-variant-version_bit  fmt-versions) == 0)
 {
  +   mfc_err(Unsupported format by this MFC
 version.\n);
  +   return -EINVAL;
 
 What do you think of moving this check to find_format()? You wouldn't
 have to duplicate it across enum_fmt and try_fmt then...

Find_format is used as a helper for try_fmt and is not used by enum_fmt.
Enum_fmt does also some other checks and operates iterates the formats
array directly, so I think the change included in this patch is ok.

Best wishes,
-- 
Kamil Debski
Samsung RD Institute Poland

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] v4l: s5p-mfc: Limit enum_fmt to output formats of current version

2014-05-19 Thread Sylwester Nawrocki
Hi Kamil,

On 16/05/14 14:03, Kamil Debski wrote:
 MFC versions support a different set of formats, this specially applies
 to the raw YUV formats. This patch changes enum_fmt, so that it only
 reports formats that are supported by the used MFC version.
 
 Signed-off-by: Kamil Debski k.deb...@samsung.com

The patch looks good to me. It seems a nice and clean solution
to the problem.

Acked-by: Sylwester Nawrocki s.nawro...@samsung.com

Regards,
Sylwester

 ---
  drivers/media/platform/s5p-mfc/s5p_mfc.c|3 ++
  drivers/media/platform/s5p-mfc/s5p_mfc_common.h |7 
  drivers/media/platform/s5p-mfc/s5p_mfc_dec.c|   49 +-
  drivers/media/platform/s5p-mfc/s5p_mfc_enc.c|   50 
 ---
  4 files changed, 67 insertions(+), 42 deletions(-)
 
 diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c 
 b/drivers/media/platform/s5p-mfc/s5p_mfc.c
 index 2ab90dd..06d2678 100644
 --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c
 +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c
 @@ -1339,6 +1339,7 @@ struct s5p_mfc_buf_align mfc_buf_align_v5 = {
  
  static struct s5p_mfc_variant mfc_drvdata_v5 = {
   .version= MFC_VERSION,
 + .version_bit= MFC_V5,
   .port_num   = MFC_NUM_PORTS,
   .buf_size   = buf_size_v5,
   .buf_align  = mfc_buf_align_v5,
 @@ -1365,6 +1366,7 @@ struct s5p_mfc_buf_align mfc_buf_align_v6 = {
  
  static struct s5p_mfc_variant mfc_drvdata_v6 = {
   .version= MFC_VERSION_V6,
 + .version_bit= MFC_V6,
   .port_num   = MFC_NUM_PORTS_V6,
   .buf_size   = buf_size_v6,
   .buf_align  = mfc_buf_align_v6,
 @@ -1391,6 +1393,7 @@ struct s5p_mfc_buf_align mfc_buf_align_v7 = {
  
  static struct s5p_mfc_variant mfc_drvdata_v7 = {
   .version= MFC_VERSION_V7,
 + .version_bit= MFC_V7,
   .port_num   = MFC_NUM_PORTS_V7,
   .buf_size   = buf_size_v7,
   .buf_align  = mfc_buf_align_v7,
 diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h 
 b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
 index 9370c34..d5efb10 100644
 --- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
 +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
 @@ -223,6 +223,7 @@ struct s5p_mfc_buf_align {
  struct s5p_mfc_variant {
   unsigned int version;
   unsigned int port_num;
 + u32 version_bit;
   struct s5p_mfc_buf_size *buf_size;
   struct s5p_mfc_buf_align *buf_align;
   char*fw_name;
 @@ -666,6 +667,7 @@ struct s5p_mfc_fmt {
   u32 codec_mode;
   enum s5p_mfc_fmt_type type;
   u32 num_planes;
 + u32 versions;
  };
  
  /**
 @@ -705,4 +707,9 @@ void set_work_bit_irqsave(struct s5p_mfc_ctx *ctx);
  #define IS_MFCV6_PLUS(dev)   (dev-variant-version = 0x60 ? 1 : 0)
  #define IS_MFCV7_PLUS(dev)   (dev-variant-version = 0x70 ? 1 : 0)
  
 +#define MFC_V5   BIT(0)
 +#define MFC_V6   BIT(1)
 +#define MFC_V7   BIT(2)
 +
 +
  #endif /* S5P_MFC_COMMON_H_ */
 diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c 
 b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
 index ac43a4a..a1fee39 100644
 --- a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
 +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
 @@ -39,6 +39,7 @@ static struct s5p_mfc_fmt formats[] = {
   .codec_mode = S5P_MFC_CODEC_NONE,
   .type   = MFC_FMT_RAW,
   .num_planes = 2,
 + .versions   = MFC_V6 | MFC_V7,
   },
   {
   .name   = 4:2:0 2 Planes 64x32 Tiles,
 @@ -46,6 +47,7 @@ static struct s5p_mfc_fmt formats[] = {
   .codec_mode = S5P_MFC_CODEC_NONE,
   .type   = MFC_FMT_RAW,
   .num_planes = 2,
 + .versions   = MFC_V5,
   },
   {
   .name   = 4:2:0 2 Planes Y/CbCr,
 @@ -53,6 +55,7 @@ static struct s5p_mfc_fmt formats[] = {
   .codec_mode = S5P_MFC_CODEC_NONE,
   .type   = MFC_FMT_RAW,
   .num_planes = 2,
 + .versions   = MFC_V6 | MFC_V7,
   },
   {
   .name   = 4:2:0 2 Planes Y/CrCb,
 @@ -60,6 +63,7 @@ static struct s5p_mfc_fmt formats[] = {
   .codec_mode = S5P_MFC_CODEC_NONE,
   .type   = MFC_FMT_RAW,
   .num_planes = 2,
 + .versions   = MFC_V6 | MFC_V7,
   },
   {
   .name   = H264 Encoded Stream,
 @@ -67,6 +71,7 @@ static struct s5p_mfc_fmt formats[] = {
   .codec_mode = S5P_MFC_CODEC_H264_DEC,
   .type   = MFC_FMT_DEC,
   .num_planes = 1,
 + .versions   = MFC_V5 | MFC_V6 | MFC_V7,
   },
   {
   .name   = H264/MVC Encoded Stream,
 @@ -74,6 +79,7 @@ static struct s5p_mfc_fmt formats[] = {
   .codec_mode = S5P_MFC_CODEC_H264_MVC_DEC,
   

Re: [PATCH 2/2] v4l: s5p-mfc: Limit enum_fmt to output formats of current version

2014-05-19 Thread Arun Kumar K
Hi Kamil,

Only a small correction.

On Fri, May 16, 2014 at 5:33 PM, Kamil Debski k.deb...@samsung.com wrote:
 MFC versions support a different set of formats, this specially applies
 to the raw YUV formats. This patch changes enum_fmt, so that it only
 reports formats that are supported by the used MFC version.

 Signed-off-by: Kamil Debski k.deb...@samsung.com
 ---
  drivers/media/platform/s5p-mfc/s5p_mfc.c|3 ++
  drivers/media/platform/s5p-mfc/s5p_mfc_common.h |7 
  drivers/media/platform/s5p-mfc/s5p_mfc_dec.c|   49 +-
  drivers/media/platform/s5p-mfc/s5p_mfc_enc.c|   50 
 ---
  4 files changed, 67 insertions(+), 42 deletions(-)


[snip]

 diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c 
 b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
 index d09c2e1..1ddd152 100644
 --- a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
 +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
 @@ -42,6 +42,7 @@ static struct s5p_mfc_fmt formats[] = {
 .codec_mode = S5P_MFC_CODEC_NONE,
 .type   = MFC_FMT_RAW,
 .num_planes = 2,
 +   .versions   = MFC_V6 | MFC_V7,
 },
 {
 .name   = 4:2:0 2 Planes 64x32 Tiles,
 @@ -49,6 +50,7 @@ static struct s5p_mfc_fmt formats[] = {
 .codec_mode = S5P_MFC_CODEC_NONE,
 .type   = MFC_FMT_RAW,
 .num_planes = 2,
 +   .versions   = MFC_V5,
 },
 {
 .name   = 4:2:0 2 Planes Y/CbCr,
 @@ -56,6 +58,7 @@ static struct s5p_mfc_fmt formats[] = {
 .codec_mode = S5P_MFC_CODEC_NONE,
 .type   = MFC_FMT_RAW,
 .num_planes = 2,
 +   .versions   = MFC_V5 | MFC_V6 | MFC_V7,
 },
 {
 .name   = 4:2:0 2 Planes Y/CrCb,
 @@ -63,6 +66,7 @@ static struct s5p_mfc_fmt formats[] = {
 .codec_mode = S5P_MFC_CODEC_NONE,
 .type   = MFC_FMT_RAW,
 .num_planes = 2,
 +   .versions   = MFC_V5 | MFC_V6 | MFC_V7,
 },
 {
 .name   = H264 Encoded Stream,
 @@ -70,6 +74,7 @@ static struct s5p_mfc_fmt formats[] = {
 .codec_mode = S5P_MFC_CODEC_H264_ENC,
 .type   = MFC_FMT_ENC,
 .num_planes = 1,
 +   .versions   = MFC_V5 | MFC_V6 | MFC_V7,
 },
 {
 .name   = MPEG4 Encoded Stream,
 @@ -77,6 +82,7 @@ static struct s5p_mfc_fmt formats[] = {
 .codec_mode = S5P_MFC_CODEC_MPEG4_ENC,
 .type   = MFC_FMT_ENC,
 .num_planes = 1,
 +   .versions   = MFC_V5 | MFC_V6 | MFC_V7,
 },
 {
 .name   = H263 Encoded Stream,
 @@ -84,6 +90,7 @@ static struct s5p_mfc_fmt formats[] = {
 .codec_mode = S5P_MFC_CODEC_H263_ENC,
 .type   = MFC_FMT_ENC,
 .num_planes = 1,
 +   .versions   = MFC_V5 | MFC_V6 | MFC_V7,
 },
 {
 .name   = VP8 Encoded Stream,
 @@ -91,6 +98,7 @@ static struct s5p_mfc_fmt formats[] = {
 .codec_mode = S5P_MFC_CODEC_VP8_ENC,
 .type   = MFC_FMT_ENC,
 .num_planes = 1,
 +   .versions   = MFC_V6 | MFC_V7,

VP8 encodig is supported only from v7 onwards.
So you can remove MFC_V6 from this.

Otherwise looks good to me.

Regards
Arun
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] v4l: s5p-mfc: Limit enum_fmt to output formats of current version

2014-05-19 Thread Pawel Osciak
Hi Kamil,
I like the solution as well. Two suggestions to consider below.

On Fri, May 16, 2014 at 9:03 PM, Kamil Debski k.deb...@samsung.com wrote:
 MFC versions support a different set of formats, this specially applies
 to the raw YUV formats. This patch changes enum_fmt, so that it only
 reports formats that are supported by the used MFC version.

 Signed-off-by: Kamil Debski k.deb...@samsung.com
 ---

 diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h 
 b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
 index 9370c34..d5efb10 100644
 --- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
 +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
 @@ -223,6 +223,7 @@ struct s5p_mfc_buf_align {
  struct s5p_mfc_variant {
 unsigned int version;
 unsigned int port_num;
 +   u32 version_bit;
 struct s5p_mfc_buf_size *buf_size;
 struct s5p_mfc_buf_align *buf_align;
 char*fw_name;
 @@ -666,6 +667,7 @@ struct s5p_mfc_fmt {
 u32 codec_mode;
 enum s5p_mfc_fmt_type type;
 u32 num_planes;
 +   u32 versions;
  };

  /**
 @@ -705,4 +707,9 @@ void set_work_bit_irqsave(struct s5p_mfc_ctx *ctx);
  #define IS_MFCV6_PLUS(dev) (dev-variant-version = 0x60 ? 1 : 0)
  #define IS_MFCV7_PLUS(dev) (dev-variant-version = 0x70 ? 1 : 0)

 +#define MFC_V5 BIT(0)
 +#define MFC_V6 BIT(1)
 +#define MFC_V7 BIT(2)

These may be confusing. I'd suggest at least suffixing those macros with _BIT.
Or better yet, please make this into an enum and also make
variant-versions of size BITS_TO_LONGS() with max enum value.

  /* Get format */
 @@ -384,11 +402,9 @@ static int vidioc_try_fmt(struct file *file, void *priv, 
 struct v4l2_format *f)
 mfc_err(Unknown codec\n);
 return -EINVAL;
 }
 -   if (!IS_MFCV6_PLUS(dev)) {
 -   if (fmt-fourcc == V4L2_PIX_FMT_VP8) {
 -   mfc_err(Not supported format.\n);
 -   return -EINVAL;
 -   }
 +   if ((dev-variant-version_bit  fmt-versions) == 0) {
 +   mfc_err(Unsupported format by this MFC version.\n);
 +   return -EINVAL;

What do you think of moving this check to find_format()? You wouldn't
have to duplicate it across enum_fmt and try_fmt then...
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/2] v4l: s5p-mfc: Limit enum_fmt to output formats of current version

2014-05-16 Thread Kamil Debski
MFC versions support a different set of formats, this specially applies
to the raw YUV formats. This patch changes enum_fmt, so that it only
reports formats that are supported by the used MFC version.

Signed-off-by: Kamil Debski k.deb...@samsung.com
---
 drivers/media/platform/s5p-mfc/s5p_mfc.c|3 ++
 drivers/media/platform/s5p-mfc/s5p_mfc_common.h |7 
 drivers/media/platform/s5p-mfc/s5p_mfc_dec.c|   49 +-
 drivers/media/platform/s5p-mfc/s5p_mfc_enc.c|   50 ---
 4 files changed, 67 insertions(+), 42 deletions(-)

diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c 
b/drivers/media/platform/s5p-mfc/s5p_mfc.c
index 2ab90dd..06d2678 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c
@@ -1339,6 +1339,7 @@ struct s5p_mfc_buf_align mfc_buf_align_v5 = {
 
 static struct s5p_mfc_variant mfc_drvdata_v5 = {
.version= MFC_VERSION,
+   .version_bit= MFC_V5,
.port_num   = MFC_NUM_PORTS,
.buf_size   = buf_size_v5,
.buf_align  = mfc_buf_align_v5,
@@ -1365,6 +1366,7 @@ struct s5p_mfc_buf_align mfc_buf_align_v6 = {
 
 static struct s5p_mfc_variant mfc_drvdata_v6 = {
.version= MFC_VERSION_V6,
+   .version_bit= MFC_V6,
.port_num   = MFC_NUM_PORTS_V6,
.buf_size   = buf_size_v6,
.buf_align  = mfc_buf_align_v6,
@@ -1391,6 +1393,7 @@ struct s5p_mfc_buf_align mfc_buf_align_v7 = {
 
 static struct s5p_mfc_variant mfc_drvdata_v7 = {
.version= MFC_VERSION_V7,
+   .version_bit= MFC_V7,
.port_num   = MFC_NUM_PORTS_V7,
.buf_size   = buf_size_v7,
.buf_align  = mfc_buf_align_v7,
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h 
b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
index 9370c34..d5efb10 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h
@@ -223,6 +223,7 @@ struct s5p_mfc_buf_align {
 struct s5p_mfc_variant {
unsigned int version;
unsigned int port_num;
+   u32 version_bit;
struct s5p_mfc_buf_size *buf_size;
struct s5p_mfc_buf_align *buf_align;
char*fw_name;
@@ -666,6 +667,7 @@ struct s5p_mfc_fmt {
u32 codec_mode;
enum s5p_mfc_fmt_type type;
u32 num_planes;
+   u32 versions;
 };
 
 /**
@@ -705,4 +707,9 @@ void set_work_bit_irqsave(struct s5p_mfc_ctx *ctx);
 #define IS_MFCV6_PLUS(dev) (dev-variant-version = 0x60 ? 1 : 0)
 #define IS_MFCV7_PLUS(dev) (dev-variant-version = 0x70 ? 1 : 0)
 
+#define MFC_V5 BIT(0)
+#define MFC_V6 BIT(1)
+#define MFC_V7 BIT(2)
+
+
 #endif /* S5P_MFC_COMMON_H_ */
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c 
b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
index ac43a4a..a1fee39 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
@@ -39,6 +39,7 @@ static struct s5p_mfc_fmt formats[] = {
.codec_mode = S5P_MFC_CODEC_NONE,
.type   = MFC_FMT_RAW,
.num_planes = 2,
+   .versions   = MFC_V6 | MFC_V7,
},
{
.name   = 4:2:0 2 Planes 64x32 Tiles,
@@ -46,6 +47,7 @@ static struct s5p_mfc_fmt formats[] = {
.codec_mode = S5P_MFC_CODEC_NONE,
.type   = MFC_FMT_RAW,
.num_planes = 2,
+   .versions   = MFC_V5,
},
{
.name   = 4:2:0 2 Planes Y/CbCr,
@@ -53,6 +55,7 @@ static struct s5p_mfc_fmt formats[] = {
.codec_mode = S5P_MFC_CODEC_NONE,
.type   = MFC_FMT_RAW,
.num_planes = 2,
+   .versions   = MFC_V6 | MFC_V7,
},
{
.name   = 4:2:0 2 Planes Y/CrCb,
@@ -60,6 +63,7 @@ static struct s5p_mfc_fmt formats[] = {
.codec_mode = S5P_MFC_CODEC_NONE,
.type   = MFC_FMT_RAW,
.num_planes = 2,
+   .versions   = MFC_V6 | MFC_V7,
},
{
.name   = H264 Encoded Stream,
@@ -67,6 +71,7 @@ static struct s5p_mfc_fmt formats[] = {
.codec_mode = S5P_MFC_CODEC_H264_DEC,
.type   = MFC_FMT_DEC,
.num_planes = 1,
+   .versions   = MFC_V5 | MFC_V6 | MFC_V7,
},
{
.name   = H264/MVC Encoded Stream,
@@ -74,6 +79,7 @@ static struct s5p_mfc_fmt formats[] = {
.codec_mode = S5P_MFC_CODEC_H264_MVC_DEC,
.type   = MFC_FMT_DEC,
.num_planes = 1,
+   .versions   = MFC_V6 | MFC_V7,
},
{
.name   = H263 Encoded Stream,
@@ -81,6 +87,7 @@ static