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 X-Spam-Level: X-Spam-Status: No, score=-4.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 540DAC433DF for ; Fri, 19 Jun 2020 16:26:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 23753217BA for ; Fri, 19 Jun 2020 16:26:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592583982; bh=78Kv0bButl8hiJiTg88qkjpdJFgrMdmTuvdr++dJwhM=; h=References:In-Reply-To:From:Date:Subject:To:Cc:List-ID:From; b=0BQd/VrONsHg/if09FJ0/skKAxcLDgLZ84cAH4Cg4zBlv3KUvrOW1VJ82KYSput9I bBC+LKaXb/6BKY3eHI0RNYovEqNmqTI6NGN3nXtDaNqVntpmtRDcnIEeHD46SSpxom Efn1TVM4//XhJzPtIj2WcNq1irgWf0fIIe+rf7n8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394865AbgFSQ0U (ORCPT ); Fri, 19 Jun 2020 12:26:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:45688 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389518AbgFSQ0K (ORCPT ); Fri, 19 Jun 2020 12:26:10 -0400 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 55D2E217BA; Fri, 19 Jun 2020 16:26:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592583968; bh=78Kv0bButl8hiJiTg88qkjpdJFgrMdmTuvdr++dJwhM=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=P5GZ1WzldX067+LJvMu1BQMUm5F0JkgEw0Egqt3qbmsCRsU86+z0xixgDXdESwXzR Y6A1dbxgTcLy3FdUfrCszcCY7Vg76N2lC6POuQHSzbn+6/O4+Eb1VlwoMu4j02klpx x2crMNA6vlo4IbyXTnWdAQ2OQXXRzhupZmUdQqeM= Received: by mail-ej1-f44.google.com with SMTP id gl26so10798489ejb.11; Fri, 19 Jun 2020 09:26:08 -0700 (PDT) X-Gm-Message-State: AOAM533AYmqiOOM4vXJMKlEm8bhkj4fZvgk7tcGF0TP9DqICqfapmvKC eevLBt+X9YIBFZbK581saiaZPEcNFs3TAzAFrg== X-Google-Smtp-Source: ABdhPJyKTOXjxdzTySonR/YjAmPvTl/qJK203QbKCJ4CRUzoxbAJNoQkV879w9AEzXL4LeBMXdQN3Iq5EK2gqoi5DeI= X-Received: by 2002:a17:906:468e:: with SMTP id a14mr4390709ejr.124.1592583966878; Fri, 19 Jun 2020 09:26:06 -0700 (PDT) MIME-Version: 1.0 References: <1592559720-8482-1-git-send-email-neal.liu@mediatek.com> <1592559720-8482-3-git-send-email-neal.liu@mediatek.com> In-Reply-To: <1592559720-8482-3-git-send-email-neal.liu@mediatek.com> From: Chun-Kuang Hu Date: Sat, 20 Jun 2020 00:25:55 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v2 2/2] soc: mediatek: devapc: add devapc-mt6873 driver To: Neal Liu Cc: Rob Herring , Matthias Brugger , devicetree@vger.kernel.org, wsd_upstream , linux-kernel , "moderated list:ARM/Mediatek SoC support" , Linux ARM Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Neal: Neal Liu =E6=96=BC 2020=E5=B9=B46=E6=9C=8819=E6=97= =A5 =E9=80=B1=E4=BA=94 =E4=B8=8B=E5=8D=886:01=E5=AF=AB=E9=81=93=EF=BC=9A > > MT6873 bus frabric provides TrustZone security support and data > protection to prevent slaves from being accessed by unexpected > masters. > The security violations are logged and sent to the processor for > further analysis or countermeasures. > > Any occurrence of security violation would raise an interrupt, and > it will be handled by devapc-mt6873 driver. The violation > information is printed in order to find the murderer. > > Signed-off-by: Neal Liu > --- [snip] > + > +/* > + * mtk_devapc_pd_get - get devapc pd_types of register address. > + * > + * Returns the value of reg addr > + */ > +static void __iomem *mtk_devapc_pd_get(struct mtk_devapc_context *devapc= _ctx, > + int slave_type, > + enum DEVAPC_PD_REG_TYPE pd_reg_typ= e, > + u32 index) > +{ > + struct mtk_devapc_vio_info *vio_info =3D devapc_ctx->soc->vio_inf= o; > + u32 slave_type_num =3D devapc_ctx->soc->slave_type_num; > + const u32 *devapc_pds =3D devapc_ctx->soc->devapc_pds; devapc_pds =3D mt6873_devapc_pds; > + void __iomem *reg; > + > + if (!devapc_pds) Never happen. > + return NULL; > + > + if ((slave_type < slave_type_num && > + index < vio_info->vio_mask_sta_num[slave_type]) && > + pd_reg_type < PD_REG_TYPE_NUM) { Always true. > + reg =3D devapc_ctx->devapc_pd_base[slave_type] + > + devapc_pds[pd_reg_type]; > + > + if (pd_reg_type =3D=3D VIO_MASK || pd_reg_type =3D=3D VIO= _STA) > + reg +=3D 0x4 * index; > + > + } else { > + pr_err(PFX "Out Of Boundary, slave_type:0x%x/pd_reg_type:= 0x%x/index:0x%x\n", > + slave_type, pd_reg_type, index); > + return NULL; > + } > + > + return reg; > +} > + [snip] > + > +/* > + * start_devapc - initialize devapc status and start receiving interrupt > + * while devapc violation is triggered. > + */ > +static void start_devapc(struct mtk_devapc_context *devapc_ctx) > +{ > + u32 slave_type_num =3D devapc_ctx->soc->slave_type_num; > + const struct mtk_device_info **device_info; > + const struct mtk_device_num *ndevices; > + void __iomem *pd_vio_shift_sta_reg; > + void __iomem *pd_apc_con_reg; > + int slave_type, i, vio_idx, index; > + u32 vio_shift_sta; > + > + ndevices =3D devapc_ctx->soc->ndevices; ndevices =3D mtk6873_devices_num; > + > + device_info =3D devapc_ctx->soc->device_info; > + > + for (slave_type =3D 0; slave_type < slave_type_num; slave_type++)= { > + pd_apc_con_reg =3D mtk_devapc_pd_get(devapc_ctx, slave_ty= pe, > + APC_CON, 0); > + pd_vio_shift_sta_reg =3D mtk_devapc_pd_get(devapc_ctx, sl= ave_type, > + VIO_SHIFT_STA, 0= ); > + > + if (!pd_apc_con_reg || !pd_vio_shift_sta_reg || !device_i= nfo) > + return; > + > + /* Clear DEVAPC violation status */ > + writel(BIT(31), pd_apc_con_reg); > + > + /* Clear violation shift status */ > + vio_shift_sta =3D readl(pd_vio_shift_sta_reg); > + if (vio_shift_sta) > + writel(vio_shift_sta, pd_vio_shift_sta_reg); > + > + /* Clear type 2 violation status */ > + check_type2_vio_status(devapc_ctx, slave_type, &vio_idx, = &i); > + > + /* Clear violation status */ > + for (i =3D 0; i < ndevices[slave_type].vio_slave_num; i++= ) { > + vio_idx =3D device_info[slave_type][i].vio_index; > + if ((check_vio_status(devapc_ctx, slave_type, vio= _idx) > + =3D=3D VIOLATION_TRIGGERED)= && > + clear_vio_status(devapc_ctx, slave_type, > + vio_idx)) { > + pr_warn(PFX "Clear vio status failed, sla= ve_type:0x%x, vio_index:0x%x\n", > + slave_type, vio_idx); > + > + index =3D i; > + mtk_devapc_dump_vio_dbg(devapc_ctx, slave= _type, > + &vio_idx, &index)= ; > + i =3D index - 1; > + } > + > + mask_module_irq(devapc_ctx, slave_type, vio_idx, = false); > + } > + } > +} > + > +static DEFINE_SPINLOCK(devapc_lock); Useless, so remove it. > + > +/* > + * devapc_violation_irq - the devapc Interrupt Service Routine (ISR) wil= l dump > + * violation information including which master vi= olates > + * access slave. > + */ > +static irqreturn_t devapc_violation_irq(int irq_number, > + struct mtk_devapc_context *devapc= _ctx) > +{ > + u32 slave_type_num =3D devapc_ctx->soc->slave_type_num; > + const struct mtk_device_info **device_info; > + struct mtk_devapc_vio_info *vio_info; > + int slave_type, vio_idx, index; > + const char *vio_master; > + unsigned long flags; > + u8 perm; > + > + spin_lock_irqsave(&devapc_lock, flags); > + > + device_info =3D devapc_ctx->soc->device_info; > + vio_info =3D devapc_ctx->soc->vio_info; > + vio_idx =3D -1; > + index =3D -1; > + > + /* There are multiple DEVAPC_PD */ > + for (slave_type =3D 0; slave_type < slave_type_num; slave_type++)= { > + if (!check_type2_vio_status(devapc_ctx, slave_type, &vio_= idx, > + &index)) > + if (!mtk_devapc_dump_vio_dbg(devapc_ctx, slave_ty= pe, > + &vio_idx, &index)) > + continue; > + > + /* Ensure that violation info are written before > + * further operations > + */ > + smp_mb(); > + > + mask_module_irq(devapc_ctx, slave_type, vio_idx, true); > + > + clear_vio_status(devapc_ctx, slave_type, vio_idx); > + > + perm =3D get_permission(devapc_ctx, slave_type, index, > + vio_info->domain_id); > + > + vio_master =3D devapc_ctx->soc->master_get > + (vio_info->master_id, > + vio_info->vio_addr, > + slave_type, > + vio_info->shift_sta_bit, > + vio_info->domain_id); Call mt6873_bus_id_to_master() directly. > + > + if (!vio_master) > + vio_master =3D "UNKNOWN_MASTER"; > + > + pr_info(PFX "Violation - slave_type:0x%x, sys_index:0x%x,= ctrl_index:0x%x, vio_index:0x%x\n", > + slave_type, > + device_info[slave_type][index].sys_index, > + device_info[slave_type][index].ctrl_index, > + device_info[slave_type][index].vio_index); > + > + pr_info(PFX "Violation Master: %s\n", vio_master); > + > + devapc_vio_reason(perm); > + > + mask_module_irq(devapc_ctx, slave_type, vio_idx, false); > + } > + > + spin_unlock_irqrestore(&devapc_lock, flags); > + return IRQ_HANDLED; > +} > + [snip] > + > +/***********************************************************************= ******* > + * VARIABLE DEFINATION > + ***********************************************************************= *******/ > +#define MOD_NO_IN_1_DEVAPC 16 > +#define VIOLATION_TRIGGERED 1 > +#define VIOLATION_MASKED 1 > +#define DEAD 0xdeadbeaf > +#define PFX "[DEVAPC]: " > +#define SLAVE_TYPE_NUM_MAX 5 SLAVE_TYPE_NUM is 4, why SLAVE_TYPE_NUM_MAX is 5? > + > +#define devapc_log(p, s, fmt, args...) \ > + do { \ > + typeof(p) (_p) =3D (p); \ > + ((_p) +=3D scnprintf(_p, sizeof(s) - strlen(s), fmt, ##ar= gs)); \ > + } while (0) Useless, so remove it. > + > +#define UNUSED(x) (void)(x) Useless, so remove it. > + > +/***********************************************************************= ******* > + * DATA STRUCTURE & FUNCTION DEFINATION > + ***********************************************************************= *******/ > +enum DEVAPC_PD_REG_TYPE { > + VIO_MASK =3D 0, > + VIO_STA, > + VIO_DBG0, > + VIO_DBG1, > + VIO_DBG2, > + APC_CON, > + VIO_SHIFT_STA, > + VIO_SHIFT_SEL, > + VIO_SHIFT_CON, > + PD_REG_TYPE_NUM, > +}; > + > +enum DEVAPC_UT_CMD { > + DEVAPC_UT_DAPC_VIO =3D 1, > + DEVAPC_UT_SRAM_VIO, > +}; Useless, so remove it. > + > +enum DEVAPC_DOM_ID { > + DOMAIN_0 =3D 0, > + DOMAIN_1, > + DOMAIN_2, > + DOMAIN_3, > + DOMAIN_4, > + DOMAIN_5, > + DOMAIN_6, > + DOMAIN_7, > + DOMAIN_8, > + DOMAIN_9, > + DOMAIN_10, > + DOMAIN_11, > + DOMAIN_12, > + DOMAIN_13, > + DOMAIN_14, > + DOMAIN_15, > + DOMAIN_OTHERS, > +}; Useless, so remove it. > + > +enum SRAMROM_VIO { > + ROM_VIOLATION =3D 0, > + SRAM_VIOLATION, > +}; > + > +enum DEVAPC_PERM_TYPE { > + NO_PROTECTION =3D 0, > + SEC_RW_ONLY, > + SEC_RW_NS_R, > + FORBIDDEN, > + PERM_TYPE_NUM, > +}; > + > +struct mtk_devapc_dbg_status { > + bool enable_ut; > + bool enable_dapc; /* dump APC */ > +}; Useless, so remove it. Regards, Chun-Kuang. 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 X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A840EC433E0 for ; Fri, 19 Jun 2020 16:26:30 +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 7B8E721707 for ; Fri, 19 Jun 2020 16:26:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="WODg+a8I"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="P5GZ1Wzl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7B8E721707 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=VL9jqjLn2/KmQcttyrhoZ3yG24zzn8jLbruRPBMyKS8=; b=WODg+a8I3BHOle EpAp9UrCwt3w+6K11/155T7P43Ts8j9mVbBr/UipIL0d+IAB6cwBW9mv9DSjNLHQnpW/OLxOe90hE TBYjNM14Gg6lWudd9i0y7rFHJ9sUCxNn70Su1Rw8Cbg7xWlavp2vnY2NZBD9GZG1lVTvLONbQu2ZE wmcG90oVWcXu+d6S8fFRYCmKrZq3RKW9/B5l+jTXVMfYsaIQs27fV3bMfFT7nMGDqg+lmu3dd8EYB GXrON5tt4bWGpnMVn3I4cFiXJZOjq1ywkUQFiZvaqAzTUDPtIUzpsyvXWWzeAo1AVNTvHcXvf6ycd mO24Tlwg0+iPBLuVMzyA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jmJqP-0005Bx-O8; Fri, 19 Jun 2020 16:26:21 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jmJqD-000516-H0; Fri, 19 Jun 2020 16:26:12 +0000 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6513321919; Fri, 19 Jun 2020 16:26:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592583968; bh=78Kv0bButl8hiJiTg88qkjpdJFgrMdmTuvdr++dJwhM=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=P5GZ1WzldX067+LJvMu1BQMUm5F0JkgEw0Egqt3qbmsCRsU86+z0xixgDXdESwXzR Y6A1dbxgTcLy3FdUfrCszcCY7Vg76N2lC6POuQHSzbn+6/O4+Eb1VlwoMu4j02klpx x2crMNA6vlo4IbyXTnWdAQ2OQXXRzhupZmUdQqeM= Received: by mail-ej1-f52.google.com with SMTP id dp18so10800113ejc.8; Fri, 19 Jun 2020 09:26:08 -0700 (PDT) X-Gm-Message-State: AOAM533h8Q/j4okl9vqH7SjKuoJBt5gdhomQByA+9jzGPxPHBCgc9I9d 2ho1L3cJGiDIC8trI9uyfKrtkBwm71v/5FbsLg== X-Google-Smtp-Source: ABdhPJyKTOXjxdzTySonR/YjAmPvTl/qJK203QbKCJ4CRUzoxbAJNoQkV879w9AEzXL4LeBMXdQN3Iq5EK2gqoi5DeI= X-Received: by 2002:a17:906:468e:: with SMTP id a14mr4390709ejr.124.1592583966878; Fri, 19 Jun 2020 09:26:06 -0700 (PDT) MIME-Version: 1.0 References: <1592559720-8482-1-git-send-email-neal.liu@mediatek.com> <1592559720-8482-3-git-send-email-neal.liu@mediatek.com> In-Reply-To: <1592559720-8482-3-git-send-email-neal.liu@mediatek.com> From: Chun-Kuang Hu Date: Sat, 20 Jun 2020 00:25:55 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v2 2/2] soc: mediatek: devapc: add devapc-mt6873 driver To: Neal Liu X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200619_092609_604289_5363BE57 X-CRM114-Status: GOOD ( 16.08 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, wsd_upstream , linux-kernel , Rob Herring , "moderated list:ARM/Mediatek SoC support" , Matthias Brugger , Linux ARM 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 SGksIE5lYWw6CgpOZWFsIExpdSA8bmVhbC5saXVAbWVkaWF0ZWsuY29tPiDmlrwgMjAyMOW5tDbm nIgxOeaXpSDpgLHkupQg5LiL5Y2INjowMeWvq+mBk++8mgo+Cj4gTVQ2ODczIGJ1cyBmcmFicmlj IHByb3ZpZGVzIFRydXN0Wm9uZSBzZWN1cml0eSBzdXBwb3J0IGFuZCBkYXRhCj4gcHJvdGVjdGlv biB0byBwcmV2ZW50IHNsYXZlcyBmcm9tIGJlaW5nIGFjY2Vzc2VkIGJ5IHVuZXhwZWN0ZWQKPiBt YXN0ZXJzLgo+IFRoZSBzZWN1cml0eSB2aW9sYXRpb25zIGFyZSBsb2dnZWQgYW5kIHNlbnQgdG8g dGhlIHByb2Nlc3NvciBmb3IKPiBmdXJ0aGVyIGFuYWx5c2lzIG9yIGNvdW50ZXJtZWFzdXJlcy4K Pgo+IEFueSBvY2N1cnJlbmNlIG9mIHNlY3VyaXR5IHZpb2xhdGlvbiB3b3VsZCByYWlzZSBhbiBp bnRlcnJ1cHQsIGFuZAo+IGl0IHdpbGwgYmUgaGFuZGxlZCBieSBkZXZhcGMtbXQ2ODczIGRyaXZl ci4gVGhlIHZpb2xhdGlvbgo+IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgaW4gb3JkZXIgdG8gZmlu ZCB0aGUgbXVyZGVyZXIuCj4KPiBTaWduZWQtb2ZmLWJ5OiBOZWFsIExpdSA8bmVhbC5saXVAbWVk aWF0ZWsuY29tPgo+IC0tLQoKW3NuaXBdCgo+ICsKPiArLyoKPiArICogbXRrX2RldmFwY19wZF9n ZXQgLSBnZXQgZGV2YXBjIHBkX3R5cGVzIG9mIHJlZ2lzdGVyIGFkZHJlc3MuCj4gKyAqCj4gKyAq IFJldHVybnMgdGhlIHZhbHVlIG9mIHJlZyBhZGRyCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBfX2lv bWVtICptdGtfZGV2YXBjX3BkX2dldChzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0ICpkZXZhcGNf Y3R4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbGF2ZV90 eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gREVWQVBD X1BEX1JFR19UWVBFIHBkX3JlZ190eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHUzMiBpbmRleCkKPiArewo+ICsgICAgICAgc3RydWN0IG10a19kZXZhcGNfdmlv X2luZm8gKnZpb19pbmZvID0gZGV2YXBjX2N0eC0+c29jLT52aW9faW5mbzsKPiArICAgICAgIHUz MiBzbGF2ZV90eXBlX251bSA9IGRldmFwY19jdHgtPnNvYy0+c2xhdmVfdHlwZV9udW07Cj4gKyAg ICAgICBjb25zdCB1MzIgKmRldmFwY19wZHMgPSBkZXZhcGNfY3R4LT5zb2MtPmRldmFwY19wZHM7 CgpkZXZhcGNfcGRzID0gbXQ2ODczX2RldmFwY19wZHM7CgoKPiArICAgICAgIHZvaWQgX19pb21l bSAqcmVnOwo+ICsKPiArICAgICAgIGlmICghZGV2YXBjX3BkcykKCk5ldmVyIGhhcHBlbi4KCj4g KyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ICsKPiArICAgICAgIGlmICgoc2xhdmVfdHlw ZSA8IHNsYXZlX3R5cGVfbnVtICYmCj4gKyAgICAgICAgICAgIGluZGV4IDwgdmlvX2luZm8tPnZp b19tYXNrX3N0YV9udW1bc2xhdmVfdHlwZV0pICYmCj4gKyAgICAgICAgICAgcGRfcmVnX3R5cGUg PCBQRF9SRUdfVFlQRV9OVU0pIHsKCkFsd2F5cyB0cnVlLgoKPiArICAgICAgICAgICAgICAgcmVn ID0gZGV2YXBjX2N0eC0+ZGV2YXBjX3BkX2Jhc2Vbc2xhdmVfdHlwZV0gKwo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGRldmFwY19wZHNbcGRfcmVnX3R5cGVdOwo+ICsKPiArICAgICAgICAgICAg ICAgaWYgKHBkX3JlZ190eXBlID09IFZJT19NQVNLIHx8IHBkX3JlZ190eXBlID09IFZJT19TVEEp Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVnICs9IDB4NCAqIGluZGV4Owo+ICsKPiArICAg ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIHByX2VycihQRlggIk91dCBPZiBCb3VuZGFy eSwgc2xhdmVfdHlwZToweCV4L3BkX3JlZ190eXBlOjB4JXgvaW5kZXg6MHgleFxuIiwKPiArICAg ICAgICAgICAgICAgICAgICAgIHNsYXZlX3R5cGUsIHBkX3JlZ190eXBlLCBpbmRleCk7Cj4gKyAg ICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVy biByZWc7Cj4gK30KPiArCgpbc25pcF0KCj4gKwo+ICsvKgo+ICsgKiBzdGFydF9kZXZhcGMgLSBp bml0aWFsaXplIGRldmFwYyBzdGF0dXMgYW5kIHN0YXJ0IHJlY2VpdmluZyBpbnRlcnJ1cHQKPiAr ICogICAgICAgICAgICAgICB3aGlsZSBkZXZhcGMgdmlvbGF0aW9uIGlzIHRyaWdnZXJlZC4KPiAr ICovCj4gK3N0YXRpYyB2b2lkIHN0YXJ0X2RldmFwYyhzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0 ICpkZXZhcGNfY3R4KQo+ICt7Cj4gKyAgICAgICB1MzIgc2xhdmVfdHlwZV9udW0gPSBkZXZhcGNf Y3R4LT5zb2MtPnNsYXZlX3R5cGVfbnVtOwo+ICsgICAgICAgY29uc3Qgc3RydWN0IG10a19kZXZp Y2VfaW5mbyAqKmRldmljZV9pbmZvOwo+ICsgICAgICAgY29uc3Qgc3RydWN0IG10a19kZXZpY2Vf bnVtICpuZGV2aWNlczsKPiArICAgICAgIHZvaWQgX19pb21lbSAqcGRfdmlvX3NoaWZ0X3N0YV9y ZWc7Cj4gKyAgICAgICB2b2lkIF9faW9tZW0gKnBkX2FwY19jb25fcmVnOwo+ICsgICAgICAgaW50 IHNsYXZlX3R5cGUsIGksIHZpb19pZHgsIGluZGV4Owo+ICsgICAgICAgdTMyIHZpb19zaGlmdF9z dGE7Cj4gKwo+ICsgICAgICAgbmRldmljZXMgPSBkZXZhcGNfY3R4LT5zb2MtPm5kZXZpY2VzOwoK bmRldmljZXMgPSBtdGs2ODczX2RldmljZXNfbnVtOwoKCj4gKwo+ICsgICAgICAgZGV2aWNlX2lu Zm8gPSBkZXZhcGNfY3R4LT5zb2MtPmRldmljZV9pbmZvOwo+ICsKPiArICAgICAgIGZvciAoc2xh dmVfdHlwZSA9IDA7IHNsYXZlX3R5cGUgPCBzbGF2ZV90eXBlX251bTsgc2xhdmVfdHlwZSsrKSB7 Cj4gKyAgICAgICAgICAgICAgIHBkX2FwY19jb25fcmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2 YXBjX2N0eCwgc2xhdmVfdHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBUENfQ09OLCAwKTsKPiArICAgICAgICAgICAgICAgcGRfdmlvX3No aWZ0X3N0YV9yZWcgPSBtdGtfZGV2YXBjX3BkX2dldChkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZJT19TSElGVF9TVEEsIDApOwo+ICsKPiArICAgICAgICAgICAgICAgaWYgKCFwZF9hcGNfY29u X3JlZyB8fCAhcGRfdmlvX3NoaWZ0X3N0YV9yZWcgfHwgIWRldmljZV9pbmZvKQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAgICAgICAgICAgIC8qIENsZWFyIERF VkFQQyB2aW9sYXRpb24gc3RhdHVzICovCj4gKyAgICAgICAgICAgICAgIHdyaXRlbChCSVQoMzEp LCBwZF9hcGNfY29uX3JlZyk7Cj4gKwo+ICsgICAgICAgICAgICAgICAvKiBDbGVhciB2aW9sYXRp b24gc2hpZnQgc3RhdHVzICovCj4gKyAgICAgICAgICAgICAgIHZpb19zaGlmdF9zdGEgPSByZWFk bChwZF92aW9fc2hpZnRfc3RhX3JlZyk7Cj4gKyAgICAgICAgICAgICAgIGlmICh2aW9fc2hpZnRf c3RhKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbCh2aW9fc2hpZnRfc3RhLCBwZF92 aW9fc2hpZnRfc3RhX3JlZyk7Cj4gKwo+ICsgICAgICAgICAgICAgICAvKiBDbGVhciB0eXBlIDIg dmlvbGF0aW9uIHN0YXR1cyAqLwo+ICsgICAgICAgICAgICAgICBjaGVja190eXBlMl92aW9fc3Rh dHVzKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsICZ2aW9faWR4LCAmaSk7Cj4gKwo+ICsgICAgICAg ICAgICAgICAvKiBDbGVhciB2aW9sYXRpb24gc3RhdHVzICovCj4gKyAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBuZGV2aWNlc1tzbGF2ZV90eXBlXS52aW9fc2xhdmVfbnVtOyBpKyspIHsK PiArICAgICAgICAgICAgICAgICAgICAgICB2aW9faWR4ID0gZGV2aWNlX2luZm9bc2xhdmVfdHlw ZV1baV0udmlvX2luZGV4Owo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2hlY2tfdmlv X3N0YXR1cyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCB2aW9faWR4KQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBWSU9MQVRJT05fVFJJR0dFUkVEKSAm Jgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJfdmlvX3N0YXR1cyhkZXZhcGNf Y3R4LCBzbGF2ZV90eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2aW9faWR4KSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJf d2FybihQRlggIkNsZWFyIHZpbyBzdGF0dXMgZmFpbGVkLCBzbGF2ZV90eXBlOjB4JXgsIHZpb19p bmRleDoweCV4XG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz bGF2ZV90eXBlLCB2aW9faWR4KTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbmRleCA9IGk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGtfZGV2YXBj X2R1bXBfdmlvX2RiZyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpb19pZHgsICZpbmRleCk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaW5kZXggLSAxOwo+ICsgICAg ICAgICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbWFza19t b2R1bGVfaXJxKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIHZpb19pZHgsIGZhbHNlKTsKPiArICAg ICAgICAgICAgICAgfQo+ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgREVGSU5FX1NQSU5M T0NLKGRldmFwY19sb2NrKTsKClVzZWxlc3MsIHNvIHJlbW92ZSBpdC4KCj4gKwo+ICsvKgo+ICsg KiBkZXZhcGNfdmlvbGF0aW9uX2lycSAtIHRoZSBkZXZhcGMgSW50ZXJydXB0IFNlcnZpY2UgUm91 dGluZSAoSVNSKSB3aWxsIGR1bXAKPiArICogICAgICAgICAgICAgICAgICAgICAgIHZpb2xhdGlv biBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgd2hpY2ggbWFzdGVyIHZpb2xhdGVzCj4gKyAqICAgICAg ICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2xhdmUuCj4gKyAqLwo+ICtzdGF0aWMgaXJxcmV0dXJu X3QgZGV2YXBjX3Zpb2xhdGlvbl9pcnEoaW50IGlycV9udW1iZXIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGtfZGV2YXBjX2NvbnRleHQgKmRldmFw Y19jdHgpCj4gK3sKPiArICAgICAgIHUzMiBzbGF2ZV90eXBlX251bSA9IGRldmFwY19jdHgtPnNv Yy0+c2xhdmVfdHlwZV9udW07Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgbXRrX2RldmljZV9pbmZv ICoqZGV2aWNlX2luZm87Cj4gKyAgICAgICBzdHJ1Y3QgbXRrX2RldmFwY192aW9faW5mbyAqdmlv X2luZm87Cj4gKyAgICAgICBpbnQgc2xhdmVfdHlwZSwgdmlvX2lkeCwgaW5kZXg7Cj4gKyAgICAg ICBjb25zdCBjaGFyICp2aW9fbWFzdGVyOwo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK PiArICAgICAgIHU4IHBlcm07Cj4gKwo+ICsgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldmFw Y19sb2NrLCBmbGFncyk7Cj4gKwo+ICsgICAgICAgZGV2aWNlX2luZm8gPSBkZXZhcGNfY3R4LT5z b2MtPmRldmljZV9pbmZvOwo+ICsgICAgICAgdmlvX2luZm8gPSBkZXZhcGNfY3R4LT5zb2MtPnZp b19pbmZvOwo+ICsgICAgICAgdmlvX2lkeCA9IC0xOwo+ICsgICAgICAgaW5kZXggPSAtMTsKPiAr Cj4gKyAgICAgICAvKiBUaGVyZSBhcmUgbXVsdGlwbGUgREVWQVBDX1BEICovCj4gKyAgICAgICBm b3IgKHNsYXZlX3R5cGUgPSAwOyBzbGF2ZV90eXBlIDwgc2xhdmVfdHlwZV9udW07IHNsYXZlX3R5 cGUrKykgewo+ICsgICAgICAgICAgICAgICBpZiAoIWNoZWNrX3R5cGUyX3Zpb19zdGF0dXMoZGV2 YXBjX2N0eCwgc2xhdmVfdHlwZSwgJnZpb19pZHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmaW5kZXgpKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlm ICghbXRrX2RldmFwY19kdW1wX3Zpb19kYmcoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aW9faWR4 LCAmaW5kZXgpKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4g Kwo+ICsgICAgICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCB2aW9sYXRpb24gaW5mbyBhcmUgd3Jp dHRlbiBiZWZvcmUKPiArICAgICAgICAgICAgICAgICogZnVydGhlciBvcGVyYXRpb25zCj4gKyAg ICAgICAgICAgICAgICAqLwo+ICsgICAgICAgICAgICAgICBzbXBfbWIoKTsKPiArCj4gKyAgICAg ICAgICAgICAgIG1hc2tfbW9kdWxlX2lycShkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCB2aW9faWR4 LCB0cnVlKTsKPiArCj4gKyAgICAgICAgICAgICAgIGNsZWFyX3Zpb19zdGF0dXMoZGV2YXBjX2N0 eCwgc2xhdmVfdHlwZSwgdmlvX2lkeCk7Cj4gKwo+ICsgICAgICAgICAgICAgICBwZXJtID0gZ2V0 X3Blcm1pc3Npb24oZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwgaW5kZXgsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2aW9faW5mby0+ZG9tYWluX2lkKTsKPiArCj4gKyAg ICAgICAgICAgICAgIHZpb19tYXN0ZXIgPSBkZXZhcGNfY3R4LT5zb2MtPm1hc3Rlcl9nZXQKPiAr ICAgICAgICAgICAgICAgICAgICAgICAodmlvX2luZm8tPm1hc3Rlcl9pZCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgdmlvX2luZm8tPnZpb19hZGRyLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICBzbGF2ZV90eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICB2aW9faW5mby0+c2hp ZnRfc3RhX2JpdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgdmlvX2luZm8tPmRvbWFpbl9p ZCk7CgpDYWxsIG10Njg3M19idXNfaWRfdG9fbWFzdGVyKCkgZGlyZWN0bHkuCgo+ICsKPiArICAg ICAgICAgICAgICAgaWYgKCF2aW9fbWFzdGVyKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZp b19tYXN0ZXIgPSAiVU5LTk9XTl9NQVNURVIiOwo+ICsKPiArICAgICAgICAgICAgICAgcHJfaW5m byhQRlggIlZpb2xhdGlvbiAtIHNsYXZlX3R5cGU6MHgleCwgc3lzX2luZGV4OjB4JXgsIGN0cmxf aW5kZXg6MHgleCwgdmlvX2luZGV4OjB4JXhcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg c2xhdmVfdHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VfaW5mb1tzbGF2ZV90 eXBlXVtpbmRleF0uc3lzX2luZGV4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9p bmZvW3NsYXZlX3R5cGVdW2luZGV4XS5jdHJsX2luZGV4LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGRldmljZV9pbmZvW3NsYXZlX3R5cGVdW2luZGV4XS52aW9faW5kZXgpOwo+ICsKPiArICAg ICAgICAgICAgICAgcHJfaW5mbyhQRlggIlZpb2xhdGlvbiBNYXN0ZXI6ICVzXG4iLCB2aW9fbWFz dGVyKTsKPiArCj4gKyAgICAgICAgICAgICAgIGRldmFwY192aW9fcmVhc29uKHBlcm0pOwo+ICsK PiArICAgICAgICAgICAgICAgbWFza19tb2R1bGVfaXJxKGRldmFwY19jdHgsIHNsYXZlX3R5cGUs IHZpb19pZHgsIGZhbHNlKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXZhcGNfbG9jaywgZmxhZ3MpOwo+ICsgICAgICAgcmV0dXJuIElSUV9IQU5E TEVEOwo+ICt9Cj4gKwoKW3NuaXBdCgo+ICsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsg KiBWQVJJQUJMRSBERUZJTkFUSU9OCj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4gKyNkZWZp bmUgTU9EX05PX0lOXzFfREVWQVBDICAgICAxNgo+ICsjZGVmaW5lIFZJT0xBVElPTl9UUklHR0VS RUQgICAgMQo+ICsjZGVmaW5lIFZJT0xBVElPTl9NQVNLRUQgICAgICAgMQo+ICsjZGVmaW5lIERF QUQgICAgICAgICAgICAgICAgICAgMHhkZWFkYmVhZgo+ICsjZGVmaW5lIFBGWCAgICAgICAgICAg ICAgICAgICAgIltERVZBUENdOiAiCj4gKyNkZWZpbmUgU0xBVkVfVFlQRV9OVU1fTUFYICAgICA1 CgpTTEFWRV9UWVBFX05VTSBpcyA0LCB3aHkgU0xBVkVfVFlQRV9OVU1fTUFYIGlzIDU/Cgo+ICsK PiArI2RlZmluZSBkZXZhcGNfbG9nKHAsIHMsIGZtdCwgYXJncy4uLikgXAo+ICsgICAgICAgZG8g eyBcCj4gKyAgICAgICAgICAgICAgIHR5cGVvZihwKSAoX3ApID0gKHApOyBcCj4gKyAgICAgICAg ICAgICAgICgoX3ApICs9IHNjbnByaW50ZihfcCwgc2l6ZW9mKHMpIC0gc3RybGVuKHMpLCBmbXQs ICMjYXJncykpOyBcCj4gKyAgICAgICB9IHdoaWxlICgwKQoKVXNlbGVzcywgc28gcmVtb3ZlIGl0 LgoKPiArCj4gKyNkZWZpbmUgVU5VU0VEKHgpICAgICAgICAgICAgICAodm9pZCkoeCkKClVzZWxl c3MsIHNvIHJlbW92ZSBpdC4KCj4gKwo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqIERB VEEgU1RSVUNUVVJFICYgRlVOQ1RJT04gREVGSU5BVElPTgo+ICsgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwo+ICtlbnVtIERFVkFQQ19QRF9SRUdfVFlQRSB7Cj4gKyAgICAgICBWSU9fTUFTSyA9IDAs Cj4gKyAgICAgICBWSU9fU1RBLAo+ICsgICAgICAgVklPX0RCRzAsCj4gKyAgICAgICBWSU9fREJH MSwKPiArICAgICAgIFZJT19EQkcyLAo+ICsgICAgICAgQVBDX0NPTiwKPiArICAgICAgIFZJT19T SElGVF9TVEEsCj4gKyAgICAgICBWSU9fU0hJRlRfU0VMLAo+ICsgICAgICAgVklPX1NISUZUX0NP TiwKPiArICAgICAgIFBEX1JFR19UWVBFX05VTSwKPiArfTsKPiArCj4gK2VudW0gREVWQVBDX1VU X0NNRCB7Cj4gKyAgICAgICBERVZBUENfVVRfREFQQ19WSU8gPSAxLAo+ICsgICAgICAgREVWQVBD X1VUX1NSQU1fVklPLAo+ICt9OwoKVXNlbGVzcywgc28gcmVtb3ZlIGl0LgoKPiArCj4gK2VudW0g REVWQVBDX0RPTV9JRCB7Cj4gKyAgICAgICBET01BSU5fMCA9IDAsCj4gKyAgICAgICBET01BSU5f MSwKPiArICAgICAgIERPTUFJTl8yLAo+ICsgICAgICAgRE9NQUlOXzMsCj4gKyAgICAgICBET01B SU5fNCwKPiArICAgICAgIERPTUFJTl81LAo+ICsgICAgICAgRE9NQUlOXzYsCj4gKyAgICAgICBE T01BSU5fNywKPiArICAgICAgIERPTUFJTl84LAo+ICsgICAgICAgRE9NQUlOXzksCj4gKyAgICAg ICBET01BSU5fMTAsCj4gKyAgICAgICBET01BSU5fMTEsCj4gKyAgICAgICBET01BSU5fMTIsCj4g KyAgICAgICBET01BSU5fMTMsCj4gKyAgICAgICBET01BSU5fMTQsCj4gKyAgICAgICBET01BSU5f MTUsCj4gKyAgICAgICBET01BSU5fT1RIRVJTLAo+ICt9OwoKVXNlbGVzcywgc28gcmVtb3ZlIGl0 LgoKPiArCj4gK2VudW0gU1JBTVJPTV9WSU8gewo+ICsgICAgICAgUk9NX1ZJT0xBVElPTiA9IDAs Cj4gKyAgICAgICBTUkFNX1ZJT0xBVElPTiwKPiArfTsKPiArCj4gK2VudW0gREVWQVBDX1BFUk1f VFlQRSB7Cj4gKyAgICAgICBOT19QUk9URUNUSU9OID0gMCwKPiArICAgICAgIFNFQ19SV19PTkxZ LAo+ICsgICAgICAgU0VDX1JXX05TX1IsCj4gKyAgICAgICBGT1JCSURERU4sCj4gKyAgICAgICBQ RVJNX1RZUEVfTlVNLAo+ICt9Owo+ICsKPiArc3RydWN0IG10a19kZXZhcGNfZGJnX3N0YXR1cyB7 Cj4gKyAgICAgICBib29sIGVuYWJsZV91dDsKPiArICAgICAgIGJvb2wgZW5hYmxlX2RhcGM7IC8q IGR1bXAgQVBDICovCj4gK307CgpVc2VsZXNzLCBzbyByZW1vdmUgaXQuCgpSZWdhcmRzLApDaHVu LUt1YW5nLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K TGludXgtbWVkaWF0ZWsgbWFpbGluZyBsaXN0CkxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1t ZWRpYXRlawo= 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 X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 36736C433E0 for ; Fri, 19 Jun 2020 16:26:16 +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 ED1F321707 for ; Fri, 19 Jun 2020 16:26:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="OfqHJeP3"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="P5GZ1Wzl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ED1F321707 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=0MUASW5BfCUPkG6mdHPsEKnCulib9cOHoQpEq725miI=; b=OfqHJeP3843CzK 5hoFONUOKHsLL6q0/P0LlOWHP0z+5gLr39yiHQ7ZE36NCg+6hsc3uyLaeY8S4iAy7QaLCu4yUClpj J+Ryo0DrUDfxYjl1tkMX5VwBOOhZHGoBqGefI7uGeq1V/X7nH+bk05pFiDjwo4h+F7dRcCZN9sbW1 A8QzHPTeXPokC8jO/U3T4LtOq7mEPDQtL2vTT7u0QwtkAjJHEOz1K33aOVZmi601XO3WJhsPNIfIe uTykll8Ymlp96kpvk932SMrkbSdfFkdO2ud9nSe3YK8PCtpPUcOVxLlWojvBqGQHKJrEIhw7LzM5x g1sTQ7o5xrDLW1DtuJYQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jmJqI-00052i-FA; Fri, 19 Jun 2020 16:26:14 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jmJqD-000516-H0; Fri, 19 Jun 2020 16:26:12 +0000 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6513321919; Fri, 19 Jun 2020 16:26:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592583968; bh=78Kv0bButl8hiJiTg88qkjpdJFgrMdmTuvdr++dJwhM=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=P5GZ1WzldX067+LJvMu1BQMUm5F0JkgEw0Egqt3qbmsCRsU86+z0xixgDXdESwXzR Y6A1dbxgTcLy3FdUfrCszcCY7Vg76N2lC6POuQHSzbn+6/O4+Eb1VlwoMu4j02klpx x2crMNA6vlo4IbyXTnWdAQ2OQXXRzhupZmUdQqeM= Received: by mail-ej1-f52.google.com with SMTP id dp18so10800113ejc.8; Fri, 19 Jun 2020 09:26:08 -0700 (PDT) X-Gm-Message-State: AOAM533h8Q/j4okl9vqH7SjKuoJBt5gdhomQByA+9jzGPxPHBCgc9I9d 2ho1L3cJGiDIC8trI9uyfKrtkBwm71v/5FbsLg== X-Google-Smtp-Source: ABdhPJyKTOXjxdzTySonR/YjAmPvTl/qJK203QbKCJ4CRUzoxbAJNoQkV879w9AEzXL4LeBMXdQN3Iq5EK2gqoi5DeI= X-Received: by 2002:a17:906:468e:: with SMTP id a14mr4390709ejr.124.1592583966878; Fri, 19 Jun 2020 09:26:06 -0700 (PDT) MIME-Version: 1.0 References: <1592559720-8482-1-git-send-email-neal.liu@mediatek.com> <1592559720-8482-3-git-send-email-neal.liu@mediatek.com> In-Reply-To: <1592559720-8482-3-git-send-email-neal.liu@mediatek.com> From: Chun-Kuang Hu Date: Sat, 20 Jun 2020 00:25:55 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v2 2/2] soc: mediatek: devapc: add devapc-mt6873 driver To: Neal Liu X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200619_092609_604289_5363BE57 X-CRM114-Status: GOOD ( 16.08 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, wsd_upstream , linux-kernel , Rob Herring , "moderated list:ARM/Mediatek SoC support" , Matthias Brugger , Linux ARM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksIE5lYWw6CgpOZWFsIExpdSA8bmVhbC5saXVAbWVkaWF0ZWsuY29tPiDmlrwgMjAyMOW5tDbm nIgxOeaXpSDpgLHkupQg5LiL5Y2INjowMeWvq+mBk++8mgo+Cj4gTVQ2ODczIGJ1cyBmcmFicmlj IHByb3ZpZGVzIFRydXN0Wm9uZSBzZWN1cml0eSBzdXBwb3J0IGFuZCBkYXRhCj4gcHJvdGVjdGlv biB0byBwcmV2ZW50IHNsYXZlcyBmcm9tIGJlaW5nIGFjY2Vzc2VkIGJ5IHVuZXhwZWN0ZWQKPiBt YXN0ZXJzLgo+IFRoZSBzZWN1cml0eSB2aW9sYXRpb25zIGFyZSBsb2dnZWQgYW5kIHNlbnQgdG8g dGhlIHByb2Nlc3NvciBmb3IKPiBmdXJ0aGVyIGFuYWx5c2lzIG9yIGNvdW50ZXJtZWFzdXJlcy4K Pgo+IEFueSBvY2N1cnJlbmNlIG9mIHNlY3VyaXR5IHZpb2xhdGlvbiB3b3VsZCByYWlzZSBhbiBp bnRlcnJ1cHQsIGFuZAo+IGl0IHdpbGwgYmUgaGFuZGxlZCBieSBkZXZhcGMtbXQ2ODczIGRyaXZl ci4gVGhlIHZpb2xhdGlvbgo+IGluZm9ybWF0aW9uIGlzIHByaW50ZWQgaW4gb3JkZXIgdG8gZmlu ZCB0aGUgbXVyZGVyZXIuCj4KPiBTaWduZWQtb2ZmLWJ5OiBOZWFsIExpdSA8bmVhbC5saXVAbWVk aWF0ZWsuY29tPgo+IC0tLQoKW3NuaXBdCgo+ICsKPiArLyoKPiArICogbXRrX2RldmFwY19wZF9n ZXQgLSBnZXQgZGV2YXBjIHBkX3R5cGVzIG9mIHJlZ2lzdGVyIGFkZHJlc3MuCj4gKyAqCj4gKyAq IFJldHVybnMgdGhlIHZhbHVlIG9mIHJlZyBhZGRyCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBfX2lv bWVtICptdGtfZGV2YXBjX3BkX2dldChzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0ICpkZXZhcGNf Y3R4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzbGF2ZV90 eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gREVWQVBD X1BEX1JFR19UWVBFIHBkX3JlZ190eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHUzMiBpbmRleCkKPiArewo+ICsgICAgICAgc3RydWN0IG10a19kZXZhcGNfdmlv X2luZm8gKnZpb19pbmZvID0gZGV2YXBjX2N0eC0+c29jLT52aW9faW5mbzsKPiArICAgICAgIHUz MiBzbGF2ZV90eXBlX251bSA9IGRldmFwY19jdHgtPnNvYy0+c2xhdmVfdHlwZV9udW07Cj4gKyAg ICAgICBjb25zdCB1MzIgKmRldmFwY19wZHMgPSBkZXZhcGNfY3R4LT5zb2MtPmRldmFwY19wZHM7 CgpkZXZhcGNfcGRzID0gbXQ2ODczX2RldmFwY19wZHM7CgoKPiArICAgICAgIHZvaWQgX19pb21l bSAqcmVnOwo+ICsKPiArICAgICAgIGlmICghZGV2YXBjX3BkcykKCk5ldmVyIGhhcHBlbi4KCj4g KyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ICsKPiArICAgICAgIGlmICgoc2xhdmVfdHlw ZSA8IHNsYXZlX3R5cGVfbnVtICYmCj4gKyAgICAgICAgICAgIGluZGV4IDwgdmlvX2luZm8tPnZp b19tYXNrX3N0YV9udW1bc2xhdmVfdHlwZV0pICYmCj4gKyAgICAgICAgICAgcGRfcmVnX3R5cGUg PCBQRF9SRUdfVFlQRV9OVU0pIHsKCkFsd2F5cyB0cnVlLgoKPiArICAgICAgICAgICAgICAgcmVn ID0gZGV2YXBjX2N0eC0+ZGV2YXBjX3BkX2Jhc2Vbc2xhdmVfdHlwZV0gKwo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGRldmFwY19wZHNbcGRfcmVnX3R5cGVdOwo+ICsKPiArICAgICAgICAgICAg ICAgaWYgKHBkX3JlZ190eXBlID09IFZJT19NQVNLIHx8IHBkX3JlZ190eXBlID09IFZJT19TVEEp Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVnICs9IDB4NCAqIGluZGV4Owo+ICsKPiArICAg ICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIHByX2VycihQRlggIk91dCBPZiBCb3VuZGFy eSwgc2xhdmVfdHlwZToweCV4L3BkX3JlZ190eXBlOjB4JXgvaW5kZXg6MHgleFxuIiwKPiArICAg ICAgICAgICAgICAgICAgICAgIHNsYXZlX3R5cGUsIHBkX3JlZ190eXBlLCBpbmRleCk7Cj4gKyAg ICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVy biByZWc7Cj4gK30KPiArCgpbc25pcF0KCj4gKwo+ICsvKgo+ICsgKiBzdGFydF9kZXZhcGMgLSBp bml0aWFsaXplIGRldmFwYyBzdGF0dXMgYW5kIHN0YXJ0IHJlY2VpdmluZyBpbnRlcnJ1cHQKPiAr ICogICAgICAgICAgICAgICB3aGlsZSBkZXZhcGMgdmlvbGF0aW9uIGlzIHRyaWdnZXJlZC4KPiAr ICovCj4gK3N0YXRpYyB2b2lkIHN0YXJ0X2RldmFwYyhzdHJ1Y3QgbXRrX2RldmFwY19jb250ZXh0 ICpkZXZhcGNfY3R4KQo+ICt7Cj4gKyAgICAgICB1MzIgc2xhdmVfdHlwZV9udW0gPSBkZXZhcGNf Y3R4LT5zb2MtPnNsYXZlX3R5cGVfbnVtOwo+ICsgICAgICAgY29uc3Qgc3RydWN0IG10a19kZXZp Y2VfaW5mbyAqKmRldmljZV9pbmZvOwo+ICsgICAgICAgY29uc3Qgc3RydWN0IG10a19kZXZpY2Vf bnVtICpuZGV2aWNlczsKPiArICAgICAgIHZvaWQgX19pb21lbSAqcGRfdmlvX3NoaWZ0X3N0YV9y ZWc7Cj4gKyAgICAgICB2b2lkIF9faW9tZW0gKnBkX2FwY19jb25fcmVnOwo+ICsgICAgICAgaW50 IHNsYXZlX3R5cGUsIGksIHZpb19pZHgsIGluZGV4Owo+ICsgICAgICAgdTMyIHZpb19zaGlmdF9z dGE7Cj4gKwo+ICsgICAgICAgbmRldmljZXMgPSBkZXZhcGNfY3R4LT5zb2MtPm5kZXZpY2VzOwoK bmRldmljZXMgPSBtdGs2ODczX2RldmljZXNfbnVtOwoKCj4gKwo+ICsgICAgICAgZGV2aWNlX2lu Zm8gPSBkZXZhcGNfY3R4LT5zb2MtPmRldmljZV9pbmZvOwo+ICsKPiArICAgICAgIGZvciAoc2xh dmVfdHlwZSA9IDA7IHNsYXZlX3R5cGUgPCBzbGF2ZV90eXBlX251bTsgc2xhdmVfdHlwZSsrKSB7 Cj4gKyAgICAgICAgICAgICAgIHBkX2FwY19jb25fcmVnID0gbXRrX2RldmFwY19wZF9nZXQoZGV2 YXBjX2N0eCwgc2xhdmVfdHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBUENfQ09OLCAwKTsKPiArICAgICAgICAgICAgICAgcGRfdmlvX3No aWZ0X3N0YV9yZWcgPSBtdGtfZGV2YXBjX3BkX2dldChkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZJT19TSElGVF9TVEEsIDApOwo+ICsKPiArICAgICAgICAgICAgICAgaWYgKCFwZF9hcGNfY29u X3JlZyB8fCAhcGRfdmlvX3NoaWZ0X3N0YV9yZWcgfHwgIWRldmljZV9pbmZvKQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAgICAgICAgICAgIC8qIENsZWFyIERF VkFQQyB2aW9sYXRpb24gc3RhdHVzICovCj4gKyAgICAgICAgICAgICAgIHdyaXRlbChCSVQoMzEp LCBwZF9hcGNfY29uX3JlZyk7Cj4gKwo+ICsgICAgICAgICAgICAgICAvKiBDbGVhciB2aW9sYXRp b24gc2hpZnQgc3RhdHVzICovCj4gKyAgICAgICAgICAgICAgIHZpb19zaGlmdF9zdGEgPSByZWFk bChwZF92aW9fc2hpZnRfc3RhX3JlZyk7Cj4gKyAgICAgICAgICAgICAgIGlmICh2aW9fc2hpZnRf c3RhKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbCh2aW9fc2hpZnRfc3RhLCBwZF92 aW9fc2hpZnRfc3RhX3JlZyk7Cj4gKwo+ICsgICAgICAgICAgICAgICAvKiBDbGVhciB0eXBlIDIg dmlvbGF0aW9uIHN0YXR1cyAqLwo+ICsgICAgICAgICAgICAgICBjaGVja190eXBlMl92aW9fc3Rh dHVzKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsICZ2aW9faWR4LCAmaSk7Cj4gKwo+ICsgICAgICAg ICAgICAgICAvKiBDbGVhciB2aW9sYXRpb24gc3RhdHVzICovCj4gKyAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBuZGV2aWNlc1tzbGF2ZV90eXBlXS52aW9fc2xhdmVfbnVtOyBpKyspIHsK PiArICAgICAgICAgICAgICAgICAgICAgICB2aW9faWR4ID0gZGV2aWNlX2luZm9bc2xhdmVfdHlw ZV1baV0udmlvX2luZGV4Owo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY2hlY2tfdmlv X3N0YXR1cyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCB2aW9faWR4KQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBWSU9MQVRJT05fVFJJR0dFUkVEKSAm Jgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJfdmlvX3N0YXR1cyhkZXZhcGNf Y3R4LCBzbGF2ZV90eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2aW9faWR4KSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJf d2FybihQRlggIkNsZWFyIHZpbyBzdGF0dXMgZmFpbGVkLCBzbGF2ZV90eXBlOjB4JXgsIHZpb19p bmRleDoweCV4XG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz bGF2ZV90eXBlLCB2aW9faWR4KTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbmRleCA9IGk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGtfZGV2YXBj X2R1bXBfdmlvX2RiZyhkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpb19pZHgsICZpbmRleCk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaW5kZXggLSAxOwo+ICsgICAg ICAgICAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbWFza19t b2R1bGVfaXJxKGRldmFwY19jdHgsIHNsYXZlX3R5cGUsIHZpb19pZHgsIGZhbHNlKTsKPiArICAg ICAgICAgICAgICAgfQo+ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgREVGSU5FX1NQSU5M T0NLKGRldmFwY19sb2NrKTsKClVzZWxlc3MsIHNvIHJlbW92ZSBpdC4KCj4gKwo+ICsvKgo+ICsg KiBkZXZhcGNfdmlvbGF0aW9uX2lycSAtIHRoZSBkZXZhcGMgSW50ZXJydXB0IFNlcnZpY2UgUm91 dGluZSAoSVNSKSB3aWxsIGR1bXAKPiArICogICAgICAgICAgICAgICAgICAgICAgIHZpb2xhdGlv biBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgd2hpY2ggbWFzdGVyIHZpb2xhdGVzCj4gKyAqICAgICAg ICAgICAgICAgICAgICAgICBhY2Nlc3Mgc2xhdmUuCj4gKyAqLwo+ICtzdGF0aWMgaXJxcmV0dXJu X3QgZGV2YXBjX3Zpb2xhdGlvbl9pcnEoaW50IGlycV9udW1iZXIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGtfZGV2YXBjX2NvbnRleHQgKmRldmFw Y19jdHgpCj4gK3sKPiArICAgICAgIHUzMiBzbGF2ZV90eXBlX251bSA9IGRldmFwY19jdHgtPnNv Yy0+c2xhdmVfdHlwZV9udW07Cj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgbXRrX2RldmljZV9pbmZv ICoqZGV2aWNlX2luZm87Cj4gKyAgICAgICBzdHJ1Y3QgbXRrX2RldmFwY192aW9faW5mbyAqdmlv X2luZm87Cj4gKyAgICAgICBpbnQgc2xhdmVfdHlwZSwgdmlvX2lkeCwgaW5kZXg7Cj4gKyAgICAg ICBjb25zdCBjaGFyICp2aW9fbWFzdGVyOwo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK PiArICAgICAgIHU4IHBlcm07Cj4gKwo+ICsgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldmFw Y19sb2NrLCBmbGFncyk7Cj4gKwo+ICsgICAgICAgZGV2aWNlX2luZm8gPSBkZXZhcGNfY3R4LT5z b2MtPmRldmljZV9pbmZvOwo+ICsgICAgICAgdmlvX2luZm8gPSBkZXZhcGNfY3R4LT5zb2MtPnZp b19pbmZvOwo+ICsgICAgICAgdmlvX2lkeCA9IC0xOwo+ICsgICAgICAgaW5kZXggPSAtMTsKPiAr Cj4gKyAgICAgICAvKiBUaGVyZSBhcmUgbXVsdGlwbGUgREVWQVBDX1BEICovCj4gKyAgICAgICBm b3IgKHNsYXZlX3R5cGUgPSAwOyBzbGF2ZV90eXBlIDwgc2xhdmVfdHlwZV9udW07IHNsYXZlX3R5 cGUrKykgewo+ICsgICAgICAgICAgICAgICBpZiAoIWNoZWNrX3R5cGUyX3Zpb19zdGF0dXMoZGV2 YXBjX2N0eCwgc2xhdmVfdHlwZSwgJnZpb19pZHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmaW5kZXgpKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlm ICghbXRrX2RldmFwY19kdW1wX3Zpb19kYmcoZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aW9faWR4 LCAmaW5kZXgpKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4g Kwo+ICsgICAgICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCB2aW9sYXRpb24gaW5mbyBhcmUgd3Jp dHRlbiBiZWZvcmUKPiArICAgICAgICAgICAgICAgICogZnVydGhlciBvcGVyYXRpb25zCj4gKyAg ICAgICAgICAgICAgICAqLwo+ICsgICAgICAgICAgICAgICBzbXBfbWIoKTsKPiArCj4gKyAgICAg ICAgICAgICAgIG1hc2tfbW9kdWxlX2lycShkZXZhcGNfY3R4LCBzbGF2ZV90eXBlLCB2aW9faWR4 LCB0cnVlKTsKPiArCj4gKyAgICAgICAgICAgICAgIGNsZWFyX3Zpb19zdGF0dXMoZGV2YXBjX2N0 eCwgc2xhdmVfdHlwZSwgdmlvX2lkeCk7Cj4gKwo+ICsgICAgICAgICAgICAgICBwZXJtID0gZ2V0 X3Blcm1pc3Npb24oZGV2YXBjX2N0eCwgc2xhdmVfdHlwZSwgaW5kZXgsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2aW9faW5mby0+ZG9tYWluX2lkKTsKPiArCj4gKyAg ICAgICAgICAgICAgIHZpb19tYXN0ZXIgPSBkZXZhcGNfY3R4LT5zb2MtPm1hc3Rlcl9nZXQKPiAr ICAgICAgICAgICAgICAgICAgICAgICAodmlvX2luZm8tPm1hc3Rlcl9pZCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgdmlvX2luZm8tPnZpb19hZGRyLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICBzbGF2ZV90eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICB2aW9faW5mby0+c2hp ZnRfc3RhX2JpdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgdmlvX2luZm8tPmRvbWFpbl9p ZCk7CgpDYWxsIG10Njg3M19idXNfaWRfdG9fbWFzdGVyKCkgZGlyZWN0bHkuCgo+ICsKPiArICAg ICAgICAgICAgICAgaWYgKCF2aW9fbWFzdGVyKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZp b19tYXN0ZXIgPSAiVU5LTk9XTl9NQVNURVIiOwo+ICsKPiArICAgICAgICAgICAgICAgcHJfaW5m byhQRlggIlZpb2xhdGlvbiAtIHNsYXZlX3R5cGU6MHgleCwgc3lzX2luZGV4OjB4JXgsIGN0cmxf aW5kZXg6MHgleCwgdmlvX2luZGV4OjB4JXhcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg c2xhdmVfdHlwZSwKPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VfaW5mb1tzbGF2ZV90 eXBlXVtpbmRleF0uc3lzX2luZGV4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldmljZV9p bmZvW3NsYXZlX3R5cGVdW2luZGV4XS5jdHJsX2luZGV4LAo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGRldmljZV9pbmZvW3NsYXZlX3R5cGVdW2luZGV4XS52aW9faW5kZXgpOwo+ICsKPiArICAg ICAgICAgICAgICAgcHJfaW5mbyhQRlggIlZpb2xhdGlvbiBNYXN0ZXI6ICVzXG4iLCB2aW9fbWFz dGVyKTsKPiArCj4gKyAgICAgICAgICAgICAgIGRldmFwY192aW9fcmVhc29uKHBlcm0pOwo+ICsK PiArICAgICAgICAgICAgICAgbWFza19tb2R1bGVfaXJxKGRldmFwY19jdHgsIHNsYXZlX3R5cGUs IHZpb19pZHgsIGZhbHNlKTsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXZhcGNfbG9jaywgZmxhZ3MpOwo+ICsgICAgICAgcmV0dXJuIElSUV9IQU5E TEVEOwo+ICt9Cj4gKwoKW3NuaXBdCgo+ICsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsg KiBWQVJJQUJMRSBERUZJTkFUSU9OCj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4gKyNkZWZp bmUgTU9EX05PX0lOXzFfREVWQVBDICAgICAxNgo+ICsjZGVmaW5lIFZJT0xBVElPTl9UUklHR0VS RUQgICAgMQo+ICsjZGVmaW5lIFZJT0xBVElPTl9NQVNLRUQgICAgICAgMQo+ICsjZGVmaW5lIERF QUQgICAgICAgICAgICAgICAgICAgMHhkZWFkYmVhZgo+ICsjZGVmaW5lIFBGWCAgICAgICAgICAg ICAgICAgICAgIltERVZBUENdOiAiCj4gKyNkZWZpbmUgU0xBVkVfVFlQRV9OVU1fTUFYICAgICA1 CgpTTEFWRV9UWVBFX05VTSBpcyA0LCB3aHkgU0xBVkVfVFlQRV9OVU1fTUFYIGlzIDU/Cgo+ICsK PiArI2RlZmluZSBkZXZhcGNfbG9nKHAsIHMsIGZtdCwgYXJncy4uLikgXAo+ICsgICAgICAgZG8g eyBcCj4gKyAgICAgICAgICAgICAgIHR5cGVvZihwKSAoX3ApID0gKHApOyBcCj4gKyAgICAgICAg ICAgICAgICgoX3ApICs9IHNjbnByaW50ZihfcCwgc2l6ZW9mKHMpIC0gc3RybGVuKHMpLCBmbXQs ICMjYXJncykpOyBcCj4gKyAgICAgICB9IHdoaWxlICgwKQoKVXNlbGVzcywgc28gcmVtb3ZlIGl0 LgoKPiArCj4gKyNkZWZpbmUgVU5VU0VEKHgpICAgICAgICAgICAgICAodm9pZCkoeCkKClVzZWxl c3MsIHNvIHJlbW92ZSBpdC4KCj4gKwo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqIERB VEEgU1RSVUNUVVJFICYgRlVOQ1RJT04gREVGSU5BVElPTgo+ICsgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwo+ICtlbnVtIERFVkFQQ19QRF9SRUdfVFlQRSB7Cj4gKyAgICAgICBWSU9fTUFTSyA9IDAs Cj4gKyAgICAgICBWSU9fU1RBLAo+ICsgICAgICAgVklPX0RCRzAsCj4gKyAgICAgICBWSU9fREJH MSwKPiArICAgICAgIFZJT19EQkcyLAo+ICsgICAgICAgQVBDX0NPTiwKPiArICAgICAgIFZJT19T SElGVF9TVEEsCj4gKyAgICAgICBWSU9fU0hJRlRfU0VMLAo+ICsgICAgICAgVklPX1NISUZUX0NP TiwKPiArICAgICAgIFBEX1JFR19UWVBFX05VTSwKPiArfTsKPiArCj4gK2VudW0gREVWQVBDX1VU X0NNRCB7Cj4gKyAgICAgICBERVZBUENfVVRfREFQQ19WSU8gPSAxLAo+ICsgICAgICAgREVWQVBD X1VUX1NSQU1fVklPLAo+ICt9OwoKVXNlbGVzcywgc28gcmVtb3ZlIGl0LgoKPiArCj4gK2VudW0g REVWQVBDX0RPTV9JRCB7Cj4gKyAgICAgICBET01BSU5fMCA9IDAsCj4gKyAgICAgICBET01BSU5f MSwKPiArICAgICAgIERPTUFJTl8yLAo+ICsgICAgICAgRE9NQUlOXzMsCj4gKyAgICAgICBET01B SU5fNCwKPiArICAgICAgIERPTUFJTl81LAo+ICsgICAgICAgRE9NQUlOXzYsCj4gKyAgICAgICBE T01BSU5fNywKPiArICAgICAgIERPTUFJTl84LAo+ICsgICAgICAgRE9NQUlOXzksCj4gKyAgICAg ICBET01BSU5fMTAsCj4gKyAgICAgICBET01BSU5fMTEsCj4gKyAgICAgICBET01BSU5fMTIsCj4g KyAgICAgICBET01BSU5fMTMsCj4gKyAgICAgICBET01BSU5fMTQsCj4gKyAgICAgICBET01BSU5f MTUsCj4gKyAgICAgICBET01BSU5fT1RIRVJTLAo+ICt9OwoKVXNlbGVzcywgc28gcmVtb3ZlIGl0 LgoKPiArCj4gK2VudW0gU1JBTVJPTV9WSU8gewo+ICsgICAgICAgUk9NX1ZJT0xBVElPTiA9IDAs Cj4gKyAgICAgICBTUkFNX1ZJT0xBVElPTiwKPiArfTsKPiArCj4gK2VudW0gREVWQVBDX1BFUk1f VFlQRSB7Cj4gKyAgICAgICBOT19QUk9URUNUSU9OID0gMCwKPiArICAgICAgIFNFQ19SV19PTkxZ LAo+ICsgICAgICAgU0VDX1JXX05TX1IsCj4gKyAgICAgICBGT1JCSURERU4sCj4gKyAgICAgICBQ RVJNX1RZUEVfTlVNLAo+ICt9Owo+ICsKPiArc3RydWN0IG10a19kZXZhcGNfZGJnX3N0YXR1cyB7 Cj4gKyAgICAgICBib29sIGVuYWJsZV91dDsKPiArICAgICAgIGJvb2wgZW5hYmxlX2RhcGM7IC8q IGR1bXAgQVBDICovCj4gK307CgpVc2VsZXNzLCBzbyByZW1vdmUgaXQuCgpSZWdhcmRzLApDaHVu LUt1YW5nLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=