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 396A6C636D7 for ; Tue, 31 Jan 2023 13:33:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231754AbjAaNdQ (ORCPT ); Tue, 31 Jan 2023 08:33:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45358 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232270AbjAaNdL (ORCPT ); Tue, 31 Jan 2023 08:33:11 -0500 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C4B56C176; Tue, 31 Jan 2023 05:33:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675171981; x=1706707981; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=mUK7D/U+8m6Bb2XIMJI03erNm6ros1fVSyKoc3cCQO0=; b=nU+spZGqlv+31VgWMb8thd8Q158NkIhsttTz4Cv2XK/OjviMMRwzkohO ps++aQrSmt65QAJsV2FuuN9xanhA5BtCpBJyBcD/gpH88bj3DVeXMgPoe Qoq70EuU67kzZb1V4LcyTww6iXAPMHBvINKFoR/lgbpE7AuTolxj9GZEh Vka/X728ZKy17OlHqg9j97GjLK6Y9eHUgHZoYglVRvcKRYMje+minl8xH 96mPwCJsKncmF629lZzT/j6FwXaTJCBb4SitP+vqHh6xI7ol0JFoNJavz UeYPSYH2xmGGbJl3YvQySXd04NK5rH7M5l5oArCpz7PK5Km4pIDP002Ak A==; X-IronPort-AV: E=McAfee;i="6500,9779,10606"; a="325537304" X-IronPort-AV: E=Sophos;i="5.97,261,1669104000"; d="scan'208";a="325537304" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Jan 2023 05:33:00 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10606"; a="694942600" X-IronPort-AV: E=Sophos;i="5.97,261,1669104000"; d="scan'208";a="694942600" Received: from ahunter6-mobl1.ger.corp.intel.com (HELO [10.0.2.15]) ([10.252.47.218]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Jan 2023 05:32:53 -0800 Message-ID: <28d3348d-82ec-988f-718a-2d73bce585f3@intel.com> Date: Tue, 31 Jan 2023 15:32:50 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0 Thunderbird/102.7.1 Subject: Re: [PATCH] mmc:mmc-cqhci:support interrupt coalescing Content-Language: en-US To: Michael Wu , riteshh@codeaurora.org, asutoshd@codeaurora.org, ulf.hansson@linaro.org, chaotian.jing@mediatek.com, matthias.bgg@gmail.com, kdasu.kdev@gmail.com, alcooperx@gmail.com, f.fainelli@gmail.com, haibo.chen@nxp.com, shawnguo@kernel.org, agross@kernel.org, andersson@kernel.org, michal.simek@xilinx.com, thierry.reding@gmail.com, jonathanh@nvidia.com Cc: bcm-kernel-feedback-list@broadcom.com, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, konrad.dybcio@linaro.org, linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-tegra@vger.kernel.org References: <20230130064656.106793-1-michael@allwinnertech.com> <2463a92b-c180-87d4-0c96-2f549a397164@intel.com> <610b5f73-f9e3-deb2-2754-e8939ed00ec3@allwinnertech.com> From: Adrian Hunter Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki In-Reply-To: <610b5f73-f9e3-deb2-2754-e8939ed00ec3@allwinnertech.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On 31/01/23 15:12, Michael Wu wrote: > Dear Adrian, > > On 2023/1/30 23:59, Adrian Hunter wrote: >> On 30/01/23 08:46, Michael Wu wrote: >>> Support interrupt coalescing to reduce the frequency of mmc interrupts >> >> There doesn't seem to be any users.  The new parameter to >> cqhci_init() is always false.  New features are not usually >> accepted without users. > > At present, I have only supported this feature on the Allwinner platform because I have not get enough information about other vendors. >> >> There needs to be an explanation of why the change is being made. > > I consider reducing the number of interrupt context switches. Can you tell me why the community does not support this feature? I wonder whether I'm doing is correct. If it's correct, i will improve this patch and incorporate it AFAIK the community has not made any comment on supporting interrupt coalescing for CQHCI, one way or another. However, it is generally expected that new features will only be added if they demonstrate some benefit. Just assuming that there is a benefit is not enough. >> >> Also there doesn't seem to be any configuration of the CQIC >> register. > > At present, I am working on the hook function .cqe_enable that the ICCTH of CQIC is set in enable >> >>> >>> Signed-off-by: Michael Wu >>> --- >>>   drivers/mmc/host/cqhci-core.c      | 20 +++++++++++++++----- >>>   drivers/mmc/host/cqhci.h           |  5 ++++- >>>   drivers/mmc/host/mtk-sd.c          |  2 +- >>>   drivers/mmc/host/sdhci-brcmstb.c   |  2 +- >>>   drivers/mmc/host/sdhci-esdhc-imx.c |  2 +- >>>   drivers/mmc/host/sdhci-msm.c       |  2 +- >>>   drivers/mmc/host/sdhci-of-arasan.c |  2 +- >>>   drivers/mmc/host/sdhci-pci-core.c  |  2 +- >>>   drivers/mmc/host/sdhci-pci-gli.c   |  2 +- >>>   drivers/mmc/host/sdhci-tegra.c     |  2 +- >>>   drivers/mmc/host/sdhci_am654.c     |  2 +- >>>   11 files changed, 28 insertions(+), 15 deletions(-) >>> >>> diff --git a/drivers/mmc/host/cqhci-core.c b/drivers/mmc/host/cqhci-core.c >>> index b3d7d6d8d654..f9cdf9f04bfc 100644 >>> --- a/drivers/mmc/host/cqhci-core.c >>> +++ b/drivers/mmc/host/cqhci-core.c >>> @@ -420,7 +420,7 @@ static void cqhci_disable(struct mmc_host *mmc) >>>   } >>>     static void cqhci_prep_task_desc(struct mmc_request *mrq, >>> -                 struct cqhci_host *cq_host, int tag) >>> +                 struct cqhci_host *cq_host, int tag, int intr) >>>   { >>>       __le64 *task_desc = (__le64 __force *)get_desc(cq_host, tag); >>>       u32 req_flags = mrq->data->flags; >>> @@ -428,7 +428,7 @@ static void cqhci_prep_task_desc(struct mmc_request *mrq, >>>         desc0 = CQHCI_VALID(1) | >>>           CQHCI_END(1) | >>> -        CQHCI_INT(1) | >>> +        CQHCI_INT(intr) | >>>           CQHCI_ACT(0x5) | >>>           CQHCI_FORCED_PROG(!!(req_flags & MMC_DATA_FORCED_PRG)) | >>>           CQHCI_DATA_TAG(!!(req_flags & MMC_DATA_DAT_TAG)) | >>> @@ -621,7 +621,7 @@ static int cqhci_request(struct mmc_host *mmc, struct mmc_request *mrq) >>>       } >>>         if (mrq->data) { >>> -        cqhci_prep_task_desc(mrq, cq_host, tag); >>> +        cqhci_prep_task_desc(mrq, cq_host, tag, (cq_host->intr_clsc ? 0 : 1)); >>>             err = cqhci_prep_tran_desc(mrq, cq_host, tag); >>>           if (err) { >>> @@ -812,7 +812,7 @@ static void cqhci_finish_mrq(struct mmc_host *mmc, unsigned int tag) >>>   irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error, >>>                 int data_error) >>>   { >>> -    u32 status; >>> +    u32 status, rval; >>>       unsigned long tag = 0, comp_status; >>>       struct cqhci_host *cq_host = mmc->cqe_private; >>>   @@ -856,6 +856,15 @@ irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error, >>>           spin_unlock(&cq_host->lock); >>>       } >>>   +    if (cq_host->intr_clsc) { >>> +        rval = cqhci_readl(cq_host, CQHCI_IC); >>> +        rval |= CQHCI_IC_RESET; >>> +        cqhci_writel(cq_host, rval, CQHCI_IC); >>> +        rval = cqhci_readl(cq_host, CQHCI_IC); >>> +        rval &= (~CQHCI_IC_RESET); >>> +        cqhci_writel(cq_host, rval, CQHCI_IC); >>> +    } >>> + >>>       if (status & CQHCI_IS_TCL) >>>           wake_up(&cq_host->wait_queue); >>>   @@ -1172,11 +1181,12 @@ static unsigned int cqhci_ver_minor(struct cqhci_host *cq_host) >>>   } >>>     int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc, >>> -          bool dma64) >>> +          bool dma64, bool intr_clsc) >>>   { >>>       int err; >>>         cq_host->dma64 = dma64; >>> +    cq_host->intr_clsc = intr_clsc; >>>       cq_host->mmc = mmc; >>>       cq_host->mmc->cqe_private = cq_host; >>>   diff --git a/drivers/mmc/host/cqhci.h b/drivers/mmc/host/cqhci.h >>> index ba9387ed90eb..acf90773c30a 100644 >>> --- a/drivers/mmc/host/cqhci.h >>> +++ b/drivers/mmc/host/cqhci.h >>> @@ -227,6 +227,9 @@ struct cqhci_host { >>>         /* 64 bit DMA */ >>>       bool dma64; >>> + >>> +    /* interrupt coalescing*/ >>> +    bool intr_clsc; >>>       int num_slots; >>>       int qcnt; >>>   @@ -312,7 +315,7 @@ struct platform_device; >>>     irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error, >>>                 int data_error); >>> -int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc, bool dma64); >>> +int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc, bool dma64, bool intr_clsc); >>>   struct cqhci_host *cqhci_pltfm_init(struct platform_device *pdev); >>>   int cqhci_deactivate(struct mmc_host *mmc); >>>   static inline int cqhci_suspend(struct mmc_host *mmc) >>> diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c >>> index edade0e54a0c..2c18f954d4b8 100644 >>> --- a/drivers/mmc/host/mtk-sd.c >>> +++ b/drivers/mmc/host/mtk-sd.c >>> @@ -2796,7 +2796,7 @@ static int msdc_drv_probe(struct platform_device *pdev) >>>           host->cq_host->caps |= CQHCI_TASK_DESC_SZ_128; >>>           host->cq_host->mmio = host->base + 0x800; >>>           host->cq_host->ops = &msdc_cmdq_ops; >>> -        ret = cqhci_init(host->cq_host, mmc, true); >>> +        ret = cqhci_init(host->cq_host, mmc, true, false); >>>           if (ret) >>>               goto host_free; >>>           mmc->max_segs = 128; >>> diff --git a/drivers/mmc/host/sdhci-brcmstb.c b/drivers/mmc/host/sdhci-brcmstb.c >>> index f2cf3d70db79..4aeaeddbbf25 100644 >>> --- a/drivers/mmc/host/sdhci-brcmstb.c >>> +++ b/drivers/mmc/host/sdhci-brcmstb.c >>> @@ -231,7 +231,7 @@ static int sdhci_brcmstb_add_host(struct sdhci_host *host, >>>           cq_host->caps |= CQHCI_TASK_DESC_SZ_128; >>>       } >>>   -    ret = cqhci_init(cq_host, host->mmc, dma64); >>> +    ret = cqhci_init(cq_host, host->mmc, dma64, false); >>>       if (ret) >>>           goto cleanup; >>>   diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c >>> index 9e73c34b6401..7aef7abe71f1 100644 >>> --- a/drivers/mmc/host/sdhci-esdhc-imx.c >>> +++ b/drivers/mmc/host/sdhci-esdhc-imx.c >>> @@ -1712,7 +1712,7 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) >>>           cq_host->mmio = host->ioaddr + ESDHC_CQHCI_ADDR_OFFSET; >>>           cq_host->ops = &esdhc_cqhci_ops; >>>   -        err = cqhci_init(cq_host, host->mmc, false); >>> +        err = cqhci_init(cq_host, host->mmc, false, false); >>>           if (err) >>>               goto disable_ahb_clk; >>>       } >>> diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c >>> index 4ac8651d0b29..b6549d1e43ec 100644 >>> --- a/drivers/mmc/host/sdhci-msm.c >>> +++ b/drivers/mmc/host/sdhci-msm.c >>> @@ -2153,7 +2153,7 @@ static int sdhci_msm_cqe_add_host(struct sdhci_host *host, >>>       if (ret) >>>           goto cleanup; >>>   -    ret = cqhci_init(cq_host, host->mmc, dma64); >>> +    ret = cqhci_init(cq_host, host->mmc, dma64, false); >>>       if (ret) { >>>           dev_err(&pdev->dev, "%s: CQE init: failed (%d)\n", >>>                   mmc_hostname(host->mmc), ret); >>> diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c >>> index 89c431a34c43..811f8686532d 100644 >>> --- a/drivers/mmc/host/sdhci-of-arasan.c >>> +++ b/drivers/mmc/host/sdhci-of-arasan.c >>> @@ -1610,7 +1610,7 @@ static int sdhci_arasan_add_host(struct sdhci_arasan_data *sdhci_arasan) >>>       if (dma64) >>>           cq_host->caps |= CQHCI_TASK_DESC_SZ_128; >>>   -    ret = cqhci_init(cq_host, host->mmc, dma64); >>> +    ret = cqhci_init(cq_host, host->mmc, dma64, false); >>>       if (ret) >>>           goto cleanup; >>>   diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c >>> index c359f867df0a..6f6cae6355a7 100644 >>> --- a/drivers/mmc/host/sdhci-pci-core.c >>> +++ b/drivers/mmc/host/sdhci-pci-core.c >>> @@ -964,7 +964,7 @@ static int glk_emmc_add_host(struct sdhci_pci_slot *slot) >>>       if (dma64) >>>           cq_host->caps |= CQHCI_TASK_DESC_SZ_128; >>>   -    ret = cqhci_init(cq_host, host->mmc, dma64); >>> +    ret = cqhci_init(cq_host, host->mmc, dma64, false); >>>       if (ret) >>>           goto cleanup; >>>   diff --git a/drivers/mmc/host/sdhci-pci-gli.c b/drivers/mmc/host/sdhci-pci-gli.c >>> index 633a8ee8f8c5..6917ba339aa9 100644 >>> --- a/drivers/mmc/host/sdhci-pci-gli.c >>> +++ b/drivers/mmc/host/sdhci-pci-gli.c >>> @@ -908,7 +908,7 @@ static int gl9763e_add_host(struct sdhci_pci_slot *slot) >>>       if (dma64) >>>           cq_host->caps |= CQHCI_TASK_DESC_SZ_128; >>>   -    ret = cqhci_init(cq_host, host->mmc, dma64); >>> +    ret = cqhci_init(cq_host, host->mmc, dma64, false); >>>       if (ret) >>>           goto cleanup; >>>   diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c >>> index bff084f178c9..f98a468e8f43 100644 >>> --- a/drivers/mmc/host/sdhci-tegra.c >>> +++ b/drivers/mmc/host/sdhci-tegra.c >>> @@ -1620,7 +1620,7 @@ static int sdhci_tegra_add_host(struct sdhci_host *host) >>>       if (dma64) >>>           cq_host->caps |= CQHCI_TASK_DESC_SZ_128; >>>   -    ret = cqhci_init(cq_host, host->mmc, dma64); >>> +    ret = cqhci_init(cq_host, host->mmc, dma64, false); >>>       if (ret) >>>           goto cleanup; >>>   diff --git a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c >>> index 7ef828942df3..8e7fbee70e16 100644 >>> --- a/drivers/mmc/host/sdhci_am654.c >>> +++ b/drivers/mmc/host/sdhci_am654.c >>> @@ -568,7 +568,7 @@ static int sdhci_am654_cqe_add_host(struct sdhci_host *host) >>>         host->mmc->caps2 |= MMC_CAP2_CQE; >>>   -    return cqhci_init(cq_host, host->mmc, 1); >>> +    return cqhci_init(cq_host, host->mmc, 1, false); >>>   } >>>     static int sdhci_am654_get_otap_delay(struct sdhci_host *host, > 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 6A4AFC38142 for ; Tue, 31 Jan 2023 13:34:05 +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:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6HpiAZizh2S9Vs0JDWjK/I00VGXYVsjDHIsLn5seAlE=; b=Tpe1nsmQzSdY/i 9EA2Jv+cfrGtg3XFi8MpmE7H2UGEle4W8UhegoIpPipcGj3+qqJumCODYy0mPm3FX9+WR8qjlpu4F rqmsbyTOJO785hqqCkS3NiOG5CduDieryz9PitvB2jUamZGFdKvQNLahNIUey3smGXYQWOJqyFgNa 9klKDcLXbuPBOkBGrOxwj7hQt8XhLGE57LUJklv4JuDEJosBKQvdkPjrEkVFTsBqFKYYfKLuEMO9l HQ94OOkY4in8DVPrWJT/SqrZ8L2rhyy84w/PZjkgz7ad39CBngY29FaLWMynh8E2kaVyactRGAE2n ppc+FPtq29C2xh7eci2A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pMql2-0088ER-Rq; Tue, 31 Jan 2023 13:33:08 +0000 Received: from mga11.intel.com ([192.55.52.93]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pMqky-0088Ci-EW; Tue, 31 Jan 2023 13:33:06 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675171984; x=1706707984; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=mUK7D/U+8m6Bb2XIMJI03erNm6ros1fVSyKoc3cCQO0=; b=eql/Q3FMhiCnEwCPUisGX4Hp8E60fkiWZWuB+gU3U1OjvT30PqocH54Q bPSOyRciSgc1LaHOkzwdhDGhA0ewICYaALIXwQynjteO9vySy0QiEfZfj BxPOC56iS4mGw1uNEopQKGwxzgX0ONwIUXJ4t18IBeoaGMLHvbnTwvkmZ xj9Gw6cnnKrNu71qZLVGqVhrvG11r7OYI4hp4NdeLGJJCQ4F5taP2fR4a fCW7+iHB6xbF3AYsOasoRiwgdg9Mr5OEBkoQ5tNQauuusTCMiIWUvB8ot YK6g2dwar6868NxGzkiJxPjm/hTackz3/CrfAAlhUJvUKdg8uUhvS2HWt w==; X-IronPort-AV: E=McAfee;i="6500,9779,10606"; a="325537307" X-IronPort-AV: E=Sophos;i="5.97,261,1669104000"; d="scan'208";a="325537307" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Jan 2023 05:33:00 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10606"; a="694942600" X-IronPort-AV: E=Sophos;i="5.97,261,1669104000"; d="scan'208";a="694942600" Received: from ahunter6-mobl1.ger.corp.intel.com (HELO [10.0.2.15]) ([10.252.47.218]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Jan 2023 05:32:53 -0800 Message-ID: <28d3348d-82ec-988f-718a-2d73bce585f3@intel.com> Date: Tue, 31 Jan 2023 15:32:50 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0 Thunderbird/102.7.1 Subject: Re: [PATCH] mmc:mmc-cqhci:support interrupt coalescing Content-Language: en-US To: Michael Wu , riteshh@codeaurora.org, asutoshd@codeaurora.org, ulf.hansson@linaro.org, chaotian.jing@mediatek.com, matthias.bgg@gmail.com, kdasu.kdev@gmail.com, alcooperx@gmail.com, f.fainelli@gmail.com, haibo.chen@nxp.com, shawnguo@kernel.org, agross@kernel.org, andersson@kernel.org, michal.simek@xilinx.com, thierry.reding@gmail.com, jonathanh@nvidia.com Cc: bcm-kernel-feedback-list@broadcom.com, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, konrad.dybcio@linaro.org, linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-tegra@vger.kernel.org References: <20230130064656.106793-1-michael@allwinnertech.com> <2463a92b-c180-87d4-0c96-2f549a397164@intel.com> <610b5f73-f9e3-deb2-2754-e8939ed00ec3@allwinnertech.com> From: Adrian Hunter Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki In-Reply-To: <610b5f73-f9e3-deb2-2754-e8939ed00ec3@allwinnertech.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230131_053304_522508_E1AE2082 X-CRM114-Status: GOOD ( 25.44 ) 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 T24gMzEvMDEvMjMgMTU6MTIsIE1pY2hhZWwgV3Ugd3JvdGU6Cj4gRGVhciBBZHJpYW7vvIwKPiAK PiBPbiAyMDIzLzEvMzAgMjM6NTksIEFkcmlhbiBIdW50ZXIgd3JvdGU6Cj4+IE9uIDMwLzAxLzIz IDA4OjQ2LCBNaWNoYWVsIFd1IHdyb3RlOgo+Pj4gU3VwcG9ydCBpbnRlcnJ1cHQgY29hbGVzY2lu ZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBtbWMgaW50ZXJydXB0cwo+Pgo+PiBUaGVyZSBk b2Vzbid0IHNlZW0gdG8gYmUgYW55IHVzZXJzLsKgIFRoZSBuZXcgcGFyYW1ldGVyIHRvCj4+IGNx aGNpX2luaXQoKSBpcyBhbHdheXMgZmFsc2UuwqAgTmV3IGZlYXR1cmVzIGFyZSBub3QgdXN1YWxs eQo+PiBhY2NlcHRlZCB3aXRob3V0IHVzZXJzLgo+IAo+IEF0IHByZXNlbnQsIEkgaGF2ZSBvbmx5 IHN1cHBvcnRlZCB0aGlzIGZlYXR1cmUgb24gdGhlIEFsbHdpbm5lciBwbGF0Zm9ybSBiZWNhdXNl IEkgaGF2ZSBub3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciB2ZW5kb3JzLgo+ Pgo+PiBUaGVyZSBuZWVkcyB0byBiZSBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhlIGNoYW5nZSBp cyBiZWluZyBtYWRlLgo+IAo+IEkgY29uc2lkZXIgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBpbnRl cnJ1cHQgY29udGV4dCBzd2l0Y2hlcy4gQ2FuIHlvdSB0ZWxsIG1lIHdoeSB0aGUgY29tbXVuaXR5 IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlPyBJIHdvbmRlciB3aGV0aGVyIEknbSBkb2lu ZyBpcyBjb3JyZWN0LiBJZiBpdCdzIGNvcnJlY3QsIGkgd2lsbCBpbXByb3ZlIHRoaXMgcGF0Y2gg YW5kIGluY29ycG9yYXRlIGl0CgpBRkFJSyB0aGUgY29tbXVuaXR5IGhhcyBub3QgbWFkZSBhbnkg Y29tbWVudCBvbiBzdXBwb3J0aW5nIGludGVycnVwdCBjb2FsZXNjaW5nIGZvciBDUUhDSSwgb25l IHdheSBvciBhbm90aGVyLgpIb3dldmVyLCBpdCBpcyBnZW5lcmFsbHkgZXhwZWN0ZWQgdGhhdCBu ZXcgZmVhdHVyZXMgd2lsbCBvbmx5IGJlIGFkZGVkIGlmIHRoZXkgZGVtb25zdHJhdGUgc29tZSBi ZW5lZml0LgpKdXN0IGFzc3VtaW5nIHRoYXQgdGhlcmUgaXMgYSBiZW5lZml0IGlzIG5vdCBlbm91 Z2guCgo+Pgo+PiBBbHNvIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgY29uZmlndXJhdGlv biBvZiB0aGUgQ1FJQwo+PiByZWdpc3Rlci4KPiAKPiBBdCBwcmVzZW50LCBJIGFtIHdvcmtpbmcg b24gdGhlIGhvb2sgZnVuY3Rpb24gLmNxZV9lbmFibGUgdGhhdCB0aGUgSUNDVEggb2YgQ1FJQyBp cyBzZXQgaW4gZW5hYmxlCj4+Cj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogTWljaGFlbCBXdSA8bWlj aGFlbEBhbGx3aW5uZXJ0ZWNoLmNvbT4KPj4+IC0tLQo+Pj4gwqAgZHJpdmVycy9tbWMvaG9zdC9j cWhjaS1jb3JlLmPCoMKgwqDCoMKgIHwgMjAgKysrKysrKysrKysrKysrLS0tLS0KPj4+IMKgIGRy aXZlcnMvbW1jL2hvc3QvY3FoY2kuaMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA1ICsrKystCj4+ PiDCoCBkcml2ZXJzL21tYy9ob3N0L210ay1zZC5jwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAyICst Cj4+PiDCoCBkcml2ZXJzL21tYy9ob3N0L3NkaGNpLWJyY21zdGIuY8KgwqAgfMKgIDIgKy0KPj4+ IMKgIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMgfMKgIDIgKy0KPj4+IMKgIGRy aXZlcnMvbW1jL2hvc3Qvc2RoY2ktbXNtLmPCoMKgwqDCoMKgwqAgfMKgIDIgKy0KPj4+IMKgIGRy aXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtYXJhc2FuLmMgfMKgIDIgKy0KPj4+IMKgIGRyaXZlcnMv bW1jL2hvc3Qvc2RoY2ktcGNpLWNvcmUuY8KgIHzCoCAyICstCj4+PiDCoCBkcml2ZXJzL21tYy9o b3N0L3NkaGNpLXBjaS1nbGkuY8KgwqAgfMKgIDIgKy0KPj4+IMKgIGRyaXZlcnMvbW1jL2hvc3Qv c2RoY2ktdGVncmEuY8KgwqDCoMKgIHzCoCAyICstCj4+PiDCoCBkcml2ZXJzL21tYy9ob3N0L3Nk aGNpX2FtNjU0LmPCoMKgwqDCoCB8wqAgMiArLQo+Pj4gwqAgMTEgZmlsZXMgY2hhbmdlZCwgMjgg aW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbW1jL2hvc3QvY3FoY2ktY29yZS5jIGIvZHJpdmVycy9tbWMvaG9zdC9jcWhjaS1jb3JlLmMK Pj4+IGluZGV4IGIzZDdkNmQ4ZDY1NC4uZjljZGY5ZjA0YmZjIDEwMDY0NAo+Pj4gLS0tIGEvZHJp dmVycy9tbWMvaG9zdC9jcWhjaS1jb3JlLmMKPj4+ICsrKyBiL2RyaXZlcnMvbW1jL2hvc3QvY3Fo Y2ktY29yZS5jCj4+PiBAQCAtNDIwLDcgKzQyMCw3IEBAIHN0YXRpYyB2b2lkIGNxaGNpX2Rpc2Fi bGUoc3RydWN0IG1tY19ob3N0ICptbWMpCj4+PiDCoCB9Cj4+PiDCoCDCoCBzdGF0aWMgdm9pZCBj cWhjaV9wcmVwX3Rhc2tfZGVzYyhzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSwKPj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3FoY2lfaG9zdCAqY3FfaG9zdCwgaW50 IHRhZykKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3FoY2lf aG9zdCAqY3FfaG9zdCwgaW50IHRhZywgaW50IGludHIpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKg IF9fbGU2NCAqdGFza19kZXNjID0gKF9fbGU2NCBfX2ZvcmNlICopZ2V0X2Rlc2MoY3FfaG9zdCwg dGFnKTsKPj4+IMKgwqDCoMKgwqAgdTMyIHJlcV9mbGFncyA9IG1ycS0+ZGF0YS0+ZmxhZ3M7Cj4+ PiBAQCAtNDI4LDcgKzQyOCw3IEBAIHN0YXRpYyB2b2lkIGNxaGNpX3ByZXBfdGFza19kZXNjKHN0 cnVjdCBtbWNfcmVxdWVzdCAqbXJxLAo+Pj4gwqAgwqDCoMKgwqDCoCBkZXNjMCA9IENRSENJX1ZB TElEKDEpIHwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBDUUhDSV9FTkQoMSkgfAo+Pj4gLcKgwqDC oMKgwqDCoMKgIENRSENJX0lOVCgxKSB8Cj4+PiArwqDCoMKgwqDCoMKgwqAgQ1FIQ0lfSU5UKGlu dHIpIHwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBDUUhDSV9BQ1QoMHg1KSB8Cj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgQ1FIQ0lfRk9SQ0VEX1BST0coISEocmVxX2ZsYWdzICYgTU1DX0RBVEFfRk9S Q0VEX1BSRykpIHwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBDUUhDSV9EQVRBX1RBRyghIShyZXFf ZmxhZ3MgJiBNTUNfREFUQV9EQVRfVEFHKSkgfAo+Pj4gQEAgLTYyMSw3ICs2MjEsNyBAQCBzdGF0 aWMgaW50IGNxaGNpX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVx dWVzdCAqbXJxKQo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoCDCoMKgwqDCoMKgIGlmIChtcnEtPmRh dGEpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBjcWhjaV9wcmVwX3Rhc2tfZGVzYyhtcnEsIGNxX2hv c3QsIHRhZyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgY3FoY2lfcHJlcF90YXNrX2Rlc2MobXJxLCBj cV9ob3N0LCB0YWcsIChjcV9ob3N0LT5pbnRyX2Nsc2MgPyAwIDogMSkpOwo+Pj4gwqAgwqDCoMKg wqDCoMKgwqDCoMKgIGVyciA9IGNxaGNpX3ByZXBfdHJhbl9kZXNjKG1ycSwgY3FfaG9zdCwgdGFn KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZXJyKSB7Cj4+PiBAQCAtODEyLDcgKzgxMiw3 IEBAIHN0YXRpYyB2b2lkIGNxaGNpX2ZpbmlzaF9tcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIHVu c2lnbmVkIGludCB0YWcpCj4+PiDCoCBpcnFyZXR1cm5fdCBjcWhjaV9pcnEoc3RydWN0IG1tY19o b3N0ICptbWMsIHUzMiBpbnRtYXNrLCBpbnQgY21kX2Vycm9yLAo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGludCBkYXRhX2Vycm9yKQo+Pj4gwqAgewo+Pj4gLcKgwqDCoCB1MzIg c3RhdHVzOwo+Pj4gK8KgwqDCoCB1MzIgc3RhdHVzLCBydmFsOwo+Pj4gwqDCoMKgwqDCoCB1bnNp Z25lZCBsb25nIHRhZyA9IDAsIGNvbXBfc3RhdHVzOwo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgY3Fo Y2lfaG9zdCAqY3FfaG9zdCA9IG1tYy0+Y3FlX3ByaXZhdGU7Cj4+PiDCoCBAQCAtODU2LDYgKzg1 NiwxNSBAQCBpcnFyZXR1cm5fdCBjcWhjaV9pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIHUzMiBp bnRtYXNrLCBpbnQgY21kX2Vycm9yLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2Nr KCZjcV9ob3N0LT5sb2NrKTsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqAgK8KgwqDCoCBpZiAoY3Ff aG9zdC0+aW50cl9jbHNjKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcnZhbCA9IGNxaGNpX3JlYWRs KGNxX2hvc3QsIENRSENJX0lDKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBydmFsIHw9IENRSENJX0lD X1JFU0VUOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGNxaGNpX3dyaXRlbChjcV9ob3N0LCBydmFsLCBD UUhDSV9JQyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcnZhbCA9IGNxaGNpX3JlYWRsKGNxX2hvc3Qs IENRSENJX0lDKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBydmFsICY9ICh+Q1FIQ0lfSUNfUkVTRVQp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIGNxaGNpX3dyaXRlbChjcV9ob3N0LCBydmFsLCBDUUhDSV9J Qyk7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+IMKgwqDCoMKgwqAgaWYgKHN0YXR1cyAmIENRSENJ X0lTX1RDTCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB3YWtlX3VwKCZjcV9ob3N0LT53YWl0X3F1 ZXVlKTsKPj4+IMKgIEBAIC0xMTcyLDExICsxMTgxLDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQg Y3FoY2lfdmVyX21pbm9yKHN0cnVjdCBjcWhjaV9ob3N0ICpjcV9ob3N0KQo+Pj4gwqAgfQo+Pj4g wqAgwqAgaW50IGNxaGNpX2luaXQoc3RydWN0IGNxaGNpX2hvc3QgKmNxX2hvc3QsIHN0cnVjdCBt bWNfaG9zdCAqbW1jLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoCBib29sIGRtYTY0KQo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoCBib29sIGRtYTY0LCBib29sIGludHJfY2xzYykKPj4+IMKgIHsKPj4+ IMKgwqDCoMKgwqAgaW50IGVycjsKPj4+IMKgIMKgwqDCoMKgwqAgY3FfaG9zdC0+ZG1hNjQgPSBk bWE2NDsKPj4+ICvCoMKgwqAgY3FfaG9zdC0+aW50cl9jbHNjID0gaW50cl9jbHNjOwo+Pj4gwqDC oMKgwqDCoCBjcV9ob3N0LT5tbWMgPSBtbWM7Cj4+PiDCoMKgwqDCoMKgIGNxX2hvc3QtPm1tYy0+ Y3FlX3ByaXZhdGUgPSBjcV9ob3N0Owo+Pj4gwqAgZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hv c3QvY3FoY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvY3FoY2kuaAo+Pj4gaW5kZXggYmE5Mzg3ZWQ5 MGViLi5hY2Y5MDc3M2MzMGEgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL21tYy9ob3N0L2NxaGNp LmgKPj4+ICsrKyBiL2RyaXZlcnMvbW1jL2hvc3QvY3FoY2kuaAo+Pj4gQEAgLTIyNyw2ICsyMjcs OSBAQCBzdHJ1Y3QgY3FoY2lfaG9zdCB7Cj4+PiDCoCDCoMKgwqDCoMKgIC8qIDY0IGJpdCBETUEg Ki8KPj4+IMKgwqDCoMKgwqAgYm9vbCBkbWE2NDsKPj4+ICsKPj4+ICvCoMKgwqAgLyogaW50ZXJy dXB0IGNvYWxlc2NpbmcqLwo+Pj4gK8KgwqDCoCBib29sIGludHJfY2xzYzsKPj4+IMKgwqDCoMKg wqAgaW50IG51bV9zbG90czsKPj4+IMKgwqDCoMKgwqAgaW50IHFjbnQ7Cj4+PiDCoCBAQCAtMzEy LDcgKzMxNSw3IEBAIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7Cj4+PiDCoCDCoCBpcnFyZXR1cm5f dCBjcWhjaV9pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIHUzMiBpbnRtYXNrLCBpbnQgY21kX2Vy cm9yLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBkYXRhX2Vycm9yKTsK Pj4+IC1pbnQgY3FoY2lfaW5pdChzdHJ1Y3QgY3FoY2lfaG9zdCAqY3FfaG9zdCwgc3RydWN0IG1t Y19ob3N0ICptbWMsIGJvb2wgZG1hNjQpOwo+Pj4gK2ludCBjcWhjaV9pbml0KHN0cnVjdCBjcWhj aV9ob3N0ICpjcV9ob3N0LCBzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgYm9vbCBkbWE2NCwgYm9vbCBp bnRyX2Nsc2MpOwo+Pj4gwqAgc3RydWN0IGNxaGNpX2hvc3QgKmNxaGNpX3BsdGZtX2luaXQoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Cj4+PiDCoCBpbnQgY3FoY2lfZGVhY3RpdmF0ZShz dHJ1Y3QgbW1jX2hvc3QgKm1tYyk7Cj4+PiDCoCBzdGF0aWMgaW5saW5lIGludCBjcWhjaV9zdXNw ZW5kKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hv c3QvbXRrLXNkLmMgYi9kcml2ZXJzL21tYy9ob3N0L210ay1zZC5jCj4+PiBpbmRleCBlZGFkZTBl NTRhMGMuLjJjMThmOTU0ZDRiOCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbXRr LXNkLmMKPj4+ICsrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXRrLXNkLmMKPj4+IEBAIC0yNzk2LDcg KzI3OTYsNyBAQCBzdGF0aWMgaW50IG1zZGNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaG9zdC0+Y3FfaG9zdC0+Y2FwcyB8PSBD UUhDSV9UQVNLX0RFU0NfU1pfMTI4Owo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGhvc3QtPmNxX2hv c3QtPm1taW8gPSBob3N0LT5iYXNlICsgMHg4MDA7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaG9z dC0+Y3FfaG9zdC0+b3BzID0gJm1zZGNfY21kcV9vcHM7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0 ID0gY3FoY2lfaW5pdChob3N0LT5jcV9ob3N0LCBtbWMsIHRydWUpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IGNxaGNpX2luaXQoaG9zdC0+Y3FfaG9zdCwgbW1jLCB0cnVlLCBmYWxzZSk7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGdvdG8gaG9zdF9mcmVlOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIG1tYy0+bWF4X3NlZ3Mg PSAxMjg7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1icmNtc3RiLmMg Yi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWJyY21zdGIuYwo+Pj4gaW5kZXggZjJjZjNkNzBkYjc5 Li40YWVhZWRkYmJmMjUgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWJy Y21zdGIuYwo+Pj4gKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1icmNtc3RiLmMKPj4+IEBA IC0yMzEsNyArMjMxLDcgQEAgc3RhdGljIGludCBzZGhjaV9icmNtc3RiX2FkZF9ob3N0KHN0cnVj dCBzZGhjaV9ob3N0ICpob3N0LAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNxX2hvc3QtPmNhcHMg fD0gQ1FIQ0lfVEFTS19ERVNDX1NaXzEyODsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqAgLcKgwqDC oCByZXQgPSBjcWhjaV9pbml0KGNxX2hvc3QsIGhvc3QtPm1tYywgZG1hNjQpOwo+Pj4gK8KgwqDC oCByZXQgPSBjcWhjaV9pbml0KGNxX2hvc3QsIGhvc3QtPm1tYywgZG1hNjQsIGZhbHNlKTsKPj4+ IMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGNsZWFudXA7 Cj4+PiDCoCBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYyBi L2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMKPj4+IGluZGV4IDllNzNjMzRiNjQw MS4uN2FlZjdhYmU3MWYxIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1l c2RoYy1pbXguYwo+Pj4gKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYwo+ Pj4gQEAgLTE3MTIsNyArMTcxMiw3IEBAIHN0YXRpYyBpbnQgc2RoY2lfZXNkaGNfaW14X3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY3Ff aG9zdC0+bW1pbyA9IGhvc3QtPmlvYWRkciArIEVTREhDX0NRSENJX0FERFJfT0ZGU0VUOwo+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgIGNxX2hvc3QtPm9wcyA9ICZlc2RoY19jcWhjaV9vcHM7Cj4+PiDC oCAtwqDCoMKgwqDCoMKgwqAgZXJyID0gY3FoY2lfaW5pdChjcV9ob3N0LCBob3N0LT5tbWMsIGZh bHNlKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBlcnIgPSBjcWhjaV9pbml0KGNxX2hvc3QsIGhvc3Qt Pm1tYywgZmFsc2UsIGZhbHNlKTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZXJyKQo+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBkaXNhYmxlX2FoYl9jbGs7Cj4+PiDCoMKg wqDCoMKgIH0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW1zbS5jIGIv ZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1tc20uYwo+Pj4gaW5kZXggNGFjODY1MWQwYjI5Li5iNjU0 OWQxZTQzZWMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW1zbS5jCj4+ PiArKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW1zbS5jCj4+PiBAQCAtMjE1Myw3ICsyMTUz LDcgQEAgc3RhdGljIGludCBzZGhjaV9tc21fY3FlX2FkZF9ob3N0KHN0cnVjdCBzZGhjaV9ob3N0 ICpob3N0LAo+Pj4gwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdv dG8gY2xlYW51cDsKPj4+IMKgIC3CoMKgwqAgcmV0ID0gY3FoY2lfaW5pdChjcV9ob3N0LCBob3N0 LT5tbWMsIGRtYTY0KTsKPj4+ICvCoMKgwqAgcmV0ID0gY3FoY2lfaW5pdChjcV9ob3N0LCBob3N0 LT5tbWMsIGRtYTY0LCBmYWxzZSk7Cj4+PiDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogQ1FFIGluaXQ6IGZhaWxlZCAo JWQpXG4iLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtbWNfaG9zdG5h bWUoaG9zdC0+bW1jKSwgcmV0KTsKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3Nk aGNpLW9mLWFyYXNhbi5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1hcmFzYW4uYwo+Pj4g aW5kZXggODljNDMxYTM0YzQzLi44MTFmODY4NjUzMmQgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJz L21tYy9ob3N0L3NkaGNpLW9mLWFyYXNhbi5jCj4+PiArKysgYi9kcml2ZXJzL21tYy9ob3N0L3Nk aGNpLW9mLWFyYXNhbi5jCj4+PiBAQCAtMTYxMCw3ICsxNjEwLDcgQEAgc3RhdGljIGludCBzZGhj aV9hcmFzYW5fYWRkX2hvc3Qoc3RydWN0IHNkaGNpX2FyYXNhbl9kYXRhICpzZGhjaV9hcmFzYW4p Cj4+PiDCoMKgwqDCoMKgIGlmIChkbWE2NCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBjcV9ob3N0 LT5jYXBzIHw9IENRSENJX1RBU0tfREVTQ19TWl8xMjg7Cj4+PiDCoCAtwqDCoMKgIHJldCA9IGNx aGNpX2luaXQoY3FfaG9zdCwgaG9zdC0+bW1jLCBkbWE2NCk7Cj4+PiArwqDCoMKgIHJldCA9IGNx aGNpX2luaXQoY3FfaG9zdCwgaG9zdC0+bW1jLCBkbWE2NCwgZmFsc2UpOwo+Pj4gwqDCoMKgwqDC oCBpZiAocmV0KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gY2xlYW51cDsKPj4+IMKgIGRp ZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS1jb3JlLmMgYi9kcml2ZXJzL21t Yy9ob3N0L3NkaGNpLXBjaS1jb3JlLmMKPj4+IGluZGV4IGMzNTlmODY3ZGYwYS4uNmY2Y2FlNjM1 NWE3IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2ktY29yZS5jCj4+ PiArKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS1jb3JlLmMKPj4+IEBAIC05NjQsNyAr OTY0LDcgQEAgc3RhdGljIGludCBnbGtfZW1tY19hZGRfaG9zdChzdHJ1Y3Qgc2RoY2lfcGNpX3Ns b3QgKnNsb3QpCj4+PiDCoMKgwqDCoMKgIGlmIChkbWE2NCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBjcV9ob3N0LT5jYXBzIHw9IENRSENJX1RBU0tfREVTQ19TWl8xMjg7Cj4+PiDCoCAtwqDCoMKg IHJldCA9IGNxaGNpX2luaXQoY3FfaG9zdCwgaG9zdC0+bW1jLCBkbWE2NCk7Cj4+PiArwqDCoMKg IHJldCA9IGNxaGNpX2luaXQoY3FfaG9zdCwgaG9zdC0+bW1jLCBkbWE2NCwgZmFsc2UpOwo+Pj4g wqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gY2xlYW51cDsK Pj4+IMKgIGRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS1nbGkuYyBiL2Ry aXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLWdsaS5jCj4+PiBpbmRleCA2MzNhOGVlOGY4YzUuLjY5 MTdiYTMzOWFhOSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLWds aS5jCj4+PiArKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS1nbGkuYwo+Pj4gQEAgLTkw OCw3ICs5MDgsNyBAQCBzdGF0aWMgaW50IGdsOTc2M2VfYWRkX2hvc3Qoc3RydWN0IHNkaGNpX3Bj aV9zbG90ICpzbG90KQo+Pj4gwqDCoMKgwqDCoCBpZiAoZG1hNjQpCj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgY3FfaG9zdC0+Y2FwcyB8PSBDUUhDSV9UQVNLX0RFU0NfU1pfMTI4Owo+Pj4gwqAgLcKg wqDCoCByZXQgPSBjcWhjaV9pbml0KGNxX2hvc3QsIGhvc3QtPm1tYywgZG1hNjQpOwo+Pj4gK8Kg wqDCoCByZXQgPSBjcWhjaV9pbml0KGNxX2hvc3QsIGhvc3QtPm1tYywgZG1hNjQsIGZhbHNlKTsK Pj4+IMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGNsZWFu dXA7Cj4+PiDCoCBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS10ZWdyYS5jIGIv ZHJpdmVycy9tbWMvaG9zdC9zZGhjaS10ZWdyYS5jCj4+PiBpbmRleCBiZmYwODRmMTc4YzkuLmY5 OGE0NjhlOGY0MyAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktdGVncmEu Ywo+Pj4gKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS10ZWdyYS5jCj4+PiBAQCAtMTYyMCw3 ICsxNjIwLDcgQEAgc3RhdGljIGludCBzZGhjaV90ZWdyYV9hZGRfaG9zdChzdHJ1Y3Qgc2RoY2lf aG9zdCAqaG9zdCkKPj4+IMKgwqDCoMKgwqAgaWYgKGRtYTY0KQo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIGNxX2hvc3QtPmNhcHMgfD0gQ1FIQ0lfVEFTS19ERVNDX1NaXzEyODsKPj4+IMKgIC3CoMKg wqAgcmV0ID0gY3FoY2lfaW5pdChjcV9ob3N0LCBob3N0LT5tbWMsIGRtYTY0KTsKPj4+ICvCoMKg wqAgcmV0ID0gY3FoY2lfaW5pdChjcV9ob3N0LCBob3N0LT5tbWMsIGRtYTY0LCBmYWxzZSk7Cj4+ PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBjbGVhbnVw Owo+Pj4gwqAgZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2lfYW02NTQuYyBiL2Ry aXZlcnMvbW1jL2hvc3Qvc2RoY2lfYW02NTQuYwo+Pj4gaW5kZXggN2VmODI4OTQyZGYzLi44ZTdm YmVlNzBlMTYgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpX2FtNjU0LmMK Pj4+ICsrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2lfYW02NTQuYwo+Pj4gQEAgLTU2OCw3ICs1 NjgsNyBAQCBzdGF0aWMgaW50IHNkaGNpX2FtNjU0X2NxZV9hZGRfaG9zdChzdHJ1Y3Qgc2RoY2lf aG9zdCAqaG9zdCkKPj4+IMKgIMKgwqDCoMKgwqAgaG9zdC0+bW1jLT5jYXBzMiB8PSBNTUNfQ0FQ Ml9DUUU7Cj4+PiDCoCAtwqDCoMKgIHJldHVybiBjcWhjaV9pbml0KGNxX2hvc3QsIGhvc3QtPm1t YywgMSk7Cj4+PiArwqDCoMKgIHJldHVybiBjcWhjaV9pbml0KGNxX2hvc3QsIGhvc3QtPm1tYywg MSwgZmFsc2UpOwo+Pj4gwqAgfQo+Pj4gwqAgwqAgc3RhdGljIGludCBzZGhjaV9hbTY1NF9nZXRf b3RhcF9kZWxheShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwKPiAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==