* [PATCH 0/3] media: meson: vdec: add sm1 platform
@ 2019-11-21 10:14 Neil Armstrong
2019-11-21 10:14 ` [PATCH 1/3] dt-bindings: media: amlogic,gx-vdec: add bindings for SM1 family Neil Armstrong
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Neil Armstrong @ 2019-11-21 10:14 UTC (permalink / raw)
To: mjourdan
Cc: Neil Armstrong, linux-media, linux-amlogic, linux-arm-kernel,
linux-kernel
This patchset adds support for the current Amlogic Video Decoder
driver for the Amlogic SM1 & compatible SoCs.
Then support is added for the currently supported MPEG1 & MPEG2 decoders
like for G12A support.
This patchset depends on G12A support patchset at [1].
M2M Decoder compliance is handled in a separate patchset at [2].
# v4l2-compliance
v4l2-compliance SHA: 7ead0e1856b89f2e19369af452bb03fd0cd16793, 64 bits
Compliance test for meson-vdec device /dev/video0:
Driver Info:
Driver name : meson-vdec
Card type : Amlogic Video Decoder
Bus info : platform:meson-vdec
Driver version : 5.4.0
Capabilities : 0x84204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Detected Stateful Decoder
Required ioctls:
test VIDIOC_QUERYCAP: OK
Allow for multiple opens:
test second /dev/video0 open: OK
test VIDIOC_QUERYCAP: OK
test VIDIOC_G/S_PRIORITY: OK
test for unlimited opens: OK
Debug ioctls:
test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
test VIDIOC_LOG_STATUS: OK (Not Supported)
Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 0 Audio Inputs: 0 Tuners: 0
Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0
Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
test VIDIOC_G/S_EDID: OK (Not Supported)
Control ioctls:
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
test VIDIOC_QUERYCTRL: OK
test VIDIOC_G/S_CTRL: OK
test VIDIOC_G/S/TRY_EXT_CTRLS: OK
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 2 Private Controls: 0
Format ioctls:
test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
test VIDIOC_G/S_PARM: OK (Not Supported)
test VIDIOC_G_FBUF: OK (Not Supported)
test VIDIOC_G_FMT: OK
test VIDIOC_TRY_FMT: OK
test VIDIOC_S_FMT: OK
test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
test Cropping: OK (Not Supported)
test Composing: OK (Not Supported)
test Scaling: OK (Not Supported)
Codec ioctls:
test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
test VIDIOC_G_ENC_INDEX: OK (Not Supported)
test VIDIOC_(TRY_)DECODER_CMD: OK
Buffer ioctls:
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
test VIDIOC_EXPBUF: OK
test Requests: OK (Not Supported)
Total for meson-vdec device /dev/video0: 44, Succeeded: 44, Failed: 0, Warnings: 0
[1] https://lore.kernel.org/linux-media/20191120111430.29552-1-narmstrong@baylibre.com
[2] https://lore.kernel.org/linux-media/20191007145909.29979-1-mjourdan@baylibre.com
Neil Armstrong (3):
dt-bindings: media: amlogic,gx-vdec: add bindings for SM1 family
media: meson: vdec: add sm1 platform
arm64: dts: meson-sm1: add video decoder compatible
.../bindings/media/amlogic,gx-vdec.yaml | 2 ++
arch/arm64/boot/dts/amlogic/meson-sm1.dtsi | 4 +++
drivers/staging/media/meson/vdec/vdec.c | 5 +++-
drivers/staging/media/meson/vdec/vdec_1.c | 29 ++++++++++++++----
.../staging/media/meson/vdec/vdec_platform.c | 30 +++++++++++++++++++
.../staging/media/meson/vdec/vdec_platform.h | 2 ++
6 files changed, 65 insertions(+), 7 deletions(-)
--
2.22.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/3] dt-bindings: media: amlogic,gx-vdec: add bindings for SM1 family
2019-11-21 10:14 [PATCH 0/3] media: meson: vdec: add sm1 platform Neil Armstrong
@ 2019-11-21 10:14 ` Neil Armstrong
2019-12-04 19:27 ` Rob Herring
2019-11-21 10:14 ` [PATCH 2/3] media: meson: vdec: add sm1 platform Neil Armstrong
2019-11-21 10:14 ` [PATCH 3/3] arm64: dts: meson-sm1: add video decoder compatible Neil Armstrong
2 siblings, 1 reply; 6+ messages in thread
From: Neil Armstrong @ 2019-11-21 10:14 UTC (permalink / raw)
To: mjourdan, devicetree
Cc: Neil Armstrong, linux-media, linux-amlogic, linux-arm-kernel,
linux-kernel
Add bindings to support the Amlogic Video Decoder on the Amlogic SM1 family.
SM1 has a slightly different power management handling, thus needing a
separate compatible.
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
Documentation/devicetree/bindings/media/amlogic,gx-vdec.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/media/amlogic,gx-vdec.yaml b/Documentation/devicetree/bindings/media/amlogic,gx-vdec.yaml
index 8ea979bb97e6..a7ef69d02336 100644
--- a/Documentation/devicetree/bindings/media/amlogic,gx-vdec.yaml
+++ b/Documentation/devicetree/bindings/media/amlogic,gx-vdec.yaml
@@ -36,6 +36,7 @@ properties:
- const: amlogic,gx-vdec
- enum:
- amlogic,g12a-vdec # G12A (S905X2, S905D2)
+ - amlogic,sm1-vdec # SM1 (S905X3, S905D3)
interrupts:
minItems: 2
@@ -100,6 +101,7 @@ allOf:
contains:
enum:
- amlogic,g12a-vdec
+ - amlogic,sm1-vdec
then:
properties:
--
2.22.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] media: meson: vdec: add sm1 platform
2019-11-21 10:14 [PATCH 0/3] media: meson: vdec: add sm1 platform Neil Armstrong
2019-11-21 10:14 ` [PATCH 1/3] dt-bindings: media: amlogic,gx-vdec: add bindings for SM1 family Neil Armstrong
@ 2019-11-21 10:14 ` Neil Armstrong
2019-11-21 10:14 ` [PATCH 3/3] arm64: dts: meson-sm1: add video decoder compatible Neil Armstrong
2 siblings, 0 replies; 6+ messages in thread
From: Neil Armstrong @ 2019-11-21 10:14 UTC (permalink / raw)
To: mjourdan
Cc: Neil Armstrong, linux-media, linux-amlogic, linux-arm-kernel,
linux-kernel
Add support for the Amlogic SM1 platform for the current MPEG1 & MPEG2
support.
The SM1 family, very close to the G12A SoCs, has a slighly different power
management control, thus needing a separate compatible and family id.
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
drivers/staging/media/meson/vdec/vdec.c | 5 +++-
drivers/staging/media/meson/vdec/vdec_1.c | 29 ++++++++++++++----
.../staging/media/meson/vdec/vdec_platform.c | 30 +++++++++++++++++++
.../staging/media/meson/vdec/vdec_platform.h | 2 ++
4 files changed, 59 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/media/meson/vdec/vdec.c b/drivers/staging/media/meson/vdec/vdec.c
index 875a12be9c9e..a8a4c380ccc9 100644
--- a/drivers/staging/media/meson/vdec/vdec.c
+++ b/drivers/staging/media/meson/vdec/vdec.c
@@ -958,6 +958,8 @@ static const struct of_device_id vdec_dt_match[] = {
.data = &vdec_platform_gxl },
{ .compatible = "amlogic,g12a-vdec",
.data = &vdec_platform_g12a },
+ { .compatible = "amlogic,sm1-vdec",
+ .data = &vdec_platform_sm1 },
{}
};
MODULE_DEVICE_TABLE(of, vdec_dt_match);
@@ -1008,7 +1010,8 @@ static int vdec_probe(struct platform_device *pdev)
of_id = of_match_node(vdec_dt_match, dev->of_node);
core->platform = of_id->data;
- if (core->platform->revision == VDEC_REVISION_G12A) {
+ if (core->platform->revision == VDEC_REVISION_G12A ||
+ core->platform->revision == VDEC_REVISION_SM1) {
core->vdec_hevcf_clk = devm_clk_get(dev, "vdec_hevcf");
if (IS_ERR(core->vdec_hevcf_clk))
return -EPROBE_DEFER;
diff --git a/drivers/staging/media/meson/vdec/vdec_1.c b/drivers/staging/media/meson/vdec/vdec_1.c
index 3a15c6fc0567..3fe2de0c9331 100644
--- a/drivers/staging/media/meson/vdec/vdec_1.c
+++ b/drivers/staging/media/meson/vdec/vdec_1.c
@@ -18,6 +18,7 @@
#define AO_RTI_GEN_PWR_SLEEP0 0xe8
#define AO_RTI_GEN_PWR_ISO0 0xec
#define GEN_PWR_VDEC_1 (BIT(3) | BIT(2))
+ #define GEN_PWR_VDEC_1_SM1 (BIT(1))
#define MC_SIZE (4096 * 4)
@@ -142,12 +143,20 @@ static int vdec_1_stop(struct amvdec_session *sess)
amvdec_read_dos(core, DOS_SW_RESET0);
/* enable vdec1 isolation */
- regmap_write(core->regmap_ao, AO_RTI_GEN_PWR_ISO0, 0xc0);
+ if (core->platform->revision == VDEC_REVISION_SM1)
+ regmap_update_bits(core->regmap_ao, AO_RTI_GEN_PWR_ISO0,
+ GEN_PWR_VDEC_1_SM1, GEN_PWR_VDEC_1_SM1);
+ else
+ regmap_write(core->regmap_ao, AO_RTI_GEN_PWR_ISO0, 0xc0);
/* power off vdec1 memories */
amvdec_write_dos(core, DOS_MEM_PD_VDEC, 0xffffffff);
/* power off vdec1 */
- regmap_update_bits(core->regmap_ao, AO_RTI_GEN_PWR_SLEEP0,
- GEN_PWR_VDEC_1, GEN_PWR_VDEC_1);
+ if (core->platform->revision == VDEC_REVISION_SM1)
+ regmap_update_bits(core->regmap_ao, AO_RTI_GEN_PWR_SLEEP0,
+ GEN_PWR_VDEC_1_SM1, GEN_PWR_VDEC_1_SM1);
+ else
+ regmap_update_bits(core->regmap_ao, AO_RTI_GEN_PWR_SLEEP0,
+ GEN_PWR_VDEC_1, GEN_PWR_VDEC_1);
clk_disable_unprepare(core->vdec_1_clk);
@@ -170,8 +179,12 @@ static int vdec_1_start(struct amvdec_session *sess)
return ret;
/* Enable power for VDEC_1 */
- regmap_update_bits(core->regmap_ao, AO_RTI_GEN_PWR_SLEEP0,
- GEN_PWR_VDEC_1, 0);
+ if (core->platform->revision == VDEC_REVISION_SM1)
+ regmap_update_bits(core->regmap_ao, AO_RTI_GEN_PWR_SLEEP0,
+ GEN_PWR_VDEC_1_SM1, 0);
+ else
+ regmap_update_bits(core->regmap_ao, AO_RTI_GEN_PWR_SLEEP0,
+ GEN_PWR_VDEC_1, 0);
usleep_range(10, 20);
/* Reset VDEC1 */
@@ -183,7 +196,11 @@ static int vdec_1_start(struct amvdec_session *sess)
/* enable VDEC Memories */
amvdec_write_dos(core, DOS_MEM_PD_VDEC, 0);
/* Remove VDEC1 Isolation */
- regmap_write(core->regmap_ao, AO_RTI_GEN_PWR_ISO0, 0);
+ if (core->platform->revision == VDEC_REVISION_SM1)
+ regmap_update_bits(core->regmap_ao, AO_RTI_GEN_PWR_ISO0,
+ GEN_PWR_VDEC_1_SM1, 0);
+ else
+ regmap_write(core->regmap_ao, AO_RTI_GEN_PWR_ISO0, 0);
/* Reset DOS top registers */
amvdec_write_dos(core, DOS_VDEC_MCRCC_STALL_CTRL, 0);
diff --git a/drivers/staging/media/meson/vdec/vdec_platform.c b/drivers/staging/media/meson/vdec/vdec_platform.c
index 7845a889ce24..ea39f8209ec7 100644
--- a/drivers/staging/media/meson/vdec/vdec_platform.c
+++ b/drivers/staging/media/meson/vdec/vdec_platform.c
@@ -106,6 +106,30 @@ static const struct amvdec_format vdec_formats_g12a[] = {
},
};
+static const struct amvdec_format vdec_formats_sm1[] = {
+ {
+ .pixfmt = V4L2_PIX_FMT_MPEG1,
+ .min_buffers = 8,
+ .max_buffers = 8,
+ .max_width = 1920,
+ .max_height = 1080,
+ .vdec_ops = &vdec_1_ops,
+ .codec_ops = &codec_mpeg12_ops,
+ .firmware_path = "meson/vdec/gxl_mpeg12.bin",
+ .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+ }, {
+ .pixfmt = V4L2_PIX_FMT_MPEG2,
+ .min_buffers = 8,
+ .max_buffers = 8,
+ .max_width = 1920,
+ .max_height = 1080,
+ .vdec_ops = &vdec_1_ops,
+ .codec_ops = &codec_mpeg12_ops,
+ .firmware_path = "meson/vdec/gxl_mpeg12.bin",
+ .pixfmts_cap = { V4L2_PIX_FMT_NV12M, V4L2_PIX_FMT_YUV420M, 0 },
+ },
+};
+
const struct vdec_platform vdec_platform_gxbb = {
.formats = vdec_formats_gxbb,
.num_formats = ARRAY_SIZE(vdec_formats_gxbb),
@@ -129,3 +153,9 @@ const struct vdec_platform vdec_platform_g12a = {
.num_formats = ARRAY_SIZE(vdec_formats_g12a),
.revision = VDEC_REVISION_G12A,
};
+
+const struct vdec_platform vdec_platform_sm1 = {
+ .formats = vdec_formats_sm1,
+ .num_formats = ARRAY_SIZE(vdec_formats_sm1),
+ .revision = VDEC_REVISION_SM1,
+};
diff --git a/drivers/staging/media/meson/vdec/vdec_platform.h b/drivers/staging/media/meson/vdec/vdec_platform.h
index 7c61b941b39f..731877a771f4 100644
--- a/drivers/staging/media/meson/vdec/vdec_platform.h
+++ b/drivers/staging/media/meson/vdec/vdec_platform.h
@@ -16,6 +16,7 @@ enum vdec_revision {
VDEC_REVISION_GXL,
VDEC_REVISION_GXM,
VDEC_REVISION_G12A,
+ VDEC_REVISION_SM1,
};
struct vdec_platform {
@@ -28,5 +29,6 @@ extern const struct vdec_platform vdec_platform_gxbb;
extern const struct vdec_platform vdec_platform_gxm;
extern const struct vdec_platform vdec_platform_gxl;
extern const struct vdec_platform vdec_platform_g12a;
+extern const struct vdec_platform vdec_platform_sm1;
#endif
--
2.22.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] arm64: dts: meson-sm1: add video decoder compatible
2019-11-21 10:14 [PATCH 0/3] media: meson: vdec: add sm1 platform Neil Armstrong
2019-11-21 10:14 ` [PATCH 1/3] dt-bindings: media: amlogic,gx-vdec: add bindings for SM1 family Neil Armstrong
2019-11-21 10:14 ` [PATCH 2/3] media: meson: vdec: add sm1 platform Neil Armstrong
@ 2019-11-21 10:14 ` Neil Armstrong
2019-12-13 16:53 ` Kevin Hilman
2 siblings, 1 reply; 6+ messages in thread
From: Neil Armstrong @ 2019-11-21 10:14 UTC (permalink / raw)
To: mjourdan
Cc: Neil Armstrong, linux-media, linux-amlogic, linux-arm-kernel,
linux-kernel
Add the video decoder specific compatible for Amlogic SM1 SoC.
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
arch/arm64/boot/dts/amlogic/meson-sm1.dtsi | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
index 521573f3a5ba..b94a4eae973f 100644
--- a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
@@ -138,6 +138,10 @@
compatible = "amlogic,meson-sm1-pwrc";
};
+&vdec {
+ compatible = "amlogic,sm1-vdec";
+};
+
&vpu {
power-domains = <&pwrc PWRC_SM1_VPU_ID>;
};
--
2.22.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] dt-bindings: media: amlogic,gx-vdec: add bindings for SM1 family
2019-11-21 10:14 ` [PATCH 1/3] dt-bindings: media: amlogic,gx-vdec: add bindings for SM1 family Neil Armstrong
@ 2019-12-04 19:27 ` Rob Herring
0 siblings, 0 replies; 6+ messages in thread
From: Rob Herring @ 2019-12-04 19:27 UTC (permalink / raw)
To: Neil Armstrong
Cc: mjourdan, devicetree, Neil Armstrong, linux-media, linux-amlogic,
linux-arm-kernel, linux-kernel
On Thu, 21 Nov 2019 11:14:27 +0100, Neil Armstrong wrote:
> Add bindings to support the Amlogic Video Decoder on the Amlogic SM1 family.
>
> SM1 has a slightly different power management handling, thus needing a
> separate compatible.
>
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
> ---
> Documentation/devicetree/bindings/media/amlogic,gx-vdec.yaml | 2 ++
> 1 file changed, 2 insertions(+)
>
Acked-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] arm64: dts: meson-sm1: add video decoder compatible
2019-11-21 10:14 ` [PATCH 3/3] arm64: dts: meson-sm1: add video decoder compatible Neil Armstrong
@ 2019-12-13 16:53 ` Kevin Hilman
0 siblings, 0 replies; 6+ messages in thread
From: Kevin Hilman @ 2019-12-13 16:53 UTC (permalink / raw)
To: Neil Armstrong, mjourdan
Cc: Neil Armstrong, linux-media, linux-amlogic, linux-arm-kernel,
linux-kernel
Neil Armstrong <narmstrong@baylibre.com> writes:
> Add the video decoder specific compatible for Amlogic SM1 SoC.
>
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Queued for v5.6,
Kevin
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2019-12-13 20:39 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-21 10:14 [PATCH 0/3] media: meson: vdec: add sm1 platform Neil Armstrong
2019-11-21 10:14 ` [PATCH 1/3] dt-bindings: media: amlogic,gx-vdec: add bindings for SM1 family Neil Armstrong
2019-12-04 19:27 ` Rob Herring
2019-11-21 10:14 ` [PATCH 2/3] media: meson: vdec: add sm1 platform Neil Armstrong
2019-11-21 10:14 ` [PATCH 3/3] arm64: dts: meson-sm1: add video decoder compatible Neil Armstrong
2019-12-13 16:53 ` Kevin Hilman
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).