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=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 autolearn=ham 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 4AFF5C3F2C6 for ; Sat, 29 Feb 2020 13:47:01 +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 10F43246A2 for ; Sat, 29 Feb 2020 13:47:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="T9xxN7vd"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="G4tW9N7s" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 10F43246A2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com 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:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=j9v9UXhlYls9Ujhb0p4JICnEU9LpIqRRiJHYiDOrm2Q=; b=T9xxN7vd0KBweC 6PRuHSddYmg6IQ24SfE1wLtd0D6WZTERP3YK8ilBJBDEppXa8eiDeU8m+5ywIbc/8WQVNaxLdvKCZ n40cixTalsfPHEZUG/WxlIMLVQkAZgUELsCTMhjqIw2EBJ0YHbK/MIwfTgJTRGx+NQEvZi+YUj4Yy uHRUpbrqMA1WfleMEIVKUhQ3+skNL3rcBIfRIrX59CsHloFvCE8k4gYeehzVBIBEboBGXuVUhEro+ YWIO7+EoJ4+XyID5PuS4xRPlzYOZUdEvcoHKH0riihpt726f7MpV7nkmfdviLlxGlOCZXcG2uM49R TAOS4oaEgFCk8IgINB+w==; 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 1j82SA-0001Tk-7U; Sat, 29 Feb 2020 13:46:50 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j82S6-0001TI-Io; Sat, 29 Feb 2020 13:46:48 +0000 X-UUID: af8bdacf5bb94318b7ccd2cabac7f215-20200229 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=Dx2qiVbtcnvo9hiyRO0Rt8sPm8J4l82Ym1oh2Kcvb5E=; b=G4tW9N7sPTGeyRB5BbDb2Jei86DeuDxwoiNbGvNkWbXfC0ubwMyPPmgzN7H1VyJfxczlssVXf/rCkPE/QQdliHwQrbC2m4g+BhZC0c6HsCbBlchIpl+CNSg5xwrG7pnsApgik6cs5fBTT9htrLe3v4fgUH9Rf37vkFDd496orXg=; X-UUID: af8bdacf5bb94318b7ccd2cabac7f215-20200229 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 264753086; Sat, 29 Feb 2020 05:46:41 -0800 Received: from mtkmbs08n1.mediatek.inc (172.21.101.55) by MTKMBS62N2.mediatek.inc (172.29.193.42) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 29 Feb 2020 05:37:50 -0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 29 Feb 2020 21:38:08 +0800 Received: from [172.21.77.33] (172.21.77.33) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Sat, 29 Feb 2020 21:36:09 +0800 Message-ID: <1582983391.21073.1.camel@mtkswgap22> Subject: Re: [PATCH v3 02/13] mailbox: cmdq: variablize address shift in platform From: Dennis-YC Hsieh To: CK Hu Date: Sat, 29 Feb 2020 21:36:31 +0800 In-Reply-To: <1582903376.14824.16.camel@mtksdaap41> References: <1582897461-15105-1-git-send-email-dennis-yc.hsieh@mediatek.com> <1582897461-15105-4-git-send-email-dennis-yc.hsieh@mediatek.com> <1582903376.14824.16.camel@mtksdaap41> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200229_054646_631199_517EFF92 X-CRM114-Status: GOOD ( 20.10 ) 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, srv_heupstream@mediatek.com, wsd_upstream@mediatek.com, Jassi Brar , linux-kernel@vger.kernel.org, Houlong Wei , Rob Herring , linux-mediatek@lists.infradead.org, Bibby Hsieh , Matthias Brugger , Ming-Fan Chen , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Hi CK, Thanks for your comment. On Fri, 2020-02-28 at 23:22 +0800, CK Hu wrote: > Hi, Dennis: > > On Fri, 2020-02-28 at 21:44 +0800, Dennis YC Hsieh wrote: > > Some gce hardware shift pc and end address in register to support > > large dram addressing. > > Implement gce address shift when write or read pc and end register. > > And add shift bit in platform definition. > > > > Signed-off-by: Dennis YC Hsieh > > --- > > drivers/mailbox/mtk-cmdq-mailbox.c | 57 ++++++++++++++++++------ > > drivers/soc/mediatek/mtk-cmdq-helper.c | 3 +- > > include/linux/mailbox/mtk-cmdq-mailbox.h | 2 + > > 3 files changed, 48 insertions(+), 14 deletions(-) > > > > diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c > > index 9a6ce9f5a7db..a98f0357dd7d 100644 > > --- a/drivers/mailbox/mtk-cmdq-mailbox.c > > +++ b/drivers/mailbox/mtk-cmdq-mailbox.c > > @@ -76,8 +76,22 @@ struct cmdq { > > struct cmdq_thread *thread; > > struct clk *clock; > > bool suspended; > > + u8 shift_pa; > > }; > > > > +struct gce_plat { > > + u32 thread_nr; > > + u8 shift; > > +}; > > + > > +u8 cmdq_mbox_shift(struct mbox_chan *chan) > > +{ > > + struct cmdq *cmdq = container_of(chan->mbox, struct cmdq, mbox); > > + > > + return cmdq->shift_pa; > > +} > > +EXPORT_SYMBOL(cmdq_mbox_shift); > > + > > static int cmdq_thread_suspend(struct cmdq *cmdq, struct cmdq_thread *thread) > > { > > u32 status; > > @@ -183,7 +197,7 @@ static void cmdq_task_remove_wfe(struct cmdq_task *task) > > for (i = 0; i < CMDQ_NUM_CMD(task->pkt); i++) > > if (cmdq_command_is_wfe(base[i])) > > base[i] = (u64)CMDQ_JUMP_BY_OFFSET << 32 | > > - CMDQ_JUMP_PASS; > > + CMDQ_JUMP_PASS >> task->cmdq->shift_pa; > > dma_sync_single_for_device(dev, task->pa_base, task->pkt->cmd_buf_size, > > DMA_TO_DEVICE); > > } > > @@ -221,13 +235,15 @@ static void cmdq_task_handle_error(struct cmdq_task *task) > > { > > struct cmdq_thread *thread = task->thread; > > struct cmdq_task *next_task; > > + struct cmdq *cmdq = task->cmdq; > > > > dev_err(task->cmdq->mbox.dev, "task 0x%p error\n", task); > > WARN_ON(cmdq_thread_suspend(task->cmdq, thread) < 0); > > If you invent local variable 'cmdq', I think you could replace all > task->cmdq with cmdq in this function. > Ok, will do. > > next_task = list_first_entry_or_null(&thread->task_busy_list, > > struct cmdq_task, list_entry); > > if (next_task) > > - writel(next_task->pa_base, thread->base + CMDQ_THR_CURR_ADDR); > > + writel(next_task->pa_base >> cmdq->shift_pa, > > + thread->base + CMDQ_THR_CURR_ADDR); > > cmdq_thread_resume(thread); > > } > > > > @@ -257,7 +273,7 @@ static void cmdq_thread_irq_handler(struct cmdq *cmdq, > > else > > return; > > > > - curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR); > > + curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR) << cmdq->shift_pa; > > > > list_for_each_entry_safe(task, tmp, &thread->task_busy_list, > > list_entry) { > > @@ -373,16 +389,20 @@ static int cmdq_mbox_send_data(struct mbox_chan *chan, void *data) > > WARN_ON(clk_enable(cmdq->clock) < 0); > > WARN_ON(cmdq_thread_reset(cmdq, thread) < 0); > > > > - writel(task->pa_base, thread->base + CMDQ_THR_CURR_ADDR); > > - writel(task->pa_base + pkt->cmd_buf_size, > > + writel(task->pa_base >> cmdq->shift_pa, > > + thread->base + CMDQ_THR_CURR_ADDR); > > + writel((task->pa_base + pkt->cmd_buf_size) >> cmdq->shift_pa, > > thread->base + CMDQ_THR_END_ADDR); > > + > > writel(thread->priority, thread->base + CMDQ_THR_PRIORITY); > > writel(CMDQ_THR_IRQ_EN, thread->base + CMDQ_THR_IRQ_ENABLE); > > writel(CMDQ_THR_ENABLED, thread->base + CMDQ_THR_ENABLE_TASK); > > } else { > > WARN_ON(cmdq_thread_suspend(cmdq, thread) < 0); > > - curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR); > > - end_pa = readl(thread->base + CMDQ_THR_END_ADDR); > > + curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR) << > > + cmdq->shift_pa; > > + end_pa = readl(thread->base + CMDQ_THR_END_ADDR) << > > + cmdq->shift_pa; > > > > /* > > * Atomic execution should remove the following wfe, i.e. only > > @@ -395,7 +415,7 @@ static int cmdq_mbox_send_data(struct mbox_chan *chan, void *data) > > cmdq_thread_wait_end(thread, end_pa); > > WARN_ON(cmdq_thread_suspend(cmdq, thread) < 0); > > /* set to this task directly */ > > - writel(task->pa_base, > > + writel(task->pa_base >> cmdq->shift_pa, > > thread->base + CMDQ_THR_CURR_ADDR); > > } else { > > cmdq_task_insert_into_thread(task); > > @@ -407,14 +427,14 @@ static int cmdq_mbox_send_data(struct mbox_chan *chan, void *data) > > if (curr_pa == end_pa - CMDQ_INST_SIZE || > > curr_pa == end_pa) { > > /* set to this task directly */ > > - writel(task->pa_base, > > + writel(task->pa_base >> cmdq->shift_pa, > > thread->base + CMDQ_THR_CURR_ADDR); > > } else { > > cmdq_task_insert_into_thread(task); > > smp_mb(); /* modify jump before enable thread */ > > } > > } > > - writel(task->pa_base + pkt->cmd_buf_size, > > + writel((task->pa_base + pkt->cmd_buf_size) >> cmdq->shift_pa, > > thread->base + CMDQ_THR_END_ADDR); > > cmdq_thread_resume(thread); > > } > > @@ -461,6 +481,7 @@ static int cmdq_probe(struct platform_device *pdev) > > struct resource *res; > > struct cmdq *cmdq; > > int err, i; > > + struct gce_plat *plat_data; > > > > cmdq = devm_kzalloc(dev, sizeof(*cmdq), GFP_KERNEL); > > if (!cmdq) > > @@ -479,7 +500,14 @@ static int cmdq_probe(struct platform_device *pdev) > > return -EINVAL; > > } > > > > - cmdq->thread_nr = (u32)(unsigned long)of_device_get_match_data(dev); > > + plat_data = (struct gce_plat *)of_device_get_match_data(dev); > > + if (!plat_data) { > > + dev_err(dev, "failed to get match data\n"); > > + return -EINVAL; > > + } > > + > > + cmdq->thread_nr = plat_data->thread_nr; > > + cmdq->shift_pa = plat_data->shift; > > cmdq->irq_mask = GENMASK(cmdq->thread_nr - 1, 0); > > err = devm_request_irq(dev, cmdq->irq, cmdq_irq_handler, IRQF_SHARED, > > "mtk_cmdq", cmdq); > > @@ -542,9 +570,12 @@ static const struct dev_pm_ops cmdq_pm_ops = { > > .resume = cmdq_resume, > > }; > > > > +static const struct gce_plat gce_plat_v2 = {.thread_nr = 16}; > > +static const struct gce_plat gce_plat_v3 = {.thread_nr = 24}; > > + > > static const struct of_device_id cmdq_of_ids[] = { > > - {.compatible = "mediatek,mt8173-gce", .data = (void *)16}, > > - {.compatible = "mediatek,mt8183-gce", .data = (void *)24}, > > + {.compatible = "mediatek,mt8173-gce", .data = (void *)&gce_plat_v2}, > > + {.compatible = "mediatek,mt8183-gce", .data = (void *)&gce_plat_v3}, > > {} > > }; > > > > diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c > > index de20e6cba83b..2e1bc513569b 100644 > > --- a/drivers/soc/mediatek/mtk-cmdq-helper.c > > +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c > > @@ -291,7 +291,8 @@ static int cmdq_pkt_finalize(struct cmdq_pkt *pkt) > > > > /* JUMP to end */ > > inst.op = CMDQ_CODE_JUMP; > > - inst.value = CMDQ_JUMP_PASS; > > + inst.value = CMDQ_JUMP_PASS >> > > + cmdq_mbox_shift(((struct cmdq_client *)pkt->cl)->chan); > > Why not just cmdq_mbox_shift(pkt->cl->chan) ? Ok, will do. Regards, Dennis > > Regards, > CK > > > err = cmdq_pkt_append_command(pkt, inst); > > > > return err; > > diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h > > index a4dc45fbec0a..dfe5b2eb85cc 100644 > > --- a/include/linux/mailbox/mtk-cmdq-mailbox.h > > +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h > > @@ -88,4 +88,6 @@ struct cmdq_pkt { > > void *cl; > > }; > > > > +u8 cmdq_mbox_shift(struct mbox_chan *chan); > > + > > #endif /* __MTK_CMDQ_MAILBOX_H__ */ > > _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek 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=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 autolearn=unavailable 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 0B113C3F2CE for ; Sat, 29 Feb 2020 13:47:03 +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 C9F34246A2 for ; Sat, 29 Feb 2020 13:47:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Zx5R16G/"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="G4tW9N7s" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C9F34246A2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com 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:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9TrUMJRBrZmCRlnpXmC0wkQ1rL3HxauayPqJE7SltTM=; b=Zx5R16G/h6OFGJ iiBXyYWaKDGC3s5Ct4XpKbaM+q+9W8NpIcHXkXS63Js9VflYaLc7Chsu6+m+WwM07wgJR7LqbGipH Nw2vl8po6Ee/Igs6eFrjhqkjxiZFwbY+/QS/xaIsc2dnxqrIzCVzHoFBkZzg8VW58W6k1k8dROgfv mrO4x+3+RipLaL7sKaddy6svLrZmFCd22/e+D1exl7YQaD1fGqeCCLAo3N0GsUCWJHM/bsD3SM41E Ds1aVkMkfPf2DTU4u1rYAub2MQ+XhqK3CHT2wT8rr/tlzfSIvfvOoR9nzdi3C1vl1ybj+wPjBW5XN zMbkdWTpYK3Q9J67xYCA==; 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 1j82SB-0001UV-Bf; Sat, 29 Feb 2020 13:46:51 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j82S6-0001TI-Io; Sat, 29 Feb 2020 13:46:48 +0000 X-UUID: af8bdacf5bb94318b7ccd2cabac7f215-20200229 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=Dx2qiVbtcnvo9hiyRO0Rt8sPm8J4l82Ym1oh2Kcvb5E=; b=G4tW9N7sPTGeyRB5BbDb2Jei86DeuDxwoiNbGvNkWbXfC0ubwMyPPmgzN7H1VyJfxczlssVXf/rCkPE/QQdliHwQrbC2m4g+BhZC0c6HsCbBlchIpl+CNSg5xwrG7pnsApgik6cs5fBTT9htrLe3v4fgUH9Rf37vkFDd496orXg=; X-UUID: af8bdacf5bb94318b7ccd2cabac7f215-20200229 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 264753086; Sat, 29 Feb 2020 05:46:41 -0800 Received: from mtkmbs08n1.mediatek.inc (172.21.101.55) by MTKMBS62N2.mediatek.inc (172.29.193.42) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 29 Feb 2020 05:37:50 -0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 29 Feb 2020 21:38:08 +0800 Received: from [172.21.77.33] (172.21.77.33) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Sat, 29 Feb 2020 21:36:09 +0800 Message-ID: <1582983391.21073.1.camel@mtkswgap22> Subject: Re: [PATCH v3 02/13] mailbox: cmdq: variablize address shift in platform From: Dennis-YC Hsieh To: CK Hu Date: Sat, 29 Feb 2020 21:36:31 +0800 In-Reply-To: <1582903376.14824.16.camel@mtksdaap41> References: <1582897461-15105-1-git-send-email-dennis-yc.hsieh@mediatek.com> <1582897461-15105-4-git-send-email-dennis-yc.hsieh@mediatek.com> <1582903376.14824.16.camel@mtksdaap41> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200229_054646_631199_517EFF92 X-CRM114-Status: GOOD ( 20.10 ) 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, srv_heupstream@mediatek.com, wsd_upstream@mediatek.com, Jassi Brar , linux-kernel@vger.kernel.org, Houlong Wei , Rob Herring , linux-mediatek@lists.infradead.org, Bibby Hsieh , Matthias Brugger , Ming-Fan Chen , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi CK, Thanks for your comment. On Fri, 2020-02-28 at 23:22 +0800, CK Hu wrote: > Hi, Dennis: > > On Fri, 2020-02-28 at 21:44 +0800, Dennis YC Hsieh wrote: > > Some gce hardware shift pc and end address in register to support > > large dram addressing. > > Implement gce address shift when write or read pc and end register. > > And add shift bit in platform definition. > > > > Signed-off-by: Dennis YC Hsieh > > --- > > drivers/mailbox/mtk-cmdq-mailbox.c | 57 ++++++++++++++++++------ > > drivers/soc/mediatek/mtk-cmdq-helper.c | 3 +- > > include/linux/mailbox/mtk-cmdq-mailbox.h | 2 + > > 3 files changed, 48 insertions(+), 14 deletions(-) > > > > diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c > > index 9a6ce9f5a7db..a98f0357dd7d 100644 > > --- a/drivers/mailbox/mtk-cmdq-mailbox.c > > +++ b/drivers/mailbox/mtk-cmdq-mailbox.c > > @@ -76,8 +76,22 @@ struct cmdq { > > struct cmdq_thread *thread; > > struct clk *clock; > > bool suspended; > > + u8 shift_pa; > > }; > > > > +struct gce_plat { > > + u32 thread_nr; > > + u8 shift; > > +}; > > + > > +u8 cmdq_mbox_shift(struct mbox_chan *chan) > > +{ > > + struct cmdq *cmdq = container_of(chan->mbox, struct cmdq, mbox); > > + > > + return cmdq->shift_pa; > > +} > > +EXPORT_SYMBOL(cmdq_mbox_shift); > > + > > static int cmdq_thread_suspend(struct cmdq *cmdq, struct cmdq_thread *thread) > > { > > u32 status; > > @@ -183,7 +197,7 @@ static void cmdq_task_remove_wfe(struct cmdq_task *task) > > for (i = 0; i < CMDQ_NUM_CMD(task->pkt); i++) > > if (cmdq_command_is_wfe(base[i])) > > base[i] = (u64)CMDQ_JUMP_BY_OFFSET << 32 | > > - CMDQ_JUMP_PASS; > > + CMDQ_JUMP_PASS >> task->cmdq->shift_pa; > > dma_sync_single_for_device(dev, task->pa_base, task->pkt->cmd_buf_size, > > DMA_TO_DEVICE); > > } > > @@ -221,13 +235,15 @@ static void cmdq_task_handle_error(struct cmdq_task *task) > > { > > struct cmdq_thread *thread = task->thread; > > struct cmdq_task *next_task; > > + struct cmdq *cmdq = task->cmdq; > > > > dev_err(task->cmdq->mbox.dev, "task 0x%p error\n", task); > > WARN_ON(cmdq_thread_suspend(task->cmdq, thread) < 0); > > If you invent local variable 'cmdq', I think you could replace all > task->cmdq with cmdq in this function. > Ok, will do. > > next_task = list_first_entry_or_null(&thread->task_busy_list, > > struct cmdq_task, list_entry); > > if (next_task) > > - writel(next_task->pa_base, thread->base + CMDQ_THR_CURR_ADDR); > > + writel(next_task->pa_base >> cmdq->shift_pa, > > + thread->base + CMDQ_THR_CURR_ADDR); > > cmdq_thread_resume(thread); > > } > > > > @@ -257,7 +273,7 @@ static void cmdq_thread_irq_handler(struct cmdq *cmdq, > > else > > return; > > > > - curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR); > > + curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR) << cmdq->shift_pa; > > > > list_for_each_entry_safe(task, tmp, &thread->task_busy_list, > > list_entry) { > > @@ -373,16 +389,20 @@ static int cmdq_mbox_send_data(struct mbox_chan *chan, void *data) > > WARN_ON(clk_enable(cmdq->clock) < 0); > > WARN_ON(cmdq_thread_reset(cmdq, thread) < 0); > > > > - writel(task->pa_base, thread->base + CMDQ_THR_CURR_ADDR); > > - writel(task->pa_base + pkt->cmd_buf_size, > > + writel(task->pa_base >> cmdq->shift_pa, > > + thread->base + CMDQ_THR_CURR_ADDR); > > + writel((task->pa_base + pkt->cmd_buf_size) >> cmdq->shift_pa, > > thread->base + CMDQ_THR_END_ADDR); > > + > > writel(thread->priority, thread->base + CMDQ_THR_PRIORITY); > > writel(CMDQ_THR_IRQ_EN, thread->base + CMDQ_THR_IRQ_ENABLE); > > writel(CMDQ_THR_ENABLED, thread->base + CMDQ_THR_ENABLE_TASK); > > } else { > > WARN_ON(cmdq_thread_suspend(cmdq, thread) < 0); > > - curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR); > > - end_pa = readl(thread->base + CMDQ_THR_END_ADDR); > > + curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR) << > > + cmdq->shift_pa; > > + end_pa = readl(thread->base + CMDQ_THR_END_ADDR) << > > + cmdq->shift_pa; > > > > /* > > * Atomic execution should remove the following wfe, i.e. only > > @@ -395,7 +415,7 @@ static int cmdq_mbox_send_data(struct mbox_chan *chan, void *data) > > cmdq_thread_wait_end(thread, end_pa); > > WARN_ON(cmdq_thread_suspend(cmdq, thread) < 0); > > /* set to this task directly */ > > - writel(task->pa_base, > > + writel(task->pa_base >> cmdq->shift_pa, > > thread->base + CMDQ_THR_CURR_ADDR); > > } else { > > cmdq_task_insert_into_thread(task); > > @@ -407,14 +427,14 @@ static int cmdq_mbox_send_data(struct mbox_chan *chan, void *data) > > if (curr_pa == end_pa - CMDQ_INST_SIZE || > > curr_pa == end_pa) { > > /* set to this task directly */ > > - writel(task->pa_base, > > + writel(task->pa_base >> cmdq->shift_pa, > > thread->base + CMDQ_THR_CURR_ADDR); > > } else { > > cmdq_task_insert_into_thread(task); > > smp_mb(); /* modify jump before enable thread */ > > } > > } > > - writel(task->pa_base + pkt->cmd_buf_size, > > + writel((task->pa_base + pkt->cmd_buf_size) >> cmdq->shift_pa, > > thread->base + CMDQ_THR_END_ADDR); > > cmdq_thread_resume(thread); > > } > > @@ -461,6 +481,7 @@ static int cmdq_probe(struct platform_device *pdev) > > struct resource *res; > > struct cmdq *cmdq; > > int err, i; > > + struct gce_plat *plat_data; > > > > cmdq = devm_kzalloc(dev, sizeof(*cmdq), GFP_KERNEL); > > if (!cmdq) > > @@ -479,7 +500,14 @@ static int cmdq_probe(struct platform_device *pdev) > > return -EINVAL; > > } > > > > - cmdq->thread_nr = (u32)(unsigned long)of_device_get_match_data(dev); > > + plat_data = (struct gce_plat *)of_device_get_match_data(dev); > > + if (!plat_data) { > > + dev_err(dev, "failed to get match data\n"); > > + return -EINVAL; > > + } > > + > > + cmdq->thread_nr = plat_data->thread_nr; > > + cmdq->shift_pa = plat_data->shift; > > cmdq->irq_mask = GENMASK(cmdq->thread_nr - 1, 0); > > err = devm_request_irq(dev, cmdq->irq, cmdq_irq_handler, IRQF_SHARED, > > "mtk_cmdq", cmdq); > > @@ -542,9 +570,12 @@ static const struct dev_pm_ops cmdq_pm_ops = { > > .resume = cmdq_resume, > > }; > > > > +static const struct gce_plat gce_plat_v2 = {.thread_nr = 16}; > > +static const struct gce_plat gce_plat_v3 = {.thread_nr = 24}; > > + > > static const struct of_device_id cmdq_of_ids[] = { > > - {.compatible = "mediatek,mt8173-gce", .data = (void *)16}, > > - {.compatible = "mediatek,mt8183-gce", .data = (void *)24}, > > + {.compatible = "mediatek,mt8173-gce", .data = (void *)&gce_plat_v2}, > > + {.compatible = "mediatek,mt8183-gce", .data = (void *)&gce_plat_v3}, > > {} > > }; > > > > diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c > > index de20e6cba83b..2e1bc513569b 100644 > > --- a/drivers/soc/mediatek/mtk-cmdq-helper.c > > +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c > > @@ -291,7 +291,8 @@ static int cmdq_pkt_finalize(struct cmdq_pkt *pkt) > > > > /* JUMP to end */ > > inst.op = CMDQ_CODE_JUMP; > > - inst.value = CMDQ_JUMP_PASS; > > + inst.value = CMDQ_JUMP_PASS >> > > + cmdq_mbox_shift(((struct cmdq_client *)pkt->cl)->chan); > > Why not just cmdq_mbox_shift(pkt->cl->chan) ? Ok, will do. Regards, Dennis > > Regards, > CK > > > err = cmdq_pkt_append_command(pkt, inst); > > > > return err; > > diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h > > index a4dc45fbec0a..dfe5b2eb85cc 100644 > > --- a/include/linux/mailbox/mtk-cmdq-mailbox.h > > +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h > > @@ -88,4 +88,6 @@ struct cmdq_pkt { > > void *cl; > > }; > > > > +u8 cmdq_mbox_shift(struct mbox_chan *chan); > > + > > #endif /* __MTK_CMDQ_MAILBOX_H__ */ > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 autolearn=ham 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 46769C3F2CE for ; Sat, 29 Feb 2020 13:36:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 01E45246A2 for ; Sat, 29 Feb 2020 13:36:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="HFn83XBj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726995AbgB2Ngk (ORCPT ); Sat, 29 Feb 2020 08:36:40 -0500 Received: from mailgw01.mediatek.com ([210.61.82.183]:26518 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726973AbgB2Ngk (ORCPT ); Sat, 29 Feb 2020 08:36:40 -0500 X-UUID: 08d7846565454e66bdbcaa117a462aae-20200229 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=Dx2qiVbtcnvo9hiyRO0Rt8sPm8J4l82Ym1oh2Kcvb5E=; b=HFn83XBjSN2ZxM7F4CXsfaqhgxrVYIf5dQFCh9EOWelxD2KgmyjkdYxi9Tj6zgzVmGEtRibQ4XXGyJR6EMVPy3YqXx5f1wVLtt9OSW98ITV4Y7aL2Pe1uhC43IGpxXS7S9VKmbV4ZE/S8k0RsuO5JJ6sy5tWcQ72kYedJ+6W6vs=; X-UUID: 08d7846565454e66bdbcaa117a462aae-20200229 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 690810008; Sat, 29 Feb 2020 21:36:33 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 29 Feb 2020 21:38:08 +0800 Received: from [172.21.77.33] (172.21.77.33) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Sat, 29 Feb 2020 21:36:09 +0800 Message-ID: <1582983391.21073.1.camel@mtkswgap22> Subject: Re: [PATCH v3 02/13] mailbox: cmdq: variablize address shift in platform From: Dennis-YC Hsieh To: CK Hu CC: Rob Herring , Matthias Brugger , Jassi Brar , , , , , Bibby Hsieh , Houlong Wei , , , "Ming-Fan Chen" Date: Sat, 29 Feb 2020 21:36:31 +0800 In-Reply-To: <1582903376.14824.16.camel@mtksdaap41> References: <1582897461-15105-1-git-send-email-dennis-yc.hsieh@mediatek.com> <1582897461-15105-4-git-send-email-dennis-yc.hsieh@mediatek.com> <1582903376.14824.16.camel@mtksdaap41> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org SGkgQ0ssDQoNClRoYW5rcyBmb3IgeW91ciBjb21tZW50Lg0KDQpPbiBGcmksIDIwMjAtMDItMjgg YXQgMjM6MjIgKzA4MDAsIENLIEh1IHdyb3RlOg0KPiBIaSwgRGVubmlzOg0KPiANCj4gT24gRnJp LCAyMDIwLTAyLTI4IGF0IDIxOjQ0ICswODAwLCBEZW5uaXMgWUMgSHNpZWggd3JvdGU6DQo+ID4g U29tZSBnY2UgaGFyZHdhcmUgc2hpZnQgcGMgYW5kIGVuZCBhZGRyZXNzIGluIHJlZ2lzdGVyIHRv IHN1cHBvcnQNCj4gPiBsYXJnZSBkcmFtIGFkZHJlc3NpbmcuDQo+ID4gSW1wbGVtZW50IGdjZSBh ZGRyZXNzIHNoaWZ0IHdoZW4gd3JpdGUgb3IgcmVhZCBwYyBhbmQgZW5kIHJlZ2lzdGVyLg0KPiA+ IEFuZCBhZGQgc2hpZnQgYml0IGluIHBsYXRmb3JtIGRlZmluaXRpb24uDQo+ID4gDQo+ID4gU2ln bmVkLW9mZi1ieTogRGVubmlzIFlDIEhzaWVoIDxkZW5uaXMteWMuaHNpZWhAbWVkaWF0ZWsuY29t Pg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL21haWxib3gvbXRrLWNtZHEtbWFpbGJveC5jICAgICAg IHwgNTcgKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+ID4gIGRyaXZlcnMvc29jL21lZGlhdGVr L210ay1jbWRxLWhlbHBlci5jICAgfCAgMyArLQ0KPiA+ICBpbmNsdWRlL2xpbnV4L21haWxib3gv bXRrLWNtZHEtbWFpbGJveC5oIHwgIDIgKw0KPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDQ4IGluc2Vy dGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQ0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21haWxib3gvbXRrLWNtZHEtbWFpbGJveC5jIGIvZHJpdmVycy9tYWlsYm94L210ay1jbWRxLW1h aWxib3guYw0KPiA+IGluZGV4IDlhNmNlOWY1YTdkYi4uYTk4ZjAzNTdkZDdkIDEwMDY0NA0KPiA+ IC0tLSBhL2RyaXZlcnMvbWFpbGJveC9tdGstY21kcS1tYWlsYm94LmMNCj4gPiArKysgYi9kcml2 ZXJzL21haWxib3gvbXRrLWNtZHEtbWFpbGJveC5jDQo+ID4gQEAgLTc2LDggKzc2LDIyIEBAIHN0 cnVjdCBjbWRxIHsNCj4gPiAgCXN0cnVjdCBjbWRxX3RocmVhZAkqdGhyZWFkOw0KPiA+ICAJc3Ry dWN0IGNsawkJKmNsb2NrOw0KPiA+ICAJYm9vbAkJCXN1c3BlbmRlZDsNCj4gPiArCXU4CQkJc2hp ZnRfcGE7DQo+ID4gIH07DQo+ID4gIA0KPiA+ICtzdHJ1Y3QgZ2NlX3BsYXQgew0KPiA+ICsJdTMy IHRocmVhZF9ucjsNCj4gPiArCXU4IHNoaWZ0Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArdTggY21k cV9tYm94X3NoaWZ0KHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pDQo+ID4gK3sNCj4gPiArCXN0cnVj dCBjbWRxICpjbWRxID0gY29udGFpbmVyX29mKGNoYW4tPm1ib3gsIHN0cnVjdCBjbWRxLCBtYm94 KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gY21kcS0+c2hpZnRfcGE7DQo+ID4gK30NCj4gPiArRVhQ T1JUX1NZTUJPTChjbWRxX21ib3hfc2hpZnQpOw0KPiA+ICsNCj4gPiAgc3RhdGljIGludCBjbWRx X3RocmVhZF9zdXNwZW5kKHN0cnVjdCBjbWRxICpjbWRxLCBzdHJ1Y3QgY21kcV90aHJlYWQgKnRo cmVhZCkNCj4gPiAgew0KPiA+ICAJdTMyIHN0YXR1czsNCj4gPiBAQCAtMTgzLDcgKzE5Nyw3IEBA IHN0YXRpYyB2b2lkIGNtZHFfdGFza19yZW1vdmVfd2ZlKHN0cnVjdCBjbWRxX3Rhc2sgKnRhc2sp DQo+ID4gIAlmb3IgKGkgPSAwOyBpIDwgQ01EUV9OVU1fQ01EKHRhc2stPnBrdCk7IGkrKykNCj4g PiAgCQlpZiAoY21kcV9jb21tYW5kX2lzX3dmZShiYXNlW2ldKSkNCj4gPiAgCQkJYmFzZVtpXSA9 ICh1NjQpQ01EUV9KVU1QX0JZX09GRlNFVCA8PCAzMiB8DQo+ID4gLQkJCQkgIENNRFFfSlVNUF9Q QVNTOw0KPiA+ICsJCQkJICBDTURRX0pVTVBfUEFTUyA+PiB0YXNrLT5jbWRxLT5zaGlmdF9wYTsN Cj4gPiAgCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgdGFzay0+cGFfYmFzZSwgdGFz ay0+cGt0LT5jbWRfYnVmX3NpemUsDQo+ID4gIAkJCQkgICBETUFfVE9fREVWSUNFKTsNCj4gPiAg fQ0KPiA+IEBAIC0yMjEsMTMgKzIzNSwxNSBAQCBzdGF0aWMgdm9pZCBjbWRxX3Rhc2tfaGFuZGxl X2Vycm9yKHN0cnVjdCBjbWRxX3Rhc2sgKnRhc2spDQo+ID4gIHsNCj4gPiAgCXN0cnVjdCBjbWRx X3RocmVhZCAqdGhyZWFkID0gdGFzay0+dGhyZWFkOw0KPiA+ICAJc3RydWN0IGNtZHFfdGFzayAq bmV4dF90YXNrOw0KPiA+ICsJc3RydWN0IGNtZHEgKmNtZHEgPSB0YXNrLT5jbWRxOw0KPiA+ICAN Cj4gPiAgCWRldl9lcnIodGFzay0+Y21kcS0+bWJveC5kZXYsICJ0YXNrIDB4JXAgZXJyb3JcbiIs IHRhc2spOw0KPiA+ICAJV0FSTl9PTihjbWRxX3RocmVhZF9zdXNwZW5kKHRhc2stPmNtZHEsIHRo cmVhZCkgPCAwKTsNCj4gDQo+IElmIHlvdSBpbnZlbnQgbG9jYWwgdmFyaWFibGUgJ2NtZHEnLCBJ IHRoaW5rIHlvdSBjb3VsZCByZXBsYWNlIGFsbA0KPiB0YXNrLT5jbWRxIHdpdGggY21kcSBpbiB0 aGlzIGZ1bmN0aW9uLg0KPiANCg0KT2ssIHdpbGwgZG8uDQoNCg0KPiA+ICAJbmV4dF90YXNrID0g bGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZ0aHJlYWQtPnRhc2tfYnVzeV9saXN0LA0KPiA+ICAJ CQlzdHJ1Y3QgY21kcV90YXNrLCBsaXN0X2VudHJ5KTsNCj4gPiAgCWlmIChuZXh0X3Rhc2spDQo+ ID4gLQkJd3JpdGVsKG5leHRfdGFzay0+cGFfYmFzZSwgdGhyZWFkLT5iYXNlICsgQ01EUV9USFJf Q1VSUl9BRERSKTsNCj4gPiArCQl3cml0ZWwobmV4dF90YXNrLT5wYV9iYXNlID4+IGNtZHEtPnNo aWZ0X3BhLA0KPiA+ICsJCSAgICAgICB0aHJlYWQtPmJhc2UgKyBDTURRX1RIUl9DVVJSX0FERFIp Ow0KPiA+ICAJY21kcV90aHJlYWRfcmVzdW1lKHRocmVhZCk7DQo+ID4gIH0NCj4gPiAgDQo+ID4g QEAgLTI1Nyw3ICsyNzMsNyBAQCBzdGF0aWMgdm9pZCBjbWRxX3RocmVhZF9pcnFfaGFuZGxlcihz dHJ1Y3QgY21kcSAqY21kcSwNCj4gPiAgCWVsc2UNCj4gPiAgCQlyZXR1cm47DQo+ID4gIA0KPiA+ IC0JY3Vycl9wYSA9IHJlYWRsKHRocmVhZC0+YmFzZSArIENNRFFfVEhSX0NVUlJfQUREUik7DQo+ ID4gKwljdXJyX3BhID0gcmVhZGwodGhyZWFkLT5iYXNlICsgQ01EUV9USFJfQ1VSUl9BRERSKSA8 PCBjbWRxLT5zaGlmdF9wYTsNCj4gPiAgDQo+ID4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo dGFzaywgdG1wLCAmdGhyZWFkLT50YXNrX2J1c3lfbGlzdCwNCj4gPiAgCQkJCSBsaXN0X2VudHJ5 KSB7DQo+ID4gQEAgLTM3MywxNiArMzg5LDIwIEBAIHN0YXRpYyBpbnQgY21kcV9tYm94X3NlbmRf ZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQ0KPiA+ICAJCVdBUk5fT04o Y2xrX2VuYWJsZShjbWRxLT5jbG9jaykgPCAwKTsNCj4gPiAgCQlXQVJOX09OKGNtZHFfdGhyZWFk X3Jlc2V0KGNtZHEsIHRocmVhZCkgPCAwKTsNCj4gPiAgDQo+ID4gLQkJd3JpdGVsKHRhc2stPnBh X2Jhc2UsIHRocmVhZC0+YmFzZSArIENNRFFfVEhSX0NVUlJfQUREUik7DQo+ID4gLQkJd3JpdGVs KHRhc2stPnBhX2Jhc2UgKyBwa3QtPmNtZF9idWZfc2l6ZSwNCj4gPiArCQl3cml0ZWwodGFzay0+ cGFfYmFzZSA+PiBjbWRxLT5zaGlmdF9wYSwNCj4gPiArCQkgICAgICAgdGhyZWFkLT5iYXNlICsg Q01EUV9USFJfQ1VSUl9BRERSKTsNCj4gPiArCQl3cml0ZWwoKHRhc2stPnBhX2Jhc2UgKyBwa3Qt PmNtZF9idWZfc2l6ZSkgPj4gY21kcS0+c2hpZnRfcGEsDQo+ID4gIAkJICAgICAgIHRocmVhZC0+ YmFzZSArIENNRFFfVEhSX0VORF9BRERSKTsNCj4gPiArDQo+ID4gIAkJd3JpdGVsKHRocmVhZC0+ cHJpb3JpdHksIHRocmVhZC0+YmFzZSArIENNRFFfVEhSX1BSSU9SSVRZKTsNCj4gPiAgCQl3cml0 ZWwoQ01EUV9USFJfSVJRX0VOLCB0aHJlYWQtPmJhc2UgKyBDTURRX1RIUl9JUlFfRU5BQkxFKTsN Cj4gPiAgCQl3cml0ZWwoQ01EUV9USFJfRU5BQkxFRCwgdGhyZWFkLT5iYXNlICsgQ01EUV9USFJf RU5BQkxFX1RBU0spOw0KPiA+ICAJfSBlbHNlIHsNCj4gPiAgCQlXQVJOX09OKGNtZHFfdGhyZWFk X3N1c3BlbmQoY21kcSwgdGhyZWFkKSA8IDApOw0KPiA+IC0JCWN1cnJfcGEgPSByZWFkbCh0aHJl YWQtPmJhc2UgKyBDTURRX1RIUl9DVVJSX0FERFIpOw0KPiA+IC0JCWVuZF9wYSA9IHJlYWRsKHRo cmVhZC0+YmFzZSArIENNRFFfVEhSX0VORF9BRERSKTsNCj4gPiArCQljdXJyX3BhID0gcmVhZGwo dGhyZWFkLT5iYXNlICsgQ01EUV9USFJfQ1VSUl9BRERSKSA8PA0KPiA+ICsJCQljbWRxLT5zaGlm dF9wYTsNCj4gPiArCQllbmRfcGEgPSByZWFkbCh0aHJlYWQtPmJhc2UgKyBDTURRX1RIUl9FTkRf QUREUikgPDwNCj4gPiArCQkJY21kcS0+c2hpZnRfcGE7DQo+ID4gIA0KPiA+ICAJCS8qDQo+ID4g IAkJICogQXRvbWljIGV4ZWN1dGlvbiBzaG91bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgd2ZlLCBp LmUuIG9ubHkNCj4gPiBAQCAtMzk1LDcgKzQxNSw3IEBAIHN0YXRpYyBpbnQgY21kcV9tYm94X3Nl bmRfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQ0KPiA+ICAJCQkJY21k cV90aHJlYWRfd2FpdF9lbmQodGhyZWFkLCBlbmRfcGEpOw0KPiA+ICAJCQkJV0FSTl9PTihjbWRx X3RocmVhZF9zdXNwZW5kKGNtZHEsIHRocmVhZCkgPCAwKTsNCj4gPiAgCQkJCS8qIHNldCB0byB0 aGlzIHRhc2sgZGlyZWN0bHkgKi8NCj4gPiAtCQkJCXdyaXRlbCh0YXNrLT5wYV9iYXNlLA0KPiA+ ICsJCQkJd3JpdGVsKHRhc2stPnBhX2Jhc2UgPj4gY21kcS0+c2hpZnRfcGEsDQo+ID4gIAkJCQkg ICAgICAgdGhyZWFkLT5iYXNlICsgQ01EUV9USFJfQ1VSUl9BRERSKTsNCj4gPiAgCQkJfSBlbHNl IHsNCj4gPiAgCQkJCWNtZHFfdGFza19pbnNlcnRfaW50b190aHJlYWQodGFzayk7DQo+ID4gQEAg LTQwNywxNCArNDI3LDE0IEBAIHN0YXRpYyBpbnQgY21kcV9tYm94X3NlbmRfZGF0YShzdHJ1Y3Qg bWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQ0KPiA+ICAJCQlpZiAoY3Vycl9wYSA9PSBlbmRf cGEgLSBDTURRX0lOU1RfU0laRSB8fA0KPiA+ICAJCQkgICAgY3Vycl9wYSA9PSBlbmRfcGEpIHsN Cj4gPiAgCQkJCS8qIHNldCB0byB0aGlzIHRhc2sgZGlyZWN0bHkgKi8NCj4gPiAtCQkJCXdyaXRl bCh0YXNrLT5wYV9iYXNlLA0KPiA+ICsJCQkJd3JpdGVsKHRhc2stPnBhX2Jhc2UgPj4gY21kcS0+ c2hpZnRfcGEsDQo+ID4gIAkJCQkgICAgICAgdGhyZWFkLT5iYXNlICsgQ01EUV9USFJfQ1VSUl9B RERSKTsNCj4gPiAgCQkJfSBlbHNlIHsNCj4gPiAgCQkJCWNtZHFfdGFza19pbnNlcnRfaW50b190 aHJlYWQodGFzayk7DQo+ID4gIAkJCQlzbXBfbWIoKTsgLyogbW9kaWZ5IGp1bXAgYmVmb3JlIGVu YWJsZSB0aHJlYWQgKi8NCj4gPiAgCQkJfQ0KPiA+ICAJCX0NCj4gPiAtCQl3cml0ZWwodGFzay0+ cGFfYmFzZSArIHBrdC0+Y21kX2J1Zl9zaXplLA0KPiA+ICsJCXdyaXRlbCgodGFzay0+cGFfYmFz ZSArIHBrdC0+Y21kX2J1Zl9zaXplKSA+PiBjbWRxLT5zaGlmdF9wYSwNCj4gPiAgCQkgICAgICAg dGhyZWFkLT5iYXNlICsgQ01EUV9USFJfRU5EX0FERFIpOw0KPiA+ICAJCWNtZHFfdGhyZWFkX3Jl c3VtZSh0aHJlYWQpOw0KPiA+ICAJfQ0KPiA+IEBAIC00NjEsNiArNDgxLDcgQEAgc3RhdGljIGlu dCBjbWRxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gIAlzdHJ1Y3Qg cmVzb3VyY2UgKnJlczsNCj4gPiAgCXN0cnVjdCBjbWRxICpjbWRxOw0KPiA+ICAJaW50IGVyciwg aTsNCj4gPiArCXN0cnVjdCBnY2VfcGxhdCAqcGxhdF9kYXRhOw0KPiA+ICANCj4gPiAgCWNtZHEg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNtZHEpLCBHRlBfS0VSTkVMKTsNCj4gPiAgCWlm ICghY21kcSkNCj4gPiBAQCAtNDc5LDcgKzUwMCwxNCBAQCBzdGF0aWMgaW50IGNtZHFfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiAgCX0NCj4gPiAgDQo+ID4gLQljbWRxLT50aHJlYWRfbnIgPSAodTMyKSh1bnNpZ25lZCBsb25n KW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOw0KPiA+ICsJcGxhdF9kYXRhID0gKHN0cnVj dCBnY2VfcGxhdCAqKW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOw0KPiA+ICsJaWYgKCFw bGF0X2RhdGEpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgbWF0Y2ggZGF0 YVxuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY21k cS0+dGhyZWFkX25yID0gcGxhdF9kYXRhLT50aHJlYWRfbnI7DQo+ID4gKwljbWRxLT5zaGlmdF9w YSA9IHBsYXRfZGF0YS0+c2hpZnQ7DQo+ID4gIAljbWRxLT5pcnFfbWFzayA9IEdFTk1BU0soY21k cS0+dGhyZWFkX25yIC0gMSwgMCk7DQo+ID4gIAllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwg Y21kcS0+aXJxLCBjbWRxX2lycV9oYW5kbGVyLCBJUlFGX1NIQVJFRCwNCj4gPiAgCQkJICAgICAg ICJtdGtfY21kcSIsIGNtZHEpOw0KPiA+IEBAIC01NDIsOSArNTcwLDEyIEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZGV2X3BtX29wcyBjbWRxX3BtX29wcyA9IHsNCj4gPiAgCS5yZXN1bWUgPSBjbWRx X3Jlc3VtZSwNCj4gPiAgfTsNCj4gPiAgDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2NlX3Bs YXQgZ2NlX3BsYXRfdjIgPSB7LnRocmVhZF9uciA9IDE2fTsNCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBnY2VfcGxhdCBnY2VfcGxhdF92MyA9IHsudGhyZWFkX25yID0gMjR9Ow0KPiA+ICsNCj4g PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY21kcV9vZl9pZHNbXSA9IHsNCj4g PiAtCXsuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZ2NlIiwgLmRhdGEgPSAodm9pZCAq KTE2fSwNCj4gPiAtCXsuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxODMtZ2NlIiwgLmRhdGEg PSAodm9pZCAqKTI0fSwNCj4gPiArCXsuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZ2Nl IiwgLmRhdGEgPSAodm9pZCAqKSZnY2VfcGxhdF92Mn0sDQo+ID4gKwl7LmNvbXBhdGlibGUgPSAi bWVkaWF0ZWssbXQ4MTgzLWdjZSIsIC5kYXRhID0gKHZvaWQgKikmZ2NlX3BsYXRfdjN9LA0KPiA+ ICAJe30NCj4gPiAgfTsNCj4gPiAgDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL21lZGlh dGVrL210ay1jbWRxLWhlbHBlci5jIGIvZHJpdmVycy9zb2MvbWVkaWF0ZWsvbXRrLWNtZHEtaGVs cGVyLmMNCj4gPiBpbmRleCBkZTIwZTZjYmE4M2IuLjJlMWJjNTEzNTY5YiAxMDA2NDQNCj4gPiAt LS0gYS9kcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstY21kcS1oZWxwZXIuYw0KPiA+ICsrKyBiL2Ry aXZlcnMvc29jL21lZGlhdGVrL210ay1jbWRxLWhlbHBlci5jDQo+ID4gQEAgLTI5MSw3ICsyOTEs OCBAQCBzdGF0aWMgaW50IGNtZHFfcGt0X2ZpbmFsaXplKHN0cnVjdCBjbWRxX3BrdCAqcGt0KQ0K PiA+ICANCj4gPiAgCS8qIEpVTVAgdG8gZW5kICovDQo+ID4gIAlpbnN0Lm9wID0gQ01EUV9DT0RF X0pVTVA7DQo+ID4gLQlpbnN0LnZhbHVlID0gQ01EUV9KVU1QX1BBU1M7DQo+ID4gKwlpbnN0LnZh bHVlID0gQ01EUV9KVU1QX1BBU1MgPj4NCj4gPiArCQljbWRxX21ib3hfc2hpZnQoKChzdHJ1Y3Qg Y21kcV9jbGllbnQgKilwa3QtPmNsKS0+Y2hhbik7DQo+IA0KPiBXaHkgbm90IGp1c3QgY21kcV9t Ym94X3NoaWZ0KHBrdC0+Y2wtPmNoYW4pID8NCg0KT2ssIHdpbGwgZG8uDQoNCg0KUmVnYXJkcywN CkRlbm5pcw0KDQoNCj4gDQo+IFJlZ2FyZHMsDQo+IENLDQo+IA0KPiA+ICAJZXJyID0gY21kcV9w a3RfYXBwZW5kX2NvbW1hbmQocGt0LCBpbnN0KTsNCj4gPiAgDQo+ID4gIAlyZXR1cm4gZXJyOw0K PiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21haWxib3gvbXRrLWNtZHEtbWFpbGJveC5o IGIvaW5jbHVkZS9saW51eC9tYWlsYm94L210ay1jbWRxLW1haWxib3guaA0KPiA+IGluZGV4IGE0 ZGM0NWZiZWMwYS4uZGZlNWIyZWI4NWNjIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvbGludXgv bWFpbGJveC9tdGstY21kcS1tYWlsYm94LmgNCj4gPiArKysgYi9pbmNsdWRlL2xpbnV4L21haWxi b3gvbXRrLWNtZHEtbWFpbGJveC5oDQo+ID4gQEAgLTg4LDQgKzg4LDYgQEAgc3RydWN0IGNtZHFf cGt0IHsNCj4gPiAgCXZvaWQJCQkqY2w7DQo+ID4gIH07DQo+ID4gIA0KPiA+ICt1OCBjbWRxX21i b3hfc2hpZnQoc3RydWN0IG1ib3hfY2hhbiAqY2hhbik7DQo+ID4gKw0KPiA+ICAjZW5kaWYgLyog X19NVEtfQ01EUV9NQUlMQk9YX0hfXyAqLw0KPiANCj4gDQoNCg==