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=-9.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_GIT 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 83065C43381 for ; Tue, 19 Feb 2019 07:37:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 544C0217D9 for ; Tue, 19 Feb 2019 07:37:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727294AbfBSHha (ORCPT ); Tue, 19 Feb 2019 02:37:30 -0500 Received: from mailgw02.mediatek.com ([1.203.163.81]:35992 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726924AbfBSHh0 (ORCPT ); Tue, 19 Feb 2019 02:37:26 -0500 X-UUID: 278c141ac45345e3a58dbec80304fd46-20190219 X-UUID: 278c141ac45345e3a58dbec80304fd46-20190219 Received: from mtkcas32.mediatek.inc [(172.27.4.250)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 310557823; Tue, 19 Feb 2019 15:37:09 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 19 Feb 2019 15:37:07 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Tue, 19 Feb 2019 15:37:06 +0800 From: To: Bin Liu , Rob Herring CC: Greg Kroah-Hartman , Mark Rutland , Matthias Brugger , Alan Stern , , , , , , , , , Min Guo Subject: [PATCH v5 5/6] usb: musb: Add musb_clearb/w() interface Date: Tue, 19 Feb 2019 15:36:34 +0800 Message-ID: <1550561795-31132-6-git-send-email-min.guo@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1550561795-31132-1-git-send-email-min.guo@mediatek.com> References: <1550561795-31132-1-git-send-email-min.guo@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Min Guo Delete the const attribute of addr parameter in readb/w/l hooks, these changes are for implementing clearing W1C registers. Replace musb_readb/w with musb_clearb/w to clear the interrupt status. Signed-off-by: Min Guo --- changes in v5: 1. Replace musb_readb() with musb_clearb() to clear dma pending interrupts new patch based on v4: --- drivers/usb/musb/musb_core.c | 32 +++++++++++++++++++++++--------- drivers/usb/musb/musb_core.h | 8 ++++++-- drivers/usb/musb/musb_io.h | 8 +++++--- drivers/usb/musb/musbhsdma.c | 2 +- drivers/usb/musb/sunxi.c | 4 ++-- drivers/usb/musb/tusb6010.c | 2 +- 6 files changed, 38 insertions(+), 18 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 2fe5225..5ef8848 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -246,7 +246,7 @@ static u32 musb_default_busctl_offset(u8 epnum, u16 offset) return 0x80 + (0x08 * epnum) + offset; } -static u8 musb_default_readb(const void __iomem *addr, unsigned offset) +static u8 musb_default_readb(void __iomem *addr, unsigned offset) { u8 data = __raw_readb(addr + offset); @@ -260,7 +260,7 @@ static void musb_default_writeb(void __iomem *addr, unsigned offset, u8 data) __raw_writeb(data, addr + offset); } -static u16 musb_default_readw(const void __iomem *addr, unsigned offset) +static u16 musb_default_readw(void __iomem *addr, unsigned offset) { u16 data = __raw_readw(addr + offset); @@ -396,19 +396,25 @@ static void musb_default_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst) /* * Old style IO functions */ -u8 (*musb_readb)(const void __iomem *addr, unsigned offset); +u8 (*musb_readb)(void __iomem *addr, unsigned offset); EXPORT_SYMBOL_GPL(musb_readb); void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data); EXPORT_SYMBOL_GPL(musb_writeb); -u16 (*musb_readw)(const void __iomem *addr, unsigned offset); +u8 (*musb_clearb)(void __iomem *addr, unsigned int offset); +EXPORT_SYMBOL_GPL(musb_clearb); + +u16 (*musb_readw)(void __iomem *addr, unsigned offset); EXPORT_SYMBOL_GPL(musb_readw); void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data); EXPORT_SYMBOL_GPL(musb_writew); -u32 musb_readl(const void __iomem *addr, unsigned offset) +u16 (*musb_clearw)(void __iomem *addr, unsigned int offset); +EXPORT_SYMBOL_GPL(musb_clearw); + +u32 musb_readl(void __iomem *addr, unsigned offset) { u32 data = __raw_readl(addr + offset); @@ -1047,7 +1053,6 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, static void musb_disable_interrupts(struct musb *musb) { void __iomem *mbase = musb->mregs; - u16 temp; /* disable interrupts */ musb_writeb(mbase, MUSB_INTRUSBE, 0); @@ -1057,9 +1062,9 @@ static void musb_disable_interrupts(struct musb *musb) musb_writew(mbase, MUSB_INTRRXE, 0); /* flush pending interrupts */ - temp = musb_readb(mbase, MUSB_INTRUSB); - temp = musb_readw(mbase, MUSB_INTRTX); - temp = musb_readw(mbase, MUSB_INTRRX); + musb_clearb(mbase, MUSB_INTRUSB); + musb_clearw(mbase, MUSB_INTRTX); + musb_clearw(mbase, MUSB_INTRRX); } static void musb_enable_interrupts(struct musb *musb) @@ -2284,10 +2289,19 @@ static void musb_deassert_reset(struct work_struct *work) musb_readb = musb->ops->readb; if (musb->ops->writeb) musb_writeb = musb->ops->writeb; + if (musb->ops->clearb) + musb_clearb = musb->ops->clearb; + else + musb_clearb = musb_readb; + if (musb->ops->readw) musb_readw = musb->ops->readw; if (musb->ops->writew) musb_writew = musb->ops->writew; + if (musb->ops->clearw) + musb_clearw = musb->ops->clearw; + else + musb_clearw = musb_readw; #ifndef CONFIG_MUSB_PIO_ONLY if (!musb->ops->dma_init || !musb->ops->dma_exit) { diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index 9f5a69c..0d9a35f 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -120,8 +120,10 @@ enum musb_g_ep0_state { * @fifo_offset: returns the fifo offset * @readb: read 8 bits * @writeb: write 8 bits + * @clearb: could be clear-on-readb or W1C * @readw: read 16 bits * @writew: write 16 bits + * @clearw: could be clear-on-readw or W1C * @read_fifo: reads the fifo * @write_fifo: writes to fifo * @get_toggle: platform specific get toggle function @@ -164,10 +166,12 @@ struct musb_platform_ops { u16 fifo_mode; u32 (*fifo_offset)(u8 epnum); u32 (*busctl_offset)(u8 epnum, u16 offset); - u8 (*readb)(const void __iomem *addr, unsigned offset); + u8 (*readb)(void __iomem *addr, unsigned offset); void (*writeb)(void __iomem *addr, unsigned offset, u8 data); - u16 (*readw)(const void __iomem *addr, unsigned offset); + u8 (*clearb)(void __iomem *addr, unsigned int offset); + u16 (*readw)(void __iomem *addr, unsigned offset); void (*writew)(void __iomem *addr, unsigned offset, u16 data); + u16 (*clearw)(void __iomem *addr, unsigned int offset); void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); u16 (*get_toggle)(struct musb_qh *qh, int is_out); diff --git a/drivers/usb/musb/musb_io.h b/drivers/usb/musb/musb_io.h index 8179334..7200596 100644 --- a/drivers/usb/musb/musb_io.h +++ b/drivers/usb/musb/musb_io.h @@ -37,11 +37,13 @@ struct musb_io { }; /* Do not add new entries here, add them the struct musb_io instead */ -extern u8 (*musb_readb)(const void __iomem *addr, unsigned offset); +extern u8 (*musb_readb)(void __iomem *addr, unsigned offset); extern void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data); -extern u16 (*musb_readw)(const void __iomem *addr, unsigned offset); +extern u8 (*musb_clearb)(void __iomem *addr, unsigned int offset); +extern u16 (*musb_readw)(void __iomem *addr, unsigned offset); extern void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data); -extern u32 musb_readl(const void __iomem *addr, unsigned offset); +extern u16 (*musb_clearw)(void __iomem *addr, unsigned int offset); +extern u32 musb_readl(void __iomem *addr, unsigned offset); extern void musb_writel(void __iomem *addr, unsigned offset, u32 data); #endif diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c index b2394a7..ed72bee 100644 --- a/drivers/usb/musb/musbhsdma.c +++ b/drivers/usb/musb/musbhsdma.c @@ -284,7 +284,7 @@ irqreturn_t dma_controller_irq(int irq, void *private_data) spin_lock_irqsave(&musb->lock, flags); - int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR); + int_hsdma = musb_clearb(mbase, MUSB_HSDMA_INTR); if (!int_hsdma) { musb_dbg(musb, "spurious DMA irq"); diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c index 832a41f..2c1bbaa 100644 --- a/drivers/usb/musb/sunxi.c +++ b/drivers/usb/musb/sunxi.c @@ -407,7 +407,7 @@ static u32 sunxi_musb_busctl_offset(u8 epnum, u16 offset) return SUNXI_MUSB_TXFUNCADDR + offset; } -static u8 sunxi_musb_readb(const void __iomem *addr, unsigned offset) +static u8 sunxi_musb_readb(void __iomem *addr, unsigned offset) { struct sunxi_glue *glue; @@ -520,7 +520,7 @@ static void sunxi_musb_writeb(void __iomem *addr, unsigned offset, u8 data) (int)(addr - sunxi_musb->mregs)); } -static u16 sunxi_musb_readw(const void __iomem *addr, unsigned offset) +static u16 sunxi_musb_readw(void __iomem *addr, unsigned offset) { if (addr == sunxi_musb->mregs) { /* generic control or fifo control reg access */ diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c index 3945328..cfb94f9 100644 --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c @@ -142,7 +142,7 @@ static void tusb_ep_select(void __iomem *mbase, u8 epnum) /* * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum. */ -static u8 tusb_readb(const void __iomem *addr, unsigned offset) +static u8 tusb_readb(void __iomem *addr, unsigned offset) { u16 tmp; u8 val; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: [PATCH v5 5/6] usb: musb: Add musb_clearb/w() interface Date: Tue, 19 Feb 2019 15:36:34 +0800 Message-ID: <1550561795-31132-6-git-send-email-min.guo@mediatek.com> References: <1550561795-31132-1-git-send-email-min.guo@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: In-Reply-To: <1550561795-31132-1-git-send-email-min.guo@mediatek.com> Sender: linux-kernel-owner@vger.kernel.org To: Bin Liu , Rob Herring Cc: Greg Kroah-Hartman , Mark Rutland , Matthias Brugger , Alan Stern , chunfeng.yun@mediatek.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, tony@atomide.com, hdegoede@redhat.com, Min Guo List-Id: devicetree@vger.kernel.org From: Min Guo Delete the const attribute of addr parameter in readb/w/l hooks, these changes are for implementing clearing W1C registers. Replace musb_readb/w with musb_clearb/w to clear the interrupt status. Signed-off-by: Min Guo --- changes in v5: 1. Replace musb_readb() with musb_clearb() to clear dma pending interrupts new patch based on v4: --- drivers/usb/musb/musb_core.c | 32 +++++++++++++++++++++++--------- drivers/usb/musb/musb_core.h | 8 ++++++-- drivers/usb/musb/musb_io.h | 8 +++++--- drivers/usb/musb/musbhsdma.c | 2 +- drivers/usb/musb/sunxi.c | 4 ++-- drivers/usb/musb/tusb6010.c | 2 +- 6 files changed, 38 insertions(+), 18 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 2fe5225..5ef8848 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -246,7 +246,7 @@ static u32 musb_default_busctl_offset(u8 epnum, u16 offset) return 0x80 + (0x08 * epnum) + offset; } -static u8 musb_default_readb(const void __iomem *addr, unsigned offset) +static u8 musb_default_readb(void __iomem *addr, unsigned offset) { u8 data = __raw_readb(addr + offset); @@ -260,7 +260,7 @@ static void musb_default_writeb(void __iomem *addr, unsigned offset, u8 data) __raw_writeb(data, addr + offset); } -static u16 musb_default_readw(const void __iomem *addr, unsigned offset) +static u16 musb_default_readw(void __iomem *addr, unsigned offset) { u16 data = __raw_readw(addr + offset); @@ -396,19 +396,25 @@ static void musb_default_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst) /* * Old style IO functions */ -u8 (*musb_readb)(const void __iomem *addr, unsigned offset); +u8 (*musb_readb)(void __iomem *addr, unsigned offset); EXPORT_SYMBOL_GPL(musb_readb); void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data); EXPORT_SYMBOL_GPL(musb_writeb); -u16 (*musb_readw)(const void __iomem *addr, unsigned offset); +u8 (*musb_clearb)(void __iomem *addr, unsigned int offset); +EXPORT_SYMBOL_GPL(musb_clearb); + +u16 (*musb_readw)(void __iomem *addr, unsigned offset); EXPORT_SYMBOL_GPL(musb_readw); void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data); EXPORT_SYMBOL_GPL(musb_writew); -u32 musb_readl(const void __iomem *addr, unsigned offset) +u16 (*musb_clearw)(void __iomem *addr, unsigned int offset); +EXPORT_SYMBOL_GPL(musb_clearw); + +u32 musb_readl(void __iomem *addr, unsigned offset) { u32 data = __raw_readl(addr + offset); @@ -1047,7 +1053,6 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, static void musb_disable_interrupts(struct musb *musb) { void __iomem *mbase = musb->mregs; - u16 temp; /* disable interrupts */ musb_writeb(mbase, MUSB_INTRUSBE, 0); @@ -1057,9 +1062,9 @@ static void musb_disable_interrupts(struct musb *musb) musb_writew(mbase, MUSB_INTRRXE, 0); /* flush pending interrupts */ - temp = musb_readb(mbase, MUSB_INTRUSB); - temp = musb_readw(mbase, MUSB_INTRTX); - temp = musb_readw(mbase, MUSB_INTRRX); + musb_clearb(mbase, MUSB_INTRUSB); + musb_clearw(mbase, MUSB_INTRTX); + musb_clearw(mbase, MUSB_INTRRX); } static void musb_enable_interrupts(struct musb *musb) @@ -2284,10 +2289,19 @@ static void musb_deassert_reset(struct work_struct *work) musb_readb = musb->ops->readb; if (musb->ops->writeb) musb_writeb = musb->ops->writeb; + if (musb->ops->clearb) + musb_clearb = musb->ops->clearb; + else + musb_clearb = musb_readb; + if (musb->ops->readw) musb_readw = musb->ops->readw; if (musb->ops->writew) musb_writew = musb->ops->writew; + if (musb->ops->clearw) + musb_clearw = musb->ops->clearw; + else + musb_clearw = musb_readw; #ifndef CONFIG_MUSB_PIO_ONLY if (!musb->ops->dma_init || !musb->ops->dma_exit) { diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index 9f5a69c..0d9a35f 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -120,8 +120,10 @@ enum musb_g_ep0_state { * @fifo_offset: returns the fifo offset * @readb: read 8 bits * @writeb: write 8 bits + * @clearb: could be clear-on-readb or W1C * @readw: read 16 bits * @writew: write 16 bits + * @clearw: could be clear-on-readw or W1C * @read_fifo: reads the fifo * @write_fifo: writes to fifo * @get_toggle: platform specific get toggle function @@ -164,10 +166,12 @@ struct musb_platform_ops { u16 fifo_mode; u32 (*fifo_offset)(u8 epnum); u32 (*busctl_offset)(u8 epnum, u16 offset); - u8 (*readb)(const void __iomem *addr, unsigned offset); + u8 (*readb)(void __iomem *addr, unsigned offset); void (*writeb)(void __iomem *addr, unsigned offset, u8 data); - u16 (*readw)(const void __iomem *addr, unsigned offset); + u8 (*clearb)(void __iomem *addr, unsigned int offset); + u16 (*readw)(void __iomem *addr, unsigned offset); void (*writew)(void __iomem *addr, unsigned offset, u16 data); + u16 (*clearw)(void __iomem *addr, unsigned int offset); void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); u16 (*get_toggle)(struct musb_qh *qh, int is_out); diff --git a/drivers/usb/musb/musb_io.h b/drivers/usb/musb/musb_io.h index 8179334..7200596 100644 --- a/drivers/usb/musb/musb_io.h +++ b/drivers/usb/musb/musb_io.h @@ -37,11 +37,13 @@ struct musb_io { }; /* Do not add new entries here, add them the struct musb_io instead */ -extern u8 (*musb_readb)(const void __iomem *addr, unsigned offset); +extern u8 (*musb_readb)(void __iomem *addr, unsigned offset); extern void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data); -extern u16 (*musb_readw)(const void __iomem *addr, unsigned offset); +extern u8 (*musb_clearb)(void __iomem *addr, unsigned int offset); +extern u16 (*musb_readw)(void __iomem *addr, unsigned offset); extern void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data); -extern u32 musb_readl(const void __iomem *addr, unsigned offset); +extern u16 (*musb_clearw)(void __iomem *addr, unsigned int offset); +extern u32 musb_readl(void __iomem *addr, unsigned offset); extern void musb_writel(void __iomem *addr, unsigned offset, u32 data); #endif diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c index b2394a7..ed72bee 100644 --- a/drivers/usb/musb/musbhsdma.c +++ b/drivers/usb/musb/musbhsdma.c @@ -284,7 +284,7 @@ irqreturn_t dma_controller_irq(int irq, void *private_data) spin_lock_irqsave(&musb->lock, flags); - int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR); + int_hsdma = musb_clearb(mbase, MUSB_HSDMA_INTR); if (!int_hsdma) { musb_dbg(musb, "spurious DMA irq"); diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c index 832a41f..2c1bbaa 100644 --- a/drivers/usb/musb/sunxi.c +++ b/drivers/usb/musb/sunxi.c @@ -407,7 +407,7 @@ static u32 sunxi_musb_busctl_offset(u8 epnum, u16 offset) return SUNXI_MUSB_TXFUNCADDR + offset; } -static u8 sunxi_musb_readb(const void __iomem *addr, unsigned offset) +static u8 sunxi_musb_readb(void __iomem *addr, unsigned offset) { struct sunxi_glue *glue; @@ -520,7 +520,7 @@ static void sunxi_musb_writeb(void __iomem *addr, unsigned offset, u8 data) (int)(addr - sunxi_musb->mregs)); } -static u16 sunxi_musb_readw(const void __iomem *addr, unsigned offset) +static u16 sunxi_musb_readw(void __iomem *addr, unsigned offset) { if (addr == sunxi_musb->mregs) { /* generic control or fifo control reg access */ diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c index 3945328..cfb94f9 100644 --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c @@ -142,7 +142,7 @@ static void tusb_ep_select(void __iomem *mbase, u8 epnum) /* * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum. */ -static u8 tusb_readb(const void __iomem *addr, unsigned offset) +static u8 tusb_readb(void __iomem *addr, unsigned offset) { u16 tmp; u8 val; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v5,5/6] usb: musb: Add musb_clearb/w() interface From: min.guo@mediatek.com Message-Id: <1550561795-31132-6-git-send-email-min.guo@mediatek.com> Date: Tue, 19 Feb 2019 15:36:34 +0800 To: Bin Liu , Rob Herring Cc: Greg Kroah-Hartman , Mark Rutland , Matthias Brugger , Alan Stern , chunfeng.yun@mediatek.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, tony@atomide.com, hdegoede@redhat.com, Min Guo List-ID: RnJvbTogTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+CgpEZWxldGUgdGhlIGNvbnN0IGF0 dHJpYnV0ZSBvZiBhZGRyIHBhcmFtZXRlciBpbiByZWFkYi93L2wgaG9va3MsIHRoZXNlCmNoYW5n ZXMgYXJlIGZvciBpbXBsZW1lbnRpbmcgY2xlYXJpbmcgVzFDIHJlZ2lzdGVycy4KUmVwbGFjZSBt dXNiX3JlYWRiL3cgd2l0aCBtdXNiX2NsZWFyYi93IHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3Rh dHVzLgoKU2lnbmVkLW9mZi1ieTogTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+Ci0tLQpj aGFuZ2VzIGluIHY1OgoxLiBSZXBsYWNlIG11c2JfcmVhZGIoKSB3aXRoIG11c2JfY2xlYXJiKCkg dG8gY2xlYXIgZG1hIHBlbmRpbmcgaW50ZXJydXB0cwoKbmV3IHBhdGNoIGJhc2VkIG9uIHY0Ogot LS0KIGRyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgfCAzMiArKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLQogZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCB8ICA4ICsrKysrKy0t CiBkcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaCAgIHwgIDggKysrKystLS0KIGRyaXZlcnMvdXNi L211c2IvbXVzYmhzZG1hLmMgfCAgMiArLQogZHJpdmVycy91c2IvbXVzYi9zdW54aS5jICAgICB8 ICA0ICsrLS0KIGRyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYyAgfCAgMiArLQogNiBmaWxlcyBj aGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUu YwppbmRleCAyZmU1MjI1Li41ZWY4ODQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211 c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTI0Niw3ICsy NDYsNyBAQCBzdGF0aWMgdTMyIG11c2JfZGVmYXVsdF9idXNjdGxfb2Zmc2V0KHU4IGVwbnVtLCB1 MTYgb2Zmc2V0KQogCXJldHVybiAweDgwICsgKDB4MDggKiBlcG51bSkgKyBvZmZzZXQ7CiB9CiAK LXN0YXRpYyB1OCBtdXNiX2RlZmF1bHRfcmVhZGIoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB1 bnNpZ25lZCBvZmZzZXQpCitzdGF0aWMgdTggbXVzYl9kZWZhdWx0X3JlYWRiKHZvaWQgX19pb21l bSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KQogewogCXU4IGRhdGEgPSAgX19yYXdfcmVhZGIoYWRk ciArIG9mZnNldCk7CiAKQEAgLTI2MCw3ICsyNjAsNyBAQCBzdGF0aWMgdm9pZCBtdXNiX2RlZmF1 bHRfd3JpdGViKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0LCB1OCBkYXRhKQog CV9fcmF3X3dyaXRlYihkYXRhLCBhZGRyICsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIHUxNiBtdXNi X2RlZmF1bHRfcmVhZHcoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQp CitzdGF0aWMgdTE2IG11c2JfZGVmYXVsdF9yZWFkdyh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2ln bmVkIG9mZnNldCkKIHsKIAl1MTYgZGF0YSA9IF9fcmF3X3JlYWR3KGFkZHIgKyBvZmZzZXQpOwog CkBAIC0zOTYsMTkgKzM5NiwyNSBAQCBzdGF0aWMgdm9pZCBtdXNiX2RlZmF1bHRfcmVhZF9maWZv KHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGxlbiwgdTggKmRzdCkKIC8qCiAgKiBPbGQg c3R5bGUgSU8gZnVuY3Rpb25zCiAgKi8KLXU4ICgqbXVzYl9yZWFkYikoY29uc3Qgdm9pZCBfX2lv bWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQpOwordTggKCptdXNiX3JlYWRiKSh2b2lkIF9faW9t ZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCk7CiBFWFBPUlRfU1lNQk9MX0dQTChtdXNiX3JlYWRi KTsKIAogdm9pZCAoKm11c2Jfd3JpdGViKSh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9m ZnNldCwgdTggZGF0YSk7CiBFWFBPUlRfU1lNQk9MX0dQTChtdXNiX3dyaXRlYik7CiAKLXUxNiAo Km11c2JfcmVhZHcpKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KTsK K3U4ICgqbXVzYl9jbGVhcmIpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgaW50IG9mZnNl dCk7CitFWFBPUlRfU1lNQk9MX0dQTChtdXNiX2NsZWFyYik7CisKK3UxNiAoKm11c2JfcmVhZHcp KHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KTsKIEVYUE9SVF9TWU1CT0xfR1BM KG11c2JfcmVhZHcpOwogCiB2b2lkICgqbXVzYl93cml0ZXcpKHZvaWQgX19pb21lbSAqYWRkciwg dW5zaWduZWQgb2Zmc2V0LCB1MTYgZGF0YSk7CiBFWFBPUlRfU1lNQk9MX0dQTChtdXNiX3dyaXRl dyk7CiAKLXUzMiBtdXNiX3JlYWRsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQg b2Zmc2V0KQordTE2ICgqbXVzYl9jbGVhcncpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQg aW50IG9mZnNldCk7CitFWFBPUlRfU1lNQk9MX0dQTChtdXNiX2NsZWFydyk7CisKK3UzMiBtdXNi X3JlYWRsKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KQogewogCXUzMiBkYXRh ID0gX19yYXdfcmVhZGwoYWRkciArIG9mZnNldCk7CiAKQEAgLTEwNDcsNyArMTA1Myw2IEBAIHN0 YXRpYyBpcnFyZXR1cm5fdCBtdXNiX3N0YWdlMF9pcnEoc3RydWN0IG11c2IgKm11c2IsIHU4IGlu dF91c2IsCiBzdGF0aWMgdm9pZCBtdXNiX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgbXVzYiAq bXVzYikKIHsKIAl2b2lkIF9faW9tZW0JKm1iYXNlID0gbXVzYi0+bXJlZ3M7Ci0JdTE2CXRlbXA7 CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIAltdXNiX3dyaXRlYihtYmFzZSwgTVVTQl9J TlRSVVNCRSwgMCk7CkBAIC0xMDU3LDkgKzEwNjIsOSBAQCBzdGF0aWMgdm9pZCBtdXNiX2Rpc2Fi bGVfaW50ZXJydXB0cyhzdHJ1Y3QgbXVzYiAqbXVzYikKIAltdXNiX3dyaXRldyhtYmFzZSwgTVVT Ql9JTlRSUlhFLCAwKTsKIAogCS8qICBmbHVzaCBwZW5kaW5nIGludGVycnVwdHMgKi8KLQl0ZW1w ID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9JTlRSVVNCKTsKLQl0ZW1wID0gbXVzYl9yZWFkdyht YmFzZSwgTVVTQl9JTlRSVFgpOwotCXRlbXAgPSBtdXNiX3JlYWR3KG1iYXNlLCBNVVNCX0lOVFJS WCk7CisJbXVzYl9jbGVhcmIobWJhc2UsIE1VU0JfSU5UUlVTQik7CisJbXVzYl9jbGVhcncobWJh c2UsIE1VU0JfSU5UUlRYKTsKKwltdXNiX2NsZWFydyhtYmFzZSwgTVVTQl9JTlRSUlgpOwogfQog CiBzdGF0aWMgdm9pZCBtdXNiX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBtdXNiICptdXNiKQpA QCAtMjI4NCwxMCArMjI4OSwxOSBAQCBzdGF0aWMgdm9pZCBtdXNiX2RlYXNzZXJ0X3Jlc2V0KHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJbXVzYl9yZWFkYiA9IG11c2ItPm9wcy0+cmVhZGI7 CiAJaWYgKG11c2ItPm9wcy0+d3JpdGViKQogCQltdXNiX3dyaXRlYiA9IG11c2ItPm9wcy0+d3Jp dGViOworCWlmIChtdXNiLT5vcHMtPmNsZWFyYikKKwkJbXVzYl9jbGVhcmIgPSBtdXNiLT5vcHMt PmNsZWFyYjsKKwllbHNlCisJCW11c2JfY2xlYXJiID0gbXVzYl9yZWFkYjsKKwogCWlmIChtdXNi LT5vcHMtPnJlYWR3KQogCQltdXNiX3JlYWR3ID0gbXVzYi0+b3BzLT5yZWFkdzsKIAlpZiAobXVz Yi0+b3BzLT53cml0ZXcpCiAJCW11c2Jfd3JpdGV3ID0gbXVzYi0+b3BzLT53cml0ZXc7CisJaWYg KG11c2ItPm9wcy0+Y2xlYXJ3KQorCQltdXNiX2NsZWFydyA9IG11c2ItPm9wcy0+Y2xlYXJ3Owor CWVsc2UKKwkJbXVzYl9jbGVhcncgPSBtdXNiX3JlYWR3OwogCiAjaWZuZGVmIENPTkZJR19NVVNC X1BJT19PTkxZCiAJaWYgKCFtdXNiLT5vcHMtPmRtYV9pbml0IHx8ICFtdXNiLT5vcHMtPmRtYV9l eGl0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVy cy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCA5ZjVhNjljLi4wZDlhMzVmIDEwMDY0NAotLS0g YS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVz Yl9jb3JlLmgKQEAgLTEyMCw4ICsxMjAsMTAgQEAgZW51bSBtdXNiX2dfZXAwX3N0YXRlIHsKICAq IEBmaWZvX29mZnNldDogcmV0dXJucyB0aGUgZmlmbyBvZmZzZXQKICAqIEByZWFkYjoJcmVhZCA4 IGJpdHMKICAqIEB3cml0ZWI6CXdyaXRlIDggYml0cworICogQGNsZWFyYjoJY291bGQgYmUgY2xl YXItb24tcmVhZGIgb3IgVzFDCiAgKiBAcmVhZHc6CXJlYWQgMTYgYml0cwogICogQHdyaXRldzoJ d3JpdGUgMTYgYml0cworICogQGNsZWFydzoJY291bGQgYmUgY2xlYXItb24tcmVhZHcgb3IgVzFD CiAgKiBAcmVhZF9maWZvOglyZWFkcyB0aGUgZmlmbwogICogQHdyaXRlX2ZpZm86CXdyaXRlcyB0 byBmaWZvCiAgKiBAZ2V0X3RvZ2dsZToJcGxhdGZvcm0gc3BlY2lmaWMgZ2V0IHRvZ2dsZSBmdW5j dGlvbgpAQCAtMTY0LDEwICsxNjYsMTIgQEAgc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIHsKIAl1 MTYJZmlmb19tb2RlOwogCXUzMgkoKmZpZm9fb2Zmc2V0KSh1OCBlcG51bSk7CiAJdTMyCSgqYnVz Y3RsX29mZnNldCkodTggZXBudW0sIHUxNiBvZmZzZXQpOwotCXU4CSgqcmVhZGIpKGNvbnN0IHZv aWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KTsKKwl1OAkoKnJlYWRiKSh2b2lkIF9f aW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCk7CiAJdm9pZAkoKndyaXRlYikodm9pZCBfX2lv bWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQsIHU4IGRhdGEpOwotCXUxNgkoKnJlYWR3KShjb25z dCB2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCk7CisJdTgJKCpjbGVhcmIpKHZv aWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCk7CisJdTE2CSgqcmVhZHcpKHZv aWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KTsKIAl2b2lkCSgqd3JpdGV3KSh2b2lk IF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCwgdTE2IGRhdGEpOworCXUxNgkoKmNsZWFy dykodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKIAl2b2lkCSgqcmVh ZF9maWZvKShzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBsZW4sIHU4ICpidWYpOwogCXZv aWQJKCp3cml0ZV9maWZvKShzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBsZW4sIGNvbnN0 IHU4ICpidWYpOwogCXUxNgkoKmdldF90b2dnbGUpKHN0cnVjdCBtdXNiX3FoICpxaCwgaW50IGlz X291dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaCBiL2RyaXZlcnMv dXNiL211c2IvbXVzYl9pby5oCmluZGV4IDgxNzkzMzQuLjcyMDA1OTYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvdXNiL211c2IvbXVzYl9pby5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5o CkBAIC0zNywxMSArMzcsMTMgQEAgc3RydWN0IG11c2JfaW8gewogfTsKIAogLyogRG8gbm90IGFk ZCBuZXcgZW50cmllcyBoZXJlLCBhZGQgdGhlbSB0aGUgc3RydWN0IG11c2JfaW8gaW5zdGVhZCAq LwotZXh0ZXJuIHU4ICgqbXVzYl9yZWFkYikoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNp Z25lZCBvZmZzZXQpOworZXh0ZXJuIHU4ICgqbXVzYl9yZWFkYikodm9pZCBfX2lvbWVtICphZGRy LCB1bnNpZ25lZCBvZmZzZXQpOwogZXh0ZXJuIHZvaWQgKCptdXNiX3dyaXRlYikodm9pZCBfX2lv bWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQsIHU4IGRhdGEpOwotZXh0ZXJuIHUxNiAoKm11c2Jf cmVhZHcpKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KTsKK2V4dGVy biB1OCAoKm11c2JfY2xlYXJiKSh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGludCBvZmZz ZXQpOworZXh0ZXJuIHUxNiAoKm11c2JfcmVhZHcpKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWdu ZWQgb2Zmc2V0KTsKIGV4dGVybiB2b2lkICgqbXVzYl93cml0ZXcpKHZvaWQgX19pb21lbSAqYWRk ciwgdW5zaWduZWQgb2Zmc2V0LCB1MTYgZGF0YSk7Ci1leHRlcm4gdTMyIG11c2JfcmVhZGwoY29u c3Qgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQpOworZXh0ZXJuIHUxNiAoKm11 c2JfY2xlYXJ3KSh2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGludCBvZmZzZXQpOworZXh0 ZXJuIHUzMiBtdXNiX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0KTsK IGV4dGVybiB2b2lkIG11c2Jfd3JpdGVsKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zm c2V0LCB1MzIgZGF0YSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9t dXNiaHNkbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKaW5kZXggYjIzOTRhNy4u ZWQ3MmJlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYworKysgYi9k cml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCkBAIC0yODQsNyArMjg0LDcgQEAgaXJxcmV0dXJu X3QgZG1hX2NvbnRyb2xsZXJfaXJxKGludCBpcnEsIHZvaWQgKnByaXZhdGVfZGF0YSkKIAogCXNw aW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKLQlpbnRfaHNkbWEgPSBtdXNi X3JlYWRiKG1iYXNlLCBNVVNCX0hTRE1BX0lOVFIpOworCWludF9oc2RtYSA9IG11c2JfY2xlYXJi KG1iYXNlLCBNVVNCX0hTRE1BX0lOVFIpOwogCiAJaWYgKCFpbnRfaHNkbWEpIHsKIAkJbXVzYl9k YmcobXVzYiwgInNwdXJpb3VzIERNQSBpcnEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211 c2Ivc3VueGkuYyBiL2RyaXZlcnMvdXNiL211c2Ivc3VueGkuYwppbmRleCA4MzJhNDFmLi4yYzFi YmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL3N1bnhpLmMKKysrIGIvZHJpdmVycy91 c2IvbXVzYi9zdW54aS5jCkBAIC00MDcsNyArNDA3LDcgQEAgc3RhdGljIHUzMiBzdW54aV9tdXNi X2J1c2N0bF9vZmZzZXQodTggZXBudW0sIHUxNiBvZmZzZXQpCiAJcmV0dXJuIFNVTlhJX01VU0Jf VFhGVU5DQUREUiArIG9mZnNldDsKIH0KIAotc3RhdGljIHU4IHN1bnhpX211c2JfcmVhZGIoY29u c3Qgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQpCitzdGF0aWMgdTggc3VueGlf bXVzYl9yZWFkYih2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlzdHJ1 Y3Qgc3VueGlfZ2x1ZSAqZ2x1ZTsKIApAQCAtNTIwLDcgKzUyMCw3IEBAIHN0YXRpYyB2b2lkIHN1 bnhpX211c2Jfd3JpdGViKHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zmc2V0LCB1OCBk YXRhKQogCQkoaW50KShhZGRyIC0gc3VueGlfbXVzYi0+bXJlZ3MpKTsKIH0KIAotc3RhdGljIHUx NiBzdW54aV9tdXNiX3JlYWR3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdW5zaWduZWQgb2Zm c2V0KQorc3RhdGljIHUxNiBzdW54aV9tdXNiX3JlYWR3KHZvaWQgX19pb21lbSAqYWRkciwgdW5z aWduZWQgb2Zmc2V0KQogewogCWlmIChhZGRyID09IHN1bnhpX211c2ItPm1yZWdzKSB7CiAJCS8q IGdlbmVyaWMgY29udHJvbCBvciBmaWZvIGNvbnRyb2wgcmVnIGFjY2VzcyAqLwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAx MC5jCmluZGV4IDM5NDUzMjguLmNmYjk0ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2Iv dHVzYjYwMTAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmMKQEAgLTE0Miw3ICsx NDIsNyBAQCBzdGF0aWMgdm9pZCB0dXNiX2VwX3NlbGVjdCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1 OCBlcG51bSkKIC8qCiAgKiBUVVNCNjAxMCBkb2Vzbid0IGFsbG93IDgtYml0IGFjY2VzczsgMTYt Yml0IGFjY2VzcyBpcyB0aGUgbWluaW11bS4KICAqLwotc3RhdGljIHU4IHR1c2JfcmVhZGIoY29u c3Qgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBvZmZzZXQpCitzdGF0aWMgdTggdHVzYl9y ZWFkYih2b2lkIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAl1MTYgdG1wOwog CXU4IHZhbDsK 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=-9.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_GIT 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 74DFBC43381 for ; Tue, 19 Feb 2019 07:38:41 +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 451B621905 for ; Tue, 19 Feb 2019 07:38:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JuFtzRAi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 451B621905 Authentication-Results: mail.kernel.org; dmarc=none (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: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Os7cR4GCkGCMJy8+yHy/X+w2TWLP518WODe9l0Uz6tw=; b=JuFtzRAi4VumjE MoM4yY0yawmVsrNUXX4AuS5nfI+lLsuxIEx0xupY77BaUk638oCfGBw2LYMF+RS2e4gSz+5dRPOC6 2zNMkVWlXOyhW2b70y/exPt2x7nMKS+8lxRnL9TuPGWyEga3EZipDCgwcD/ww11/pJxuRoZLZYJmj yTTIZmI+tzTGO2EUXfhla5HJ2hXy78CFJMLbOi1/ZHrvTkwQ50YCMg5CYvWZJ3TbEeEG6HWuoiixh DKojHezZ0GCBgpjVE4itD4cS9Eavk7Fnm9TQeBtkq59XmktHh3rzDJ749DSSu3WbXCEf1kXWvCZ8I inwkOwZPdyB7gVBEuI6Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gvzz9-0000ec-KO; Tue, 19 Feb 2019 07:38:35 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gvzyC-00082q-9C; Tue, 19 Feb 2019 07:37:38 +0000 X-UUID: a436b268e5ee4a6ca4bc4cc6265d9132-20190218 X-UUID: a436b268e5ee4a6ca4bc4cc6265d9132-20190218 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1935792987; Mon, 18 Feb 2019 23:37:11 -0800 Received: from MTKMBS31N1.mediatek.inc (172.27.4.69) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 18 Feb 2019 23:37:10 -0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 19 Feb 2019 15:37:07 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Tue, 19 Feb 2019 15:37:06 +0800 From: To: Bin Liu , Rob Herring Subject: [PATCH v5 5/6] usb: musb: Add musb_clearb/w() interface Date: Tue, 19 Feb 2019 15:36:34 +0800 Message-ID: <1550561795-31132-6-git-send-email-min.guo@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1550561795-31132-1-git-send-email-min.guo@mediatek.com> References: <1550561795-31132-1-git-send-email-min.guo@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190218_233736_323527_114D4756 X-CRM114-Status: GOOD ( 13.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , devicetree@vger.kernel.org, hdegoede@redhat.com, tony@atomide.com, Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Matthias Brugger , Alan Stern , Min Guo , chunfeng.yun@mediatek.com, linux-mediatek@lists.infradead.org, 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 From: Min Guo Delete the const attribute of addr parameter in readb/w/l hooks, these changes are for implementing clearing W1C registers. Replace musb_readb/w with musb_clearb/w to clear the interrupt status. Signed-off-by: Min Guo --- changes in v5: 1. Replace musb_readb() with musb_clearb() to clear dma pending interrupts new patch based on v4: --- drivers/usb/musb/musb_core.c | 32 +++++++++++++++++++++++--------- drivers/usb/musb/musb_core.h | 8 ++++++-- drivers/usb/musb/musb_io.h | 8 +++++--- drivers/usb/musb/musbhsdma.c | 2 +- drivers/usb/musb/sunxi.c | 4 ++-- drivers/usb/musb/tusb6010.c | 2 +- 6 files changed, 38 insertions(+), 18 deletions(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 2fe5225..5ef8848 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -246,7 +246,7 @@ static u32 musb_default_busctl_offset(u8 epnum, u16 offset) return 0x80 + (0x08 * epnum) + offset; } -static u8 musb_default_readb(const void __iomem *addr, unsigned offset) +static u8 musb_default_readb(void __iomem *addr, unsigned offset) { u8 data = __raw_readb(addr + offset); @@ -260,7 +260,7 @@ static void musb_default_writeb(void __iomem *addr, unsigned offset, u8 data) __raw_writeb(data, addr + offset); } -static u16 musb_default_readw(const void __iomem *addr, unsigned offset) +static u16 musb_default_readw(void __iomem *addr, unsigned offset) { u16 data = __raw_readw(addr + offset); @@ -396,19 +396,25 @@ static void musb_default_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst) /* * Old style IO functions */ -u8 (*musb_readb)(const void __iomem *addr, unsigned offset); +u8 (*musb_readb)(void __iomem *addr, unsigned offset); EXPORT_SYMBOL_GPL(musb_readb); void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data); EXPORT_SYMBOL_GPL(musb_writeb); -u16 (*musb_readw)(const void __iomem *addr, unsigned offset); +u8 (*musb_clearb)(void __iomem *addr, unsigned int offset); +EXPORT_SYMBOL_GPL(musb_clearb); + +u16 (*musb_readw)(void __iomem *addr, unsigned offset); EXPORT_SYMBOL_GPL(musb_readw); void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data); EXPORT_SYMBOL_GPL(musb_writew); -u32 musb_readl(const void __iomem *addr, unsigned offset) +u16 (*musb_clearw)(void __iomem *addr, unsigned int offset); +EXPORT_SYMBOL_GPL(musb_clearw); + +u32 musb_readl(void __iomem *addr, unsigned offset) { u32 data = __raw_readl(addr + offset); @@ -1047,7 +1053,6 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, static void musb_disable_interrupts(struct musb *musb) { void __iomem *mbase = musb->mregs; - u16 temp; /* disable interrupts */ musb_writeb(mbase, MUSB_INTRUSBE, 0); @@ -1057,9 +1062,9 @@ static void musb_disable_interrupts(struct musb *musb) musb_writew(mbase, MUSB_INTRRXE, 0); /* flush pending interrupts */ - temp = musb_readb(mbase, MUSB_INTRUSB); - temp = musb_readw(mbase, MUSB_INTRTX); - temp = musb_readw(mbase, MUSB_INTRRX); + musb_clearb(mbase, MUSB_INTRUSB); + musb_clearw(mbase, MUSB_INTRTX); + musb_clearw(mbase, MUSB_INTRRX); } static void musb_enable_interrupts(struct musb *musb) @@ -2284,10 +2289,19 @@ static void musb_deassert_reset(struct work_struct *work) musb_readb = musb->ops->readb; if (musb->ops->writeb) musb_writeb = musb->ops->writeb; + if (musb->ops->clearb) + musb_clearb = musb->ops->clearb; + else + musb_clearb = musb_readb; + if (musb->ops->readw) musb_readw = musb->ops->readw; if (musb->ops->writew) musb_writew = musb->ops->writew; + if (musb->ops->clearw) + musb_clearw = musb->ops->clearw; + else + musb_clearw = musb_readw; #ifndef CONFIG_MUSB_PIO_ONLY if (!musb->ops->dma_init || !musb->ops->dma_exit) { diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index 9f5a69c..0d9a35f 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -120,8 +120,10 @@ enum musb_g_ep0_state { * @fifo_offset: returns the fifo offset * @readb: read 8 bits * @writeb: write 8 bits + * @clearb: could be clear-on-readb or W1C * @readw: read 16 bits * @writew: write 16 bits + * @clearw: could be clear-on-readw or W1C * @read_fifo: reads the fifo * @write_fifo: writes to fifo * @get_toggle: platform specific get toggle function @@ -164,10 +166,12 @@ struct musb_platform_ops { u16 fifo_mode; u32 (*fifo_offset)(u8 epnum); u32 (*busctl_offset)(u8 epnum, u16 offset); - u8 (*readb)(const void __iomem *addr, unsigned offset); + u8 (*readb)(void __iomem *addr, unsigned offset); void (*writeb)(void __iomem *addr, unsigned offset, u8 data); - u16 (*readw)(const void __iomem *addr, unsigned offset); + u8 (*clearb)(void __iomem *addr, unsigned int offset); + u16 (*readw)(void __iomem *addr, unsigned offset); void (*writew)(void __iomem *addr, unsigned offset, u16 data); + u16 (*clearw)(void __iomem *addr, unsigned int offset); void (*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf); void (*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf); u16 (*get_toggle)(struct musb_qh *qh, int is_out); diff --git a/drivers/usb/musb/musb_io.h b/drivers/usb/musb/musb_io.h index 8179334..7200596 100644 --- a/drivers/usb/musb/musb_io.h +++ b/drivers/usb/musb/musb_io.h @@ -37,11 +37,13 @@ struct musb_io { }; /* Do not add new entries here, add them the struct musb_io instead */ -extern u8 (*musb_readb)(const void __iomem *addr, unsigned offset); +extern u8 (*musb_readb)(void __iomem *addr, unsigned offset); extern void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data); -extern u16 (*musb_readw)(const void __iomem *addr, unsigned offset); +extern u8 (*musb_clearb)(void __iomem *addr, unsigned int offset); +extern u16 (*musb_readw)(void __iomem *addr, unsigned offset); extern void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data); -extern u32 musb_readl(const void __iomem *addr, unsigned offset); +extern u16 (*musb_clearw)(void __iomem *addr, unsigned int offset); +extern u32 musb_readl(void __iomem *addr, unsigned offset); extern void musb_writel(void __iomem *addr, unsigned offset, u32 data); #endif diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c index b2394a7..ed72bee 100644 --- a/drivers/usb/musb/musbhsdma.c +++ b/drivers/usb/musb/musbhsdma.c @@ -284,7 +284,7 @@ irqreturn_t dma_controller_irq(int irq, void *private_data) spin_lock_irqsave(&musb->lock, flags); - int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR); + int_hsdma = musb_clearb(mbase, MUSB_HSDMA_INTR); if (!int_hsdma) { musb_dbg(musb, "spurious DMA irq"); diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c index 832a41f..2c1bbaa 100644 --- a/drivers/usb/musb/sunxi.c +++ b/drivers/usb/musb/sunxi.c @@ -407,7 +407,7 @@ static u32 sunxi_musb_busctl_offset(u8 epnum, u16 offset) return SUNXI_MUSB_TXFUNCADDR + offset; } -static u8 sunxi_musb_readb(const void __iomem *addr, unsigned offset) +static u8 sunxi_musb_readb(void __iomem *addr, unsigned offset) { struct sunxi_glue *glue; @@ -520,7 +520,7 @@ static void sunxi_musb_writeb(void __iomem *addr, unsigned offset, u8 data) (int)(addr - sunxi_musb->mregs)); } -static u16 sunxi_musb_readw(const void __iomem *addr, unsigned offset) +static u16 sunxi_musb_readw(void __iomem *addr, unsigned offset) { if (addr == sunxi_musb->mregs) { /* generic control or fifo control reg access */ diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c index 3945328..cfb94f9 100644 --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c @@ -142,7 +142,7 @@ static void tusb_ep_select(void __iomem *mbase, u8 epnum) /* * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum. */ -static u8 tusb_readb(const void __iomem *addr, unsigned offset) +static u8 tusb_readb(void __iomem *addr, unsigned offset) { u16 tmp; u8 val; -- 1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel