From nobody Thu Apr 9 13:33:28 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8134389E04 for ; Fri, 27 Feb 2026 06:51:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772175083; cv=none; b=MXBZpSmLWge+KJXTLrxGiD14iNNVq2s1FacsEwB3BSY9wpxjGw362lrdpXXMeYrwpYICzIMB/9EAWOkh7l+OhhTVyvaIszEqqJH534TFCLR8JxXbTAwhp/QLmIpXBa4/sQ7cJUGU+acCeiaYe8nRCTGRw9y2hbfWJPLfx5K0FIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772175083; c=relaxed/simple; bh=8VozCV/2rqeb8HwSXjLaGMIBVeiwoVjkWPiyO4/S4bY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dET6S+AskaJTBdUv7vHn4aPjmdFnvy8NJJxNsYlHiIDx/lrsbI9e668bxVLOPnkTuXqlbz2yIe00+ct1iimbw0Emam1OBuFRm/YgK2fvClbcgsusFYFoh8NY1i+FblPOwL5mKizXoZdmQuCQXEsCMppReyKug9Z228HmlVzogVw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Ga1a0gqa; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZGJEIvdQ; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Ga1a0gqa"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZGJEIvdQ" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R2KEHO2982601 for ; Fri, 27 Feb 2026 06:51:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= +/y/jEWO9QGQ6VPkqMP+OneRNyGFI7YPepN29QNGjaw=; b=Ga1a0gqa7YPTvIFY si2PVFJPjHMv8ocrAJxSEn8pEJ0z9/cjgN5iaMGm+dD8uIP4rWdEJBac7QkS57Vq F1qXNdy3ZfaBYh4dc9+VuNmp+7q+pumy0pfT2IlQ0q6CbimByn6XA9X8KBVRDAKo bBCBrOU3xdGWWgIngSunTI/fDVxTcY0wPG7KsBYuOrUtNmQBnRE/NiuC1Dokc8AB /KmJdGexzAg5SrSYag9B/4Pbit1nx8M3o2nQ7PzXkgNuIJYGRrz+ey7tDtnKgh3N SipRvyklm6R6vQjd4axSuSg9IDsG8DiIDUbOdxJixmXGx1TQnBPoje23GBxL3Ge2 j5iIzA== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cjk2v433x-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 27 Feb 2026 06:51:20 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-3595485abbbso1127967a91.2 for ; Thu, 26 Feb 2026 22:51:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772175079; x=1772779879; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+/y/jEWO9QGQ6VPkqMP+OneRNyGFI7YPepN29QNGjaw=; b=ZGJEIvdQ0wWwiQZAT8vuKNnA3ED/o0SaJyPEfFU8aWkkaGtaGc5252lxgryulC/ZYo 1A8rx1iYY7xAVFhyBMPGwO9cVT3DE5HxXZj9qEY8Zcoy0PJxJLCGqZZDwzHbHE/STfLs 6k/I+dEmmm1AYQxbwk/fhHK0PmojgJhT32MMvJAIxo+E5CDO7hrPtNa2drwzvEJ8vzVP rJTaGHisiULFhNkkpidWDKs0i/dT0zDpWJfHnbwS87HYpa7Flo++ivBbsRP9bLxY8WFN g0vKwa6wLeH5x8akfQnwgLDj2OOLe76tnm5GaJwm0ANjLw7ZI3wgCas63NuEu1Hj5ovQ JP/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772175079; x=1772779879; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=+/y/jEWO9QGQ6VPkqMP+OneRNyGFI7YPepN29QNGjaw=; b=EliKZ6bvqV3Gvv9wSTymZ+fbLvC5lZwAVNkZ7TmT4gdsOvC1ZHuzHIxy0d5KAOQLhb EOVUcPtEpJHkl1RgwOf41GCK5IRB0pV5uNd3jnDOnwAdEBRco90ouTUh4t/UPResJ1sl wtFwkgXkv3XQejAUe2iAyWAEuBMnMJajXxz1tpHOMYt57R+8NMcuKmyl2KFch3zVd9Rm Fj+OZVR9XgbxSdZmdmD0hU2PfNMwH5FiBPDzAPUV1BSmODwncoNdBw1oRvqcF83d3cLa htjCOe7DXWi0Pnk8XM3OV/Q7XFDap87JJ4zEalr6ss7JBXb81RfndDxaD+RW/QbwHRFE AyxA== X-Forwarded-Encrypted: i=1; AJvYcCUHksp2XT+bGzflsquoscJNb8MbfzjWkQLbjmfLF4VFw0Dd4S6bo24SYzc+H2i26BEycDKqMy1SdAPVogo=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8MeouDvbWGgLnnhQMztoYQWbTeqCZIsU8mFEDpbIND2NMcHmX PO9nUqgBvfYStFgbFJMqBXTPBjufLqFQWwTr3tuwzKSqHVKm+e/5ns7r5ejzdAglyDHEUejIHSf 3thx1r/nr1azdlgN1B+DEuaYw2vxhQCwGhut1g+2BBJDPS62S1apVhM+/Nss48wxijxM= X-Gm-Gg: ATEYQzy2eGc7lagp/k2ClYZLQsDGmC5eIiEfoL2JPNJJzPUdk0JXnWoiVau3/6IKxVd Gbhm9hPAionh+gFO3LBGW1N3/pm9oza/X/0KiYHNmwWPKtiVstHOvWTbQiAQGdmxENXlVufTZnM O1yu0FVU0j0HUbNxO4PWp5wyu6nL54YFBUqZWvGEcVIV6xIg3ae/q+O6W15w80qr/XU8HKOEBtQ YzaSTuMq+xbiQUpC7fpiGmu7UlkJtcQ4yAJMQ52odgv6cPbcEuOGPAwHpq1bsIQMOciPyHXVVC9 ehrEdAgKHztlfTGD42IYRJDhaHNd3+V+TrpeWqZX0kWCMyWY7ZqCceys/wEw97/Wo6Zx4h37nTS IfdJsvf7FcGg+RZtJ36nWQVOd1K1NsodcQqtlLaUHZjBK49fcbd3yEPdwbZU= X-Received: by 2002:a05:6a20:6a21:b0:366:14b2:30f with SMTP id adf61e73a8af0-395c3b51f2amr1806981637.66.1772175079255; Thu, 26 Feb 2026 22:51:19 -0800 (PST) X-Received: by 2002:a05:6a20:6a21:b0:366:14b2:30f with SMTP id adf61e73a8af0-395c3b51f2amr1806948637.66.1772175078697; Thu, 26 Feb 2026 22:51:18 -0800 (PST) Received: from hu-dikshita-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c70fa5ea0dcsm3455880a12.3.2026.02.26.22.51.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 22:51:18 -0800 (PST) From: Dikshita Agarwal Date: Fri, 27 Feb 2026 12:21:03 +0530 Subject: [PATCH v2 3/3] media: iris: Add support for Gen2 firmware detection and loading on SC7280 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260227-iris_sc7280_gen2_support-v2-3-7e5b13d26542@oss.qualcomm.com> References: <20260227-iris_sc7280_gen2_support-v2-0-7e5b13d26542@oss.qualcomm.com> In-Reply-To: <20260227-iris_sc7280_gen2_support-v2-0-7e5b13d26542@oss.qualcomm.com> To: Vikash Garodia , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Hans Verkuil , Vishnu Reddy Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Dikshita Agarwal X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772175063; l=13505; i=dikshita.agarwal@oss.qualcomm.com; s=20240917; h=from:subject:message-id; bh=8VozCV/2rqeb8HwSXjLaGMIBVeiwoVjkWPiyO4/S4bY=; b=EIsRgrboJqBUjtXyHYmcfrf96pJ+3eJWauzNpXzdfzut6AuDGa4GvTCigjkaxrcsjtk1DmSTo Uv4G8HSXtiXB7H3V0BBG1tKY1JetpsoUlbM26TO6c/NiwiiHzOo9wwF X-Developer-Key: i=dikshita.agarwal@oss.qualcomm.com; a=ed25519; pk=EEvKY6Ar1OI5SWf44FJ1Ebo1KuQEVbbf5UNPO+UHVhM= X-Proofpoint-ORIG-GUID: Cl8GO6TypObJefH1THfm5jILcZ2B-bWM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDA1NyBTYWx0ZWRfX+NOnyClYSLu1 5rcsn6vlTnQww5NEyGtJp3UPc2s2L+YcLLYlLyxksjB60+rFrhpia7RKZRaRV1UuZBaiT7lr7+f j3LzFsE+y4mk4F+1iPZePJEgKTaggqaB+TsAxeaAOyO8boa2/irazzqkWW4ulKeoVGrUS0ovE2w aITJDu6uU4tyo3n1CD97Km43LKtbUE7KULZ7df8wAoqCDclz67Nc3IuuQrd/rgBe0gh1IRWoi6L uJwd/1yIz81TFt7eqGa5ulGd980qFKnCdD85WY1LAYS4upQF8GhMWo+eXNcwVJmcBbZdfkq8R6O fn6y1LpLcPl1A2PmcDvnYorhSU5qy/rHvDgT8K0gYzEpfxuZzp455uOctE/CclQwVQO60XVHwDK krc5BUHs4CgtLxNMCPCAG0gNuOJos+PV+DWpnqMNu4WmCUzDl3xMryojv8o6Zv+jXVhO5ybECO2 GtEQhjbiEbmEVOc8eEg== X-Authority-Analysis: v=2.4 cv=PO8COPqC c=1 sm=1 tr=0 ts=69a13ee8 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=vAhLNi6rj8_hoSnI:21 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=IrGTtLzU1_bVHTQOxnMA:9 a=QEXdDO2ut3YA:10 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-GUID: Cl8GO6TypObJefH1THfm5jILcZ2B-bWM X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-27_01,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 spamscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602270057 SC7280 supports both Gen1 and Gen2 HFI firmware. To support both dynamically, update the firmware loading mechanism to prioritize Gen2 availability and detect the loaded firmware version at runtime. The firmware loading logic is updated with the following priority: 1. Device Tree (`firmware-name`): If specified, load unconditionally. 2. Gen2 Autodetect (SC7280 only): If no DT property exists, attempt to load the specific Gen2 firmware image (`vpu20_p1_gen2_s6.mbn`). 3. Default Fallback: If Gen2 loading fails or is not applicable, use the default firmware name defined in the default platform data. Additionally, introduce `iris_update_platform_data` to inspect the loaded firmware memory before authentication. This function scans for `QC_IMAGE_VERSION_STRING`. If the version string starts with "vfw" or matches "video-firmware.N.M" (where N >=3D 2), it identifies the firmware as Gen2. If Gen2 firmware is detected on SC7280, the driver switches the internal platform data pointer to the Gen2 configuration. Signed-off-by: Dikshita Agarwal --- drivers/media/platform/qcom/iris/iris_firmware.c | 70 +++++++++++++++++- .../platform/qcom/iris/iris_platform_common.h | 1 + .../media/platform/qcom/iris/iris_platform_gen1.c | 4 +- .../media/platform/qcom/iris/iris_platform_gen2.c | 83 ++++++++++++++++++= ++++ .../platform/qcom/iris/iris_platform_sc7280.h | 15 ++++ drivers/media/platform/qcom/iris/iris_probe.c | 3 - drivers/media/platform/qcom/iris/iris_vidc.c | 3 + 7 files changed, 171 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/med= ia/platform/qcom/iris/iris_firmware.c index 5f408024e967fd21ade66cc3fa377d8507f9002e..f6ee7f58d4ce215ad9f7fb5fdca= dec17f99c8848 100644 --- a/drivers/media/platform/qcom/iris/iris_firmware.c +++ b/drivers/media/platform/qcom/iris/iris_firmware.c @@ -14,6 +14,53 @@ =20 #define MAX_FIRMWARE_NAME_SIZE 128 =20 +static void iris_update_platform_data(struct iris_core *core) +{ + const char *marker =3D "QC_IMAGE_VERSION_STRING=3D"; + struct device_node *node =3D core->dev->of_node; + const char *found =3D NULL; + int major =3D 0, minor =3D 0; + char version_buf[64]; + struct resource res; + void *mem_virt; + size_t i; + + if (!of_device_is_compatible(node, "qcom,sc7280-venus")) + return; + + if (of_reserved_mem_region_to_resource(node, 0, &res)) { + dev_err(core->dev, "Failed to get reserved memory for version check\n"); + return; + } + + mem_virt =3D memremap(res.start, resource_size(&res), MEMREMAP_WC); + if (!mem_virt) { + dev_err(core->dev, "Failed to remap memory for version check\n"); + return; + } + + for (i =3D 0; i < resource_size(&res) - strlen(marker); i++) { + if (memcmp(mem_virt + i, marker, strlen(marker)) =3D=3D 0) { + found =3D (const char *)(mem_virt + i + strlen(marker)); + break; + } + } + + if (found) { + strscpy(version_buf, found, sizeof(version_buf)); + + /* Check for gen2 version string: "vfw..." OR "video-firmware.N..." (N>= =3D2) */ + if (strncmp(version_buf, "vfw", 3) =3D=3D 0 || + (sscanf(version_buf, "video-firmware.%d.%d", &major, &minor) =3D=3D = 2 && + major >=3D 2)) { + dev_info(core->dev, "Gen2 FW Detected: %s\n", version_buf); + core->iris_platform_data =3D &sc7280_gen2_data; + } + } + + memunmap(mem_virt); +} + static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_n= ame) { u32 pas_id =3D core->iris_platform_data->pas_id; @@ -64,21 +111,38 @@ static int iris_load_fw_to_memory(struct iris_core *co= re, const char *fw_name) =20 int iris_fw_load(struct iris_core *core) { + struct device_node *node =3D core->dev->of_node; const struct tz_cp_config *cp_config; const char *fwpath =3D NULL; int i, ret; =20 ret =3D of_property_read_string_index(core->dev->of_node, "firmware-name"= , 0, &fwpath); - if (ret) - fwpath =3D core->iris_platform_data->fwname; + if (!ret) { + ret =3D iris_load_fw_to_memory(core, fwpath); + } else { + bool fw_loaded =3D false; + + if (of_device_is_compatible(node, "qcom,sc7280-venus")) { + ret =3D iris_load_fw_to_memory(core, "qcom/vpu/vpu20_p1_gen2_s6.mbn"); + if (!ret) + fw_loaded =3D true; + } + + if (!fw_loaded) { + fwpath =3D core->iris_platform_data->fwname; + dev_dbg(core->dev, "loading default fw: %s\n", fwpath); + ret =3D iris_load_fw_to_memory(core, fwpath); + } + } =20 - ret =3D iris_load_fw_to_memory(core, fwpath); if (ret) { dev_err(core->dev, "firmware download failed\n"); return -ENOMEM; } =20 + iris_update_platform_data(core); + ret =3D qcom_scm_pas_auth_and_reset(core->iris_platform_data->pas_id); if (ret) { dev_err(core->dev, "auth and reset failed: %d\n", ret); diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index 5a489917580eb10022fdcb52f7321a915e8b239d..f1bbbe043e3a3ccc5eebf670911= 62678eb83bf45 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -43,6 +43,7 @@ enum pipe_type { =20 extern const struct iris_platform_data qcs8300_data; extern const struct iris_platform_data sc7280_data; +extern const struct iris_platform_data sc7280_gen2_data; extern const struct iris_platform_data sm8250_data; extern const struct iris_platform_data sm8550_data; extern const struct iris_platform_data sm8650_data; diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen1.c b/driver= s/media/platform/qcom/iris/iris_platform_gen1.c index df8e6bf9430ed2a070e092edae9ef998d092cb5e..6dbdd0833dcdc7dfac6d7b35f99= 837c883e188e7 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c @@ -414,8 +414,8 @@ const struct iris_platform_data sc7280_data =3D { .dma_mask =3D 0xe0000000 - 1, .fwname =3D "qcom/vpu/vpu20_p1.mbn", .pas_id =3D IRIS_PAS_ID, - .inst_iris_fmts =3D platform_fmts_sm8250_dec, - .inst_iris_fmts_size =3D ARRAY_SIZE(platform_fmts_sm8250_dec), + .inst_iris_fmts =3D platform_fmts_sc7280_dec, + .inst_iris_fmts_size =3D ARRAY_SIZE(platform_fmts_sc7280_dec), .inst_caps =3D &platform_inst_cap_sm8250, .inst_fw_caps_dec =3D inst_fw_cap_sm8250_dec, .inst_fw_caps_dec_size =3D ARRAY_SIZE(inst_fw_cap_sm8250_dec), diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index 5da90d47f9c6eab4a7e6b17841fdc0e599397bf7..5f3be22a003fe5d80b683b43a1b= 2386497785fb1 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -15,6 +15,7 @@ #include "iris_platform_qcs8300.h" #include "iris_platform_sm8650.h" #include "iris_platform_sm8750.h" +#include "iris_platform_sc7280.h" =20 #define VIDEO_ARCH_LX 1 #define BITRATE_MAX 245000000 @@ -1317,3 +1318,85 @@ const struct iris_platform_data qcs8300_data =3D { .enc_op_int_buf_tbl =3D sm8550_enc_op_int_buf_tbl, .enc_op_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), }; + +const struct iris_platform_data sc7280_gen2_data =3D { + .get_instance =3D iris_hfi_gen2_get_instance, + .init_hfi_command_ops =3D iris_hfi_gen2_command_ops_init, + .init_hfi_response_ops =3D iris_hfi_gen2_response_ops_init, + /* Gen2 FW for SC7280 requires bigger size for line buffer for encoder */ + .get_vpu_buffer_size =3D iris_vpu33_buf_size, + .vpu_ops =3D &iris_vpu2_ops, + .set_preset_registers =3D iris_set_sm8550_preset_registers, + .icc_tbl =3D sm8550_icc_table, + .icc_tbl_size =3D ARRAY_SIZE(sm8550_icc_table), + .bw_tbl_dec =3D sc7280_bw_table_dec, + .bw_tbl_dec_size =3D ARRAY_SIZE(sc7280_bw_table_dec), + .pmdomain_tbl =3D sm8550_pmdomain_table, + .pmdomain_tbl_size =3D ARRAY_SIZE(sm8550_pmdomain_table), + .opp_pd_tbl =3D sc7280_opp_pd_table, + .opp_pd_tbl_size =3D ARRAY_SIZE(sc7280_opp_pd_table), + .clk_tbl =3D sc7280_clk_table, + .clk_tbl_size =3D ARRAY_SIZE(sc7280_clk_table), + .opp_clk_tbl =3D sc7280_opp_clk_table, + /* Upper bound of DMA address range */ + .dma_mask =3D 0xe0000000 - 1, + .fwname =3D "qcom/vpu/vpu20_p1_gen2_s6.mbn", + .pas_id =3D IRIS_PAS_ID, + .inst_iris_fmts =3D platform_fmts_sc7280_dec, + .inst_iris_fmts_size =3D ARRAY_SIZE(platform_fmts_sc7280_dec), + .inst_caps =3D &platform_inst_cap_sm8550, + .inst_fw_caps_dec =3D inst_fw_cap_sm8550_dec, + .inst_fw_caps_dec_size =3D ARRAY_SIZE(inst_fw_cap_sm8550_dec), + .inst_fw_caps_enc =3D inst_fw_cap_sm8550_enc, + .inst_fw_caps_enc_size =3D ARRAY_SIZE(inst_fw_cap_sm8550_enc), + .tz_cp_config_data =3D tz_cp_config_sm8550, + .tz_cp_config_data_size =3D ARRAY_SIZE(tz_cp_config_sm8550), + .hw_response_timeout =3D HW_RESPONSE_TIMEOUT_VALUE, + .ubwc_config =3D &ubwc_config_sm8550, + .core_arch =3D VIDEO_ARCH_LX, + .num_vpp_pipe =3D 1, + .no_aon =3D true, + .max_session_count =3D 16, + .max_core_mbpf =3D 4096 * 2176 / 256 * 2 + 1920 * 1088 / 256, + /* max spec for SC7280 is 4096x2176@60fps */ + .max_core_mbps =3D 4096 * 2176 / 256 * 60, + .dec_input_config_params_default =3D + sm8550_vdec_input_config_params_default, + .dec_input_config_params_default_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_params_default), + .dec_input_config_params_hevc =3D + sm8550_vdec_input_config_param_hevc, + .dec_input_config_params_hevc_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), + .dec_input_config_params_vp9 =3D + sm8550_vdec_input_config_param_vp9, + .dec_input_config_params_vp9_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), + .enc_input_config_params =3D sm8550_venc_input_config_params, + .enc_input_config_params_size =3D + ARRAY_SIZE(sm8550_venc_input_config_params), + .dec_output_config_params =3D sm8550_vdec_output_config_params, + .dec_output_config_params_size =3D ARRAY_SIZE(sm8550_vdec_output_config_p= arams), + .enc_output_config_params =3D sm8550_venc_output_config_params, + .enc_output_config_params_size =3D ARRAY_SIZE(sm8550_venc_output_config_p= arams), + + .dec_ip_int_buf_tbl =3D sm8550_dec_ip_int_buf_tbl, + .dec_ip_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), + .dec_op_int_buf_tbl =3D sm8550_dec_op_int_buf_tbl, + .dec_op_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), + + .enc_op_int_buf_tbl =3D sm8550_enc_op_int_buf_tbl, + .enc_op_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), + + .dec_input_prop =3D sm8550_vdec_subscribe_input_properties, + .dec_input_prop_size =3D ARRAY_SIZE(sm8550_vdec_subscribe_input_propertie= s), + .dec_output_prop_avc =3D sm8550_vdec_subscribe_output_properties_avc, + .dec_output_prop_avc_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), + .dec_output_prop_hevc =3D sm8550_vdec_subscribe_output_properties_hevc, + .dec_output_prop_hevc_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), + .dec_output_prop_vp9 =3D sm8550_vdec_subscribe_output_properties_vp9, + .dec_output_prop_vp9_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), +}; diff --git a/drivers/media/platform/qcom/iris/iris_platform_sc7280.h b/driv= ers/media/platform/qcom/iris/iris_platform_sc7280.h index 0ec8f334df670c3c1548a5ee3b8907b333e34db3..6e05f2542a5457bd0b3b6acced3= bd54d166b2023 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_sc7280.h +++ b/drivers/media/platform/qcom/iris/iris_platform_sc7280.h @@ -6,6 +6,21 @@ #ifndef __IRIS_PLATFORM_SC7280_H__ #define __IRIS_PLATFORM_SC7280_H__ =20 +static struct iris_fmt platform_fmts_sc7280_dec[] =3D { + [IRIS_FMT_H264] =3D { + .pixfmt =3D V4L2_PIX_FMT_H264, + .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, + }, + [IRIS_FMT_HEVC] =3D { + .pixfmt =3D V4L2_PIX_FMT_HEVC, + .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, + }, + [IRIS_FMT_VP9] =3D { + .pixfmt =3D V4L2_PIX_FMT_VP9, + .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, + }, +}; + static const struct bw_info sc7280_bw_table_dec[] =3D { { ((3840 * 2160) / 256) * 60, 1896000, }, { ((3840 * 2160) / 256) * 30, 968000, }, diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/= platform/qcom/iris/iris_probe.c index 22c7b3410710328b900fc49459cd399aa0e89b02..1f44d3ea337df63fbf5317b9b99= 139a0867267c3 100644 --- a/drivers/media/platform/qcom/iris/iris_probe.c +++ b/drivers/media/platform/qcom/iris/iris_probe.c @@ -12,7 +12,6 @@ #include =20 #include "iris_core.h" -#include "iris_ctrls.h" #include "iris_vidc.h" =20 static int iris_init_icc(struct iris_core *core) @@ -257,8 +256,6 @@ static int iris_probe(struct platform_device *pdev) if (ret) return ret; =20 - iris_session_init_caps(core); - ret =3D v4l2_device_register(dev, &core->v4l2_dev); if (ret) return ret; diff --git a/drivers/media/platform/qcom/iris/iris_vidc.c b/drivers/media/p= latform/qcom/iris/iris_vidc.c index bd38d84c9cc79d15585ed5dd5f905a37521cb6dc..0727d5d19cb9b7ed1f72ab840ae= 5dfda0162e23d 100644 --- a/drivers/media/platform/qcom/iris/iris_vidc.c +++ b/drivers/media/platform/qcom/iris/iris_vidc.c @@ -9,6 +9,7 @@ #include #include =20 +#include "iris_ctrls.h" #include "iris_vidc.h" #include "iris_instance.h" #include "iris_vdec.h" @@ -196,6 +197,8 @@ int iris_open(struct file *filp) goto fail_m2m_release; } =20 + iris_session_init_caps(core); + if (inst->domain =3D=3D DECODER) ret =3D iris_vdec_inst_init(inst); else if (inst->domain =3D=3D ENCODER) --=20 2.34.1