Commit 4e386547 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull media fixes from Mauro Carvalho Chehab:

 - rc: ttusbir: fix inverted error logic

 - Venus/Iris fixes:
      - Kconfig cross compile build testing for x86
      - Use-after-free fix for internal buffers
      - dma_free_attrs size fix
      - Switch to hardware mode clocks
      - Use-after-free fix for a concurrency path
      - Fix H265D_MAX_SLICE size for sc7280 devices

 - camoss: fix some clock-related issues

* tag 'media/v7.1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
  media: qcom: camss: avoid format string warning
  media: qcom: camss: Add missing clocks for VFE lite on sa8775p
  media: qcom: camss: Fix csid clock configuration for sa8775p
  media: qcom: camss: Fix csid IRQ offset for sa8775p
  media: qcom: iris: increase H265D_MAX_SLICE to fix H.265 decoding on SC7280
  media: iris: fix use-after-free of fmt_src during MBPF check
  media: iris: switch to hardware mode after firmware boot
  media: iris: Fix dma_free_attrs() size in iris_hfi_queues_init()
  media: iris: Fix use-after-free in iris_release_internal_buffers()
  media: iris: fix QCOM_MDT_LOADER dependency
  media: venus: fix QCOM_MDT_LOADER dependency
parents a293ec25 23c39cb5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -49,8 +49,8 @@
				 || (csid->camss->res->version == CAMSS_8300))
#define CSID_BUF_DONE_IRQ_STATUS	0x8C
#define BUF_DONE_IRQ_STATUS_RDI_OFFSET  (csid_is_lite(csid) ? \
						1 : (IS_CSID_690(csid) ?\
						13 : 14))
						((IS_CSID_690(csid) ? 0 : 1)) : \
						((IS_CSID_690(csid) ? 13 : 14)))
#define CSID_BUF_DONE_IRQ_MASK		0x90
#define CSID_BUF_DONE_IRQ_CLEAR		0x94
#define CSID_BUF_DONE_IRQ_SET		0x98
+7 −3
Original line number Diff line number Diff line
@@ -558,12 +558,16 @@ static int csiphy_init_formats(struct v4l2_subdev *sd,
	return csiphy_set_format(sd, fh ? fh->state : NULL, &format);
}

static bool csiphy_match_clock_name(const char *clock_name, const char *format,
				    int index)
static bool __printf(2, 3)
csiphy_match_clock_name(const char *clock_name, const char *format, ...)
{
	char name[16]; /* csiphyXXX_timer\0 */
	va_list args;

	va_start(args, format);
	vsnprintf(name, sizeof(name), format, args);
	va_end(args);

	snprintf(name, sizeof(name), format, index);
	return !strcmp(clock_name, name);
}

+40 −40
Original line number Diff line number Diff line
@@ -3598,12 +3598,10 @@ static const struct camss_subdev_resources csid_res_8775p[] = {
	/* CSID2 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
		.clock = { "vfe_lite_csid", "vfe_lite_cphy_rx" },
		.clock_rate = {
			{ 0, 0, 400000000, 400000000, 0},
			{ 0, 0, 400000000, 480000000, 0}
			{ 400000000, 480000000 },
			{ 400000000, 480000000 }
		},
		.reg = { "csid_lite0" },
		.interrupt = { "csid_lite0" },
@@ -3617,12 +3615,10 @@ static const struct camss_subdev_resources csid_res_8775p[] = {
	/* CSID3 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
		.clock = { "vfe_lite_csid", "vfe_lite_cphy_rx" },
		.clock_rate = {
			{ 0, 0, 400000000, 400000000, 0},
			{ 0, 0, 400000000, 480000000, 0}
			{ 400000000, 480000000 },
			{ 400000000, 480000000 }
		},
		.reg = { "csid_lite1" },
		.interrupt = { "csid_lite1" },
@@ -3636,12 +3632,10 @@ static const struct camss_subdev_resources csid_res_8775p[] = {
	/* CSID4 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
		.clock = { "vfe_lite_csid", "vfe_lite_cphy_rx" },
		.clock_rate = {
			{ 0, 0, 400000000, 400000000, 0},
			{ 0, 0, 400000000, 480000000, 0}
			{ 400000000, 480000000 },
			{ 400000000, 480000000 }
		},
		.reg = { "csid_lite2" },
		.interrupt = { "csid_lite2" },
@@ -3655,12 +3649,10 @@ static const struct camss_subdev_resources csid_res_8775p[] = {
	/* CSID5 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
		.clock = { "vfe_lite_csid", "vfe_lite_cphy_rx" },
		.clock_rate = {
			{ 0, 0, 400000000, 400000000, 0},
			{ 0, 0, 400000000, 480000000, 0}
			{ 400000000, 480000000 },
			{ 400000000, 480000000 }
		},
		.reg = { "csid_lite3" },
		.interrupt = { "csid_lite3" },
@@ -3674,12 +3666,10 @@ static const struct camss_subdev_resources csid_res_8775p[] = {
	/* CSID6 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
		.clock = { "vfe_lite_csid", "vfe_lite_cphy_rx" },
		.clock_rate = {
			{ 0, 0, 400000000, 400000000, 0},
			{ 0, 0, 400000000, 480000000, 0}
			{ 400000000, 480000000 },
			{ 400000000, 480000000 }
		},
		.reg = { "csid_lite4" },
		.interrupt = { "csid_lite4" },
@@ -3752,15 +3742,17 @@ static const struct camss_subdev_resources vfe_res_8775p[] = {
	/* VFE2 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
		.clock = { "cpas_ahb", "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
			   "vfe_lite", "camnoc_axi"},
		.clock_rate = {
			{ 0, 0, 0, 0  },
			{ 0 },
			{ 0 },
			{ 300000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 480000000, 600000000, 600000000, 600000000 },
			{ 400000000 },
		},
		.reg = { "vfe_lite0" },
		.interrupt = { "vfe_lite0" },
@@ -3775,15 +3767,17 @@ static const struct camss_subdev_resources vfe_res_8775p[] = {
	/* VFE3 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
		.clock = { "cpas_ahb", "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
			   "vfe_lite", "camnoc_axi"},
		.clock_rate = {
			{ 0, 0, 0, 0  },
			{ 0 },
			{ 0 },
			{ 300000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 480000000, 600000000, 600000000, 600000000 },
			{ 400000000 },
		},
		.reg = { "vfe_lite1" },
		.interrupt = { "vfe_lite1" },
@@ -3798,15 +3792,17 @@ static const struct camss_subdev_resources vfe_res_8775p[] = {
	/* VFE4 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
		.clock = { "cpas_ahb", "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
			   "vfe_lite", "camnoc_axi"},
		.clock_rate = {
			{ 0, 0, 0, 0  },
			{ 0 },
			{ 0 },
			{ 300000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 480000000, 600000000, 600000000, 600000000 },
			{ 400000000 },
		},
		.reg = { "vfe_lite2" },
		.interrupt = { "vfe_lite2" },
@@ -3821,15 +3817,17 @@ static const struct camss_subdev_resources vfe_res_8775p[] = {
	/* VFE5 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
		.clock = { "cpas_ahb", "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
			   "vfe_lite", "camnoc_axi"},
		.clock_rate = {
			{ 0, 0, 0, 0  },
			{ 0 },
			{ 0 },
			{ 300000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 480000000, 600000000, 600000000, 600000000 },
			{ 400000000 },
		},
		.reg = { "vfe_lite3" },
		.interrupt = { "vfe_lite3" },
@@ -3844,15 +3842,17 @@ static const struct camss_subdev_resources vfe_res_8775p[] = {
	/* VFE6 (lite) */
	{
		.regulators = {},
		.clock = { "cpas_vfe_lite", "vfe_lite_ahb",
		.clock = { "cpas_ahb", "cpas_vfe_lite", "vfe_lite_ahb",
			   "vfe_lite_csid", "vfe_lite_cphy_rx",
			   "vfe_lite"},
			   "vfe_lite", "camnoc_axi"},
		.clock_rate = {
			{ 0, 0, 0, 0  },
			{ 0 },
			{ 0 },
			{ 300000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 400000000, 400000000, 400000000, 400000000 },
			{ 480000000, 600000000, 600000000, 600000000 },
			{ 400000000 },
		},
		.reg = { "vfe_lite4" },
		.interrupt = { "vfe_lite4" },
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ config VIDEO_QCOM_IRIS
        depends on VIDEO_DEV
        depends on ARCH_QCOM || COMPILE_TEST
        select V4L2_MEM2MEM_DEV
        select QCOM_MDT_LOADER if ARCH_QCOM
        select QCOM_MDT_LOADER
        select QCOM_SCM
        select VIDEOBUF2_DMA_CONTIG
        help
+4 −2
Original line number Diff line number Diff line
@@ -582,10 +582,12 @@ static int iris_release_internal_buffers(struct iris_inst *inst,
			continue;
		if (!(buffer->attr & BUF_ATTR_QUEUED))
			continue;
		buffer->attr |= BUF_ATTR_PENDING_RELEASE;
		ret = hfi_ops->session_release_buf(inst, buffer);
		if (ret)
		if (ret) {
			buffer->attr &= ~BUF_ATTR_PENDING_RELEASE;
			return ret;
		buffer->attr |= BUF_ATTR_PENDING_RELEASE;
		}
	}

	return 0;
Loading