From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 34AD7C433EF for ; Wed, 17 Nov 2021 04:04:59 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0267D61AFD for ; Wed, 17 Nov 2021 04:04:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 0267D61AFD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 51AD989AEB; Wed, 17 Nov 2021 04:04:58 +0000 (UTC) Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5C2D489AEB for ; Wed, 17 Nov 2021 04:04:56 +0000 (UTC) X-UUID: 0f9fb9af4a0e4abfabd44a5c6fbc1964-20211117 X-UUID: 0f9fb9af4a0e4abfabd44a5c6fbc1964-20211117 Received: from mtkmbs10n2.mediatek.inc [(172.21.101.183)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 34308423; Wed, 17 Nov 2021 12:04:51 +0800 Received: from mtkcas10.mediatek.inc (172.21.101.39) by mtkmbs10n1.mediatek.inc (172.21.101.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.15; Wed, 17 Nov 2021 12:04:51 +0800 Received: from mtksdccf07 (172.21.84.99) by mtkcas10.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 17 Nov 2021 12:04:50 +0800 Message-ID: Subject: Re: [PATCH v7 18/20] drm/mediatek: add ovl_adaptor support for MT8195 From: Nancy.Lin To: Chun-Kuang Hu Date: Wed, 17 Nov 2021 12:04:50 +0800 In-Reply-To: References: <20211029075203.17093-1-nancy.lin@mediatek.com> <20211029075203.17093-19-nancy.lin@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-MTK: N X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: DTML , srv_heupstream , David Airlie , "jason-jh . lin" , singo.chang@mediatek.com, linux-kernel , DRI Development , Yongqiang Niu , Matthias Brugger , Rob Herring , "moderated list:ARM/Mediatek SoC support" , Linux ARM Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi Chun-Kuang, Thanks for the review. On Fri, 2021-11-05 at 08:29 +0800, Chun-Kuang Hu wrote: > Hi, Nancy: > > Nancy.Lin 於 2021年10月29日 週五 下午3:52寫道: > > > > Add ovl_adaptor driver for MT8195. > > Ovl_adaptor is an encapsulated module and designed for simplified > > DRM control flow. This module is composed of 8 RDMAs, 4 MERGEs and > > an ETHDR. Two RDMAs merge into one layer, so this module support 4 > > layers. > > > > Signed-off-by: Nancy.Lin > > --- > > drivers/gpu/drm/mediatek/Makefile | 1 + > > drivers/gpu/drm/mediatek/mtk_disp_drv.h | 16 + > > .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 436 > > ++++++++++++++++++ > > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 1 + > > 4 files changed, 454 insertions(+) > > create mode 100644 drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c > > > > diff --git a/drivers/gpu/drm/mediatek/Makefile > > b/drivers/gpu/drm/mediatek/Makefile > > index fb158a1e7f06..3abd27d7c91d 100644 > > --- a/drivers/gpu/drm/mediatek/Makefile > > +++ b/drivers/gpu/drm/mediatek/Makefile > > @@ -6,6 +6,7 @@ mediatek-drm-y := mtk_disp_aal.o \ > > mtk_disp_gamma.o \ > > mtk_disp_merge.o \ > > mtk_disp_ovl.o \ > > + mtk_disp_ovl_adaptor.o \ > > mtk_disp_rdma.o \ > > mtk_drm_crtc.o \ > > mtk_drm_ddp_comp.o \ > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > index 224a710bb537..cd9827402626 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h > > @@ -112,6 +112,22 @@ void mtk_rdma_enable_vblank(struct device > > *dev, > > void *vblank_cb_data); > > void mtk_rdma_disable_vblank(struct device *dev); > > > > +int mtk_ovl_adaptor_clk_enable(struct device *dev); > > +void mtk_ovl_adaptor_clk_disable(struct device *dev); > > +void mtk_ovl_adaptor_config(struct device *dev, unsigned int w, > > + unsigned int h, unsigned int vrefresh, > > + unsigned int bpc, struct cmdq_pkt > > *cmdq_pkt); > > +void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int > > idx, > > + struct mtk_plane_state *state, > > + struct cmdq_pkt *cmdq_pkt); > > +void mtk_ovl_adaptor_enable_vblank(struct device *dev, > > + void (*vblank_cb)(void *), > > + void *vblank_cb_data); > > +void mtk_ovl_adaptor_disable_vblank(struct device *dev); > > +void mtk_ovl_adaptor_start(struct device *dev); > > +void mtk_ovl_adaptor_stop(struct device *dev); > > +unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev); > > + > > int mtk_mdp_rdma_clk_enable(struct device *dev); > > void mtk_mdp_rdma_clk_disable(struct device *dev); > > void mtk_mdp_rdma_start(struct device *dev, struct cmdq_pkt > > *cmdq_pkt); > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c > > b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c > > new file mode 100644 > > index 000000000000..148322597fa8 > > --- /dev/null > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c > > @@ -0,0 +1,436 @@ > > +// SPDX-License-Identifier: GPL-2.0-only > > +/* > > + * Copyright (c) 2021 MediaTek Inc. > > + */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include "mtk_disp_drv.h" > > +#include "mtk_drm_crtc.h" > > +#include "mtk_drm_ddp_comp.h" > > +#include "mtk_drm_drv.h" > > +#include "mtk_ethdr.h" > > + > > +#define MTK_OVL_ADAPTOR_RDMA_MAX_WIDTH 1920 > > +#define MTK_OVL_ADAPTOR_LAYER_NUM 4 > > + > > +enum mtk_ovl_adaptor_comp_type { > > + OVL_ADAPTOR_TYPE_RDMA = 0, > > + OVL_ADAPTOR_TYPE_MERGE, > > + OVL_ADAPTOR_TYPE_ETHDR, > > + OVL_ADAPTOR_TYPE_NUM, > > +}; > > + > > +enum mtk_ovl_adaptor_comp_id { > > + OVL_ADAPTOR_MDP_RDMA0, > > + OVL_ADAPTOR_MDP_RDMA1, > > + OVL_ADAPTOR_MDP_RDMA2, > > + OVL_ADAPTOR_MDP_RDMA3, > > + OVL_ADAPTOR_MDP_RDMA4, > > + OVL_ADAPTOR_MDP_RDMA5, > > + OVL_ADAPTOR_MDP_RDMA6, > > + OVL_ADAPTOR_MDP_RDMA7, > > + OVL_ADAPTOR_MERGE0, > > + OVL_ADAPTOR_MERGE1, > > + OVL_ADAPTOR_MERGE2, > > + OVL_ADAPTOR_MERGE3, > > + OVL_ADAPTOR_ETHDR0, > > + OVL_ADAPTOR_ID_MAX > > +}; > > + > > +struct ovl_adaptor_comp_match { > > + enum mtk_ovl_adaptor_comp_type type; > > + int alias_id; > > +}; > > + > > +struct mtk_disp_ovl_adaptor { > > + struct device *ovl_adaptor_comp[OVL_ADAPTOR_ID_MAX]; > > + struct device *mmsys_dev; > > +}; > > + > > +static const char * const private_comp_stem[OVL_ADAPTOR_TYPE_NUM] > > = { > > + [OVL_ADAPTOR_TYPE_RDMA] = "vdo1_rdma", > > + [OVL_ADAPTOR_TYPE_MERGE] = "merge", > > + [OVL_ADAPTOR_TYPE_ETHDR] = "ethdr", > > +}; > > + > > +static const struct ovl_adaptor_comp_match > > comp_matches[OVL_ADAPTOR_ID_MAX] = { > > + [OVL_ADAPTOR_MDP_RDMA0] = { OVL_ADAPTOR_TYPE_RDMA, 0 }, > > + [OVL_ADAPTOR_MDP_RDMA1] = { OVL_ADAPTOR_TYPE_RDMA, 1 }, > > + [OVL_ADAPTOR_MDP_RDMA2] = { OVL_ADAPTOR_TYPE_RDMA, 2 }, > > + [OVL_ADAPTOR_MDP_RDMA3] = { OVL_ADAPTOR_TYPE_RDMA, 3 }, > > + [OVL_ADAPTOR_MDP_RDMA4] = { OVL_ADAPTOR_TYPE_RDMA, 4 }, > > + [OVL_ADAPTOR_MDP_RDMA5] = { OVL_ADAPTOR_TYPE_RDMA, 5 }, > > + [OVL_ADAPTOR_MDP_RDMA6] = { OVL_ADAPTOR_TYPE_RDMA, 6 }, > > + [OVL_ADAPTOR_MDP_RDMA7] = { OVL_ADAPTOR_TYPE_RDMA, 7 }, > > + [OVL_ADAPTOR_MERGE0] = { OVL_ADAPTOR_TYPE_MERGE, 1 }, > > + [OVL_ADAPTOR_MERGE1] = { OVL_ADAPTOR_TYPE_MERGE, 2 }, > > + [OVL_ADAPTOR_MERGE2] = { OVL_ADAPTOR_TYPE_MERGE, 3 }, > > + [OVL_ADAPTOR_MERGE3] = { OVL_ADAPTOR_TYPE_MERGE, 4 }, > > + [OVL_ADAPTOR_ETHDR0] = { OVL_ADAPTOR_TYPE_ETHDR, 0 }, > > +}; > > + > > +void mtk_ovl_adaptor_layer_config(struct device *dev, unsigned int > > idx, > > + struct mtk_plane_state *state, > > + struct cmdq_pkt *cmdq_pkt) > > +{ > > + struct mtk_disp_ovl_adaptor *ovl_adaptor = > > dev_get_drvdata(dev); > > + struct mtk_plane_pending_state *pending = &state->pending; > > + struct mtk_mdp_rdma_cfg rdma_config = {0}; > > + struct device *rdma_l; > > + struct device *rdma_r; > > + struct device *merge; > > + struct device *ethdr; > > + const struct drm_format_info *fmt_info = > > drm_format_info(pending->format); > > + bool use_dual_pipe = false; > > + unsigned int align_width; > > + unsigned int l_w = 0; > > + unsigned int r_w = 0; > > + > > + dev_dbg(dev, "%s+ idx:%d, enable:%d, fmt:0x%x\n", __func__, > > idx, > > + pending->enable, pending->format); > > + dev_dbg(dev, "addr 0x%lx, fb w:%d, {%d,%d,%d,%d}\n", > > + pending->addr, (pending->pitch / fmt_info->cpp[0]), > > + pending->x, pending->y, pending->width, pending- > > >height); > > + > > + rdma_l = ovl_adaptor- > > >ovl_adaptor_comp[OVL_ADAPTOR_MDP_RDMA0 + 2 * idx]; > > + rdma_r = ovl_adaptor- > > >ovl_adaptor_comp[OVL_ADAPTOR_MDP_RDMA0 + 2 * idx + 1]; > > + merge = ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_MERGE0 + > > idx]; > > + ethdr = ovl_adaptor->ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]; > > + > > + if (!pending->enable) { > > + mtk_merge_stop_cmdq(merge, cmdq_pkt); > > + mtk_mdp_rdma_stop(rdma_l, cmdq_pkt); > > + mtk_mdp_rdma_stop(rdma_r, cmdq_pkt); > > + mtk_ethdr_layer_config(ethdr, idx, state, > > cmdq_pkt); > > + return; > > + } > > + > > + /* ETHDR is in 1T2P domain, width needs to be 2 pixels > > align */ > > + align_width = ALIGN_DOWN(pending->width, 2); > > + > > + if (align_width > MTK_OVL_ADAPTOR_RDMA_MAX_WIDTH) > > + use_dual_pipe = true; > > + > > + if (use_dual_pipe) { > > + l_w = (align_width / 2) + ((pending->width / 2) % > > 2); > > + r_w = align_width - l_w; > > + } else { > > + l_w = align_width; > > + } > > + mtk_merge_advance_config(merge, l_w, r_w, pending->height, > > 0, 0, cmdq_pkt); > > + mtk_mmsys_ddp_config(ovl_adaptor->mmsys_dev, > > MMSYS_CONFIG_MERGE_ASYNC_WIDTH, > > + idx, align_width / 2, cmdq_pkt); > > + mtk_mmsys_ddp_config(ovl_adaptor->mmsys_dev, > > MMSYS_CONFIG_MERGE_ASYNC_HEIGHT, > > + idx, pending->height, cmdq_pkt); > > + > > + rdma_config.width = l_w; > > + rdma_config.height = pending->height; > > + rdma_config.addr0 = pending->addr; > > + rdma_config.pitch = pending->pitch; > > + rdma_config.fmt = pending->format; > > + rdma_config.color_encoding = pending->color_encoding; > > + mtk_mdp_rdma_config(rdma_l, &rdma_config, cmdq_pkt); > > + > > + if (use_dual_pipe) { > > + rdma_config.x_left = l_w; > > + rdma_config.width = r_w; > > + mtk_mdp_rdma_config(rdma_r, &rdma_config, > > cmdq_pkt); > > + } > > + > > + mtk_merge_start_cmdq(merge, cmdq_pkt); > > + > > + mtk_mdp_rdma_start(rdma_l, cmdq_pkt); > > + if (use_dual_pipe) > > + mtk_mdp_rdma_start(rdma_r, cmdq_pkt); > > + else > > + mtk_mdp_rdma_stop(rdma_r, cmdq_pkt); > > + > > + mtk_ethdr_layer_config(ethdr, idx, state, cmdq_pkt); > > +} > > + > > +void mtk_ovl_adaptor_config(struct device *dev, unsigned int w, > > + unsigned int h, unsigned int vrefresh, > > + unsigned int bpc, struct cmdq_pkt > > *cmdq_pkt) > > +{ > > + struct mtk_disp_ovl_adaptor *ovl_adaptor = > > dev_get_drvdata(dev); > > + > > + mtk_ethdr_config(ovl_adaptor- > > >ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0], w, h, > > + vrefresh, bpc, cmdq_pkt); > > +} > > + > > +void mtk_ovl_adaptor_start(struct device *dev) > > +{ > > + struct mtk_disp_ovl_adaptor *ovl_adaptor = > > dev_get_drvdata(dev); > > + > > + mtk_ethdr_start(ovl_adaptor- > > >ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]); > > +} > > + > > +void mtk_ovl_adaptor_stop(struct device *dev) > > +{ > > + struct mtk_disp_ovl_adaptor *ovl_adaptor = > > dev_get_drvdata(dev); > > + > > + mtk_ethdr_stop(ovl_adaptor- > > >ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]); > > +} > > + > > +int mtk_ovl_adaptor_clk_enable(struct device *dev) > > +{ > > + struct mtk_disp_ovl_adaptor *ovl_adaptor = > > dev_get_drvdata(dev); > > + struct device *comp; > > + int ret; > > + int i; > > + > > + for (i = 0; i < OVL_ADAPTOR_MERGE0; i++) { > > + comp = ovl_adaptor->ovl_adaptor_comp[i]; > > + ret = pm_runtime_get_sync(comp); > > + if (ret) { > > + dev_err(dev, "Failed to enable power domain > > %d, err %d\n", i, ret); > > + goto pwr_err; > > + } > > + } > > + > > + for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) { > > + comp = ovl_adaptor->ovl_adaptor_comp[i]; > > + > > + if (i < OVL_ADAPTOR_MERGE0) > > + ret = mtk_mdp_rdma_clk_enable(comp); > > + else if (i < OVL_ADAPTOR_ETHDR0) > > + ret = mtk_merge_clk_enable(comp); > > + else > > + ret = mtk_ethdr_clk_enable(comp); > > + if (ret) { > > + dev_err(dev, "Failed to enable clock %d, > > err %d\n", i, ret); > > + goto clk_err; > > + } > > + } > > + > > + return ret; > > + > > +clk_err: > > + while (--i >= 0) { > > + comp = ovl_adaptor->ovl_adaptor_comp[i]; > > + if (i < OVL_ADAPTOR_MERGE0) > > + mtk_mdp_rdma_clk_disable(comp); > > + else if (i < OVL_ADAPTOR_ETHDR0) > > + mtk_merge_clk_disable(comp); > > + else > > + mtk_ethdr_clk_disable(comp); > > + } > > + i = OVL_ADAPTOR_MDP_RDMA7; > > + > > +pwr_err: > > + while (i-- >= 0) > > + pm_runtime_put(ovl_adaptor->ovl_adaptor_comp[i]); > > + > > + return ret; > > +} > > + > > +void mtk_ovl_adaptor_clk_disable(struct device *dev) > > +{ > > + struct mtk_disp_ovl_adaptor *ovl_adaptor = > > dev_get_drvdata(dev); > > + struct device *comp; > > + int i; > > + > > + for (i = 0; i < OVL_ADAPTOR_ID_MAX; i++) { > > + comp = ovl_adaptor->ovl_adaptor_comp[i]; > > + > > + if (i < OVL_ADAPTOR_MERGE0) { > > + mtk_mdp_rdma_clk_disable(comp); > > + pm_runtime_put(comp); > > + } else if (i < OVL_ADAPTOR_ETHDR0) { > > + mtk_merge_clk_disable(comp); > > + } else { > > + mtk_ethdr_clk_disable(comp); > > + } > > + } > > +} > > + > > +unsigned int mtk_ovl_adaptor_layer_nr(struct device *dev) > > +{ > > + return MTK_OVL_ADAPTOR_LAYER_NUM; > > +} > > + > > +void mtk_ovl_adaptor_enable_vblank(struct device *dev, void > > (*vblank_cb)(void *), > > + void *vblank_cb_data) > > +{ > > + struct mtk_disp_ovl_adaptor *ovl_adaptor = > > dev_get_drvdata(dev); > > + > > + mtk_ethdr_enable_vblank(ovl_adaptor- > > >ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0], > > + vblank_cb, vblank_cb_data); > > +} > > + > > +void mtk_ovl_adaptor_disable_vblank(struct device *dev) > > +{ > > + struct mtk_disp_ovl_adaptor *ovl_adaptor = > > dev_get_drvdata(dev); > > + > > + mtk_ethdr_disable_vblank(ovl_adaptor- > > >ovl_adaptor_comp[OVL_ADAPTOR_ETHDR0]); > > +} > > + > > +static int ovl_adaptor_comp_get_id(struct device *dev, struct > > device_node *node, > > + enum mtk_ovl_adaptor_comp_type > > type) > > +{ > > + int alias_id = of_alias_get_id(node, > > private_comp_stem[type]); > > + int i; > > + > > + for (i = 0; i < ARRAY_SIZE(comp_matches); i++) > > + if (comp_matches[i].type == type && > > + comp_matches[i].alias_id == alias_id) > > + return i; > > + > > + dev_err(dev, "Failed to get id. type: %d, alias: %d\n", > > type, alias_id); > > + return -EINVAL; > > +} > > + > > +static const struct of_device_id mtk_ovl_adaptor_comp_dt_ids[] = { > > + { > > + .compatible = "mediatek,mt8195-vdo1-rdma", > > + .data = (void *)OVL_ADAPTOR_TYPE_RDMA, > > + }, { > > + .compatible = "mediatek,mt8195-disp-merge", > > + .data = (void *)OVL_ADAPTOR_TYPE_MERGE, > > + }, { > > + .compatible = "mediatek,mt8195-disp-ethdr", > > + .data = (void *)OVL_ADAPTOR_TYPE_ETHDR, > > + }, > > + {}, > > +}; > > + > > +static int compare_of(struct device *dev, void *data) > > +{ > > + return dev->of_node == data; > > +} > > + > > +static int ovl_adaptor_comp_init(struct device *dev, struct > > component_match **match) > > +{ > > + struct mtk_disp_ovl_adaptor *priv = dev_get_drvdata(dev); > > + struct device_node *node, *parent; > > + struct platform_device *comp_pdev; > > + > > + parent = dev->parent->parent->of_node->parent; > > + > > + for_each_child_of_node(parent, node) { > > + const struct of_device_id *of_id; > > + enum mtk_ovl_adaptor_comp_type type; > > + int id; > > + > > + of_id = of_match_node(mtk_ovl_adaptor_comp_dt_ids, > > node); > > + if (!of_id) > > + continue; > > + > > + if (!of_device_is_available(node)) { > > + dev_dbg(dev, "Skipping disabled component > > %pOF\n", > > + node); > > + continue; > > + } > > + > > + type = (enum mtk_ovl_adaptor_comp_type)of_id->data; > > + id = ovl_adaptor_comp_get_id(dev, node, type); > > + if (id < 0) { > > + dev_warn(dev, "Skipping unknown component > > %pOF\n", > > + node); > > + continue; > > + } > > + > > + comp_pdev = of_find_device_by_node(node); > > + if (!comp_pdev) > > + return -EPROBE_DEFER; > > + > > + priv->ovl_adaptor_comp[id] = &comp_pdev->dev; > > + > > + drm_of_component_match_add(dev, match, compare_of, > > node); > > + dev_dbg(dev, "Adding component match for %pOF\n", > > node); > > + } > > + > > + return 0; > > +} > > + > > +static int mtk_disp_ovl_adaptor_comp_bind(struct device *dev, > > struct device *master, > > + void *data) > > +{ > > + return 0; > > +} > > + > > +static void mtk_disp_ovl_adaptor_comp_unbind(struct device *dev, > > struct device *master, > > + void *data) > > +{ > > +} > > + > > +static const struct component_ops mtk_disp_ovl_adaptor_comp_ops = > > { > > + .bind = mtk_disp_ovl_adaptor_comp_bind, > > + .unbind = mtk_disp_ovl_adaptor_comp_unbind, > > +}; > > + > > +static int mtk_disp_ovl_adaptor_master_bind(struct device *dev) > > +{ > > + struct mtk_disp_ovl_adaptor *priv = dev_get_drvdata(dev); > > + > > + component_bind_all(dev, priv->mmsys_dev); > > + return 0; > > +} > > + > > +static void mtk_disp_ovl_adaptor_master_unbind(struct device *dev) > > +{ > > +} > > + > > +static const struct component_master_ops > > mtk_disp_ovl_adaptor_master_ops = { > > + .bind = mtk_disp_ovl_adaptor_master_bind, > > + .unbind = mtk_disp_ovl_adaptor_master_unbind, > > +}; > > + > > +static int mtk_disp_ovl_adaptor_probe(struct platform_device > > *pdev) > > +{ > > + struct mtk_disp_ovl_adaptor *priv; > > + struct device *dev = &pdev->dev; > > + struct component_match *match = NULL; > > + int ret; > > + > > + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > > + if (!priv) > > + return -ENOMEM; > > + > > + platform_set_drvdata(pdev, priv); > > + > > + ret = ovl_adaptor_comp_init(dev, &match); > > + if (ret < 0) > > + return ret; > > + > > + priv->mmsys_dev = pdev->dev.platform_data; > > + > > + component_master_add_with_match(dev, > > &mtk_disp_ovl_adaptor_master_ops, match); > > + > > + pm_runtime_enable(dev); > > + > > + ret = component_add(dev, &mtk_disp_ovl_adaptor_comp_ops); > > + if (ret != 0) { > > + pm_runtime_disable(dev); > > + dev_err(dev, "Failed to add component: %d\n", ret); > > + } > > + > > + return ret; > > +} > > + > > +static int mtk_disp_ovl_adaptor_remove(struct platform_device > > *pdev) > > +{ > > component_master_del(). Except this > > Reviewed-by: Chun-Kuang Hu > OK. > > > + component_del(&pdev->dev, &mtk_disp_ovl_adaptor_comp_ops); > > + pm_runtime_disable(&pdev->dev); > > + return 0; > > +} > > + > > +struct platform_driver mtk_disp_ovl_adaptor_driver = { > > + .probe = mtk_disp_ovl_adaptor_probe, > > + .remove = mtk_disp_ovl_adaptor_remove, > > + .driver = { > > + .name = "mediatek-disp-ovl-adaptor", > > + .owner = THIS_MODULE, > > + }, > > +}; > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h > > b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > > index a58cebd01d35..1ad9f7edfcc7 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h > > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > > @@ -51,6 +51,7 @@ extern struct platform_driver > > mtk_disp_ccorr_driver; > > extern struct platform_driver mtk_disp_color_driver; > > extern struct platform_driver mtk_disp_gamma_driver; > > extern struct platform_driver mtk_disp_merge_driver; > > +extern struct platform_driver mtk_disp_ovl_adaptor_driver; > > extern struct platform_driver mtk_disp_ovl_driver; > > extern struct platform_driver mtk_disp_rdma_driver; > > extern struct platform_driver mtk_dpi_driver; > > -- > > 2.18.0 > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6DC4BC433F5 for ; Wed, 17 Nov 2021 04:11:21 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1764361B30 for ; Wed, 17 Nov 2021 04:11:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 1764361B30 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:CC:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xnJ6uEjeJYjQWmkV0CcdvP690Obs3IJtFh9OqoAP2V8=; b=xSc5QvmUmakMq7 BNakjJg94xJrbRcAO9iLGgs3B4JuCpRqqa/tG23ljMYKa/gv9R2h3E61kxk8wRFuOi/pKjYpNYNPl DV4/OLFpYotPLaFXa8XsOAosmC192GSfCMsRfQ0uwaPCnVYR7c6dDdBgzlY3uKSev6KyJj84DrBwt dcoD9p/dAKHsCvCu5wiYUltlBRvjNzDVJ7sYUm7AE4vBVVFakXus+HGHiSbjQhCPR+E01UM5WyRMK nVy6A9MLGA2f9VVKHZ7eqadtYeZ2fmwLgYe2Dp6ivqAisBJmcQHACPH8TVUp8CQODeuuTPGYRddco GLEacWNI1YawtSEAcerw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnCHr-003IMl-T1; Wed, 17 Nov 2021 04:11:07 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnCHo-003ILw-46; Wed, 17 Nov 2021 04:11:06 +0000 X-UUID: 539349402a3e4c1e98cc62398e2f4b88-20211116 X-UUID: 539349402a3e4c1e98cc62398e2f4b88-20211116 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1907914470; Tue, 16 Nov 2021 21:11:00 -0700 Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by MTKMBS62N2.mediatek.inc (172.29.193.42) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 16 Nov 2021 20:04:52 -0800 Received: from mtkcas10.mediatek.inc (172.21.101.39) by mtkmbs10n1.mediatek.inc (172.21.101.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.15; Wed, 17 Nov 2021 12:04:51 +0800 Received: from mtksdccf07 (172.21.84.99) by mtkcas10.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 17 Nov 2021 12:04:50 +0800 Message-ID: Subject: Re: [PATCH v7 18/20] drm/mediatek: add ovl_adaptor support for MT8195 From: Nancy.Lin To: Chun-Kuang Hu CC: CK Hu , Philipp Zabel , "David Airlie" , Daniel Vetter , Rob Herring , Matthias Brugger , "jason-jh . lin" , Yongqiang Niu , DRI Development , "moderated list:ARM/Mediatek SoC support" , DTML , linux-kernel , Linux ARM , , srv_heupstream Date: Wed, 17 Nov 2021 12:04:50 +0800 In-Reply-To: References: <20211029075203.17093-1-nancy.lin@mediatek.com> <20211029075203.17093-19-nancy.lin@mediatek.com> X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211116_201104_187843_7052BB34 X-CRM114-Status: GOOD ( 30.47 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org SGkgQ2h1bi1LdWFuZywKClRoYW5rcyBmb3IgdGhlIHJldmlldy4KCk9uIEZyaSwgMjAyMS0xMS0w NSBhdCAwODoyOSArMDgwMCwgQ2h1bi1LdWFuZyBIdSB3cm90ZToKPiBIaSwgTmFuY3k6Cj4gCj4g TmFuY3kuTGluIDxuYW5jeS5saW5AbWVkaWF0ZWsuY29tPiDmlrwgMjAyMeW5tDEw5pyIMjnml6Ug 6YCx5LqUIOS4i+WNiDM6NTLlr6vpgZPvvJoKPiA+IAo+ID4gQWRkIG92bF9hZGFwdG9yIGRyaXZl ciBmb3IgTVQ4MTk1Lgo+ID4gT3ZsX2FkYXB0b3IgaXMgYW4gZW5jYXBzdWxhdGVkIG1vZHVsZSBh bmQgZGVzaWduZWQgZm9yIHNpbXBsaWZpZWQKPiA+IERSTSBjb250cm9sIGZsb3cuIFRoaXMgbW9k dWxlIGlzIGNvbXBvc2VkIG9mIDggUkRNQXMsIDQgTUVSR0VzIGFuZAo+ID4gYW4gRVRIRFIuIFR3 byBSRE1BcyBtZXJnZSBpbnRvIG9uZSBsYXllciwgc28gdGhpcyBtb2R1bGUgc3VwcG9ydCA0Cj4g PiBsYXllcnMuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE5hbmN5LkxpbiA8bmFuY3kubGluQG1l ZGlhdGVrLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmls ZSAgICAgICAgICAgICB8ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k aXNwX2Rydi5oICAgICAgIHwgIDE2ICsKPiA+ICAuLi4vZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlz cF9vdmxfYWRhcHRvci5jICAgfCA0MzYKPiA+ICsrKysrKysrKysrKysrKysrKwo+ID4gIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgICB8ICAgMSArCj4gPiAgNCBm aWxlcyBjaGFuZ2VkLCA0NTQgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IuYwo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCj4gPiBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQo+ID4gaW5kZXggZmIxNThhMWU3ZjA2Li4zYWJk MjdkN2M5MWQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZp bGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQo+ID4gQEAgLTYs NiArNiw3IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX2FhbC5vIFwKPiA+ICAgICAgICAg ICAgICAgICAgIG10a19kaXNwX2dhbW1hLm8gXAo+ID4gICAgICAgICAgICAgICAgICAgbXRrX2Rp c3BfbWVyZ2UubyBcCj4gPiAgICAgICAgICAgICAgICAgICBtdGtfZGlzcF9vdmwubyBcCj4gPiAr ICAgICAgICAgICAgICAgICBtdGtfZGlzcF9vdmxfYWRhcHRvci5vIFwKPiA+ICAgICAgICAgICAg ICAgICAgIG10a19kaXNwX3JkbWEubyBcCj4gPiAgICAgICAgICAgICAgICAgICBtdGtfZHJtX2Ny dGMubyBcCj4gPiAgICAgICAgICAgICAgICAgICBtdGtfZHJtX2RkcF9jb21wLm8gXAo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9kcnYuaAo+ID4gYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfZHJ2LmgKPiA+IGluZGV4IDIyNGE3MTBi YjUzNy4uY2Q5ODI3NDAyNjI2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kaXNwX2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2Rpc3BfZHJ2LmgKPiA+IEBAIC0xMTIsNiArMTEyLDIyIEBAIHZvaWQgbXRrX3JkbWFfZW5hYmxl X3ZibGFuayhzdHJ1Y3QgZGV2aWNlCj4gPiAqZGV2LAo+ID4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKnZibGFua19jYl9kYXRhKTsKPiA+ICB2b2lkIG10a19yZG1hX2Rpc2FibGVf dmJsYW5rKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPiAKPiA+ICtpbnQgbXRrX292bF9hZGFwdG9y X2Nsa19lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICt2b2lkIG10a19vdmxfYWRhcHRv cl9jbGtfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gK3ZvaWQgbXRrX292bF9hZGFw dG9yX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB3LAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJl c2gsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJwYywgc3Ry dWN0IGNtZHFfcGt0Cj4gPiAqY21kcV9wa3QpOwo+ID4gK3ZvaWQgbXRrX292bF9hZGFwdG9yX2xh eWVyX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludAo+ID4gaWR4LAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg KnN0YXRlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbWRx X3BrdCAqY21kcV9wa3QpOwo+ID4gK3ZvaWQgbXRrX292bF9hZGFwdG9yX2VuYWJsZV92Ymxhbmso c3RydWN0IGRldmljZSAqZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICgqdmJsYW5rX2NiKSh2b2lkICopLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICp2YmxhbmtfY2JfZGF0YSk7Cj4gPiArdm9pZCBtdGtfb3ZsX2FkYXB0 b3JfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICt2b2lkIG10a19vdmxf YWRhcHRvcl9zdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gK3ZvaWQgbXRrX292bF9hZGFw dG9yX3N0b3Aoc3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICt1bnNpZ25lZCBpbnQgbXRrX292bF9h ZGFwdG9yX2xheWVyX25yKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPiArCj4gPiAgaW50IG10a19t ZHBfcmRtYV9jbGtfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPiAgdm9pZCBtdGtfbWRw X3JkbWFfY2xrX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICB2b2lkIG10a19tZHBf cmRtYV9zdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbWRxX3BrdAo+ID4gKmNtZHFf cGt0KTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bf b3ZsX2FkYXB0b3IuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3Zs X2FkYXB0b3IuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uMTQ4MzIyNTk3ZmE4Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IuYwo+ID4gQEAgLTAsMCArMSw0MzYgQEAK PiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gPiArLyoKPiA+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgo+ID4gKyAqLwo+ID4gKwo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25l bnQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gPiArI2luY2x1ZGUgPGxp bnV4L29mX2FkZHJlc3MuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv cmVzZXQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc29jL21lZGlhdGVrL210ay1tbXN5cy5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9zb2MvbWVkaWF0ZWsvbXRrLWNtZHEuaD4KPiA+ICsKPiA+ICsj aW5jbHVkZSAibXRrX2Rpc3BfZHJ2LmgiCj4gPiArI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgo+ ID4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gPiArI2luY2x1ZGUgIm10a19kcm1f ZHJ2LmgiCj4gPiArI2luY2x1ZGUgIm10a19ldGhkci5oIgo+ID4gKwo+ID4gKyNkZWZpbmUgTVRL X09WTF9BREFQVE9SX1JETUFfTUFYX1dJRFRIIDE5MjAKPiA+ICsjZGVmaW5lIE1US19PVkxfQURB UFRPUl9MQVlFUl9OVU0gNAo+ID4gKwo+ID4gK2VudW0gbXRrX292bF9hZGFwdG9yX2NvbXBfdHlw ZSB7Cj4gPiArICAgICAgIE9WTF9BREFQVE9SX1RZUEVfUkRNQSA9IDAsCj4gPiArICAgICAgIE9W TF9BREFQVE9SX1RZUEVfTUVSR0UsCj4gPiArICAgICAgIE9WTF9BREFQVE9SX1RZUEVfRVRIRFIs Cj4gPiArICAgICAgIE9WTF9BREFQVE9SX1RZUEVfTlVNLAo+ID4gK307Cj4gPiArCj4gPiArZW51 bSBtdGtfb3ZsX2FkYXB0b3JfY29tcF9pZCB7Cj4gPiArICAgICAgIE9WTF9BREFQVE9SX01EUF9S RE1BMCwKPiA+ICsgICAgICAgT1ZMX0FEQVBUT1JfTURQX1JETUExLAo+ID4gKyAgICAgICBPVkxf QURBUFRPUl9NRFBfUkRNQTIsCj4gPiArICAgICAgIE9WTF9BREFQVE9SX01EUF9SRE1BMywKPiA+ ICsgICAgICAgT1ZMX0FEQVBUT1JfTURQX1JETUE0LAo+ID4gKyAgICAgICBPVkxfQURBUFRPUl9N RFBfUkRNQTUsCj4gPiArICAgICAgIE9WTF9BREFQVE9SX01EUF9SRE1BNiwKPiA+ICsgICAgICAg T1ZMX0FEQVBUT1JfTURQX1JETUE3LAo+ID4gKyAgICAgICBPVkxfQURBUFRPUl9NRVJHRTAsCj4g PiArICAgICAgIE9WTF9BREFQVE9SX01FUkdFMSwKPiA+ICsgICAgICAgT1ZMX0FEQVBUT1JfTUVS R0UyLAo+ID4gKyAgICAgICBPVkxfQURBUFRPUl9NRVJHRTMsCj4gPiArICAgICAgIE9WTF9BREFQ VE9SX0VUSERSMCwKPiA+ICsgICAgICAgT1ZMX0FEQVBUT1JfSURfTUFYCj4gPiArfTsKPiA+ICsK PiA+ICtzdHJ1Y3Qgb3ZsX2FkYXB0b3JfY29tcF9tYXRjaCB7Cj4gPiArICAgICAgIGVudW0gbXRr X292bF9hZGFwdG9yX2NvbXBfdHlwZSB0eXBlOwo+ID4gKyAgICAgICBpbnQgYWxpYXNfaWQ7Cj4g PiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3Igewo+ID4gKyAgICAg ICBzdHJ1Y3QgZGV2aWNlICpvdmxfYWRhcHRvcl9jb21wW09WTF9BREFQVE9SX0lEX01BWF07Cj4g PiArICAgICAgIHN0cnVjdCBkZXZpY2UgKm1tc3lzX2RldjsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJpdmF0ZV9jb21wX3N0ZW1bT1ZMX0FEQVBUT1JfVFlQ RV9OVU1dCj4gPiA9IHsKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX1RZUEVfUkRNQV0gICAgICAg ICA9ICJ2ZG8xX3JkbWEiLAo+ID4gKyAgICAgICBbT1ZMX0FEQVBUT1JfVFlQRV9NRVJHRV0gICAg ICAgID0gIm1lcmdlIiwKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX1RZUEVfRVRIRFJdICAgICAg ICA9ICJldGhkciIsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG92bF9h ZGFwdG9yX2NvbXBfbWF0Y2gKPiA+IGNvbXBfbWF0Y2hlc1tPVkxfQURBUFRPUl9JRF9NQVhdID0g ewo+ID4gKyAgICAgICBbT1ZMX0FEQVBUT1JfTURQX1JETUEwXSA9IHsgT1ZMX0FEQVBUT1JfVFlQ RV9SRE1BLCAwIH0sCj4gPiArICAgICAgIFtPVkxfQURBUFRPUl9NRFBfUkRNQTFdID0geyBPVkxf QURBUFRPUl9UWVBFX1JETUEsIDEgfSwKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX01EUF9SRE1B Ml0gPSB7IE9WTF9BREFQVE9SX1RZUEVfUkRNQSwgMiB9LAo+ID4gKyAgICAgICBbT1ZMX0FEQVBU T1JfTURQX1JETUEzXSA9IHsgT1ZMX0FEQVBUT1JfVFlQRV9SRE1BLCAzIH0sCj4gPiArICAgICAg IFtPVkxfQURBUFRPUl9NRFBfUkRNQTRdID0geyBPVkxfQURBUFRPUl9UWVBFX1JETUEsIDQgfSwK PiA+ICsgICAgICAgW09WTF9BREFQVE9SX01EUF9SRE1BNV0gPSB7IE9WTF9BREFQVE9SX1RZUEVf UkRNQSwgNSB9LAo+ID4gKyAgICAgICBbT1ZMX0FEQVBUT1JfTURQX1JETUE2XSA9IHsgT1ZMX0FE QVBUT1JfVFlQRV9SRE1BLCA2IH0sCj4gPiArICAgICAgIFtPVkxfQURBUFRPUl9NRFBfUkRNQTdd ID0geyBPVkxfQURBUFRPUl9UWVBFX1JETUEsIDcgfSwKPiA+ICsgICAgICAgW09WTF9BREFQVE9S X01FUkdFMF0gICAgPSB7IE9WTF9BREFQVE9SX1RZUEVfTUVSR0UsIDEgfSwKPiA+ICsgICAgICAg W09WTF9BREFQVE9SX01FUkdFMV0gICAgPSB7IE9WTF9BREFQVE9SX1RZUEVfTUVSR0UsIDIgfSwK PiA+ICsgICAgICAgW09WTF9BREFQVE9SX01FUkdFMl0gICAgPSB7IE9WTF9BREFQVE9SX1RZUEVf TUVSR0UsIDMgfSwKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX01FUkdFM10gICAgPSB7IE9WTF9B REFQVE9SX1RZUEVfTUVSR0UsIDQgfSwKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX0VUSERSMF0g ICAgPSB7IE9WTF9BREFQVE9SX1RZUEVfRVRIRFIsIDAgfSwKPiA+ICt9Owo+ID4gKwo+ID4gK3Zv aWQgbXRrX292bF9hZGFwdG9yX2xheWVyX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2ln bmVkIGludAo+ID4gaWR4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBjbWRxX3BrdCAqY21kcV9wa3QpCj4gPiArewo+ID4gKyAgICAgICBz dHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IgKm92bF9hZGFwdG9yID0KPiA+IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgKnBl bmRpbmcgPSAmc3RhdGUtPnBlbmRpbmc7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfbWRwX3JkbWFf Y2ZnIHJkbWFfY29uZmlnID0gezB9Owo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpyZG1hX2w7 Cj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKnJkbWFfcjsKPiA+ICsgICAgICAgc3RydWN0IGRl dmljZSAqbWVyZ2U7Cj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmV0aGRyOwo+ID4gKyAgICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICpmbXRfaW5mbyA9Cj4gPiBkcm1fZm9ybWF0 X2luZm8ocGVuZGluZy0+Zm9ybWF0KTsKPiA+ICsgICAgICAgYm9vbCB1c2VfZHVhbF9waXBlID0g ZmFsc2U7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBhbGlnbl93aWR0aDsKPiA+ICsgICAgICAg dW5zaWduZWQgaW50IGxfdyA9IDA7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCByX3cgPSAwOwo+ ID4gKwo+ID4gKyAgICAgICBkZXZfZGJnKGRldiwgIiVzKyBpZHg6JWQsIGVuYWJsZTolZCwgZm10 OjB4JXhcbiIsIF9fZnVuY19fLAo+ID4gaWR4LAo+ID4gKyAgICAgICAgICAgICAgIHBlbmRpbmct PmVuYWJsZSwgcGVuZGluZy0+Zm9ybWF0KTsKPiA+ICsgICAgICAgZGV2X2RiZyhkZXYsICJhZGRy IDB4JWx4LCBmYiB3OiVkLCB7JWQsJWQsJWQsJWR9XG4iLAo+ID4gKyAgICAgICAgICAgICAgIHBl bmRpbmctPmFkZHIsIChwZW5kaW5nLT5waXRjaCAvIGZtdF9pbmZvLT5jcHBbMF0pLAo+ID4gKyAg ICAgICAgICAgICAgIHBlbmRpbmctPngsIHBlbmRpbmctPnksIHBlbmRpbmctPndpZHRoLCBwZW5k aW5nLQo+ID4gPmhlaWdodCk7Cj4gPiArCj4gPiArICAgICAgIHJkbWFfbCA9IG92bF9hZGFwdG9y LQo+ID4gPm92bF9hZGFwdG9yX2NvbXBbT1ZMX0FEQVBUT1JfTURQX1JETUEwICsgMiAqIGlkeF07 Cj4gPiArICAgICAgIHJkbWFfciA9IG92bF9hZGFwdG9yLQo+ID4gPm92bF9hZGFwdG9yX2NvbXBb T1ZMX0FEQVBUT1JfTURQX1JETUEwICsgMiAqIGlkeCArIDFdOwo+ID4gKyAgICAgICBtZXJnZSA9 IG92bF9hZGFwdG9yLT5vdmxfYWRhcHRvcl9jb21wW09WTF9BREFQVE9SX01FUkdFMCArCj4gPiBp ZHhdOwo+ID4gKyAgICAgICBldGhkciA9IG92bF9hZGFwdG9yLT5vdmxfYWRhcHRvcl9jb21wW09W TF9BREFQVE9SX0VUSERSMF07Cj4gPiArCj4gPiArICAgICAgIGlmICghcGVuZGluZy0+ZW5hYmxl KSB7Cj4gPiArICAgICAgICAgICAgICAgbXRrX21lcmdlX3N0b3BfY21kcShtZXJnZSwgY21kcV9w a3QpOwo+ID4gKyAgICAgICAgICAgICAgIG10a19tZHBfcmRtYV9zdG9wKHJkbWFfbCwgY21kcV9w a3QpOwo+ID4gKyAgICAgICAgICAgICAgIG10a19tZHBfcmRtYV9zdG9wKHJkbWFfciwgY21kcV9w a3QpOwo+ID4gKyAgICAgICAgICAgICAgIG10a19ldGhkcl9sYXllcl9jb25maWcoZXRoZHIsIGlk eCwgc3RhdGUsCj4gPiBjbWRxX3BrdCk7Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4g KyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIC8qIEVUSERSIGlzIGluIDFUMlAgZG9tYWluLCB3 aWR0aCBuZWVkcyB0byBiZSAyIHBpeGVscwo+ID4gYWxpZ24gKi8KPiA+ICsgICAgICAgYWxpZ25f d2lkdGggPSBBTElHTl9ET1dOKHBlbmRpbmctPndpZHRoLCAyKTsKPiA+ICsKPiA+ICsgICAgICAg aWYgKGFsaWduX3dpZHRoID4gTVRLX09WTF9BREFQVE9SX1JETUFfTUFYX1dJRFRIKQo+ID4gKyAg ICAgICAgICAgICAgIHVzZV9kdWFsX3BpcGUgPSB0cnVlOwo+ID4gKwo+ID4gKyAgICAgICBpZiAo dXNlX2R1YWxfcGlwZSkgewo+ID4gKyAgICAgICAgICAgICAgIGxfdyA9IChhbGlnbl93aWR0aCAv IDIpICsgKChwZW5kaW5nLT53aWR0aCAvIDIpICUKPiA+IDIpOwo+ID4gKyAgICAgICAgICAgICAg IHJfdyA9IGFsaWduX3dpZHRoIC0gbF93Owo+ID4gKyAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAg ICAgICAgICAgIGxfdyA9IGFsaWduX3dpZHRoOwo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIG10 a19tZXJnZV9hZHZhbmNlX2NvbmZpZyhtZXJnZSwgbF93LCByX3csIHBlbmRpbmctPmhlaWdodCwK PiA+IDAsIDAsIGNtZHFfcGt0KTsKPiA+ICsgICAgICAgbXRrX21tc3lzX2RkcF9jb25maWcob3Zs X2FkYXB0b3ItPm1tc3lzX2RldiwKPiA+IE1NU1lTX0NPTkZJR19NRVJHRV9BU1lOQ19XSURUSCwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LCBhbGlnbl93aWR0aCAvIDIsIGNt ZHFfcGt0KTsKPiA+ICsgICAgICAgbXRrX21tc3lzX2RkcF9jb25maWcob3ZsX2FkYXB0b3ItPm1t c3lzX2RldiwKPiA+IE1NU1lTX0NPTkZJR19NRVJHRV9BU1lOQ19IRUlHSFQsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlkeCwgcGVuZGluZy0+aGVpZ2h0LCBjbWRxX3BrdCk7Cj4g PiArCj4gPiArICAgICAgIHJkbWFfY29uZmlnLndpZHRoID0gbF93Owo+ID4gKyAgICAgICByZG1h X2NvbmZpZy5oZWlnaHQgPSBwZW5kaW5nLT5oZWlnaHQ7Cj4gPiArICAgICAgIHJkbWFfY29uZmln LmFkZHIwID0gcGVuZGluZy0+YWRkcjsKPiA+ICsgICAgICAgcmRtYV9jb25maWcucGl0Y2ggPSBw ZW5kaW5nLT5waXRjaDsKPiA+ICsgICAgICAgcmRtYV9jb25maWcuZm10ID0gcGVuZGluZy0+Zm9y bWF0Owo+ID4gKyAgICAgICByZG1hX2NvbmZpZy5jb2xvcl9lbmNvZGluZyA9IHBlbmRpbmctPmNv bG9yX2VuY29kaW5nOwo+ID4gKyAgICAgICBtdGtfbWRwX3JkbWFfY29uZmlnKHJkbWFfbCwgJnJk bWFfY29uZmlnLCBjbWRxX3BrdCk7Cj4gPiArCj4gPiArICAgICAgIGlmICh1c2VfZHVhbF9waXBl KSB7Cj4gPiArICAgICAgICAgICAgICAgcmRtYV9jb25maWcueF9sZWZ0ID0gbF93Owo+ID4gKyAg ICAgICAgICAgICAgIHJkbWFfY29uZmlnLndpZHRoID0gcl93Owo+ID4gKyAgICAgICAgICAgICAg IG10a19tZHBfcmRtYV9jb25maWcocmRtYV9yLCAmcmRtYV9jb25maWcsCj4gPiBjbWRxX3BrdCk7 Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgbXRrX21lcmdlX3N0YXJ0X2NtZHEobWVy Z2UsIGNtZHFfcGt0KTsKPiA+ICsKPiA+ICsgICAgICAgbXRrX21kcF9yZG1hX3N0YXJ0KHJkbWFf bCwgY21kcV9wa3QpOwo+ID4gKyAgICAgICBpZiAodXNlX2R1YWxfcGlwZSkKPiA+ICsgICAgICAg ICAgICAgICBtdGtfbWRwX3JkbWFfc3RhcnQocmRtYV9yLCBjbWRxX3BrdCk7Cj4gPiArICAgICAg IGVsc2UKPiA+ICsgICAgICAgICAgICAgICBtdGtfbWRwX3JkbWFfc3RvcChyZG1hX3IsIGNtZHFf cGt0KTsKPiA+ICsKPiA+ICsgICAgICAgbXRrX2V0aGRyX2xheWVyX2NvbmZpZyhldGhkciwgaWR4 LCBzdGF0ZSwgY21kcV9wa3QpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIG10a19vdmxfYWRhcHRv cl9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdywKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNo LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBicGMsIHN0cnVj dCBjbWRxX3BrdAo+ID4gKmNtZHFfcGt0KQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19k aXNwX292bF9hZGFwdG9yICpvdmxfYWRhcHRvciA9Cj4gPiBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK PiA+ICsKPiA+ICsgICAgICAgbXRrX2V0aGRyX2NvbmZpZyhvdmxfYWRhcHRvci0KPiA+ID5vdmxf YWRhcHRvcl9jb21wW09WTF9BREFQVE9SX0VUSERSMF0sIHcsIGgsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgdnJlZnJlc2gsIGJwYywgY21kcV9wa3QpOwo+ID4gK30KPiA+ICsKPiA+ICt2 b2lkIG10a19vdmxfYWRhcHRvcl9zdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4g KyAgICAgICBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IgKm92bF9hZGFwdG9yID0KPiA+IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtfZXRoZHJfc3RhcnQob3Zs X2FkYXB0b3ItCj4gPiA+b3ZsX2FkYXB0b3JfY29tcFtPVkxfQURBUFRPUl9FVEhEUjBdKTsKPiA+ ICt9Cj4gPiArCj4gPiArdm9pZCBtdGtfb3ZsX2FkYXB0b3Jfc3RvcChzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IgKm92bF9h ZGFwdG9yID0KPiA+IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtf ZXRoZHJfc3RvcChvdmxfYWRhcHRvci0KPiA+ID5vdmxfYWRhcHRvcl9jb21wW09WTF9BREFQVE9S X0VUSERSMF0pOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgbXRrX292bF9hZGFwdG9yX2Nsa19lbmFi bGUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19kaXNw X292bF9hZGFwdG9yICpvdmxfYWRhcHRvciA9Cj4gPiBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ ICsgICAgICAgc3RydWN0IGRldmljZSAqY29tcDsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsg ICAgICAgaW50IGk7Cj4gPiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBPVkxfQURBUFRP Ul9NRVJHRTA7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGNvbXAgPSBvdmxfYWRhcHRvci0+ b3ZsX2FkYXB0b3JfY29tcFtpXTsKPiA+ICsgICAgICAgICAgICAgICByZXQgPSBwbV9ydW50aW1l X2dldF9zeW5jKGNvbXApOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpIHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciBk b21haW4KPiA+ICVkLCBlcnIgJWRcbiIsIGksIHJldCk7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIHB3cl9lcnI7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICB9Cj4g PiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBPVkxfQURBUFRPUl9JRF9NQVg7IGkrKykg ewo+ID4gKyAgICAgICAgICAgICAgIGNvbXAgPSBvdmxfYWRhcHRvci0+b3ZsX2FkYXB0b3JfY29t cFtpXTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBpZiAoaSA8IE9WTF9BREFQVE9SX01FUkdF MCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG10a19tZHBfcmRtYV9jbGtfZW5h YmxlKGNvbXApOwo+ID4gKyAgICAgICAgICAgICAgIGVsc2UgaWYgKGkgPCBPVkxfQURBUFRPUl9F VEhEUjApCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBtdGtfbWVyZ2VfY2xrX2Vu YWJsZShjb21wKTsKPiA+ICsgICAgICAgICAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICByZXQgPSBtdGtfZXRoZHJfY2xrX2VuYWJsZShjb21wKTsKPiA+ICsgICAgICAgICAg ICAgICBpZiAocmV0KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBlbmFibGUgY2xvY2sgJWQsCj4gPiBlcnIgJWRcbiIsIGksIHJldCk7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsa19lcnI7Cj4gPiArICAgICAgICAgICAgICAg fQo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiAr Y2xrX2VycjoKPiA+ICsgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7Cj4gPiArICAgICAgICAgICAg ICAgY29tcCA9IG92bF9hZGFwdG9yLT5vdmxfYWRhcHRvcl9jb21wW2ldOwo+ID4gKyAgICAgICAg ICAgICAgIGlmIChpIDwgT1ZMX0FEQVBUT1JfTUVSR0UwKQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgbXRrX21kcF9yZG1hX2Nsa19kaXNhYmxlKGNvbXApOwo+ID4gKyAgICAgICAgICAgICAg IGVsc2UgaWYgKGkgPCBPVkxfQURBUFRPUl9FVEhEUjApCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBtdGtfbWVyZ2VfY2xrX2Rpc2FibGUoY29tcCk7Cj4gPiArICAgICAgICAgICAgICAgZWxz ZQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRrX2V0aGRyX2Nsa19kaXNhYmxlKGNvbXAp Owo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIGkgPSBPVkxfQURBUFRPUl9NRFBfUkRNQTc7Cj4g PiArCj4gPiArcHdyX2VycjoKPiA+ICsgICAgICAgd2hpbGUgKGktLSA+PSAwKQo+ID4gKyAgICAg ICAgICAgICAgIHBtX3J1bnRpbWVfcHV0KG92bF9hZGFwdG9yLT5vdmxfYWRhcHRvcl9jb21wW2ld KTsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBt dGtfb3ZsX2FkYXB0b3JfY2xrX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ ICsgICAgICAgc3RydWN0IG10a19kaXNwX292bF9hZGFwdG9yICpvdmxfYWRhcHRvciA9Cj4gPiBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsgICAgICAgc3RydWN0IGRldmljZSAqY29tcDsKPiA+ ICsgICAgICAgaW50IGk7Cj4gPiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBPVkxfQURB UFRPUl9JRF9NQVg7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGNvbXAgPSBvdmxfYWRhcHRv ci0+b3ZsX2FkYXB0b3JfY29tcFtpXTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBpZiAoaSA8 IE9WTF9BREFQVE9SX01FUkdFMCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRrX21k cF9yZG1hX2Nsa19kaXNhYmxlKGNvbXApOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcG1f cnVudGltZV9wdXQoY29tcCk7Cj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgT1ZM X0FEQVBUT1JfRVRIRFIwKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtdGtfbWVyZ2Vf Y2xrX2Rpc2FibGUoY29tcCk7Cj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIG10a19ldGhkcl9jbGtfZGlzYWJsZShjb21wKTsKPiA+ICsgICAg ICAgICAgICAgICB9Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArdW5zaWduZWQgaW50 IG10a19vdmxfYWRhcHRvcl9sYXllcl9ucihzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4g KyAgICAgICByZXR1cm4gTVRLX09WTF9BREFQVE9SX0xBWUVSX05VTTsKPiA+ICt9Cj4gPiArCj4g PiArdm9pZCBtdGtfb3ZsX2FkYXB0b3JfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZGV2aWNlICpkZXYs IHZvaWQKPiA+ICgqdmJsYW5rX2NiKSh2b2lkICopLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICp2YmxhbmtfY2JfZGF0YSkKPiA+ICt7Cj4gPiArICAgICAgIHN0 cnVjdCBtdGtfZGlzcF9vdmxfYWRhcHRvciAqb3ZsX2FkYXB0b3IgPQo+ID4gZGV2X2dldF9kcnZk YXRhKGRldik7Cj4gPiArCj4gPiArICAgICAgIG10a19ldGhkcl9lbmFibGVfdmJsYW5rKG92bF9h ZGFwdG9yLQo+ID4gPm92bF9hZGFwdG9yX2NvbXBbT1ZMX0FEQVBUT1JfRVRIRFIwXSwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmJsYW5rX2NiLCB2YmxhbmtfY2JfZGF0YSk7 Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbXRrX292bF9hZGFwdG9yX2Rpc2FibGVfdmJsYW5rKHN0 cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfZGlzcF9vdmxf YWRhcHRvciAqb3ZsX2FkYXB0b3IgPQo+ID4gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCj4g PiArICAgICAgIG10a19ldGhkcl9kaXNhYmxlX3ZibGFuayhvdmxfYWRhcHRvci0KPiA+ID5vdmxf YWRhcHRvcl9jb21wW09WTF9BREFQVE9SX0VUSERSMF0pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IG92bF9hZGFwdG9yX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 Cj4gPiBkZXZpY2Vfbm9kZSAqbm9kZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBtdGtfb3ZsX2FkYXB0b3JfY29tcF90eXBlCj4gPiB0eXBlKQo+ID4gK3sKPiA+ ICsgICAgICAgaW50IGFsaWFzX2lkID0gb2ZfYWxpYXNfZ2V0X2lkKG5vZGUsCj4gPiBwcml2YXRl X2NvbXBfc3RlbVt0eXBlXSk7Cj4gPiArICAgICAgIGludCBpOwo+ID4gKwo+ID4gKyAgICAgICBm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21wX21hdGNoZXMpOyBpKyspCj4gPiArICAgICAg ICAgICAgICAgaWYgKGNvbXBfbWF0Y2hlc1tpXS50eXBlID09IHR5cGUgJiYKPiA+ICsgICAgICAg ICAgICAgICAgICAgY29tcF9tYXRjaGVzW2ldLmFsaWFzX2lkID09IGFsaWFzX2lkKQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Cj4gPiArCj4gPiArICAgICAgIGRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIGdldCBpZC4gdHlwZTogJWQsIGFsaWFzOiAlZFxuIiwKPiA+IHR5cGUs IGFsaWFzX2lkKTsKPiA+ICsgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19vdmxfYWRhcHRvcl9jb21wX2R0 X2lkc1tdID0gewo+ID4gKyAgICAgICB7Cj4gPiArICAgICAgICAgICAgICAgLmNvbXBhdGlibGUg PSAibWVkaWF0ZWssbXQ4MTk1LXZkbzEtcmRtYSIsCj4gPiArICAgICAgICAgICAgICAgLmRhdGEg PSAodm9pZCAqKU9WTF9BREFQVE9SX1RZUEVfUkRNQSwKPiA+ICsgICAgICAgfSwgewo+ID4gKyAg ICAgICAgICAgICAgIC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE5NS1kaXNwLW1lcmdlIiwK PiA+ICsgICAgICAgICAgICAgICAuZGF0YSA9ICh2b2lkICopT1ZMX0FEQVBUT1JfVFlQRV9NRVJH RSwKPiA+ICsgICAgICAgfSwgewo+ID4gKyAgICAgICAgICAgICAgIC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLG10ODE5NS1kaXNwLWV0aGRyIiwKPiA+ICsgICAgICAgICAgICAgICAuZGF0YSA9ICh2 b2lkICopT1ZMX0FEQVBUT1JfVFlQRV9FVEhEUiwKPiA+ICsgICAgICAgfSwKPiA+ICsgICAgICAg e30sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGNvbXBhcmVfb2Yoc3RydWN0IGRldmlj ZSAqZGV2LCB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsgICAgICAgcmV0dXJuIGRldi0+b2Zfbm9k ZSA9PSBkYXRhOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG92bF9hZGFwdG9yX2NvbXBf aW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdAo+ID4gY29tcG9uZW50X21hdGNoICoqbWF0 Y2gpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IgKnByaXYg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpu b2RlLCAqcGFyZW50Owo+ID4gKyAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb21wX3Bk ZXY7Cj4gPiArCj4gPiArICAgICAgIHBhcmVudCA9IGRldi0+cGFyZW50LT5wYXJlbnQtPm9mX25v ZGUtPnBhcmVudDsKPiA+ICsKPiA+ICsgICAgICAgZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJl bnQsIG5vZGUpIHsKPiA+ICsgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk ICpvZl9pZDsKPiA+ICsgICAgICAgICAgICAgICBlbnVtIG10a19vdmxfYWRhcHRvcl9jb21wX3R5 cGUgdHlwZTsKPiA+ICsgICAgICAgICAgICAgICBpbnQgaWQ7Cj4gPiArCj4gPiArICAgICAgICAg ICAgICAgb2ZfaWQgPSBvZl9tYXRjaF9ub2RlKG10a19vdmxfYWRhcHRvcl9jb21wX2R0X2lkcywK PiA+IG5vZGUpOwo+ID4gKyAgICAgICAgICAgICAgIGlmICghb2ZfaWQpCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBpZiAoIW9m X2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50Cj4gPiAlcE9GXG4iLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlKTsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsg ICAgICAgICAgICAgICB0eXBlID0gKGVudW0gbXRrX292bF9hZGFwdG9yX2NvbXBfdHlwZSlvZl9p ZC0+ZGF0YTsKPiA+ICsgICAgICAgICAgICAgICBpZCA9IG92bF9hZGFwdG9yX2NvbXBfZ2V0X2lk KGRldiwgbm9kZSwgdHlwZSk7Cj4gPiArICAgICAgICAgICAgICAgaWYgKGlkIDwgMCkgewo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiU2tpcHBpbmcgdW5rbm93biBj b21wb25lbnQKPiA+ICVwT0ZcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBub2RlKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAg ICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBjb21wX3BkZXYgPSBvZl9maW5k X2RldmljZV9ieV9ub2RlKG5vZGUpOwo+ID4gKyAgICAgICAgICAgICAgIGlmICghY29tcF9wZGV2 KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUFJPQkVfREVGRVI7Cj4gPiAr Cj4gPiArICAgICAgICAgICAgICAgcHJpdi0+b3ZsX2FkYXB0b3JfY29tcFtpZF0gPSAmY29tcF9w ZGV2LT5kZXY7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgZHJtX29mX2NvbXBvbmVudF9tYXRj aF9hZGQoZGV2LCBtYXRjaCwgY29tcGFyZV9vZiwKPiA+IG5vZGUpOwo+ID4gKyAgICAgICAgICAg ICAgIGRldl9kYmcoZGV2LCAiQWRkaW5nIGNvbXBvbmVudCBtYXRjaCBmb3IgJXBPRlxuIiwKPiA+ IG5vZGUpOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IG10a19kaXNwX292bF9hZGFwdG9yX2NvbXBfYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gPiBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsg ICAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10a19kaXNwX292 bF9hZGFwdG9yX2NvbXBfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+IHN0cnVjdCBkZXZp Y2UgKm1hc3RlciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKmRhdGEpCj4gPiArewo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfY29tcF9vcHMgPQo+ID4gewo+ ID4gKyAgICAgICAuYmluZCAgID0gbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfY29tcF9iaW5kLAo+ID4g KyAgICAgICAudW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfY29tcF91bmJpbmQsCj4gPiAr fTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IG10a19kaXNwX292bF9hZGFwdG9yX21hc3Rlcl9iaW5k KHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfZGlzcF9v dmxfYWRhcHRvciAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4gKyAgICAg ICBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBwcml2LT5tbXN5c19kZXYpOwo+ID4gKyAgICAgICBy ZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX2FkYXB0 b3JfbWFzdGVyX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJfb3BzCj4gPiBtdGtfZGlz cF9vdmxfYWRhcHRvcl9tYXN0ZXJfb3BzID0gewo+ID4gKyAgICAgICAuYmluZCAgICAgICAgICAg PSBtdGtfZGlzcF9vdmxfYWRhcHRvcl9tYXN0ZXJfYmluZCwKPiA+ICsgICAgICAgLnVuYmluZCAg ICAgICAgID0gbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfbWFzdGVyX3VuYmluZCwKPiA+ICt9Owo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZQo+ID4gKnBkZXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2Rpc3Bf b3ZsX2FkYXB0b3IgKnByaXY7Cj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7Cj4gPiArICAgICAgIHN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsK PiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgICAgcHJpdiA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwo+ID4gKyAgICAgICBpZiAoIXByaXYp Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArICAgICAgIHBs YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBv dmxfYWRhcHRvcl9jb21wX2luaXQoZGV2LCAmbWF0Y2gpOwo+ID4gKyAgICAgICBpZiAocmV0IDwg MCkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICAgICBwcml2 LT5tbXN5c19kZXYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKPiA+ICsKPiA+ICsgICAgICAg Y29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsCj4gPiAmbXRrX2Rpc3Bfb3ZsX2Fk YXB0b3JfbWFzdGVyX29wcywgbWF0Y2gpOwo+ID4gKwo+ID4gKyAgICAgICBwbV9ydW50aW1lX2Vu YWJsZShkZXYpOwo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10 a19kaXNwX292bF9hZGFwdG9yX2NvbXBfb3BzKTsKPiA+ICsgICAgICAgaWYgKHJldCAhPSAwKSB7 Cj4gPiArICAgICAgICAgICAgICAgcG1fcnVudGltZV9kaXNhYmxlKGRldik7Cj4gPiArICAgICAg ICAgICAgICAgZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDogJWRcbiIsIHJl dCk7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBtdGtfZGlzcF9vdmxfYWRhcHRvcl9yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZQo+ID4gKnBkZXYpCj4gPiArewo+IAo+IGNvbXBvbmVudF9tYXN0ZXJfZGVs KCkuIEV4Y2VwdCB0aGlzCj4gCj4gUmV2aWV3ZWQtYnk6IENodW4tS3VhbmcgSHUgPGNodW5rdWFu Zy5odUBrZXJuZWwub3JnPgo+IAoKT0suCj4gCj4gPiArICAgICAgIGNvbXBvbmVudF9kZWwoJnBk ZXYtPmRldiwgJm10a19kaXNwX292bF9hZGFwdG9yX2NvbXBfb3BzKTsKPiA+ICsgICAgICAgcG1f cnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfYWRhcHRvcl9k cml2ZXIgPSB7Cj4gPiArICAgICAgIC5wcm9iZSAgICAgICAgICA9IG10a19kaXNwX292bF9hZGFw dG9yX3Byb2JlLAo+ID4gKyAgICAgICAucmVtb3ZlICAgICAgICAgPSBtdGtfZGlzcF9vdmxfYWRh cHRvcl9yZW1vdmUsCj4gPiArICAgICAgIC5kcml2ZXIgICAgICAgICA9IHsKPiA+ICsgICAgICAg ICAgICAgICAubmFtZSAgID0gIm1lZGlhdGVrLWRpc3Atb3ZsLWFkYXB0b3IiLAo+ID4gKyAgICAg ICAgICAgICAgIC5vd25lciAgPSBUSElTX01PRFVMRSwKPiA+ICsgICAgICAgfSwKPiA+ICt9Owo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCj4g PiBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCj4gPiBpbmRleCBhNThj ZWJkMDFkMzUuLjFhZDlmN2VkZmNjNyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuaAo+ID4gQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIKPiA+IG10a19kaXNwX2Njb3JyX2RyaXZlcjsKPiA+ICBleHRlcm4gc3RydWN0IHBs YXRmb3JtX2RyaXZlciBtdGtfZGlzcF9jb2xvcl9kcml2ZXI7Cj4gPiAgZXh0ZXJuIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfZ2FtbWFfZHJpdmVyOwo+ID4gIGV4dGVybiBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX21lcmdlX2RyaXZlcjsKPiA+ICtleHRlcm4gc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfYWRhcHRvcl9kcml2ZXI7Cj4gPiAgZXh0ZXJu IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsKPiA+ICBleHRlcm4g c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9yZG1hX2RyaXZlcjsKPiA+ICBleHRlcm4g c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHBpX2RyaXZlcjsKPiA+IC0tCj4gPiAyLjE4LjAK PiA+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxp bnV4LW1lZGlhdGVrIG1haWxpbmcgbGlzdApMaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbWVk aWF0ZWsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1DB2AC433F5 for ; Wed, 17 Nov 2021 04:12:37 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D9DC061B5F for ; Wed, 17 Nov 2021 04:12:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D9DC061B5F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:CC:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MhdN4jjNNwEye0SpSSyQtXP2C8Zed/o5C9vYLYKnGFo=; b=W5h1QYd5n0JgBn MGUEQ6OAHoYaK1SKaUb3CbRxTT73D5HLFJtiNihXj1IXdWXHDGw7cSxx7rdULwYauCIQTPpd3h/00 8QK2Bg+tV90a5QR6vD5pwRp0toW5AK7g+AMVcvnqO1Z8mz9VuYCMF8xVvL4kc2NBaWJuYxEFeZTbT nTTEeYOFX0Y3SE/s8SryKB6n2G34ksDV9rjOmY9k32HvLotDaN5H4Rik3bxOLU1qlfCZA8QjJlbgb 29V+UUIFBgsxoiN7fNM+1sx7vjuoB41E+3MgXcgNeN+b+5KJr+Yz/3Sr7kDuG5P2ihtWIQB3CjeYI GLubZ5YtqyuQPiCaAwIg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnCHt-003IN2-Qe; Wed, 17 Nov 2021 04:11:09 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnCHo-003ILw-46; Wed, 17 Nov 2021 04:11:06 +0000 X-UUID: 539349402a3e4c1e98cc62398e2f4b88-20211116 X-UUID: 539349402a3e4c1e98cc62398e2f4b88-20211116 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1907914470; Tue, 16 Nov 2021 21:11:00 -0700 Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by MTKMBS62N2.mediatek.inc (172.29.193.42) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 16 Nov 2021 20:04:52 -0800 Received: from mtkcas10.mediatek.inc (172.21.101.39) by mtkmbs10n1.mediatek.inc (172.21.101.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.15; Wed, 17 Nov 2021 12:04:51 +0800 Received: from mtksdccf07 (172.21.84.99) by mtkcas10.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 17 Nov 2021 12:04:50 +0800 Message-ID: Subject: Re: [PATCH v7 18/20] drm/mediatek: add ovl_adaptor support for MT8195 From: Nancy.Lin To: Chun-Kuang Hu CC: CK Hu , Philipp Zabel , "David Airlie" , Daniel Vetter , Rob Herring , Matthias Brugger , "jason-jh . lin" , Yongqiang Niu , DRI Development , "moderated list:ARM/Mediatek SoC support" , DTML , linux-kernel , Linux ARM , , srv_heupstream Date: Wed, 17 Nov 2021 12:04:50 +0800 In-Reply-To: References: <20211029075203.17093-1-nancy.lin@mediatek.com> <20211029075203.17093-19-nancy.lin@mediatek.com> X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211116_201104_187843_7052BB34 X-CRM114-Status: GOOD ( 30.47 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQ2h1bi1LdWFuZywKClRoYW5rcyBmb3IgdGhlIHJldmlldy4KCk9uIEZyaSwgMjAyMS0xMS0w NSBhdCAwODoyOSArMDgwMCwgQ2h1bi1LdWFuZyBIdSB3cm90ZToKPiBIaSwgTmFuY3k6Cj4gCj4g TmFuY3kuTGluIDxuYW5jeS5saW5AbWVkaWF0ZWsuY29tPiDmlrwgMjAyMeW5tDEw5pyIMjnml6Ug 6YCx5LqUIOS4i+WNiDM6NTLlr6vpgZPvvJoKPiA+IAo+ID4gQWRkIG92bF9hZGFwdG9yIGRyaXZl ciBmb3IgTVQ4MTk1Lgo+ID4gT3ZsX2FkYXB0b3IgaXMgYW4gZW5jYXBzdWxhdGVkIG1vZHVsZSBh bmQgZGVzaWduZWQgZm9yIHNpbXBsaWZpZWQKPiA+IERSTSBjb250cm9sIGZsb3cuIFRoaXMgbW9k dWxlIGlzIGNvbXBvc2VkIG9mIDggUkRNQXMsIDQgTUVSR0VzIGFuZAo+ID4gYW4gRVRIRFIuIFR3 byBSRE1BcyBtZXJnZSBpbnRvIG9uZSBsYXllciwgc28gdGhpcyBtb2R1bGUgc3VwcG9ydCA0Cj4g PiBsYXllcnMuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE5hbmN5LkxpbiA8bmFuY3kubGluQG1l ZGlhdGVrLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmls ZSAgICAgICAgICAgICB8ICAgMSArCj4gPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k aXNwX2Rydi5oICAgICAgIHwgIDE2ICsKPiA+ICAuLi4vZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlz cF9vdmxfYWRhcHRvci5jICAgfCA0MzYKPiA+ICsrKysrKysrKysrKysrKysrKwo+ID4gIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgICB8ICAgMSArCj4gPiAgNCBm aWxlcyBjaGFuZ2VkLCA0NTQgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IuYwo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCj4gPiBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQo+ID4gaW5kZXggZmIxNThhMWU3ZjA2Li4zYWJk MjdkN2M5MWQgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZp bGUKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQo+ID4gQEAgLTYs NiArNiw3IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX2FhbC5vIFwKPiA+ICAgICAgICAg ICAgICAgICAgIG10a19kaXNwX2dhbW1hLm8gXAo+ID4gICAgICAgICAgICAgICAgICAgbXRrX2Rp c3BfbWVyZ2UubyBcCj4gPiAgICAgICAgICAgICAgICAgICBtdGtfZGlzcF9vdmwubyBcCj4gPiAr ICAgICAgICAgICAgICAgICBtdGtfZGlzcF9vdmxfYWRhcHRvci5vIFwKPiA+ICAgICAgICAgICAg ICAgICAgIG10a19kaXNwX3JkbWEubyBcCj4gPiAgICAgICAgICAgICAgICAgICBtdGtfZHJtX2Ny dGMubyBcCj4gPiAgICAgICAgICAgICAgICAgICBtdGtfZHJtX2RkcF9jb21wLm8gXAo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9kcnYuaAo+ID4gYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfZHJ2LmgKPiA+IGluZGV4IDIyNGE3MTBi YjUzNy4uY2Q5ODI3NDAyNjI2IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kaXNwX2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2Rpc3BfZHJ2LmgKPiA+IEBAIC0xMTIsNiArMTEyLDIyIEBAIHZvaWQgbXRrX3JkbWFfZW5hYmxl X3ZibGFuayhzdHJ1Y3QgZGV2aWNlCj4gPiAqZGV2LAo+ID4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKnZibGFua19jYl9kYXRhKTsKPiA+ICB2b2lkIG10a19yZG1hX2Rpc2FibGVf dmJsYW5rKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPiAKPiA+ICtpbnQgbXRrX292bF9hZGFwdG9y X2Nsa19lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICt2b2lkIG10a19vdmxfYWRhcHRv cl9jbGtfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gK3ZvaWQgbXRrX292bF9hZGFw dG9yX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB3LAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJl c2gsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJwYywgc3Ry dWN0IGNtZHFfcGt0Cj4gPiAqY21kcV9wa3QpOwo+ID4gK3ZvaWQgbXRrX292bF9hZGFwdG9yX2xh eWVyX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludAo+ID4gaWR4LAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg KnN0YXRlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbWRx X3BrdCAqY21kcV9wa3QpOwo+ID4gK3ZvaWQgbXRrX292bF9hZGFwdG9yX2VuYWJsZV92Ymxhbmso c3RydWN0IGRldmljZSAqZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICgqdmJsYW5rX2NiKSh2b2lkICopLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICp2YmxhbmtfY2JfZGF0YSk7Cj4gPiArdm9pZCBtdGtfb3ZsX2FkYXB0 b3JfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICt2b2lkIG10a19vdmxf YWRhcHRvcl9zdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gK3ZvaWQgbXRrX292bF9hZGFw dG9yX3N0b3Aoc3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICt1bnNpZ25lZCBpbnQgbXRrX292bF9h ZGFwdG9yX2xheWVyX25yKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPiArCj4gPiAgaW50IG10a19t ZHBfcmRtYV9jbGtfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPiAgdm9pZCBtdGtfbWRw X3JkbWFfY2xrX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICB2b2lkIG10a19tZHBf cmRtYV9zdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbWRxX3BrdAo+ID4gKmNtZHFf cGt0KTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bf b3ZsX2FkYXB0b3IuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3Zs X2FkYXB0b3IuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uMTQ4MzIyNTk3ZmE4Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IuYwo+ID4gQEAgLTAsMCArMSw0MzYgQEAK PiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gPiArLyoKPiA+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgo+ID4gKyAqLwo+ID4gKwo+ID4g KyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25l bnQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gPiArI2luY2x1ZGUgPGxp bnV4L29mX2FkZHJlc3MuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv cmVzZXQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvc29jL21lZGlhdGVrL210ay1tbXN5cy5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9zb2MvbWVkaWF0ZWsvbXRrLWNtZHEuaD4KPiA+ICsKPiA+ICsj aW5jbHVkZSAibXRrX2Rpc3BfZHJ2LmgiCj4gPiArI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgo+ ID4gKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gPiArI2luY2x1ZGUgIm10a19kcm1f ZHJ2LmgiCj4gPiArI2luY2x1ZGUgIm10a19ldGhkci5oIgo+ID4gKwo+ID4gKyNkZWZpbmUgTVRL X09WTF9BREFQVE9SX1JETUFfTUFYX1dJRFRIIDE5MjAKPiA+ICsjZGVmaW5lIE1US19PVkxfQURB UFRPUl9MQVlFUl9OVU0gNAo+ID4gKwo+ID4gK2VudW0gbXRrX292bF9hZGFwdG9yX2NvbXBfdHlw ZSB7Cj4gPiArICAgICAgIE9WTF9BREFQVE9SX1RZUEVfUkRNQSA9IDAsCj4gPiArICAgICAgIE9W TF9BREFQVE9SX1RZUEVfTUVSR0UsCj4gPiArICAgICAgIE9WTF9BREFQVE9SX1RZUEVfRVRIRFIs Cj4gPiArICAgICAgIE9WTF9BREFQVE9SX1RZUEVfTlVNLAo+ID4gK307Cj4gPiArCj4gPiArZW51 bSBtdGtfb3ZsX2FkYXB0b3JfY29tcF9pZCB7Cj4gPiArICAgICAgIE9WTF9BREFQVE9SX01EUF9S RE1BMCwKPiA+ICsgICAgICAgT1ZMX0FEQVBUT1JfTURQX1JETUExLAo+ID4gKyAgICAgICBPVkxf QURBUFRPUl9NRFBfUkRNQTIsCj4gPiArICAgICAgIE9WTF9BREFQVE9SX01EUF9SRE1BMywKPiA+ ICsgICAgICAgT1ZMX0FEQVBUT1JfTURQX1JETUE0LAo+ID4gKyAgICAgICBPVkxfQURBUFRPUl9N RFBfUkRNQTUsCj4gPiArICAgICAgIE9WTF9BREFQVE9SX01EUF9SRE1BNiwKPiA+ICsgICAgICAg T1ZMX0FEQVBUT1JfTURQX1JETUE3LAo+ID4gKyAgICAgICBPVkxfQURBUFRPUl9NRVJHRTAsCj4g PiArICAgICAgIE9WTF9BREFQVE9SX01FUkdFMSwKPiA+ICsgICAgICAgT1ZMX0FEQVBUT1JfTUVS R0UyLAo+ID4gKyAgICAgICBPVkxfQURBUFRPUl9NRVJHRTMsCj4gPiArICAgICAgIE9WTF9BREFQ VE9SX0VUSERSMCwKPiA+ICsgICAgICAgT1ZMX0FEQVBUT1JfSURfTUFYCj4gPiArfTsKPiA+ICsK PiA+ICtzdHJ1Y3Qgb3ZsX2FkYXB0b3JfY29tcF9tYXRjaCB7Cj4gPiArICAgICAgIGVudW0gbXRr X292bF9hZGFwdG9yX2NvbXBfdHlwZSB0eXBlOwo+ID4gKyAgICAgICBpbnQgYWxpYXNfaWQ7Cj4g PiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3Igewo+ID4gKyAgICAg ICBzdHJ1Y3QgZGV2aWNlICpvdmxfYWRhcHRvcl9jb21wW09WTF9BREFQVE9SX0lEX01BWF07Cj4g PiArICAgICAgIHN0cnVjdCBkZXZpY2UgKm1tc3lzX2RldjsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJpdmF0ZV9jb21wX3N0ZW1bT1ZMX0FEQVBUT1JfVFlQ RV9OVU1dCj4gPiA9IHsKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX1RZUEVfUkRNQV0gICAgICAg ICA9ICJ2ZG8xX3JkbWEiLAo+ID4gKyAgICAgICBbT1ZMX0FEQVBUT1JfVFlQRV9NRVJHRV0gICAg ICAgID0gIm1lcmdlIiwKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX1RZUEVfRVRIRFJdICAgICAg ICA9ICJldGhkciIsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG92bF9h ZGFwdG9yX2NvbXBfbWF0Y2gKPiA+IGNvbXBfbWF0Y2hlc1tPVkxfQURBUFRPUl9JRF9NQVhdID0g ewo+ID4gKyAgICAgICBbT1ZMX0FEQVBUT1JfTURQX1JETUEwXSA9IHsgT1ZMX0FEQVBUT1JfVFlQ RV9SRE1BLCAwIH0sCj4gPiArICAgICAgIFtPVkxfQURBUFRPUl9NRFBfUkRNQTFdID0geyBPVkxf QURBUFRPUl9UWVBFX1JETUEsIDEgfSwKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX01EUF9SRE1B Ml0gPSB7IE9WTF9BREFQVE9SX1RZUEVfUkRNQSwgMiB9LAo+ID4gKyAgICAgICBbT1ZMX0FEQVBU T1JfTURQX1JETUEzXSA9IHsgT1ZMX0FEQVBUT1JfVFlQRV9SRE1BLCAzIH0sCj4gPiArICAgICAg IFtPVkxfQURBUFRPUl9NRFBfUkRNQTRdID0geyBPVkxfQURBUFRPUl9UWVBFX1JETUEsIDQgfSwK PiA+ICsgICAgICAgW09WTF9BREFQVE9SX01EUF9SRE1BNV0gPSB7IE9WTF9BREFQVE9SX1RZUEVf UkRNQSwgNSB9LAo+ID4gKyAgICAgICBbT1ZMX0FEQVBUT1JfTURQX1JETUE2XSA9IHsgT1ZMX0FE QVBUT1JfVFlQRV9SRE1BLCA2IH0sCj4gPiArICAgICAgIFtPVkxfQURBUFRPUl9NRFBfUkRNQTdd ID0geyBPVkxfQURBUFRPUl9UWVBFX1JETUEsIDcgfSwKPiA+ICsgICAgICAgW09WTF9BREFQVE9S X01FUkdFMF0gICAgPSB7IE9WTF9BREFQVE9SX1RZUEVfTUVSR0UsIDEgfSwKPiA+ICsgICAgICAg W09WTF9BREFQVE9SX01FUkdFMV0gICAgPSB7IE9WTF9BREFQVE9SX1RZUEVfTUVSR0UsIDIgfSwK PiA+ICsgICAgICAgW09WTF9BREFQVE9SX01FUkdFMl0gICAgPSB7IE9WTF9BREFQVE9SX1RZUEVf TUVSR0UsIDMgfSwKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX01FUkdFM10gICAgPSB7IE9WTF9B REFQVE9SX1RZUEVfTUVSR0UsIDQgfSwKPiA+ICsgICAgICAgW09WTF9BREFQVE9SX0VUSERSMF0g ICAgPSB7IE9WTF9BREFQVE9SX1RZUEVfRVRIRFIsIDAgfSwKPiA+ICt9Owo+ID4gKwo+ID4gK3Zv aWQgbXRrX292bF9hZGFwdG9yX2xheWVyX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2ln bmVkIGludAo+ID4gaWR4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBjbWRxX3BrdCAqY21kcV9wa3QpCj4gPiArewo+ID4gKyAgICAgICBz dHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IgKm92bF9hZGFwdG9yID0KPiA+IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgKnBl bmRpbmcgPSAmc3RhdGUtPnBlbmRpbmc7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfbWRwX3JkbWFf Y2ZnIHJkbWFfY29uZmlnID0gezB9Owo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpyZG1hX2w7 Cj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKnJkbWFfcjsKPiA+ICsgICAgICAgc3RydWN0IGRl dmljZSAqbWVyZ2U7Cj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmV0aGRyOwo+ID4gKyAgICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICpmbXRfaW5mbyA9Cj4gPiBkcm1fZm9ybWF0 X2luZm8ocGVuZGluZy0+Zm9ybWF0KTsKPiA+ICsgICAgICAgYm9vbCB1c2VfZHVhbF9waXBlID0g ZmFsc2U7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBhbGlnbl93aWR0aDsKPiA+ICsgICAgICAg dW5zaWduZWQgaW50IGxfdyA9IDA7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCByX3cgPSAwOwo+ ID4gKwo+ID4gKyAgICAgICBkZXZfZGJnKGRldiwgIiVzKyBpZHg6JWQsIGVuYWJsZTolZCwgZm10 OjB4JXhcbiIsIF9fZnVuY19fLAo+ID4gaWR4LAo+ID4gKyAgICAgICAgICAgICAgIHBlbmRpbmct PmVuYWJsZSwgcGVuZGluZy0+Zm9ybWF0KTsKPiA+ICsgICAgICAgZGV2X2RiZyhkZXYsICJhZGRy IDB4JWx4LCBmYiB3OiVkLCB7JWQsJWQsJWQsJWR9XG4iLAo+ID4gKyAgICAgICAgICAgICAgIHBl bmRpbmctPmFkZHIsIChwZW5kaW5nLT5waXRjaCAvIGZtdF9pbmZvLT5jcHBbMF0pLAo+ID4gKyAg ICAgICAgICAgICAgIHBlbmRpbmctPngsIHBlbmRpbmctPnksIHBlbmRpbmctPndpZHRoLCBwZW5k aW5nLQo+ID4gPmhlaWdodCk7Cj4gPiArCj4gPiArICAgICAgIHJkbWFfbCA9IG92bF9hZGFwdG9y LQo+ID4gPm92bF9hZGFwdG9yX2NvbXBbT1ZMX0FEQVBUT1JfTURQX1JETUEwICsgMiAqIGlkeF07 Cj4gPiArICAgICAgIHJkbWFfciA9IG92bF9hZGFwdG9yLQo+ID4gPm92bF9hZGFwdG9yX2NvbXBb T1ZMX0FEQVBUT1JfTURQX1JETUEwICsgMiAqIGlkeCArIDFdOwo+ID4gKyAgICAgICBtZXJnZSA9 IG92bF9hZGFwdG9yLT5vdmxfYWRhcHRvcl9jb21wW09WTF9BREFQVE9SX01FUkdFMCArCj4gPiBp ZHhdOwo+ID4gKyAgICAgICBldGhkciA9IG92bF9hZGFwdG9yLT5vdmxfYWRhcHRvcl9jb21wW09W TF9BREFQVE9SX0VUSERSMF07Cj4gPiArCj4gPiArICAgICAgIGlmICghcGVuZGluZy0+ZW5hYmxl KSB7Cj4gPiArICAgICAgICAgICAgICAgbXRrX21lcmdlX3N0b3BfY21kcShtZXJnZSwgY21kcV9w a3QpOwo+ID4gKyAgICAgICAgICAgICAgIG10a19tZHBfcmRtYV9zdG9wKHJkbWFfbCwgY21kcV9w a3QpOwo+ID4gKyAgICAgICAgICAgICAgIG10a19tZHBfcmRtYV9zdG9wKHJkbWFfciwgY21kcV9w a3QpOwo+ID4gKyAgICAgICAgICAgICAgIG10a19ldGhkcl9sYXllcl9jb25maWcoZXRoZHIsIGlk eCwgc3RhdGUsCj4gPiBjbWRxX3BrdCk7Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4g KyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIC8qIEVUSERSIGlzIGluIDFUMlAgZG9tYWluLCB3 aWR0aCBuZWVkcyB0byBiZSAyIHBpeGVscwo+ID4gYWxpZ24gKi8KPiA+ICsgICAgICAgYWxpZ25f d2lkdGggPSBBTElHTl9ET1dOKHBlbmRpbmctPndpZHRoLCAyKTsKPiA+ICsKPiA+ICsgICAgICAg aWYgKGFsaWduX3dpZHRoID4gTVRLX09WTF9BREFQVE9SX1JETUFfTUFYX1dJRFRIKQo+ID4gKyAg ICAgICAgICAgICAgIHVzZV9kdWFsX3BpcGUgPSB0cnVlOwo+ID4gKwo+ID4gKyAgICAgICBpZiAo dXNlX2R1YWxfcGlwZSkgewo+ID4gKyAgICAgICAgICAgICAgIGxfdyA9IChhbGlnbl93aWR0aCAv IDIpICsgKChwZW5kaW5nLT53aWR0aCAvIDIpICUKPiA+IDIpOwo+ID4gKyAgICAgICAgICAgICAg IHJfdyA9IGFsaWduX3dpZHRoIC0gbF93Owo+ID4gKyAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAg ICAgICAgICAgIGxfdyA9IGFsaWduX3dpZHRoOwo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIG10 a19tZXJnZV9hZHZhbmNlX2NvbmZpZyhtZXJnZSwgbF93LCByX3csIHBlbmRpbmctPmhlaWdodCwK PiA+IDAsIDAsIGNtZHFfcGt0KTsKPiA+ICsgICAgICAgbXRrX21tc3lzX2RkcF9jb25maWcob3Zs X2FkYXB0b3ItPm1tc3lzX2RldiwKPiA+IE1NU1lTX0NPTkZJR19NRVJHRV9BU1lOQ19XSURUSCwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LCBhbGlnbl93aWR0aCAvIDIsIGNt ZHFfcGt0KTsKPiA+ICsgICAgICAgbXRrX21tc3lzX2RkcF9jb25maWcob3ZsX2FkYXB0b3ItPm1t c3lzX2RldiwKPiA+IE1NU1lTX0NPTkZJR19NRVJHRV9BU1lOQ19IRUlHSFQsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlkeCwgcGVuZGluZy0+aGVpZ2h0LCBjbWRxX3BrdCk7Cj4g PiArCj4gPiArICAgICAgIHJkbWFfY29uZmlnLndpZHRoID0gbF93Owo+ID4gKyAgICAgICByZG1h X2NvbmZpZy5oZWlnaHQgPSBwZW5kaW5nLT5oZWlnaHQ7Cj4gPiArICAgICAgIHJkbWFfY29uZmln LmFkZHIwID0gcGVuZGluZy0+YWRkcjsKPiA+ICsgICAgICAgcmRtYV9jb25maWcucGl0Y2ggPSBw ZW5kaW5nLT5waXRjaDsKPiA+ICsgICAgICAgcmRtYV9jb25maWcuZm10ID0gcGVuZGluZy0+Zm9y bWF0Owo+ID4gKyAgICAgICByZG1hX2NvbmZpZy5jb2xvcl9lbmNvZGluZyA9IHBlbmRpbmctPmNv bG9yX2VuY29kaW5nOwo+ID4gKyAgICAgICBtdGtfbWRwX3JkbWFfY29uZmlnKHJkbWFfbCwgJnJk bWFfY29uZmlnLCBjbWRxX3BrdCk7Cj4gPiArCj4gPiArICAgICAgIGlmICh1c2VfZHVhbF9waXBl KSB7Cj4gPiArICAgICAgICAgICAgICAgcmRtYV9jb25maWcueF9sZWZ0ID0gbF93Owo+ID4gKyAg ICAgICAgICAgICAgIHJkbWFfY29uZmlnLndpZHRoID0gcl93Owo+ID4gKyAgICAgICAgICAgICAg IG10a19tZHBfcmRtYV9jb25maWcocmRtYV9yLCAmcmRtYV9jb25maWcsCj4gPiBjbWRxX3BrdCk7 Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgbXRrX21lcmdlX3N0YXJ0X2NtZHEobWVy Z2UsIGNtZHFfcGt0KTsKPiA+ICsKPiA+ICsgICAgICAgbXRrX21kcF9yZG1hX3N0YXJ0KHJkbWFf bCwgY21kcV9wa3QpOwo+ID4gKyAgICAgICBpZiAodXNlX2R1YWxfcGlwZSkKPiA+ICsgICAgICAg ICAgICAgICBtdGtfbWRwX3JkbWFfc3RhcnQocmRtYV9yLCBjbWRxX3BrdCk7Cj4gPiArICAgICAg IGVsc2UKPiA+ICsgICAgICAgICAgICAgICBtdGtfbWRwX3JkbWFfc3RvcChyZG1hX3IsIGNtZHFf cGt0KTsKPiA+ICsKPiA+ICsgICAgICAgbXRrX2V0aGRyX2xheWVyX2NvbmZpZyhldGhkciwgaWR4 LCBzdGF0ZSwgY21kcV9wa3QpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIG10a19vdmxfYWRhcHRv cl9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdywKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNo LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBicGMsIHN0cnVj dCBjbWRxX3BrdAo+ID4gKmNtZHFfcGt0KQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19k aXNwX292bF9hZGFwdG9yICpvdmxfYWRhcHRvciA9Cj4gPiBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK PiA+ICsKPiA+ICsgICAgICAgbXRrX2V0aGRyX2NvbmZpZyhvdmxfYWRhcHRvci0KPiA+ID5vdmxf YWRhcHRvcl9jb21wW09WTF9BREFQVE9SX0VUSERSMF0sIHcsIGgsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgdnJlZnJlc2gsIGJwYywgY21kcV9wa3QpOwo+ID4gK30KPiA+ICsKPiA+ICt2 b2lkIG10a19vdmxfYWRhcHRvcl9zdGFydChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4g KyAgICAgICBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IgKm92bF9hZGFwdG9yID0KPiA+IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtfZXRoZHJfc3RhcnQob3Zs X2FkYXB0b3ItCj4gPiA+b3ZsX2FkYXB0b3JfY29tcFtPVkxfQURBUFRPUl9FVEhEUjBdKTsKPiA+ ICt9Cj4gPiArCj4gPiArdm9pZCBtdGtfb3ZsX2FkYXB0b3Jfc3RvcChzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IgKm92bF9h ZGFwdG9yID0KPiA+IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4gKyAgICAgICBtdGtf ZXRoZHJfc3RvcChvdmxfYWRhcHRvci0KPiA+ID5vdmxfYWRhcHRvcl9jb21wW09WTF9BREFQVE9S X0VUSERSMF0pOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgbXRrX292bF9hZGFwdG9yX2Nsa19lbmFi bGUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG10a19kaXNw X292bF9hZGFwdG9yICpvdmxfYWRhcHRvciA9Cj4gPiBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ ICsgICAgICAgc3RydWN0IGRldmljZSAqY29tcDsKPiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsg ICAgICAgaW50IGk7Cj4gPiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBPVkxfQURBUFRP Ul9NRVJHRTA7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGNvbXAgPSBvdmxfYWRhcHRvci0+ b3ZsX2FkYXB0b3JfY29tcFtpXTsKPiA+ICsgICAgICAgICAgICAgICByZXQgPSBwbV9ydW50aW1l X2dldF9zeW5jKGNvbXApOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpIHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciBk b21haW4KPiA+ICVkLCBlcnIgJWRcbiIsIGksIHJldCk7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIHB3cl9lcnI7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICB9Cj4g PiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBPVkxfQURBUFRPUl9JRF9NQVg7IGkrKykg ewo+ID4gKyAgICAgICAgICAgICAgIGNvbXAgPSBvdmxfYWRhcHRvci0+b3ZsX2FkYXB0b3JfY29t cFtpXTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBpZiAoaSA8IE9WTF9BREFQVE9SX01FUkdF MCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG10a19tZHBfcmRtYV9jbGtfZW5h YmxlKGNvbXApOwo+ID4gKyAgICAgICAgICAgICAgIGVsc2UgaWYgKGkgPCBPVkxfQURBUFRPUl9F VEhEUjApCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBtdGtfbWVyZ2VfY2xrX2Vu YWJsZShjb21wKTsKPiA+ICsgICAgICAgICAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICByZXQgPSBtdGtfZXRoZHJfY2xrX2VuYWJsZShjb21wKTsKPiA+ICsgICAgICAgICAg ICAgICBpZiAocmV0KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBlbmFibGUgY2xvY2sgJWQsCj4gPiBlcnIgJWRcbiIsIGksIHJldCk7Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsa19lcnI7Cj4gPiArICAgICAgICAgICAgICAg fQo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiByZXQ7Cj4gPiArCj4gPiAr Y2xrX2VycjoKPiA+ICsgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7Cj4gPiArICAgICAgICAgICAg ICAgY29tcCA9IG92bF9hZGFwdG9yLT5vdmxfYWRhcHRvcl9jb21wW2ldOwo+ID4gKyAgICAgICAg ICAgICAgIGlmIChpIDwgT1ZMX0FEQVBUT1JfTUVSR0UwKQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgbXRrX21kcF9yZG1hX2Nsa19kaXNhYmxlKGNvbXApOwo+ID4gKyAgICAgICAgICAgICAg IGVsc2UgaWYgKGkgPCBPVkxfQURBUFRPUl9FVEhEUjApCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBtdGtfbWVyZ2VfY2xrX2Rpc2FibGUoY29tcCk7Cj4gPiArICAgICAgICAgICAgICAgZWxz ZQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRrX2V0aGRyX2Nsa19kaXNhYmxlKGNvbXAp Owo+ID4gKyAgICAgICB9Cj4gPiArICAgICAgIGkgPSBPVkxfQURBUFRPUl9NRFBfUkRNQTc7Cj4g PiArCj4gPiArcHdyX2VycjoKPiA+ICsgICAgICAgd2hpbGUgKGktLSA+PSAwKQo+ID4gKyAgICAg ICAgICAgICAgIHBtX3J1bnRpbWVfcHV0KG92bF9hZGFwdG9yLT5vdmxfYWRhcHRvcl9jb21wW2ld KTsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCBt dGtfb3ZsX2FkYXB0b3JfY2xrX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KQo+ID4gK3sKPiA+ ICsgICAgICAgc3RydWN0IG10a19kaXNwX292bF9hZGFwdG9yICpvdmxfYWRhcHRvciA9Cj4gPiBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsgICAgICAgc3RydWN0IGRldmljZSAqY29tcDsKPiA+ ICsgICAgICAgaW50IGk7Cj4gPiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBPVkxfQURB UFRPUl9JRF9NQVg7IGkrKykgewo+ID4gKyAgICAgICAgICAgICAgIGNvbXAgPSBvdmxfYWRhcHRv ci0+b3ZsX2FkYXB0b3JfY29tcFtpXTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBpZiAoaSA8 IE9WTF9BREFQVE9SX01FUkdFMCkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRrX21k cF9yZG1hX2Nsa19kaXNhYmxlKGNvbXApOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcG1f cnVudGltZV9wdXQoY29tcCk7Cj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpIDwgT1ZM X0FEQVBUT1JfRVRIRFIwKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtdGtfbWVyZ2Vf Y2xrX2Rpc2FibGUoY29tcCk7Cj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIG10a19ldGhkcl9jbGtfZGlzYWJsZShjb21wKTsKPiA+ICsgICAg ICAgICAgICAgICB9Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4gPiArCj4gPiArdW5zaWduZWQgaW50 IG10a19vdmxfYWRhcHRvcl9sYXllcl9ucihzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4g KyAgICAgICByZXR1cm4gTVRLX09WTF9BREFQVE9SX0xBWUVSX05VTTsKPiA+ICt9Cj4gPiArCj4g PiArdm9pZCBtdGtfb3ZsX2FkYXB0b3JfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZGV2aWNlICpkZXYs IHZvaWQKPiA+ICgqdmJsYW5rX2NiKSh2b2lkICopLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICp2YmxhbmtfY2JfZGF0YSkKPiA+ICt7Cj4gPiArICAgICAgIHN0 cnVjdCBtdGtfZGlzcF9vdmxfYWRhcHRvciAqb3ZsX2FkYXB0b3IgPQo+ID4gZGV2X2dldF9kcnZk YXRhKGRldik7Cj4gPiArCj4gPiArICAgICAgIG10a19ldGhkcl9lbmFibGVfdmJsYW5rKG92bF9h ZGFwdG9yLQo+ID4gPm92bF9hZGFwdG9yX2NvbXBbT1ZMX0FEQVBUT1JfRVRIRFIwXSwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmJsYW5rX2NiLCB2YmxhbmtfY2JfZGF0YSk7 Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgbXRrX292bF9hZGFwdG9yX2Rpc2FibGVfdmJsYW5rKHN0 cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfZGlzcF9vdmxf YWRhcHRvciAqb3ZsX2FkYXB0b3IgPQo+ID4gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gPiArCj4g PiArICAgICAgIG10a19ldGhkcl9kaXNhYmxlX3ZibGFuayhvdmxfYWRhcHRvci0KPiA+ID5vdmxf YWRhcHRvcl9jb21wW09WTF9BREFQVE9SX0VUSERSMF0pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IG92bF9hZGFwdG9yX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 Cj4gPiBkZXZpY2Vfbm9kZSAqbm9kZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZW51bSBtdGtfb3ZsX2FkYXB0b3JfY29tcF90eXBlCj4gPiB0eXBlKQo+ID4gK3sKPiA+ ICsgICAgICAgaW50IGFsaWFzX2lkID0gb2ZfYWxpYXNfZ2V0X2lkKG5vZGUsCj4gPiBwcml2YXRl X2NvbXBfc3RlbVt0eXBlXSk7Cj4gPiArICAgICAgIGludCBpOwo+ID4gKwo+ID4gKyAgICAgICBm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21wX21hdGNoZXMpOyBpKyspCj4gPiArICAgICAg ICAgICAgICAgaWYgKGNvbXBfbWF0Y2hlc1tpXS50eXBlID09IHR5cGUgJiYKPiA+ICsgICAgICAg ICAgICAgICAgICAgY29tcF9tYXRjaGVzW2ldLmFsaWFzX2lkID09IGFsaWFzX2lkKQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Cj4gPiArCj4gPiArICAgICAgIGRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIGdldCBpZC4gdHlwZTogJWQsIGFsaWFzOiAlZFxuIiwKPiA+IHR5cGUs IGFsaWFzX2lkKTsKPiA+ICsgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19vdmxfYWRhcHRvcl9jb21wX2R0 X2lkc1tdID0gewo+ID4gKyAgICAgICB7Cj4gPiArICAgICAgICAgICAgICAgLmNvbXBhdGlibGUg PSAibWVkaWF0ZWssbXQ4MTk1LXZkbzEtcmRtYSIsCj4gPiArICAgICAgICAgICAgICAgLmRhdGEg PSAodm9pZCAqKU9WTF9BREFQVE9SX1RZUEVfUkRNQSwKPiA+ICsgICAgICAgfSwgewo+ID4gKyAg ICAgICAgICAgICAgIC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE5NS1kaXNwLW1lcmdlIiwK PiA+ICsgICAgICAgICAgICAgICAuZGF0YSA9ICh2b2lkICopT1ZMX0FEQVBUT1JfVFlQRV9NRVJH RSwKPiA+ICsgICAgICAgfSwgewo+ID4gKyAgICAgICAgICAgICAgIC5jb21wYXRpYmxlID0gIm1l ZGlhdGVrLG10ODE5NS1kaXNwLWV0aGRyIiwKPiA+ICsgICAgICAgICAgICAgICAuZGF0YSA9ICh2 b2lkICopT1ZMX0FEQVBUT1JfVFlQRV9FVEhEUiwKPiA+ICsgICAgICAgfSwKPiA+ICsgICAgICAg e30sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGNvbXBhcmVfb2Yoc3RydWN0IGRldmlj ZSAqZGV2LCB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsgICAgICAgcmV0dXJuIGRldi0+b2Zfbm9k ZSA9PSBkYXRhOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG92bF9hZGFwdG9yX2NvbXBf aW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdAo+ID4gY29tcG9uZW50X21hdGNoICoqbWF0 Y2gpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3IgKnByaXYg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpu b2RlLCAqcGFyZW50Owo+ID4gKyAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb21wX3Bk ZXY7Cj4gPiArCj4gPiArICAgICAgIHBhcmVudCA9IGRldi0+cGFyZW50LT5wYXJlbnQtPm9mX25v ZGUtPnBhcmVudDsKPiA+ICsKPiA+ICsgICAgICAgZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJl bnQsIG5vZGUpIHsKPiA+ICsgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk ICpvZl9pZDsKPiA+ICsgICAgICAgICAgICAgICBlbnVtIG10a19vdmxfYWRhcHRvcl9jb21wX3R5 cGUgdHlwZTsKPiA+ICsgICAgICAgICAgICAgICBpbnQgaWQ7Cj4gPiArCj4gPiArICAgICAgICAg ICAgICAgb2ZfaWQgPSBvZl9tYXRjaF9ub2RlKG10a19vdmxfYWRhcHRvcl9jb21wX2R0X2lkcywK PiA+IG5vZGUpOwo+ID4gKyAgICAgICAgICAgICAgIGlmICghb2ZfaWQpCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBpZiAoIW9m X2RldmljZV9pc19hdmFpbGFibGUobm9kZSkpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50Cj4gPiAlcE9GXG4iLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlKTsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsg ICAgICAgICAgICAgICB0eXBlID0gKGVudW0gbXRrX292bF9hZGFwdG9yX2NvbXBfdHlwZSlvZl9p ZC0+ZGF0YTsKPiA+ICsgICAgICAgICAgICAgICBpZCA9IG92bF9hZGFwdG9yX2NvbXBfZ2V0X2lk KGRldiwgbm9kZSwgdHlwZSk7Cj4gPiArICAgICAgICAgICAgICAgaWYgKGlkIDwgMCkgewo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiU2tpcHBpbmcgdW5rbm93biBj b21wb25lbnQKPiA+ICVwT0ZcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBub2RlKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKyAgICAg ICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBjb21wX3BkZXYgPSBvZl9maW5k X2RldmljZV9ieV9ub2RlKG5vZGUpOwo+ID4gKyAgICAgICAgICAgICAgIGlmICghY29tcF9wZGV2 KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUFJPQkVfREVGRVI7Cj4gPiAr Cj4gPiArICAgICAgICAgICAgICAgcHJpdi0+b3ZsX2FkYXB0b3JfY29tcFtpZF0gPSAmY29tcF9w ZGV2LT5kZXY7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgZHJtX29mX2NvbXBvbmVudF9tYXRj aF9hZGQoZGV2LCBtYXRjaCwgY29tcGFyZV9vZiwKPiA+IG5vZGUpOwo+ID4gKyAgICAgICAgICAg ICAgIGRldl9kYmcoZGV2LCAiQWRkaW5nIGNvbXBvbmVudCBtYXRjaCBmb3IgJXBPRlxuIiwKPiA+ IG5vZGUpOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IG10a19kaXNwX292bF9hZGFwdG9yX2NvbXBfYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gPiBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQo+ID4gK3sKPiA+ICsg ICAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG10a19kaXNwX292 bF9hZGFwdG9yX2NvbXBfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+IHN0cnVjdCBkZXZp Y2UgKm1hc3RlciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKmRhdGEpCj4gPiArewo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfY29tcF9vcHMgPQo+ID4gewo+ ID4gKyAgICAgICAuYmluZCAgID0gbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfY29tcF9iaW5kLAo+ID4g KyAgICAgICAudW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfY29tcF91bmJpbmQsCj4gPiAr fTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IG10a19kaXNwX292bF9hZGFwdG9yX21hc3Rlcl9iaW5k KHN0cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBtdGtfZGlzcF9v dmxfYWRhcHRvciAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4gKyAgICAg ICBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBwcml2LT5tbXN5c19kZXYpOwo+ID4gKyAgICAgICBy ZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX2FkYXB0 b3JfbWFzdGVyX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiArewo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJfb3BzCj4gPiBtdGtfZGlz cF9vdmxfYWRhcHRvcl9tYXN0ZXJfb3BzID0gewo+ID4gKyAgICAgICAuYmluZCAgICAgICAgICAg PSBtdGtfZGlzcF9vdmxfYWRhcHRvcl9tYXN0ZXJfYmluZCwKPiA+ICsgICAgICAgLnVuYmluZCAg ICAgICAgID0gbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfbWFzdGVyX3VuYmluZCwKPiA+ICt9Owo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2FkYXB0b3JfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZQo+ID4gKnBkZXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX2Rpc3Bf b3ZsX2FkYXB0b3IgKnByaXY7Cj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7Cj4gPiArICAgICAgIHN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsK PiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgICAgcHJpdiA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwo+ID4gKyAgICAgICBpZiAoIXByaXYp Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArICAgICAgIHBs YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBv dmxfYWRhcHRvcl9jb21wX2luaXQoZGV2LCAmbWF0Y2gpOwo+ID4gKyAgICAgICBpZiAocmV0IDwg MCkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICAgICBwcml2 LT5tbXN5c19kZXYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKPiA+ICsKPiA+ICsgICAgICAg Y29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsCj4gPiAmbXRrX2Rpc3Bfb3ZsX2Fk YXB0b3JfbWFzdGVyX29wcywgbWF0Y2gpOwo+ID4gKwo+ID4gKyAgICAgICBwbV9ydW50aW1lX2Vu YWJsZShkZXYpOwo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10 a19kaXNwX292bF9hZGFwdG9yX2NvbXBfb3BzKTsKPiA+ICsgICAgICAgaWYgKHJldCAhPSAwKSB7 Cj4gPiArICAgICAgICAgICAgICAgcG1fcnVudGltZV9kaXNhYmxlKGRldik7Cj4gPiArICAgICAg ICAgICAgICAgZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDogJWRcbiIsIHJl dCk7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIGludCBtdGtfZGlzcF9vdmxfYWRhcHRvcl9yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZQo+ID4gKnBkZXYpCj4gPiArewo+IAo+IGNvbXBvbmVudF9tYXN0ZXJfZGVs KCkuIEV4Y2VwdCB0aGlzCj4gCj4gUmV2aWV3ZWQtYnk6IENodW4tS3VhbmcgSHUgPGNodW5rdWFu Zy5odUBrZXJuZWwub3JnPgo+IAoKT0suCj4gCj4gPiArICAgICAgIGNvbXBvbmVudF9kZWwoJnBk ZXYtPmRldiwgJm10a19kaXNwX292bF9hZGFwdG9yX2NvbXBfb3BzKTsKPiA+ICsgICAgICAgcG1f cnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfYWRhcHRvcl9k cml2ZXIgPSB7Cj4gPiArICAgICAgIC5wcm9iZSAgICAgICAgICA9IG10a19kaXNwX292bF9hZGFw dG9yX3Byb2JlLAo+ID4gKyAgICAgICAucmVtb3ZlICAgICAgICAgPSBtdGtfZGlzcF9vdmxfYWRh cHRvcl9yZW1vdmUsCj4gPiArICAgICAgIC5kcml2ZXIgICAgICAgICA9IHsKPiA+ICsgICAgICAg ICAgICAgICAubmFtZSAgID0gIm1lZGlhdGVrLWRpc3Atb3ZsLWFkYXB0b3IiLAo+ID4gKyAgICAg ICAgICAgICAgIC5vd25lciAgPSBUSElTX01PRFVMRSwKPiA+ICsgICAgICAgfSwKPiA+ICt9Owo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCj4g PiBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCj4gPiBpbmRleCBhNThj ZWJkMDFkMzUuLjFhZDlmN2VkZmNjNyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2Rydi5oCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuaAo+ID4gQEAgLTUxLDYgKzUxLDcgQEAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIKPiA+IG10a19kaXNwX2Njb3JyX2RyaXZlcjsKPiA+ICBleHRlcm4gc3RydWN0IHBs YXRmb3JtX2RyaXZlciBtdGtfZGlzcF9jb2xvcl9kcml2ZXI7Cj4gPiAgZXh0ZXJuIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfZ2FtbWFfZHJpdmVyOwo+ID4gIGV4dGVybiBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG10a19kaXNwX21lcmdlX2RyaXZlcjsKPiA+ICtleHRlcm4gc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfYWRhcHRvcl9kcml2ZXI7Cj4gPiAgZXh0ZXJu IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsKPiA+ICBleHRlcm4g c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9yZG1hX2RyaXZlcjsKPiA+ICBleHRlcm4g c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZHBpX2RyaXZlcjsKPiA+IC0tCj4gPiAyLjE4LjAK PiA+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LWFybS1rZXJuZWwK