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 C084AC53210 for ; Sun, 8 Jan 2023 14:08:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type: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=zl7sPhrK+DRObggd+2QVBxFsItNWuyTEnlasljqdniY=; b=lMNYjlaJS02LPCyRBH1UHChJVw dIvE0O13JbOwDq8JiYZc9yAKzT5P0+umlJnVc0icckOL1aReY8tPxStmiYLtFyjioEAVIHiDwBBz2 +SL9eM1PRc7+8XrnvnoNHFX4BwO9+V14BmbE8Hv/IqsYeb2A8GfY+05/zlclgsZo8BrouX/y1iirp l1wj7xL4ytoN7ZUsG49Oi4AWf+9qYuLNe8C9P13m3ZeMcJRexaN69DKwf0Psbzg4wcUQniXUW1cNd AbAY2S/0LH9bvJ9xIP+Ts1uWspYVWUQ+OX2CY8IE4ELh1ACduPx/mmbG1JA7QoJDprVVvuy+XH1y3 WVYIM/gQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pEWLK-00DyBS-R6; Sun, 08 Jan 2023 14:08:10 +0000 Received: from mga18.intel.com ([134.134.136.126]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pEWL6-00Dy9A-6T; Sun, 08 Jan 2023 14:07:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673186876; x=1704722876; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=0JO44a6TP/Whpsx+Vpq0JEinNmF/qxJY8OAm9sasGMw=; b=AL/XCHGynCj8QRLl5VzOkcoc2ulwiIY8aXhlGhpv6f3NU0InOjFvy9xF cDDpFo6/nBDVJlOrhK6d2VB3A3Ossn6BgCX1k7rx3L/3NGyuIN5Y+fn7w nQiSMu+o9p3XzAdVibk6bd4i5STkTiNWBFAmYTZpvLGHg3diu4Yp9MO5I KWwTvDpESyuj0I0teJ12GFql9VhD3T4jQ1FmtfY3s/aP7jtIf6gSzymDZ l5K8i3l8cHeM9Dd7U6mW4VIddZqeX2YqaWMCMPpPByd9rw3NrQPoODrb2 OjIagj6/w7RzzABwGF+/Ru8Ss2HImdt9Vr/r6ooEnhfpj1i3jOXmH707v g==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="306246931" X-IronPort-AV: E=Sophos;i="5.96,310,1665471600"; d="scan'208";a="306246931" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 06:07:45 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="649762467" X-IronPort-AV: E=Sophos;i="5.96,310,1665471600"; d="scan'208";a="649762467" Received: from mckumar-mobl2.gar.corp.intel.com (HELO [10.213.110.20]) ([10.213.110.20]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 06:07:39 -0800 Message-ID: Date: Sun, 8 Jan 2023 19:37:35 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v3 net-next 2/5] net: wwan: t7xx: Infrastructure for early port configuration Content-Language: en-US To: Jesse Brandeburg , netdev@vger.kernel.org Cc: kuba@kernel.org, davem@davemloft.net, johannes@sipsolutions.net, ryazanov.s.a@gmail.com, loic.poulain@linaro.org, ilpo.jarvinen@linux.intel.com, ricardo.martinez@linux.intel.com, chiranjeevi.rapolu@linux.intel.com, haijun.liu@mediatek.com, edumazet@google.com, pabeni@redhat.com, linuxwwan@intel.com, linuxwwan_5g@intel.com, chandrashekar.devegowda@intel.com, matthias.bgg@gmail.com, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Madhusmita Sahu References: <8b1bd24c-f14c-0244-d2fb-69d4f02b46d5@intel.com> From: "Kumar, M Chetan" In-Reply-To: <8b1bd24c-f14c-0244-d2fb-69d4f02b46d5@intel.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230108_060756_463450_A1A63488 X-CRM114-Status: GOOD ( 22.67 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Hi Jesse, Thank you for the feedback. On 1/7/2023 12:01 AM, Jesse Brandeburg wrote: > On 1/6/2023 8:26 AM, m.chetan.kumar@linux.intel.com wrote: >> From: M Chetan Kumar >> >> To support cases such as FW update or Core dump, the t7xx >> device is capable of signaling the host that a special port >> needs to be created before the handshake phase. >> >> This patch adds the infrastructure required to create the >> early ports which also requires a different configuration of >> CLDMA queues. > > nit: use imperative voice in your commit messages: no "this patch". > instead: > "Add the infrastructure..." Sure. Will correct it. > >> >> Signed-off-by: Haijun Liu >> Co-developed-by: Madhusmita Sahu >> Signed-off-by: Madhusmita Sahu >> Signed-off-by: Ricardo Martinez >> Signed-off-by: Devegowda Chandrashekar >> >> Signed-off-by: M Chetan Kumar >> -- >> v3: >>   * No Change. >> v2: >>   * Move recv_skb handler to cldma_queue. >>   * Drop cldma_queue_type. >>   * Restore prototype of t7xx_port_send_raw_skb(). >>   * Remove PORT_CFG_ID_INVALID check in t7xx_port_proxy_set_cfg(). >>   * Add space before */. >>   * Drop unnecessary logs. >>   * Use WARN_ON on early port. >>   * Use new MISC_DEV_STATUS_INVALID instead of MISC_DEV_STATUS. >>   * Use macros instead of const identifiers. >>   * Change ports member type from pointer to array type. >>   * Prefix LK_EVENT_XX with MISC prefix. >>   * Use t7xx prefix for device_stage enums. >>   * Correct log messages. >>   * Don’t override pkt_size for non-download port under dedicated Queue. >>   * Drop cldma_txq_rxq_ids. >>   * Use macro for txq/rxq index. >>   * Use warn_on for rxq_idx comparison. >>   * Drop t7xx_port_proxy_get_port_by_name(). >>   * Replace fsm poll with read_poll_timeout(). >>   * Use "\n" consistently across log message. >>   * Remove local var _dev prefixes in fsm_routine_start(). >>   * Use max_t. > > ... > > >> diff --git a/drivers/net/wwan/t7xx/t7xx_reg.h >> b/drivers/net/wwan/t7xx/t7xx_reg.h >> index c41d7d094c08..44352cd02460 100644 >> --- a/drivers/net/wwan/t7xx/t7xx_reg.h >> +++ b/drivers/net/wwan/t7xx/t7xx_reg.h >> @@ -102,10 +102,28 @@ enum t7xx_pm_resume_state { >>   }; >>   #define T7XX_PCIE_MISC_DEV_STATUS        0x0d1c >> -#define MISC_STAGE_MASK                GENMASK(2, 0) >> -#define MISC_RESET_TYPE_PLDR            BIT(26) >>   #define MISC_RESET_TYPE_FLDR            BIT(27) >> -#define LINUX_STAGE                4 >> +#define MISC_RESET_TYPE_PLDR            BIT(26) >> +#define MISC_DEV_STATUS_MASK            GENMASK(15, 0) >> +#define MISC_DEV_STATUS_INVALID            GENMASK(15, 0) > > I don't see any uses of this, even though it's mentioned in the commit > message. The only reason I looked was because it was weird to have > DEV_STATUS_MASK and STATUS_INVALID be the same values, is that correct? Both are unused. Will drop it. > > >> +#define MISC_LK_EVENT_MASK            GENMASK(11, 8) >> + >> +enum lk_event_id { >> +    LK_EVENT_NORMAL = 0, >> +    LK_EVENT_CREATE_PD_PORT = 1, >> +    LK_EVENT_CREATE_POST_DL_PORT = 2, >> +    LK_EVENT_RESET = 7, >> +}; >> + >> +#define MISC_STAGE_MASK                GENMASK(2, 0) >> + >> +enum t7xx_device_stage { >> +    T7XX_DEV_STAGE_INIT = 0, >> +    T7XX_DEV_STAGE_BROM_PRE = 1, >> +    T7XX_DEV_STAGE_BROM_POST = 2, >> +    T7XX_DEV_STAGE_LK = 3, >> +    T7XX_DEV_STAGE_LINUX = 4, >> +}; >>   #define T7XX_PCIE_RESOURCE_STATUS        0x0d28 >>   #define T7XX_PCIE_RESOURCE_STS_MSK        GENMASK(4, 0) >> diff --git a/drivers/net/wwan/t7xx/t7xx_state_monitor.c >> b/drivers/net/wwan/t7xx/t7xx_state_monitor.c >> index 80edb8e75a6a..76fb5d57d4d7 100644 >> --- a/drivers/net/wwan/t7xx/t7xx_state_monitor.c >> +++ b/drivers/net/wwan/t7xx/t7xx_state_monitor.c >> @@ -206,6 +206,34 @@ static void fsm_routine_exception(struct >> t7xx_fsm_ctl *ctl, struct t7xx_fsm_comm >>           fsm_finish_command(ctl, cmd, 0); >>   } >> +static void t7xx_lk_stage_event_handling(struct t7xx_fsm_ctl *ctl, >> unsigned int status) >> +{ >> +    struct t7xx_modem *md = ctl->md; >> +    struct cldma_ctrl *md_ctrl; >> +    enum lk_event_id lk_event; >> +    struct device *dev; >> + >> +    dev = &md->t7xx_dev->pdev->dev; >> +    lk_event = FIELD_GET(MISC_LK_EVENT_MASK, status); >> +    switch (lk_event) { >> +    case LK_EVENT_NORMAL: >> +    case LK_EVENT_RESET: >> +        break; >> + >> +    case LK_EVENT_CREATE_PD_PORT: >> +        md_ctrl = md->md_ctrl[CLDMA_ID_AP]; >> +        t7xx_cldma_hif_hw_init(md_ctrl); >> +        t7xx_cldma_stop(md_ctrl); >> +        t7xx_cldma_switch_cfg(md_ctrl, CLDMA_DEDICATED_Q_CFG); >> +        t7xx_cldma_start(md_ctrl); >> +        break; >> + >> +    default: >> +        dev_err(dev, "Invalid LK event %d\n", lk_event); >> +        break; >> +    } >> +} >> + >>   static int fsm_stopped_handler(struct t7xx_fsm_ctl *ctl) >>   { >>       ctl->curr_state = FSM_STATE_STOPPED; >> @@ -317,8 +345,9 @@ static int fsm_routine_starting(struct >> t7xx_fsm_ctl *ctl) >>   static void fsm_routine_start(struct t7xx_fsm_ctl *ctl, struct >> t7xx_fsm_command *cmd) >>   { >>       struct t7xx_modem *md = ctl->md; >> -    u32 dev_status; >> -    int ret; >> +    struct device *dev; >> +    u32 status, stage; >> +    int ret = 0; >>       if (!md) >>           return; >> @@ -329,23 +358,55 @@ static void fsm_routine_start(struct >> t7xx_fsm_ctl *ctl, struct t7xx_fsm_command >>           return; >>       } >> +    dev = &md->t7xx_dev->pdev->dev; >>       ctl->curr_state = FSM_STATE_PRE_START; >>       t7xx_md_event_notify(md, FSM_PRE_START); >> -    ret = read_poll_timeout(ioread32, dev_status, >> -                (dev_status & MISC_STAGE_MASK) == LINUX_STAGE, 20000, >> 2000000, >> -                false, IREG_BASE(md->t7xx_dev) + >> T7XX_PCIE_MISC_DEV_STATUS); >> +    ret = read_poll_timeout(ioread32, status, >> +                ((status & MISC_STAGE_MASK) == T7XX_DEV_STAGE_LINUX) || >> +                ((status & MISC_STAGE_MASK) == T7XX_DEV_STAGE_LK), >> 100000, >> +                20000000, false, IREG_BASE(md->t7xx_dev) + >> +                T7XX_PCIE_MISC_DEV_STATUS); >> + >>       if (ret) { >> -        struct device *dev = &md->t7xx_dev->pdev->dev; >> +        ret = -ETIMEDOUT; >> +        dev_err(dev, "read poll %d\n", ret); >> +        goto finish_command; >> +    } >> -        fsm_finish_command(ctl, cmd, -ETIMEDOUT); >> -        dev_err(dev, "Invalid device status 0x%lx\n", dev_status & >> MISC_STAGE_MASK); >> -        return; >> +    if (status != ctl->prev_status) { >> +        stage = FIELD_GET(MISC_STAGE_MASK, status); > > if stage is only used down here you can declare it locally. cppcheck has > a check that will find these for you. Ok. Will consider it. > >> +        switch (stage) { >> +        case T7XX_DEV_STAGE_INIT: >> +        case T7XX_DEV_STAGE_BROM_PRE: >> +        case T7XX_DEV_STAGE_BROM_POST: >> +            dev_info(dev, "BROM_STAGE Entered\n"); >> +            ret = t7xx_fsm_append_cmd(ctl, FSM_CMD_START, 0); >> +            break; >> + >> +        case T7XX_DEV_STAGE_LK: >> +            dev_info(dev, "LK_STAGE Entered\n"); >> +            t7xx_lk_stage_event_handling(ctl, status); >> +            break; >> + >> +        case T7XX_DEV_STAGE_LINUX: >> +            dev_info(dev, "LINUX_STAGE Entered\n"); >> +            t7xx_cldma_hif_hw_init(md->md_ctrl[CLDMA_ID_AP]); >> +            t7xx_cldma_hif_hw_init(md->md_ctrl[CLDMA_ID_MD]); >> +            t7xx_mhccif_mask_clr(md->t7xx_dev, D2H_INT_PORT_ENUM | >> +                         D2H_INT_ASYNC_MD_HK | D2H_INT_ASYNC_AP_HK); >> +            t7xx_port_proxy_set_cfg(md, PORT_CFG_ID_NORMAL); >> +            ret = fsm_routine_starting(ctl); >> +            break; >> + >> +        default: >> +            break; >> +        } >> +        ctl->prev_status = status; >>       } >> -    t7xx_cldma_hif_hw_init(md->md_ctrl[CLDMA_ID_AP]); >> -    t7xx_cldma_hif_hw_init(md->md_ctrl[CLDMA_ID_MD]); >> -    fsm_finish_command(ctl, cmd, fsm_routine_starting(ctl)); >> +finish_command: >> +    fsm_finish_command(ctl, cmd, ret); >>   } >>   static int fsm_main_thread(void *data) >> @@ -516,6 +577,7 @@ void t7xx_fsm_reset(struct t7xx_modem *md) >>       fsm_flush_event_cmd_qs(ctl); >>       ctl->curr_state = FSM_STATE_STOPPED; >>       ctl->exp_flg = false; >> +    ctl->prev_status = 0; >>   } >>   int t7xx_fsm_init(struct t7xx_modem *md) >> diff --git a/drivers/net/wwan/t7xx/t7xx_state_monitor.h >> b/drivers/net/wwan/t7xx/t7xx_state_monitor.h >> index b6e76f3903c8..5e8012567ba1 100644 >> --- a/drivers/net/wwan/t7xx/t7xx_state_monitor.h >> +++ b/drivers/net/wwan/t7xx/t7xx_state_monitor.h >> @@ -96,6 +96,7 @@ struct t7xx_fsm_ctl { >>       bool            exp_flg; >>       spinlock_t        notifier_lock;        /* Protects notifier >> list */ >>       struct list_head    notifier_list; >> +    u32                     prev_status; >>   }; >>   struct t7xx_fsm_event { > -- Chetan 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 B6E08C54EBD for ; Sun, 8 Jan 2023 14:09:20 +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-Type: Content-Transfer-Encoding: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=4o+gEn/DtgcA1cSL9p9Ou3PUt/tM1YoG0d3sYQZnlCM=; b=eiwtbjwFCnHaGT r/gSQSXYTOvOWrOs+J6cr9cNI3GNNQNvNxm8oYYsRyo/hY8jSpuzJXFrNgHChHOcQxxSyoYKnW/Tx RLYxSTlAGimTqIVQreh/klnO+bUAjeDY212bVQB9H4jwv7UXWJCjstfPFzslz7u9bu1j2aZTfP7L+ b5VoQyiYeC3TDqJCtdaf7q7/DgafGQdwnCWOFXvCKcNB4ZoUXQMk0Tka805+tc4rCbfQ8MDrTS4R+ GJT71Iqq37l5cB4SfBtx+gy4/P8hq6ng6fKnrew0tT0DfZaaV6KVpSIOJ3OBzM5wkDPwD1050Y3Wt pzZiUZAapM+LRSYvy/4Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pEWLB-00DyAX-HE; Sun, 08 Jan 2023 14:08:02 +0000 Received: from mga18.intel.com ([134.134.136.126]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pEWL6-00Dy9A-6T; Sun, 08 Jan 2023 14:07:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1673186876; x=1704722876; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=0JO44a6TP/Whpsx+Vpq0JEinNmF/qxJY8OAm9sasGMw=; b=AL/XCHGynCj8QRLl5VzOkcoc2ulwiIY8aXhlGhpv6f3NU0InOjFvy9xF cDDpFo6/nBDVJlOrhK6d2VB3A3Ossn6BgCX1k7rx3L/3NGyuIN5Y+fn7w nQiSMu+o9p3XzAdVibk6bd4i5STkTiNWBFAmYTZpvLGHg3diu4Yp9MO5I KWwTvDpESyuj0I0teJ12GFql9VhD3T4jQ1FmtfY3s/aP7jtIf6gSzymDZ l5K8i3l8cHeM9Dd7U6mW4VIddZqeX2YqaWMCMPpPByd9rw3NrQPoODrb2 OjIagj6/w7RzzABwGF+/Ru8Ss2HImdt9Vr/r6ooEnhfpj1i3jOXmH707v g==; X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="306246931" X-IronPort-AV: E=Sophos;i="5.96,310,1665471600"; d="scan'208";a="306246931" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 06:07:45 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10584"; a="649762467" X-IronPort-AV: E=Sophos;i="5.96,310,1665471600"; d="scan'208";a="649762467" Received: from mckumar-mobl2.gar.corp.intel.com (HELO [10.213.110.20]) ([10.213.110.20]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jan 2023 06:07:39 -0800 Message-ID: Date: Sun, 8 Jan 2023 19:37:35 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v3 net-next 2/5] net: wwan: t7xx: Infrastructure for early port configuration Content-Language: en-US To: Jesse Brandeburg , netdev@vger.kernel.org Cc: kuba@kernel.org, davem@davemloft.net, johannes@sipsolutions.net, ryazanov.s.a@gmail.com, loic.poulain@linaro.org, ilpo.jarvinen@linux.intel.com, ricardo.martinez@linux.intel.com, chiranjeevi.rapolu@linux.intel.com, haijun.liu@mediatek.com, edumazet@google.com, pabeni@redhat.com, linuxwwan@intel.com, linuxwwan_5g@intel.com, chandrashekar.devegowda@intel.com, matthias.bgg@gmail.com, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Madhusmita Sahu References: <8b1bd24c-f14c-0244-d2fb-69d4f02b46d5@intel.com> From: "Kumar, M Chetan" In-Reply-To: <8b1bd24c-f14c-0244-d2fb-69d4f02b46d5@intel.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230108_060756_463450_A1A63488 X-CRM114-Status: GOOD ( 22.67 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgSmVzc2UsClRoYW5rIHlvdSBmb3IgdGhlIGZlZWRiYWNrLgoKT24gMS83LzIwMjMgMTI6MDEg QU0sIEplc3NlIEJyYW5kZWJ1cmcgd3JvdGU6Cj4gT24gMS82LzIwMjMgODoyNiBBTSwgbS5jaGV0 YW4ua3VtYXJAbGludXguaW50ZWwuY29tIHdyb3RlOgo+PiBGcm9tOiBNIENoZXRhbiBLdW1hciA8 bS5jaGV0YW4ua3VtYXJAbGludXguaW50ZWwuY29tPgo+Pgo+PiBUbyBzdXBwb3J0IGNhc2VzIHN1 Y2ggYXMgRlcgdXBkYXRlIG9yIENvcmUgZHVtcCwgdGhlIHQ3eHgKPj4gZGV2aWNlIGlzIGNhcGFi bGUgb2Ygc2lnbmFsaW5nIHRoZSBob3N0IHRoYXQgYSBzcGVjaWFsIHBvcnQKPj4gbmVlZHMgdG8g YmUgY3JlYXRlZCBiZWZvcmUgdGhlIGhhbmRzaGFrZSBwaGFzZS4KPj4KPj4gVGhpcyBwYXRjaCBh ZGRzIHRoZSBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCB0byBjcmVhdGUgdGhlCj4+IGVhcmx5IHBv cnRzIHdoaWNoIGFsc28gcmVxdWlyZXMgYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvZgo+PiBD TERNQSBxdWV1ZXMuCj4gCj4gbml0OiB1c2UgaW1wZXJhdGl2ZSB2b2ljZSBpbiB5b3VyIGNvbW1p dCBtZXNzYWdlczogbm8gInRoaXMgcGF0Y2giLgo+IGluc3RlYWQ6Cj4gIkFkZCB0aGUgaW5mcmFz dHJ1Y3R1cmUuLi4iCgpTdXJlLiBXaWxsIGNvcnJlY3QgaXQuCgo+IAo+Pgo+PiBTaWduZWQtb2Zm LWJ5OiBIYWlqdW4gTGl1IDxoYWlqdW4ubGl1QG1lZGlhdGVrLmNvbT4KPj4gQ28tZGV2ZWxvcGVk LWJ5OiBNYWRodXNtaXRhIFNhaHUgPG1hZGh1c21pdGEuc2FodUBpbnRlbC5jb20+Cj4+IFNpZ25l ZC1vZmYtYnk6IE1hZGh1c21pdGEgU2FodSA8bWFkaHVzbWl0YS5zYWh1QGludGVsLmNvbT4KPj4g U2lnbmVkLW9mZi1ieTogUmljYXJkbyBNYXJ0aW5leiA8cmljYXJkby5tYXJ0aW5lekBsaW51eC5p bnRlbC5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IERldmVnb3dkYSBDaGFuZHJhc2hla2FyIAo+PiA8 Y2hhbmRyYXNoZWthci5kZXZlZ293ZGFAaW50ZWwuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBNIENo ZXRhbiBLdW1hciA8bS5jaGV0YW4ua3VtYXJAbGludXguaW50ZWwuY29tPgo+PiAtLSAKPj4gdjM6 Cj4+IMKgICogTm8gQ2hhbmdlLgo+PiB2MjoKPj4gwqAgKiBNb3ZlIHJlY3Zfc2tiIGhhbmRsZXIg dG8gY2xkbWFfcXVldWUuCj4+IMKgICogRHJvcCBjbGRtYV9xdWV1ZV90eXBlLgo+PiDCoCAqIFJl c3RvcmUgcHJvdG90eXBlIG9mIHQ3eHhfcG9ydF9zZW5kX3Jhd19za2IoKS4KPj4gwqAgKiBSZW1v dmUgUE9SVF9DRkdfSURfSU5WQUxJRCBjaGVjayBpbiB0N3h4X3BvcnRfcHJveHlfc2V0X2NmZygp Lgo+PiDCoCAqIEFkZCBzcGFjZSBiZWZvcmUgKi8uCj4+IMKgICogRHJvcCB1bm5lY2Vzc2FyeSBs b2dzLgo+PiDCoCAqIFVzZSBXQVJOX09OIG9uIGVhcmx5IHBvcnQuCj4+IMKgICogVXNlIG5ldyBN SVNDX0RFVl9TVEFUVVNfSU5WQUxJRCBpbnN0ZWFkIG9mIE1JU0NfREVWX1NUQVRVUy4KPj4gwqAg KiBVc2UgbWFjcm9zIGluc3RlYWQgb2YgY29uc3QgaWRlbnRpZmllcnMuCj4+IMKgICogQ2hhbmdl IHBvcnRzIG1lbWJlciB0eXBlIGZyb20gcG9pbnRlciB0byBhcnJheSB0eXBlLgo+PiDCoCAqIFBy ZWZpeCBMS19FVkVOVF9YWCB3aXRoIE1JU0MgcHJlZml4Lgo+PiDCoCAqIFVzZSB0N3h4IHByZWZp eCBmb3IgZGV2aWNlX3N0YWdlIGVudW1zLgo+PiDCoCAqIENvcnJlY3QgbG9nIG1lc3NhZ2VzLgo+ PiDCoCAqIERvbuKAmXQgb3ZlcnJpZGUgcGt0X3NpemUgZm9yIG5vbi1kb3dubG9hZCBwb3J0IHVu ZGVyIGRlZGljYXRlZCBRdWV1ZS4KPj4gwqAgKiBEcm9wIGNsZG1hX3R4cV9yeHFfaWRzLgo+PiDC oCAqIFVzZSBtYWNybyBmb3IgdHhxL3J4cSBpbmRleC4KPj4gwqAgKiBVc2Ugd2Fybl9vbiBmb3Ig cnhxX2lkeCBjb21wYXJpc29uLgo+PiDCoCAqIERyb3AgdDd4eF9wb3J0X3Byb3h5X2dldF9wb3J0 X2J5X25hbWUoKS4KPj4gwqAgKiBSZXBsYWNlIGZzbSBwb2xsIHdpdGggcmVhZF9wb2xsX3RpbWVv dXQoKS4KPj4gwqAgKiBVc2UgIlxuIiBjb25zaXN0ZW50bHkgYWNyb3NzIGxvZyBtZXNzYWdlLgo+ PiDCoCAqIFJlbW92ZSBsb2NhbCB2YXIgX2RldiBwcmVmaXhlcyBpbiBmc21fcm91dGluZV9zdGFy dCgpLgo+PiDCoCAqIFVzZSBtYXhfdC4KPiAKPiAuLi4KPiAKPiAKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X3JlZy5oIAo+PiBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4 eC90N3h4X3JlZy5oCj4+IGluZGV4IGM0MWQ3ZDA5NGMwOC4uNDQzNTJjZDAyNDYwIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9yZWcuaAo+PiArKysgYi9kcml2ZXJz L25ldC93d2FuL3Q3eHgvdDd4eF9yZWcuaAo+PiBAQCAtMTAyLDEwICsxMDIsMjggQEAgZW51bSB0 N3h4X3BtX3Jlc3VtZV9zdGF0ZSB7Cj4+IMKgIH07Cj4+IMKgICNkZWZpbmUgVDdYWF9QQ0lFX01J U0NfREVWX1NUQVRVU8KgwqDCoMKgwqDCoMKgIDB4MGQxYwo+PiAtI2RlZmluZSBNSVNDX1NUQUdF X01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygyLCAwKQo+PiAtI2Rl ZmluZSBNSVNDX1JFU0VUX1RZUEVfUExEUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDI2KQo+ PiDCoCAjZGVmaW5lIE1JU0NfUkVTRVRfVFlQRV9GTERSwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBC SVQoMjcpCj4+IC0jZGVmaW5lIExJTlVYX1NUQUdFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIDQKPj4gKyNkZWZpbmUgTUlTQ19SRVNFVF9UWVBFX1BMRFLCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEJJVCgyNikKPj4gKyNkZWZpbmUgTUlTQ19ERVZfU1RBVFVTX01BU0vCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEdFTk1BU0soMTUsIDApCj4+ICsjZGVmaW5lIE1JU0NfREVWX1NUQVRVU19JTlZB TElEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDE1LCAwKQo+IAo+IEkgZG9uJ3Qgc2Vl IGFueSB1c2VzIG9mIHRoaXMsIGV2ZW4gdGhvdWdoIGl0J3MgbWVudGlvbmVkIGluIHRoZSBjb21t aXQgCj4gbWVzc2FnZS4gVGhlIG9ubHkgcmVhc29uIEkgbG9va2VkIHdhcyBiZWNhdXNlIGl0IHdh cyB3ZWlyZCB0byBoYXZlIAo+IERFVl9TVEFUVVNfTUFTSyBhbmQgU1RBVFVTX0lOVkFMSUQgYmUg dGhlIHNhbWUgdmFsdWVzLCBpcyB0aGF0IGNvcnJlY3Q/CgpCb3RoIGFyZSB1bnVzZWQuIFdpbGwg ZHJvcCBpdC4KCj4gCj4gCj4+ICsjZGVmaW5lIE1JU0NfTEtfRVZFTlRfTUFTS8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgR0VOTUFTSygxMSwgOCkKPj4gKwo+PiArZW51bSBsa19ldmVudF9pZCB7Cj4+ ICvCoMKgwqAgTEtfRVZFTlRfTk9STUFMID0gMCwKPj4gK8KgwqDCoCBMS19FVkVOVF9DUkVBVEVf UERfUE9SVCA9IDEsCj4+ICvCoMKgwqAgTEtfRVZFTlRfQ1JFQVRFX1BPU1RfRExfUE9SVCA9IDIs Cj4+ICvCoMKgwqAgTEtfRVZFTlRfUkVTRVQgPSA3LAo+PiArfTsKPj4gKwo+PiArI2RlZmluZSBN SVNDX1NUQUdFX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygyLCAw KQo+PiArCj4+ICtlbnVtIHQ3eHhfZGV2aWNlX3N0YWdlIHsKPj4gK8KgwqDCoCBUN1hYX0RFVl9T VEFHRV9JTklUID0gMCwKPj4gK8KgwqDCoCBUN1hYX0RFVl9TVEFHRV9CUk9NX1BSRSA9IDEsCj4+ ICvCoMKgwqAgVDdYWF9ERVZfU1RBR0VfQlJPTV9QT1NUID0gMiwKPj4gK8KgwqDCoCBUN1hYX0RF Vl9TVEFHRV9MSyA9IDMsCj4+ICvCoMKgwqAgVDdYWF9ERVZfU1RBR0VfTElOVVggPSA0LAo+PiAr fTsKPj4gwqAgI2RlZmluZSBUN1hYX1BDSUVfUkVTT1VSQ0VfU1RBVFVTwqDCoMKgwqDCoMKgwqAg MHgwZDI4Cj4+IMKgICNkZWZpbmUgVDdYWF9QQ0lFX1JFU09VUkNFX1NUU19NU0vCoMKgwqDCoMKg wqDCoCBHRU5NQVNLKDQsIDApCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgv dDd4eF9zdGF0ZV9tb25pdG9yLmMgCj4+IGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfc3Rh dGVfbW9uaXRvci5jCj4+IGluZGV4IDgwZWRiOGU3NWE2YS4uNzZmYjVkNTdkNGQ3IDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9zdGF0ZV9tb25pdG9yLmMKPj4gKysr IGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfc3RhdGVfbW9uaXRvci5jCj4+IEBAIC0yMDYs NiArMjA2LDM0IEBAIHN0YXRpYyB2b2lkIGZzbV9yb3V0aW5lX2V4Y2VwdGlvbihzdHJ1Y3QgCj4+ IHQ3eHhfZnNtX2N0bCAqY3RsLCBzdHJ1Y3QgdDd4eF9mc21fY29tbQo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgZnNtX2ZpbmlzaF9jb21tYW5kKGN0bCwgY21kLCAwKTsKPj4gwqAgfQo+PiArc3RhdGlj IHZvaWQgdDd4eF9sa19zdGFnZV9ldmVudF9oYW5kbGluZyhzdHJ1Y3QgdDd4eF9mc21fY3RsICpj dGwsIAo+PiB1bnNpZ25lZCBpbnQgc3RhdHVzKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCB0N3h4 X21vZGVtICptZCA9IGN0bC0+bWQ7Cj4+ICvCoMKgwqAgc3RydWN0IGNsZG1hX2N0cmwgKm1kX2N0 cmw7Cj4+ICvCoMKgwqAgZW51bSBsa19ldmVudF9pZCBsa19ldmVudDsKPj4gK8KgwqDCoCBzdHJ1 Y3QgZGV2aWNlICpkZXY7Cj4+ICsKPj4gK8KgwqDCoCBkZXYgPSAmbWQtPnQ3eHhfZGV2LT5wZGV2 LT5kZXY7Cj4+ICvCoMKgwqAgbGtfZXZlbnQgPSBGSUVMRF9HRVQoTUlTQ19MS19FVkVOVF9NQVNL LCBzdGF0dXMpOwo+PiArwqDCoMKgIHN3aXRjaCAobGtfZXZlbnQpIHsKPj4gK8KgwqDCoCBjYXNl IExLX0VWRU5UX05PUk1BTDoKPj4gK8KgwqDCoCBjYXNlIExLX0VWRU5UX1JFU0VUOgo+PiArwqDC oMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICsKPj4gK8KgwqDCoCBjYXNlIExLX0VWRU5UX0NSRUFURV9Q RF9QT1JUOgo+PiArwqDCoMKgwqDCoMKgwqAgbWRfY3RybCA9IG1kLT5tZF9jdHJsW0NMRE1BX0lE X0FQXTsKPj4gK8KgwqDCoMKgwqDCoMKgIHQ3eHhfY2xkbWFfaGlmX2h3X2luaXQobWRfY3RybCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCB0N3h4X2NsZG1hX3N0b3AobWRfY3RybCk7Cj4+ICvCoMKgwqDC oMKgwqDCoCB0N3h4X2NsZG1hX3N3aXRjaF9jZmcobWRfY3RybCwgQ0xETUFfREVESUNBVEVEX1Ff Q0ZHKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHQ3eHhfY2xkbWFfc3RhcnQobWRfY3RybCk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDC oMKgwqDCoCBkZXZfZXJyKGRldiwgIkludmFsaWQgTEsgZXZlbnQgJWRcbiIsIGxrX2V2ZW50KTsK Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+PiDCoCBz dGF0aWMgaW50IGZzbV9zdG9wcGVkX2hhbmRsZXIoc3RydWN0IHQ3eHhfZnNtX2N0bCAqY3RsKQo+ PiDCoCB7Cj4+IMKgwqDCoMKgwqAgY3RsLT5jdXJyX3N0YXRlID0gRlNNX1NUQVRFX1NUT1BQRUQ7 Cj4+IEBAIC0zMTcsOCArMzQ1LDkgQEAgc3RhdGljIGludCBmc21fcm91dGluZV9zdGFydGluZyhz dHJ1Y3QgCj4+IHQ3eHhfZnNtX2N0bCAqY3RsKQo+PiDCoCBzdGF0aWMgdm9pZCBmc21fcm91dGlu ZV9zdGFydChzdHJ1Y3QgdDd4eF9mc21fY3RsICpjdGwsIHN0cnVjdCAKPj4gdDd4eF9mc21fY29t bWFuZCAqY21kKQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHQ3eHhfbW9kZW0gKm1kID0g Y3RsLT5tZDsKPj4gLcKgwqDCoCB1MzIgZGV2X3N0YXR1czsKPj4gLcKgwqDCoCBpbnQgcmV0Owo+ PiArwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldjsKPj4gK8KgwqDCoCB1MzIgc3RhdHVzLCBzdGFn ZTsKPj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsKPj4gwqDCoMKgwqDCoCBpZiAoIW1kKQo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiBAQCAtMzI5LDIzICszNTgsNTUgQEAgc3RhdGljIHZv aWQgZnNtX3JvdXRpbmVfc3RhcnQoc3RydWN0IAo+PiB0N3h4X2ZzbV9jdGwgKmN0bCwgc3RydWN0 IHQ3eHhfZnNtX2NvbW1hbmQKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gwqDCoMKg wqDCoCB9Cj4+ICvCoMKgwqAgZGV2ID0gJm1kLT50N3h4X2Rldi0+cGRldi0+ZGV2Owo+PiDCoMKg wqDCoMKgIGN0bC0+Y3Vycl9zdGF0ZSA9IEZTTV9TVEFURV9QUkVfU1RBUlQ7Cj4+IMKgwqDCoMKg wqAgdDd4eF9tZF9ldmVudF9ub3RpZnkobWQsIEZTTV9QUkVfU1RBUlQpOwo+PiAtwqDCoMKgIHJl dCA9IHJlYWRfcG9sbF90aW1lb3V0KGlvcmVhZDMyLCBkZXZfc3RhdHVzLAo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIChkZXZfc3RhdHVzICYgTUlTQ19TVEFHRV9NQVNLKSA9PSBM SU5VWF9TVEFHRSwgMjAwMDAsIAo+PiAyMDAwMDAwLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGZhbHNlLCBJUkVHX0JBU0UobWQtPnQ3eHhfZGV2KSArIAo+PiBUN1hYX1BDSUVf TUlTQ19ERVZfU1RBVFVTKTsKPj4gK8KgwqDCoCByZXQgPSByZWFkX3BvbGxfdGltZW91dChpb3Jl YWQzMiwgc3RhdHVzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgoc3RhdHVz ICYgTUlTQ19TVEFHRV9NQVNLKSA9PSBUN1hYX0RFVl9TVEFHRV9MSU5VWCkgfHwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKHN0YXR1cyAmIE1JU0NfU1RBR0VfTUFTSykgPT0g VDdYWF9ERVZfU1RBR0VfTEspLCAKPj4gMTAwMDAwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDIwMDAwMDAwLCBmYWxzZSwgSVJFR19CQVNFKG1kLT50N3h4X2RldikgKwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFQ3WFhfUENJRV9NSVNDX0RFVl9TVEFUVVMp Owo+PiArCj4+IMKgwqDCoMKgwqAgaWYgKHJldCkgewo+PiAtwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRldmljZSAqZGV2ID0gJm1kLT50N3h4X2Rldi0+cGRldi0+ZGV2Owo+PiArwqDCoMKgwqDCoMKg wqAgcmV0ID0gLUVUSU1FRE9VVDsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAicmVh ZCBwb2xsICVkXG4iLCByZXQpOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmaW5pc2hfY29tbWFu ZDsKPj4gK8KgwqDCoCB9Cj4+IC3CoMKgwqDCoMKgwqDCoCBmc21fZmluaXNoX2NvbW1hbmQoY3Rs LCBjbWQsIC1FVElNRURPVVQpOwo+PiAtwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJJbnZh bGlkIGRldmljZSBzdGF0dXMgMHglbHhcbiIsIGRldl9zdGF0dXMgJiAKPj4gTUlTQ19TVEFHRV9N QVNLKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCBpZiAoc3RhdHVzICE9 IGN0bC0+cHJldl9zdGF0dXMpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0YWdlID0gRklFTERfR0VU KE1JU0NfU1RBR0VfTUFTSywgc3RhdHVzKTsKPiAKPiBpZiBzdGFnZSBpcyBvbmx5IHVzZWQgZG93 biBoZXJlIHlvdSBjYW4gZGVjbGFyZSBpdCBsb2NhbGx5LiBjcHBjaGVjayBoYXMgCj4gYSBjaGVj ayB0aGF0IHdpbGwgZmluZCB0aGVzZSBmb3IgeW91LgoKT2suIFdpbGwgY29uc2lkZXIgaXQuCgo+ IAo+PiArwqDCoMKgwqDCoMKgwqAgc3dpdGNoIChzdGFnZSkgewo+PiArwqDCoMKgwqDCoMKgwqAg Y2FzZSBUN1hYX0RFVl9TVEFHRV9JTklUOgo+PiArwqDCoMKgwqDCoMKgwqAgY2FzZSBUN1hYX0RF Vl9TVEFHRV9CUk9NX1BSRToKPj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgVDdYWF9ERVZfU1RBR0Vf QlJPTV9QT1NUOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfaW5mbyhkZXYsICJCUk9N X1NUQUdFIEVudGVyZWRcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSB0N3h4 X2ZzbV9hcHBlbmRfY21kKGN0bCwgRlNNX0NNRF9TVEFSVCwgMCk7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJyZWFrOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIFQ3WFhfREVWX1NU QUdFX0xLOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfaW5mbyhkZXYsICJMS19TVEFH RSBFbnRlcmVkXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdDd4eF9sa19zdGFnZV9l dmVudF9oYW5kbGluZyhjdGwsIHN0YXR1cyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJy ZWFrOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIFQ3WFhfREVWX1NUQUdFX0xJTlVYOgo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfaW5mbyhkZXYsICJMSU5VWF9TVEFHRSBFbnRl cmVkXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdDd4eF9jbGRtYV9oaWZfaHdfaW5p dChtZC0+bWRfY3RybFtDTERNQV9JRF9BUF0pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0 N3h4X2NsZG1hX2hpZl9od19pbml0KG1kLT5tZF9jdHJsW0NMRE1BX0lEX01EXSk7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHQ3eHhfbWhjY2lmX21hc2tfY2xyKG1kLT50N3h4X2RldiwgRDJI X0lOVF9QT1JUX0VOVU0gfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEQySF9JTlRfQVNZTkNfTURfSEsgfCBEMkhfSU5UX0FTWU5DX0FQX0hLKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdDd4eF9wb3J0X3Byb3h5X3NldF9jZmcobWQsIFBP UlRfQ0ZHX0lEX05PUk1BTCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IGZzbV9y b3V0aW5lX3N0YXJ0aW5nKGN0bCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBkZWZhdWx0Ogo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIGN0bC0+cHJl dl9zdGF0dXMgPSBzdGF0dXM7Cj4+IMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgIHQ3eHhfY2xkbWFf aGlmX2h3X2luaXQobWQtPm1kX2N0cmxbQ0xETUFfSURfQVBdKTsKPj4gLcKgwqDCoCB0N3h4X2Ns ZG1hX2hpZl9od19pbml0KG1kLT5tZF9jdHJsW0NMRE1BX0lEX01EXSk7Cj4+IC3CoMKgwqAgZnNt X2ZpbmlzaF9jb21tYW5kKGN0bCwgY21kLCBmc21fcm91dGluZV9zdGFydGluZyhjdGwpKTsKPj4g K2ZpbmlzaF9jb21tYW5kOgo+PiArwqDCoMKgIGZzbV9maW5pc2hfY29tbWFuZChjdGwsIGNtZCwg cmV0KTsKPj4gwqAgfQo+PiDCoCBzdGF0aWMgaW50IGZzbV9tYWluX3RocmVhZCh2b2lkICpkYXRh KQo+PiBAQCAtNTE2LDYgKzU3Nyw3IEBAIHZvaWQgdDd4eF9mc21fcmVzZXQoc3RydWN0IHQ3eHhf bW9kZW0gKm1kKQo+PiDCoMKgwqDCoMKgIGZzbV9mbHVzaF9ldmVudF9jbWRfcXMoY3RsKTsKPj4g wqDCoMKgwqDCoCBjdGwtPmN1cnJfc3RhdGUgPSBGU01fU1RBVEVfU1RPUFBFRDsKPj4gwqDCoMKg wqDCoCBjdGwtPmV4cF9mbGcgPSBmYWxzZTsKPj4gK8KgwqDCoCBjdGwtPnByZXZfc3RhdHVzID0g MDsKPj4gwqAgfQo+PiDCoCBpbnQgdDd4eF9mc21faW5pdChzdHJ1Y3QgdDd4eF9tb2RlbSAqbWQp Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9zdGF0ZV9tb25pdG9y LmggCj4+IGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfc3RhdGVfbW9uaXRvci5oCj4+IGlu ZGV4IGI2ZTc2ZjM5MDNjOC4uNWU4MDEyNTY3YmExIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL25l dC93d2FuL3Q3eHgvdDd4eF9zdGF0ZV9tb25pdG9yLmgKPj4gKysrIGIvZHJpdmVycy9uZXQvd3dh bi90N3h4L3Q3eHhfc3RhdGVfbW9uaXRvci5oCj4+IEBAIC05Niw2ICs5Niw3IEBAIHN0cnVjdCB0 N3h4X2ZzbV9jdGwgewo+PiDCoMKgwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV4 cF9mbGc7Cj4+IMKgwqDCoMKgwqAgc3BpbmxvY2tfdMKgwqDCoMKgwqDCoMKgIG5vdGlmaWVyX2xv Y2s7wqDCoMKgwqDCoMKgwqAgLyogUHJvdGVjdHMgbm90aWZpZXIgCj4+IGxpc3QgKi8KPj4gwqDC oMKgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkwqDCoMKgIG5vdGlmaWVyX2xpc3Q7Cj4+ICvCoMKgwqAg dTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmV2X3N0YXR1czsK Pj4gwqAgfTsKPj4gwqAgc3RydWN0IHQ3eHhfZnNtX2V2ZW50IHsKPiAKCi0tIApDaGV0YW4KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1r ZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJu ZWwK