From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 0D36F362122 for ; Tue, 17 Feb 2026 13:15:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771334132; cv=none; b=LsTyitxanIpDSxQv8DsAWoCQGyohmXbg75oXALRmWXD8hxDuDt2rta7Jas/Elfn3hW5f9HTh28yeTQa/DN3aKoq50+/cqsb6JwVlmdDVDmB194hfGKN3Xokj8qegCzhn89K979ZkYRj/5/yNlSCmhT9KLQaGrEiGv9I/ucFDn5E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771334132; c=relaxed/simple; bh=bykETRd58Dgk1h8sjkjLrRt+Ejl+t02vqtwhc6NEw2I=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=q2o2QMTvgqTIjZw2bwUs2uPWmL/ATzvreC4YDrUdTvzB7MB2wItTIlNv9NSk1oDi8qftWxH3qA/D/ic1NnCaAF1YsVkseVRXxpm8cw93VG6NJC0ozi8Yao4yw2xPiYrLcEhMpxMDM/c3gWjPrSvNSuW60oml2+hRzgZaCThsDr8= 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=lb0bsrf8; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=d2tLWr/5; arc=none smtp.client-ip=205.220.180.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="lb0bsrf8"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="d2tLWr/5" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61HBCSZG910827 for ; Tue, 17 Feb 2026 13:15:30 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= cDJXIOFVhcsv24XAXUhX4av9F5wMERJmoHTDSIHUUv0=; b=lb0bsrf80ot+EW9J AVQkcMyfQolDxZx+BEZeXoQ5CEnPD9rva4zulcKyPNDvGyTuMmNkr9tW3M+Tc8Yz s/wygVjk/vFou0M4aqr9iklS39rKevj9NKTk1t+FcHCaxpUB+5ZrisM6gIYkU8Ij cBtGu6oKlZiIEObRVVV8JPlGccCcbCyzmI7rhfgd6cX0483kX7wUVUzWA6c/uYxk 7lC1ioCtBnr5e8wF5rY7EW/JQSYn6CGIq0foeNJS4GKrQglyZ4gaTjLH3N+tnJwp Zwe8wQk8MXQZYqgsqZzzPh9vXM8rz21Vedujw3F8Vlxy1bgbh2S+PfNKQ7Dx8HuG 5pRf3g== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cc6a9tg0e-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 17 Feb 2026 13:15:29 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2aaf2ce5d81so50473225ad.1 for ; Tue, 17 Feb 2026 05:15:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771334129; x=1771938929; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=cDJXIOFVhcsv24XAXUhX4av9F5wMERJmoHTDSIHUUv0=; b=d2tLWr/5/Al2RsBAfZsGhAYOcjsaAI/8qRYtFTnhxD0BuV1fVBidQywlpkCPrys3p7 sKQ0451yUbCOWl6QoLSkNmFog3pRUUdC3HV+H32maV8JoGRDt6PGEPNx0vP+WDqQz0W8 qLNyoUijbWa9O5TlQxnXzoTI91QDCPeZi3q9ve+jtK6/DfceQ82JV/ZXBtKLze7OTlpD f0MM5rSVRDBPY5s9GvfInLfCHXPbggmJE0Mbo9on6X7Tkn2hcwhsQez7FjWzEqrHWpnd VH+Z5OFMKGVMwkVgxSbFeS40amVYikvdzJLeTf1kntc3//V3wIh3uTKzON+hdGG9a5qd dObw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771334129; x=1771938929; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cDJXIOFVhcsv24XAXUhX4av9F5wMERJmoHTDSIHUUv0=; b=IuXd/8VBfYeXjbXtaQZr6EKdxCLcXksPhEpjquShoGd3U/eh6Uu+DLLWfUMQ1KDV7K tH9AehxyM4QzqugXs7KvA6UKPlqsKhuN3UE8IM1OMEkhabNDvGW11TL05PDbkrGOh1m8 Q9RIvcr9nDisNZ6QtDL/qjHGzSGEiCMTak137sQ59YjDsa1x2m8VtTi/f1TNjSdP3eiA v85RHq+JaPg3ETcWTX7GmsZtIHw8XGukiUcK0OiONPrSI0Vkoi1N1t/0rZKGvDDW8arn aOPYu0Ie5EDikmYvwCF+SGmkS4vi01hg5CC4TXvincm98gy2n8gHHofVxr3drQY50RQ1 nb9w== X-Gm-Message-State: AOJu0YyQvRFm0A3JG8W+b5NTFwk/xoFuVs0KoqgmGJVUeh8sX8a/5E1U 4r8ItlUWzB2cwReVh4iPuXsAOf+e+7+4rYgAIGVU+QoGMRLCIVqAZsTq4akS36Lrf3RplE52fnU oY4ZSeWcTjL0/UTUQzFbiN8pHz39jK0iWaS7Y7Bijch/nofTfOfQBHxkYl+nc42MyDoa/ X-Gm-Gg: AZuq6aKhsG3Gj03Ulhd3SX6C+9PMDMR1f72HaeStN3/+HysQVaeLd2FnGS58hsIAoOZ 8bO/vl4hJYur0cfub3J0ItqiADjPx2o7hlDzQ1qiZqH3AFTWmPsMJMP4hrzR1SgEE8b+QF2/9SV PXpeDx5R4gpVe6p33CtzMwhlkbQn9Q5kfKHvMPZxu1U204MWQlKPRtV94bvKTZiQYuk/ABZHebZ nibETQqoZGuTxCoWjxoD0e4g2LWAsEsmASHndMUTLGED2bHU+9fB3yU8gegbQiWRlLREu6tuvHO xlmzFdQcq2aU26Ywi66m0S8A1Aq5k23EM9Qeu+krptaqxG4FPoXKb7IxkTot13TdIA728Z7IsAE Dq+5jcHXbyNrTw+V3f0v6kQSKls0U7eHmA/yUWlxerEqK4t7HXY1/Xg== X-Received: by 2002:a17:903:b43:b0:2aa:f469:fa23 with SMTP id d9443c01a7336-2ad17432168mr95805845ad.4.1771334128722; Tue, 17 Feb 2026 05:15:28 -0800 (PST) X-Received: by 2002:a17:903:b43:b0:2aa:f469:fa23 with SMTP id d9443c01a7336-2ad17432168mr95805145ad.4.1771334127877; Tue, 17 Feb 2026 05:15:27 -0800 (PST) Received: from [10.204.100.45] ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad1aaeab38sm99970525ad.82.2026.02.17.05.15.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 Feb 2026 05:15:27 -0800 (PST) Message-ID: Date: Tue, 17 Feb 2026 18:45:13 +0530 Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 5/7] media: iris: add context bank devices using iommu-map To: Robin Murphy , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Saravana Kannan , Joerg Roedel , Will Deacon , Stefan Schmidt , Hans Verkuil , Krzysztof Kozlowski , Vishnu Reddy , Hans Verkuil Cc: linux-arm-msm@vger.kernel.org, linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Bryan O'Donoghue References: <20260126-kaanapali-iris-v1-0-e2646246bfc1@oss.qualcomm.com> <20260126-kaanapali-iris-v1-5-e2646246bfc1@oss.qualcomm.com> <02b3d0f5-f94c-43cd-93af-97cfcf7751b1@arm.com> Content-Language: en-US From: Vikash Garodia In-Reply-To: <02b3d0f5-f94c-43cd-93af-97cfcf7751b1@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjE3MDEwNyBTYWx0ZWRfXzA1Ze8UNjcdL 6d+Qe6hgf9nfWx0WilpYbnJqUeQkrBhJAFWZb/L6j246AKcWQOlOrsf/dJzsZtLMLvm/F/WrqtF xaPKzLy6aelkz+UT0yw7hb3JTC5N1ZXCTFNzjyUSX0ChzEl2epqG8EnCQaARGT8cxDNngu31TkH fD8UdrmdEEMCo3OJhu8R/Gs/iNkydiQAU9uqcNFQzzB0P1AZ5WZ7ahJbhl0TTPefAb67zZXiT1t 5FiSr+yb8jtw2OkuQ42d/RNjVX9nf4JGD4ACiNx/CRdAKLOBSqlguGxW7J0bMXis3qa1/ka03Lv XBa6fLK4GNaJ7w0dOS4s3BzYeyOGDB06wm3UCT0n9njapdaYgj8n16p0EYBLyaGZlmgNmN8KKk2 60jVyhvcBhmBHDn6O2WN5KNMiKLmJaPB3pQLXNcK4Ita7oDOfmVkqJZgwTC4Pmjy/3RowlOOR/L SqEJ+NohNxKVYSzJclw== X-Proofpoint-GUID: qIdPL6zSJyXL4oKvdZPrCQXYQPmOa3ZC X-Proofpoint-ORIG-GUID: qIdPL6zSJyXL4oKvdZPrCQXYQPmOa3ZC X-Authority-Analysis: v=2.4 cv=TPNIilla c=1 sm=1 tr=0 ts=699469f1 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=EUspDBNiAAAA:8 a=8ZOrhM5FIgLh972jGGIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 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-17_01,2026-02-16_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 suspectscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 malwarescore=0 priorityscore=1501 spamscore=0 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602170107 On 1/27/2026 8:19 PM, Robin Murphy wrote: > On 2026-01-26 12:25 pm, Vikash Garodia wrote: >> Introduce different context banks(CB) and the associated buffer region. >> Different stream IDs from VPU would be associated to one of these CB. >> The patch ensures to handle CBs which are described as iommu-map in DT. >> Multiple CBs are needed to increase the IOVA for the video usecases like >> higher concurrent sessions. >> >> Co-developed-by: Vishnu Reddy >> Signed-off-by: Vishnu Reddy >> Signed-off-by: Vikash Garodia >> --- >>   .../platform/qcom/iris/iris_platform_common.h      | 29 ++++++++++++ >>   drivers/media/platform/qcom/iris/iris_probe.c      | 55 ++++++++++++ >> ++++++++-- >>   drivers/media/platform/qcom/iris/iris_resources.c  | 35 ++++++++++++++ >>   drivers/media/platform/qcom/iris/iris_resources.h  |  1 + >>   4 files changed, 116 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h >> b/drivers/media/platform/qcom/iris/iris_platform_common.h >> index >> 5a489917580eb10022fdcb52f7321a915e8b239d..d2d7c898fc8ef0de1b16aebd72681ea3c5b736ae 100644 >> --- a/drivers/media/platform/qcom/iris/iris_platform_common.h >> +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h >> @@ -204,6 +204,33 @@ struct icc_vote_data { >>       u32 fps; >>   }; >> +enum iris_iommu_map_function_id { >> +    IRIS_CB_NON_SECURE_NON_PIXEL    = 0x100, >> +    IRIS_CB_NON_SECURE_PIXEL    = 0x101, >> +    IRIS_CB_NON_SECURE_BITSTREAM    = 0x102, >> +    IRIS_CB_SECURE_NON_PIXEL    = 0x200, >> +    IRIS_CB_SECURE_PIXEL        = 0x201, >> +    IRIS_CB_SECURE_BITSTREAM    = 0x202, >> +    IRIS_CB_FIRMWARE        = 0x300, >> +}; >> + >> +enum iris_buffer_region { >> +    IRIS_NON_SECURE_NON_PIXEL    = BIT(0), >> +    IRIS_NON_SECURE_PIXEL        = BIT(1), >> +    IRIS_NON_SECURE_BITSTREAM    = BIT(2), >> +    IRIS_SECURE_NON_PIXEL        = BIT(3), >> +    IRIS_SECURE_PIXEL        = BIT(4), >> +    IRIS_SECURE_BITSTREAM        = BIT(5), >> +}; >> + >> +struct iris_context_bank { >> +    struct device *dev; >> +    const char *name; >> +    const enum iris_iommu_map_function_id f_id; >> +    const enum iris_buffer_region region; >> +    const u64 dma_mask; >> +}; >> + >>   enum platform_pm_domain_type { >>       IRIS_CTRL_POWER_DOMAIN, >>       IRIS_HW_POWER_DOMAIN, >> @@ -246,6 +273,8 @@ struct iris_platform_data { >>       u32 inst_fw_caps_enc_size; >>       const struct tz_cp_config *tz_cp_config_data; >>       u32 tz_cp_config_data_size; >> +    struct iris_context_bank *cb_data; >> +    u32 cb_data_size; >>       u32 core_arch; >>       u32 hw_response_timeout; >>       struct ubwc_config_data *ubwc_config; >> diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/ >> media/platform/qcom/iris/iris_probe.c >> index >> ddaacda523ecb9990af0dd0640196223fbcc2cab..c1a6aac5a3d65d980c5a34ba5fa1c1dbcf790ec5 100644 >> --- a/drivers/media/platform/qcom/iris/iris_probe.c >> +++ b/drivers/media/platform/qcom/iris/iris_probe.c >> @@ -123,6 +123,37 @@ static int iris_init_resets(struct iris_core *core) >>                        core->iris_platform_data- >> >controller_rst_tbl_size); >>   } >> +static int iris_init_context_bank_devices(struct iris_core *core) >> +{ >> +    struct iris_context_bank *cb; >> +    const __be32 *map_data; >> +    int tupple_size = 5; >> +    int i, j, ret, len; >> +    u32 fid; >> + >> +    map_data = of_get_property(core->dev->of_node, "iommu-map", &len); > > If despite proposing all this hackery in the common OF code you're then > _still_ going to open-code your own parsing of the property, with hard- > coded assumptions to boot, then clearly this is not the appropriate > approach at all... Ack. Driver should not be doing the parsing which OF code is already doing it. > >> +    if (!map_data) >> +        return 0; >> + >> +    len /= sizeof(__be32); >> + >> +    for (i = 0; i < len; i += tupple_size) { >> +        fid = be32_to_cpu(map_data[i]); >> + >> +        for (j = 0; j < core->iris_platform_data->cb_data_size; j++) { >> +            cb = &core->iris_platform_data->cb_data[j]; >> + >> +            if (fid == cb->f_id && !cb->dev) { >> +                ret = iris_create_child_device_and_map(core, cb); >> +                if (ret) >> +                    return ret; >> +            } >> +        } >> +    } >> + >> +    return 0; >> +} >> + >>   static int iris_init_resources(struct iris_core *core) >>   { >>       int ret; >> @@ -139,7 +170,11 @@ static int iris_init_resources(struct iris_core >> *core) >>       if (ret) >>           return ret; >> -    return iris_init_resets(core); >> +    ret = iris_init_resets(core); >> +    if (ret) >> +        return ret; >> + >> +    return iris_init_context_bank_devices(core); >>   } >>   static int iris_register_video_device(struct iris_core *core, enum >> domain_type type) >> @@ -187,6 +222,8 @@ static int iris_register_video_device(struct >> iris_core *core, enum domain_type t >>   static void iris_remove(struct platform_device *pdev) >>   { >>       struct iris_core *core; >> +    struct device *dev; >> +    int i; >>       core = platform_get_drvdata(pdev); >>       if (!core) >> @@ -194,6 +231,14 @@ static void iris_remove(struct platform_device >> *pdev) >>       iris_core_deinit(core); >> +    for (i = 0; i < core->iris_platform_data->cb_data_size; i++) { >> +        dev = core->iris_platform_data->cb_data[i].dev; >> +        if (dev) { >> +            platform_device_unregister(to_platform_device(dev)); >> +            core->iris_platform_data->cb_data[i].dev = NULL; >> +        } >> +    } >> + >>       video_unregister_device(core->vdev_dec); >>       video_unregister_device(core->vdev_enc); >> @@ -277,9 +322,11 @@ static int iris_probe(struct platform_device *pdev) >>       dma_mask = core->iris_platform_data->dma_mask; >> -    ret = dma_set_mask_and_coherent(dev, dma_mask); >> -    if (ret) >> -        goto err_vdev_unreg_enc; >> +    if (device_iommu_mapped(core->dev)) { >> +        ret = dma_set_mask_and_coherent(core->dev, dma_mask); > > Huh? Why would this be conditional? If it's a DMA device then it's a DMA > device, regardless of whether an IOMMU driver happens to be present or not. To support existing SOC which are described by iommus, and not yet migrated to iommu-map. > >> +        if (ret) >> +            goto err_vdev_unreg_enc; >> +    } >>       dma_set_max_seg_size(&pdev->dev, DMA_BIT_MASK(32)); >>       dma_set_seg_boundary(&pdev->dev, DMA_BIT_MASK(32)); >> diff --git a/drivers/media/platform/qcom/iris/iris_resources.c b/ >> drivers/media/platform/qcom/iris/iris_resources.c >> index >> 773f6548370a257b8ae7332242544266cbbd61a9..647f6760f2b7a6bab8a585a13eb03cf60a9c047e 100644 >> --- a/drivers/media/platform/qcom/iris/iris_resources.c >> +++ b/drivers/media/platform/qcom/iris/iris_resources.c >> @@ -6,6 +6,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -141,3 +142,37 @@ int iris_disable_unprepare_clock(struct iris_core >> *core, enum platform_clk_type >>       return 0; >>   } >> + >> +int iris_create_child_device_and_map(struct iris_core *core, struct >> iris_context_bank *cb) >> +{ >> +    struct platform_device *pdev; >> +    int ret; >> + >> +    pdev = platform_device_alloc(cb->name, 0); >> +    if (!pdev) >> +        return -ENOMEM; >> + >> +    ret = platform_device_add(pdev); >> +    if (ret) { >> +        platform_device_put(pdev); >> +        return ret; >> +    } >> + >> +    ret = of_dma_configure_id(&pdev->dev, core->dev->of_node, true, >> +                  (const u32 *)&cb->f_id); > > No. As I already said before, of_dma_configure() is for bus drivers; if > you want to act like a bus, implement a proper bus_type with > a .dma_configure callback. If you don't want to do that then describe > the individual functional blocks of the codec appropriately as distinct > devices with distinct hardware properties so the platform bus code can > handle them correctly. It is not reasonable to advertise physical > hardware to Linux as a single monolithic device, but then have a driver > try to pull a "well actually..." by abusing all the internal > abstractions. The fact that you might happen to avoid the warning from > iommu_probe_device() because you're not binding drivers to these fake > platform devices doesn't make this design any less wrong. Ack. Agree to define a proper bus_type to handle the .dma_configure callback. Will update this in v2. Regards, Vikash > > Thanks, > Robin. > >> +    if (ret) >> +        goto error_unregister; >> + >> +    ret = dma_set_mask_and_coherent(&pdev->dev, cb->dma_mask); >> +    if (ret) >> +        goto error_unregister; >> + >> +    cb->dev = &pdev->dev; >> + >> +    return 0; >> + >> +error_unregister: >> +    platform_device_unregister(to_platform_device(&pdev->dev)); >> + >> +    return ret; >> +} >> diff --git a/drivers/media/platform/qcom/iris/iris_resources.h b/ >> drivers/media/platform/qcom/iris/iris_resources.h >> index >> 6bfbd2dc6db095ec05e53c894e048285f82446c6..b7efe15facb203eea9ae13d5f0abdcc2ea718b4d 100644 >> --- a/drivers/media/platform/qcom/iris/iris_resources.h >> +++ b/drivers/media/platform/qcom/iris/iris_resources.h >> @@ -15,5 +15,6 @@ int iris_unset_icc_bw(struct iris_core *core); >>   int iris_set_icc_bw(struct iris_core *core, unsigned long icc_bw); >>   int iris_disable_unprepare_clock(struct iris_core *core, enum >> platform_clk_type clk_type); >>   int iris_prepare_enable_clock(struct iris_core *core, enum >> platform_clk_type clk_type); >> +int iris_create_child_device_and_map(struct iris_core *core, struct >> iris_context_bank *cb); >>   #endif >> >