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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DDADFC74A5B for ; Wed, 29 Mar 2023 22:41:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230385AbjC2WlJ (ORCPT ); Wed, 29 Mar 2023 18:41:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60036 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230369AbjC2WlI (ORCPT ); Wed, 29 Mar 2023 18:41:08 -0400 Received: from mail-yb1-xb31.google.com (mail-yb1-xb31.google.com [IPv6:2607:f8b0:4864:20::b31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF16A4C28 for ; Wed, 29 Mar 2023 15:41:00 -0700 (PDT) Received: by mail-yb1-xb31.google.com with SMTP id r187so21365758ybr.6 for ; Wed, 29 Mar 2023 15:41:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; t=1680129660; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=HP6j+DU+MoE9A0IYOuntBF31Ne44IF3oyP+KWeldQTc=; b=0B0q14oWCxtPwbWeDxp+M+ZsWj8UfgNmit5vebjz9hpyyAxEVueR0PbDGmwoMWUI9u Cfr12jqh2pAmn1lSPaH0DuOohUl8BUb+bklVg3pdVDnJiHgX8yj7pJEHAqUZOrMFph5p qzHpAdUk0RbvOFmQsTWqBEnqATlLGiLptmiMC2EkK5sl/Sd6+blsPG3M28Wj7AMfIWO5 EPjOiu+iM3U+KQ7GAbE+c8ILElGBVlF7jYqzgmFWqtEpUIviZlfjFTBEwoprMkyHzz37 u/bwomiqeJdsJOeV7kw8ejggyqNv1ILgmVRfhk0nTLxxpvcooR7McXpI//8FoWCRbES0 Scsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680129660; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HP6j+DU+MoE9A0IYOuntBF31Ne44IF3oyP+KWeldQTc=; b=7jgGBAIsKlDs4Mlo741YsB5vej/aL8TeNOmpTl0rZgeuCqKNWJNZAPs8Xoqoi3z/MZ zODESnsTvqGbfASeRsawAD9joR7m2A9U2HLuh5YaSJOLcYklTChI2bcmNHaikM2xR/+g JFUR6M5jHXNjvNiJCj4m9KUFTDxBLQbomWQPh5p4qGqmn3peMxqlePjsHVawZpeQtuFb vAXeAXbTGv23iwpfcOU5GgwT4WiOEkgS0lCzszUO4VCLtDBq1b2hcPgulbNDzUAOh0rY 76XktCSX5xa7cOgjE4Y7do8nzt004WfrufBheu8U5GtGgRZHjQjkMipuJ+0kF+S5LuVH ftZA== X-Gm-Message-State: AAQBX9cYOUyL0l/IGStTReM93e/hNbGoA0HfoRHZ3FTMVW5vD9Y0GRDp KmpLjUE5DJwRBSawJbS0T2VYxxdjiyGcIJ3MFobpdYMElSr49DTwKGw= X-Google-Smtp-Source: AKy350auSkretDCKc3GwqJLWtBSKFs7m8qlQ5csPeo5vk/e6+ySCdpua771J676eyVzfkMOED+NXF4As/QobiYttluE= X-Received: by 2002:a05:6902:1181:b0:b6c:2224:8a77 with SMTP id m1-20020a056902118100b00b6c22248a77mr14001376ybu.1.1680129660014; Wed, 29 Mar 2023 15:41:00 -0700 (PDT) MIME-Version: 1.0 References: <20230324094205.33266-1-angelogioacchino.delregno@collabora.com> <20230324094205.33266-5-angelogioacchino.delregno@collabora.com> In-Reply-To: <20230324094205.33266-5-angelogioacchino.delregno@collabora.com> From: Alexandre Mergnat Date: Thu, 30 Mar 2023 00:40:48 +0200 Message-ID: Subject: Re: [PATCH v2 4/6] soc: mediatek: mtk-pmic-wrap: Add support for companion PMICs To: AngeloGioacchino Del Regno Cc: matthias.bgg@gmail.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, flora.fu@mediatek.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: phone-devel@vger.kernel.org Le ven. 24 mars 2023 =C3=A0 10:42, AngeloGioacchino Del Regno a =C3=A9crit : > > Some PMICs are designed to work with a companion part, which provides > more regulators and/or companion devices such as LED controllers, > display backlight controllers, battery charging, fuel gauge, etc: > this kind of PMICs are usually present in smartphone platforms, where > tight integration is required. > > Signed-off-by: AngeloGioacchino Del Regno > --- > drivers/soc/mediatek/mtk-pmic-wrap.c | 73 ++++++++++++++++++++++------ > 1 file changed, 59 insertions(+), 14 deletions(-) > > diff --git a/drivers/soc/mediatek/mtk-pmic-wrap.c b/drivers/soc/mediatek/= mtk-pmic-wrap.c > index a33a1b1820cb..366e40b802e4 100644 > --- a/drivers/soc/mediatek/mtk-pmic-wrap.c > +++ b/drivers/soc/mediatek/mtk-pmic-wrap.c > @@ -47,6 +47,7 @@ > > /* macro for device wrapper default value */ > #define PWRAP_DEW_READ_TEST_VAL 0x5aa5 > +#define PWRAP_DEW_COMP_READ_TEST_VAL 0xa55a > #define PWRAP_DEW_WRITE_TEST_VAL 0xa55a > > /* macro for manual command */ > @@ -1222,12 +1223,16 @@ struct pwrap_slv_regops { > * struct pwrap_slv_type - PMIC device wrapper definitions > * @dew_regs: Device Wrapper (DeW) register offsets > * @type: PMIC Type (model) > + * @comp_dew_regs: Device Wrapper (DeW) register offsets for companion d= evice > + * @comp_type: Companion PMIC Type (model) > * @regops: Register R/W ops > * @caps: Capability flags for the target device > */ > struct pwrap_slv_type { > const u32 *dew_regs; > enum pmic_type type; > + const u32 *comp_dew_regs; > + enum pmic_type comp_type; > const struct pwrap_slv_regops *regops; > u32 caps; > }; > @@ -1548,9 +1553,12 @@ static int pwrap_init_dual_io(struct pmic_wrapper = *wrp) > { > int ret; > bool read_ok, tmp; > + bool comp_read_ok =3D true; > > /* Enable dual IO mode */ > pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_DIO_EN], 1); > + if (wrp->slave->comp_dew_regs) > + pwrap_write(wrp, wrp->slave->comp_dew_regs[PWRAP_DEW_DIO_= EN], 1); > > /* Check IDLE & INIT_DONE in advance */ > ret =3D readx_poll_timeout(pwrap_is_fsm_idle_and_sync_idle, wrp, = tmp, tmp, > @@ -1564,8 +1572,14 @@ static int pwrap_init_dual_io(struct pmic_wrapper = *wrp) > > /* Read Test */ > read_ok =3D pwrap_pmic_read_test(wrp, wrp->slave->dew_regs, PWRAP= _DEW_READ_TEST_VAL); > - if (!read_ok) { > - dev_err(wrp->dev, "Read failed on DIO mode.\n"); > + if (wrp->slave->comp_dew_regs) > + comp_read_ok =3D pwrap_pmic_read_test(wrp, wrp->slave->co= mp_dew_regs, > + PWRAP_DEW_COMP_READ_T= EST_VAL); > + if (!read_ok || !comp_read_ok) { > + dev_err(wrp->dev, "Read failed on DIO mode. Main PMIC %s%= s\n", > + !read_ok ? "fail" : "success", > + wrp->slave->comp_dew_regs && !comp_read_ok ? > + ", Companion PMIC fail" : ""); > return -EFAULT; > } > > @@ -1640,19 +1654,41 @@ static bool pwrap_is_cipher_ready(struct pmic_wra= pper *wrp) > return pwrap_readl(wrp, PWRAP_CIPHER_RDY) & 1; > } > > -static bool pwrap_is_pmic_cipher_ready(struct pmic_wrapper *wrp) > +static bool __pwrap_is_pmic_cipher_ready(struct pmic_wrapper *wrp, const= u32 *dew_regs) > { > u32 rdata; > int ret; > > - ret =3D pwrap_read(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_RDY= ], > - &rdata); > + ret =3D pwrap_read(wrp, dew_regs[PWRAP_DEW_CIPHER_RDY], &rdata); > if (ret) > return false; > > return rdata =3D=3D 1; > } > > + Remove this extra line please. > +static bool pwrap_is_pmic_cipher_ready(struct pmic_wrapper *wrp) > +{ > + bool ret =3D __pwrap_is_pmic_cipher_ready(wrp, wrp->slave->dew_re= gs); > + > + if (!ret) > + return ret; > + > + /* If there's any companion, wait for it to be ready too */ > + if (wrp->slave->comp_dew_regs) > + ret =3D __pwrap_is_pmic_cipher_ready(wrp, wrp->slave->com= p_dew_regs); > + > + return ret; > +} > + > +static void pwrap_config_cipher(struct pmic_wrapper *wrp, const u32 *dew= _regs) > +{ > + pwrap_write(wrp, dew_regs[PWRAP_DEW_CIPHER_SWRST], 0x1); > + pwrap_write(wrp, dew_regs[PWRAP_DEW_CIPHER_SWRST], 0x0); > + pwrap_write(wrp, dew_regs[PWRAP_DEW_CIPHER_KEY_SEL], 0x1); > + pwrap_write(wrp, dew_regs[PWRAP_DEW_CIPHER_IV_SEL], 0x2); > +} > + > static int pwrap_init_cipher(struct pmic_wrapper *wrp) > { > int ret; > @@ -1689,10 +1725,11 @@ static int pwrap_init_cipher(struct pmic_wrapper = *wrp) > } > > /* Config cipher mode @PMIC */ > - pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_SWRST], 0x= 1); > - pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_SWRST], 0x= 0); > - pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_KEY_SEL], = 0x1); > - pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CIPHER_IV_SEL], 0= x2); > + pwrap_config_cipher(wrp, wrp->slave->dew_regs); > + > + /* If there is any companion PMIC, configure cipher mode there to= o */ > + if (wrp->slave->comp_type > 0) > + pwrap_config_cipher(wrp, wrp->slave->comp_dew_regs); > > switch (wrp->slave->type) { > case PMIC_MT6397: > @@ -1754,6 +1791,7 @@ static int pwrap_init_cipher(struct pmic_wrapper *w= rp) > > static int pwrap_init_security(struct pmic_wrapper *wrp) > { > + u32 crc_val; > int ret; > > /* Enable encryption */ > @@ -1762,14 +1800,21 @@ static int pwrap_init_security(struct pmic_wrappe= r *wrp) > return ret; > > /* Signature checking - using CRC */ > - if (pwrap_write(wrp, > - wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], 0x1)) > - return -EFAULT; > + ret =3D pwrap_write(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_EN], = 0x1); > + if (ret =3D=3D 0 && wrp->slave->comp_dew_regs) > + ret =3D pwrap_write(wrp, wrp->slave->comp_dew_regs[PWRAP_= DEW_CRC_EN], 0x1); > > pwrap_writel(wrp, 0x1, PWRAP_CRC_EN); > pwrap_writel(wrp, 0x0, PWRAP_SIG_MODE); > - pwrap_writel(wrp, wrp->slave->dew_regs[PWRAP_DEW_CRC_VAL], > - PWRAP_SIG_ADR); > + > + /* CRC value */ > + crc_val =3D wrp->slave->dew_regs[PWRAP_DEW_CRC_VAL]; > + if (wrp->slave->comp_dew_regs) > + crc_val |=3D wrp->slave->comp_dew_regs[PWRAP_DEW_CRC_VAL]= << 16; IMHO, the number 16 should be replaced by a define even if I guess it's a simple shift value. > + > + pwrap_writel(wrp, crc_val, PWRAP_SIG_ADR); > + > + /* PMIC Wrapper Arbiter priority */ > pwrap_writel(wrp, > wrp->master->arb_en_all, PWRAP_HIPRIO_ARB_EN); > > -- > 2.40.0 > Sounds good to me. Reviewed-by: Alexandre Mergnat Regards, Alex 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 53174C6FD18 for ; Wed, 29 Mar 2023 22:42:13 +0000 (UTC) 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:Cc: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=DuF/thPs7NSQmaCrXkE4P2oNw3garsaMScPAxVfHaJM=; b=JIGDKVoT7wqBgw DHX9MEbLya0uotdeVVPMJN9tjjgCdal4elDyXnkA2jCeZkgvIDpj3vC+nDuUb8T9SYtUZAjDPbk3j Y9ijVR2iOAdCHAqdxYZ0vXUCS1A4VNeBIt3/zDyuJljYqP/uYjDPe86rYMOpTYeovDF3qRw/jRE3A oxhZzAy9Im0xGvh9xVqQXjkk4VTgv631Ynj9KziFMytWivTP28lyFBAteEhcxxzWGIypW2U9R4AJQ 7hZtJobn212TbfIkKec1JPCp4/PFiIUdicqWzKB5rLweoXwedCwKT7+ExOW04uoTf2LLaqERRrRQO qglGHCpehZhHqyogZJzQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pheTa-001zat-1h; Wed, 29 Mar 2023 22:41:06 +0000 Received: from mail-yb1-xb2c.google.com ([2607:f8b0:4864:20::b2c]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pheTV-001zZj-1o for linux-arm-kernel@lists.infradead.org; Wed, 29 Mar 2023 22:41:03 +0000 Received: by mail-yb1-xb2c.google.com with SMTP id p15so21344875ybl.9 for ; Wed, 29 Mar 2023 15:41:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; t=1680129660; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=HP6j+DU+MoE9A0IYOuntBF31Ne44IF3oyP+KWeldQTc=; b=0B0q14oWCxtPwbWeDxp+M+ZsWj8UfgNmit5vebjz9hpyyAxEVueR0PbDGmwoMWUI9u Cfr12jqh2pAmn1lSPaH0DuOohUl8BUb+bklVg3pdVDnJiHgX8yj7pJEHAqUZOrMFph5p qzHpAdUk0RbvOFmQsTWqBEnqATlLGiLptmiMC2EkK5sl/Sd6+blsPG3M28Wj7AMfIWO5 EPjOiu+iM3U+KQ7GAbE+c8ILElGBVlF7jYqzgmFWqtEpUIviZlfjFTBEwoprMkyHzz37 u/bwomiqeJdsJOeV7kw8ejggyqNv1ILgmVRfhk0nTLxxpvcooR7McXpI//8FoWCRbES0 Scsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680129660; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HP6j+DU+MoE9A0IYOuntBF31Ne44IF3oyP+KWeldQTc=; b=n+aK2iay+PZpHkbLJ1bBLo6TD+JKVVstXSUGwM9R4Lb50gjRTOAk1xa/GavGeROmtX 2YOQreZBoE6jc7M6msAXLofEaV7ginocNOLKHwU/HdkdGgzjEqSwFIQBoFVUjPWn7H37 owQ+hJppz/5mJ/mc14azhZTzyK6YpynuRgM+icMtiyf3u7YlvaAoWF2foNQeDZ5H3iU5 nwcTRWFWF5dPHUlypQy5+2QKpZaSUyrrgQ4TalQwkarV0qQPZrZAC7uscN85+oNhiKp1 RYXi6cEgASeR3r70lOssyxA27ecwoMm1aOvVDzc8Em5eHuJPxK0FSQm8VzmifEiEqrqm LW6g== X-Gm-Message-State: AAQBX9cHqGbaxJ93Fjqirm6Xbyr7ny86QKnWTDgAtRfCY75bfEIjs2ur 8/g1WNGC1TrFJOigaMILNAjQWcA4wIP3AlMZGFxg6g== X-Google-Smtp-Source: AKy350auSkretDCKc3GwqJLWtBSKFs7m8qlQ5csPeo5vk/e6+ySCdpua771J676eyVzfkMOED+NXF4As/QobiYttluE= X-Received: by 2002:a05:6902:1181:b0:b6c:2224:8a77 with SMTP id m1-20020a056902118100b00b6c22248a77mr14001376ybu.1.1680129660014; Wed, 29 Mar 2023 15:41:00 -0700 (PDT) MIME-Version: 1.0 References: <20230324094205.33266-1-angelogioacchino.delregno@collabora.com> <20230324094205.33266-5-angelogioacchino.delregno@collabora.com> In-Reply-To: <20230324094205.33266-5-angelogioacchino.delregno@collabora.com> From: Alexandre Mergnat Date: Thu, 30 Mar 2023 00:40:48 +0200 Message-ID: Subject: Re: [PATCH v2 4/6] soc: mediatek: mtk-pmic-wrap: Add support for companion PMICs To: AngeloGioacchino Del Regno Cc: matthias.bgg@gmail.com, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, flora.fu@mediatek.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, phone-devel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230329_154101_738598_04A0DF8C X-CRM114-Status: GOOD ( 25.76 ) 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 TGUgdmVuLiAyNCBtYXJzIDIwMjMgw6AgMTA6NDIsIEFuZ2Vsb0dpb2FjY2hpbm8gRGVsIFJlZ25v CjxhbmdlbG9naW9hY2NoaW5vLmRlbHJlZ25vQGNvbGxhYm9yYS5jb20+IGEgw6ljcml0IDoKPgo+ IFNvbWUgUE1JQ3MgYXJlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBhIGNvbXBhbmlvbiBwYXJ0LCB3 aGljaCBwcm92aWRlcwo+IG1vcmUgcmVndWxhdG9ycyBhbmQvb3IgY29tcGFuaW9uIGRldmljZXMg c3VjaCBhcyBMRUQgY29udHJvbGxlcnMsCj4gZGlzcGxheSBiYWNrbGlnaHQgY29udHJvbGxlcnMs IGJhdHRlcnkgY2hhcmdpbmcsIGZ1ZWwgZ2F1Z2UsIGV0YzoKPiB0aGlzIGtpbmQgb2YgUE1JQ3Mg YXJlIHVzdWFsbHkgcHJlc2VudCBpbiBzbWFydHBob25lIHBsYXRmb3Jtcywgd2hlcmUKPiB0aWdo dCBpbnRlZ3JhdGlvbiBpcyByZXF1aXJlZC4KPgo+IFNpZ25lZC1vZmYtYnk6IEFuZ2Vsb0dpb2Fj Y2hpbm8gRGVsIFJlZ25vIDxhbmdlbG9naW9hY2NoaW5vLmRlbHJlZ25vQGNvbGxhYm9yYS5jb20+ Cj4gLS0tCj4gIGRyaXZlcnMvc29jL21lZGlhdGVrL210ay1wbWljLXdyYXAuYyB8IDczICsrKysr KysrKysrKysrKysrKysrKystLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDU5IGluc2VydGlvbnMo KyksIDE0IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL21lZGlhdGVr L210ay1wbWljLXdyYXAuYyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL210ay1wbWljLXdyYXAuYwo+ IGluZGV4IGEzM2ExYjE4MjBjYi4uMzY2ZTQwYjgwMmU0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv c29jL21lZGlhdGVrL210ay1wbWljLXdyYXAuYwo+ICsrKyBiL2RyaXZlcnMvc29jL21lZGlhdGVr L210ay1wbWljLXdyYXAuYwo+IEBAIC00Nyw2ICs0Nyw3IEBACj4KPiAgLyogbWFjcm8gZm9yIGRl dmljZSB3cmFwcGVyIGRlZmF1bHQgdmFsdWUgKi8KPiAgI2RlZmluZSBQV1JBUF9ERVdfUkVBRF9U RVNUX1ZBTCAgICAgICAgICAgICAgICAweDVhYTUKPiArI2RlZmluZSBQV1JBUF9ERVdfQ09NUF9S RUFEX1RFU1RfVkFMICAgMHhhNTVhCj4gICNkZWZpbmUgUFdSQVBfREVXX1dSSVRFX1RFU1RfVkFM ICAgICAgIDB4YTU1YQo+Cj4gIC8qIG1hY3JvIGZvciBtYW51YWwgY29tbWFuZCAqLwo+IEBAIC0x MjIyLDEyICsxMjIzLDE2IEBAIHN0cnVjdCBwd3JhcF9zbHZfcmVnb3BzIHsKPiAgICogc3RydWN0 IHB3cmFwX3Nsdl90eXBlIC0gUE1JQyBkZXZpY2Ugd3JhcHBlciBkZWZpbml0aW9ucwo+ICAgKiBA ZGV3X3JlZ3M6ICAgICAgRGV2aWNlIFdyYXBwZXIgKERlVykgcmVnaXN0ZXIgb2Zmc2V0cwo+ICAg KiBAdHlwZTogICAgICAgICAgUE1JQyBUeXBlIChtb2RlbCkKPiArICogQGNvbXBfZGV3X3JlZ3M6 IERldmljZSBXcmFwcGVyIChEZVcpIHJlZ2lzdGVyIG9mZnNldHMgZm9yIGNvbXBhbmlvbiBkZXZp Y2UKPiArICogQGNvbXBfdHlwZTogICAgIENvbXBhbmlvbiBQTUlDIFR5cGUgKG1vZGVsKQo+ICAg KiBAcmVnb3BzOiAgICAgICAgUmVnaXN0ZXIgUi9XIG9wcwo+ICAgKiBAY2FwczogICAgICAgICAg Q2FwYWJpbGl0eSBmbGFncyBmb3IgdGhlIHRhcmdldCBkZXZpY2UKPiAgICovCj4gIHN0cnVjdCBw d3JhcF9zbHZfdHlwZSB7Cj4gICAgICAgICBjb25zdCB1MzIgKmRld19yZWdzOwo+ICAgICAgICAg ZW51bSBwbWljX3R5cGUgdHlwZTsKPiArICAgICAgIGNvbnN0IHUzMiAqY29tcF9kZXdfcmVnczsK PiArICAgICAgIGVudW0gcG1pY190eXBlIGNvbXBfdHlwZTsKPiAgICAgICAgIGNvbnN0IHN0cnVj dCBwd3JhcF9zbHZfcmVnb3BzICpyZWdvcHM7Cj4gICAgICAgICB1MzIgY2FwczsKPiAgfTsKPiBA QCAtMTU0OCw5ICsxNTUzLDEyIEBAIHN0YXRpYyBpbnQgcHdyYXBfaW5pdF9kdWFsX2lvKHN0cnVj dCBwbWljX3dyYXBwZXIgKndycCkKPiAgewo+ICAgICAgICAgaW50IHJldDsKPiAgICAgICAgIGJv b2wgcmVhZF9vaywgdG1wOwo+ICsgICAgICAgYm9vbCBjb21wX3JlYWRfb2sgPSB0cnVlOwo+Cj4g ICAgICAgICAvKiBFbmFibGUgZHVhbCBJTyBtb2RlICovCj4gICAgICAgICBwd3JhcF93cml0ZSh3 cnAsIHdycC0+c2xhdmUtPmRld19yZWdzW1BXUkFQX0RFV19ESU9fRU5dLCAxKTsKPiArICAgICAg IGlmICh3cnAtPnNsYXZlLT5jb21wX2Rld19yZWdzKQo+ICsgICAgICAgICAgICAgICBwd3JhcF93 cml0ZSh3cnAsIHdycC0+c2xhdmUtPmNvbXBfZGV3X3JlZ3NbUFdSQVBfREVXX0RJT19FTl0sIDEp Owo+Cj4gICAgICAgICAvKiBDaGVjayBJRExFICYgSU5JVF9ET05FIGluIGFkdmFuY2UgKi8KPiAg ICAgICAgIHJldCA9IHJlYWR4X3BvbGxfdGltZW91dChwd3JhcF9pc19mc21faWRsZV9hbmRfc3lu Y19pZGxlLCB3cnAsIHRtcCwgdG1wLAo+IEBAIC0xNTY0LDggKzE1NzIsMTQgQEAgc3RhdGljIGlu dCBwd3JhcF9pbml0X2R1YWxfaW8oc3RydWN0IHBtaWNfd3JhcHBlciAqd3JwKQo+Cj4gICAgICAg ICAvKiBSZWFkIFRlc3QgKi8KPiAgICAgICAgIHJlYWRfb2sgPSBwd3JhcF9wbWljX3JlYWRfdGVz dCh3cnAsIHdycC0+c2xhdmUtPmRld19yZWdzLCBQV1JBUF9ERVdfUkVBRF9URVNUX1ZBTCk7Cj4g LSAgICAgICBpZiAoIXJlYWRfb2spIHsKPiAtICAgICAgICAgICAgICAgZGV2X2Vycih3cnAtPmRl diwgIlJlYWQgZmFpbGVkIG9uIERJTyBtb2RlLlxuIik7Cj4gKyAgICAgICBpZiAod3JwLT5zbGF2 ZS0+Y29tcF9kZXdfcmVncykKPiArICAgICAgICAgICAgICAgY29tcF9yZWFkX29rID0gcHdyYXBf cG1pY19yZWFkX3Rlc3Qod3JwLCB3cnAtPnNsYXZlLT5jb21wX2Rld19yZWdzLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV1JBUF9ERVdfQ09N UF9SRUFEX1RFU1RfVkFMKTsKPiArICAgICAgIGlmICghcmVhZF9vayB8fCAhY29tcF9yZWFkX29r KSB7Cj4gKyAgICAgICAgICAgICAgIGRldl9lcnIod3JwLT5kZXYsICJSZWFkIGZhaWxlZCBvbiBE SU8gbW9kZS4gTWFpbiBQTUlDICVzJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIXJl YWRfb2sgPyAiZmFpbCIgOiAic3VjY2VzcyIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgd3Jw LT5zbGF2ZS0+Y29tcF9kZXdfcmVncyAmJiAhY29tcF9yZWFkX29rID8KPiArICAgICAgICAgICAg ICAgICAgICAgICAiLCBDb21wYW5pb24gUE1JQyBmYWlsIiA6ICIiKTsKPiAgICAgICAgICAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7Cj4gICAgICAgICB9Cj4KPiBAQCAtMTY0MCwxOSArMTY1NCw0MSBA QCBzdGF0aWMgYm9vbCBwd3JhcF9pc19jaXBoZXJfcmVhZHkoc3RydWN0IHBtaWNfd3JhcHBlciAq d3JwKQo+ICAgICAgICAgcmV0dXJuIHB3cmFwX3JlYWRsKHdycCwgUFdSQVBfQ0lQSEVSX1JEWSkg JiAxOwo+ICB9Cj4KPiAtc3RhdGljIGJvb2wgcHdyYXBfaXNfcG1pY19jaXBoZXJfcmVhZHkoc3Ry dWN0IHBtaWNfd3JhcHBlciAqd3JwKQo+ICtzdGF0aWMgYm9vbCBfX3B3cmFwX2lzX3BtaWNfY2lw aGVyX3JlYWR5KHN0cnVjdCBwbWljX3dyYXBwZXIgKndycCwgY29uc3QgdTMyICpkZXdfcmVncykK PiAgewo+ICAgICAgICAgdTMyIHJkYXRhOwo+ICAgICAgICAgaW50IHJldDsKPgo+IC0gICAgICAg cmV0ID0gcHdyYXBfcmVhZCh3cnAsIHdycC0+c2xhdmUtPmRld19yZWdzW1BXUkFQX0RFV19DSVBI RVJfUkRZXSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgJnJkYXRhKTsKPiArICAgICAgIHJl dCA9IHB3cmFwX3JlYWQod3JwLCBkZXdfcmVnc1tQV1JBUF9ERVdfQ0lQSEVSX1JEWV0sICZyZGF0 YSk7Cj4gICAgICAgICBpZiAocmV0KQo+ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4K PiAgICAgICAgIHJldHVybiByZGF0YSA9PSAxOwo+ICB9Cj4KPiArCgpSZW1vdmUgdGhpcyBleHRy YSBsaW5lIHBsZWFzZS4KCj4gK3N0YXRpYyBib29sIHB3cmFwX2lzX3BtaWNfY2lwaGVyX3JlYWR5 KHN0cnVjdCBwbWljX3dyYXBwZXIgKndycCkKPiArewo+ICsgICAgICAgYm9vbCByZXQgPSBfX3B3 cmFwX2lzX3BtaWNfY2lwaGVyX3JlYWR5KHdycCwgd3JwLT5zbGF2ZS0+ZGV3X3JlZ3MpOwo+ICsK PiArICAgICAgIGlmICghcmV0KQo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiAr ICAgICAgIC8qIElmIHRoZXJlJ3MgYW55IGNvbXBhbmlvbiwgd2FpdCBmb3IgaXQgdG8gYmUgcmVh ZHkgdG9vICovCj4gKyAgICAgICBpZiAod3JwLT5zbGF2ZS0+Y29tcF9kZXdfcmVncykKPiArICAg ICAgICAgICAgICAgcmV0ID0gX19wd3JhcF9pc19wbWljX2NpcGhlcl9yZWFkeSh3cnAsIHdycC0+ c2xhdmUtPmNvbXBfZGV3X3JlZ3MpOwo+ICsKPiArICAgICAgIHJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHB3cmFwX2NvbmZpZ19jaXBoZXIoc3RydWN0IHBtaWNfd3JhcHBlciAq d3JwLCBjb25zdCB1MzIgKmRld19yZWdzKQo+ICt7Cj4gKyAgICAgICBwd3JhcF93cml0ZSh3cnAs IGRld19yZWdzW1BXUkFQX0RFV19DSVBIRVJfU1dSU1RdLCAweDEpOwo+ICsgICAgICAgcHdyYXBf d3JpdGUod3JwLCBkZXdfcmVnc1tQV1JBUF9ERVdfQ0lQSEVSX1NXUlNUXSwgMHgwKTsKPiArICAg ICAgIHB3cmFwX3dyaXRlKHdycCwgZGV3X3JlZ3NbUFdSQVBfREVXX0NJUEhFUl9LRVlfU0VMXSwg MHgxKTsKPiArICAgICAgIHB3cmFwX3dyaXRlKHdycCwgZGV3X3JlZ3NbUFdSQVBfREVXX0NJUEhF Ul9JVl9TRUxdLCAweDIpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IHB3cmFwX2luaXRfY2lwaGVy KHN0cnVjdCBwbWljX3dyYXBwZXIgKndycCkKPiAgewo+ICAgICAgICAgaW50IHJldDsKPiBAQCAt MTY4OSwxMCArMTcyNSwxMSBAQCBzdGF0aWMgaW50IHB3cmFwX2luaXRfY2lwaGVyKHN0cnVjdCBw bWljX3dyYXBwZXIgKndycCkKPiAgICAgICAgIH0KPgo+ICAgICAgICAgLyogQ29uZmlnIGNpcGhl ciBtb2RlIEBQTUlDICovCj4gLSAgICAgICBwd3JhcF93cml0ZSh3cnAsIHdycC0+c2xhdmUtPmRl d19yZWdzW1BXUkFQX0RFV19DSVBIRVJfU1dSU1RdLCAweDEpOwo+IC0gICAgICAgcHdyYXBfd3Jp dGUod3JwLCB3cnAtPnNsYXZlLT5kZXdfcmVnc1tQV1JBUF9ERVdfQ0lQSEVSX1NXUlNUXSwgMHgw KTsKPiAtICAgICAgIHB3cmFwX3dyaXRlKHdycCwgd3JwLT5zbGF2ZS0+ZGV3X3JlZ3NbUFdSQVBf REVXX0NJUEhFUl9LRVlfU0VMXSwgMHgxKTsKPiAtICAgICAgIHB3cmFwX3dyaXRlKHdycCwgd3Jw LT5zbGF2ZS0+ZGV3X3JlZ3NbUFdSQVBfREVXX0NJUEhFUl9JVl9TRUxdLCAweDIpOwo+ICsgICAg ICAgcHdyYXBfY29uZmlnX2NpcGhlcih3cnAsIHdycC0+c2xhdmUtPmRld19yZWdzKTsKPiArCj4g KyAgICAgICAvKiBJZiB0aGVyZSBpcyBhbnkgY29tcGFuaW9uIFBNSUMsIGNvbmZpZ3VyZSBjaXBo ZXIgbW9kZSB0aGVyZSB0b28gKi8KPiArICAgICAgIGlmICh3cnAtPnNsYXZlLT5jb21wX3R5cGUg PiAwKQo+ICsgICAgICAgICAgICAgICBwd3JhcF9jb25maWdfY2lwaGVyKHdycCwgd3JwLT5zbGF2 ZS0+Y29tcF9kZXdfcmVncyk7Cj4KPiAgICAgICAgIHN3aXRjaCAod3JwLT5zbGF2ZS0+dHlwZSkg ewo+ICAgICAgICAgY2FzZSBQTUlDX01UNjM5NzoKPiBAQCAtMTc1NCw2ICsxNzkxLDcgQEAgc3Rh dGljIGludCBwd3JhcF9pbml0X2NpcGhlcihzdHJ1Y3QgcG1pY193cmFwcGVyICp3cnApCj4KPiAg c3RhdGljIGludCBwd3JhcF9pbml0X3NlY3VyaXR5KHN0cnVjdCBwbWljX3dyYXBwZXIgKndycCkK PiAgewo+ICsgICAgICAgdTMyIGNyY192YWw7Cj4gICAgICAgICBpbnQgcmV0Owo+Cj4gICAgICAg ICAvKiBFbmFibGUgZW5jcnlwdGlvbiAqLwo+IEBAIC0xNzYyLDE0ICsxODAwLDIxIEBAIHN0YXRp YyBpbnQgcHdyYXBfaW5pdF9zZWN1cml0eShzdHJ1Y3QgcG1pY193cmFwcGVyICp3cnApCj4gICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4KPiAgICAgICAgIC8qIFNpZ25hdHVyZSBjaGVja2lu ZyAtIHVzaW5nIENSQyAqLwo+IC0gICAgICAgaWYgKHB3cmFwX3dyaXRlKHdycCwKPiAtICAgICAg ICAgICAgICAgICAgICAgICB3cnAtPnNsYXZlLT5kZXdfcmVnc1tQV1JBUF9ERVdfQ1JDX0VOXSwg MHgxKSkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4gKyAgICAgICByZXQgPSBw d3JhcF93cml0ZSh3cnAsIHdycC0+c2xhdmUtPmRld19yZWdzW1BXUkFQX0RFV19DUkNfRU5dLCAw eDEpOwo+ICsgICAgICAgaWYgKHJldCA9PSAwICYmIHdycC0+c2xhdmUtPmNvbXBfZGV3X3JlZ3Mp Cj4gKyAgICAgICAgICAgICAgIHJldCA9IHB3cmFwX3dyaXRlKHdycCwgd3JwLT5zbGF2ZS0+Y29t cF9kZXdfcmVnc1tQV1JBUF9ERVdfQ1JDX0VOXSwgMHgxKTsKPgo+ICAgICAgICAgcHdyYXBfd3Jp dGVsKHdycCwgMHgxLCBQV1JBUF9DUkNfRU4pOwo+ICAgICAgICAgcHdyYXBfd3JpdGVsKHdycCwg MHgwLCBQV1JBUF9TSUdfTU9ERSk7Cj4gLSAgICAgICBwd3JhcF93cml0ZWwod3JwLCB3cnAtPnNs YXZlLT5kZXdfcmVnc1tQV1JBUF9ERVdfQ1JDX1ZBTF0sCj4gLSAgICAgICAgICAgICAgICAgICAg UFdSQVBfU0lHX0FEUik7Cj4gKwo+ICsgICAgICAgLyogQ1JDIHZhbHVlICovCj4gKyAgICAgICBj cmNfdmFsID0gd3JwLT5zbGF2ZS0+ZGV3X3JlZ3NbUFdSQVBfREVXX0NSQ19WQUxdOwo+ICsgICAg ICAgaWYgKHdycC0+c2xhdmUtPmNvbXBfZGV3X3JlZ3MpCj4gKyAgICAgICAgICAgICAgIGNyY192 YWwgfD0gd3JwLT5zbGF2ZS0+Y29tcF9kZXdfcmVnc1tQV1JBUF9ERVdfQ1JDX1ZBTF0gPDwgMTY7 CgpJTUhPLCB0aGUgbnVtYmVyIDE2IHNob3VsZCBiZSByZXBsYWNlZCBieSBhIGRlZmluZSBldmVu IGlmIEkgZ3Vlc3MKaXQncyBhIHNpbXBsZSBzaGlmdCB2YWx1ZS4KCj4gKwo+ICsgICAgICAgcHdy YXBfd3JpdGVsKHdycCwgY3JjX3ZhbCwgUFdSQVBfU0lHX0FEUik7Cj4gKwo+ICsgICAgICAgLyog UE1JQyBXcmFwcGVyIEFyYml0ZXIgcHJpb3JpdHkgKi8KPiAgICAgICAgIHB3cmFwX3dyaXRlbCh3 cnAsCj4gICAgICAgICAgICAgICAgICAgICAgd3JwLT5tYXN0ZXItPmFyYl9lbl9hbGwsIFBXUkFQ X0hJUFJJT19BUkJfRU4pOwo+Cj4gLS0KPiAyLjQwLjAKPgoKU291bmRzIGdvb2QgdG8gbWUuCgpS ZXZpZXdlZC1ieTogQWxleGFuZHJlIE1lcmduYXQgPGFtZXJnbmF0QGJheWxpYnJlLmNvbT4KClJl Z2FyZHMsCkFsZXgKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK