From patchwork Tue Nov 26 08:15:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1200798 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="uYX2lXK7"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47McHH1ljvz9sP3 for ; Tue, 26 Nov 2019 19:18:35 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id E72CBC21F18; Tue, 26 Nov 2019 08:17:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 16FFCC21F51; Tue, 26 Nov 2019 08:15:51 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0F121C21E31; Tue, 26 Nov 2019 08:15:47 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id C5BA7C21E47 for ; Tue, 26 Nov 2019 08:15:46 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191126081546euoutp02d9fa59f354dc7ef2fd3ec2ecec069ce9~aqF8u9uAX0390903909euoutp02D for ; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191126081546euoutp02d9fa59f354dc7ef2fd3ec2ecec069ce9~aqF8u9uAX0390903909euoutp02D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1574756146; bh=CwwafpuhTZS6ffS0Qs2YmyoWKnhPg+/Y3yZNpaGiDxA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uYX2lXK7ZcQJP42W35dRa0b+oijhUXAe/ccahLGh9Y8y23Mn/mPx0ouHonI+r5AMN XuC1XsN3NHrPjyP+uEJ0xonB5NJnOyfk1W/u+2E1RFp6tZ2VftiFZO8Yr0vkbjH4Ql TzNZ1tr6pqCudlBBHH1FldFYR577zIVW7/VoKZwU= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20191126081546eucas1p11fe0d626d96e267897d64abba6eb7cfb~aqF8hNOsZ0607206072eucas1p1s; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 44.56.60698.23FDCDD5; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191126081545eucas1p2618ea32363f28c8b3e1ed060c45a44fa~aqF8KuD-O2685026850eucas1p2j; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191126081545eusmtrp130b9e50e3ccac15d56ae02b84059707e~aqF8ElLn12279022790eusmtrp10; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) X-AuditID: cbfec7f5-a29ff7000001ed1a-07-5ddcdf32907b Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 24.D3.08375.13FDCDD5; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191126081545eusmtip22bc1a6ce093c1bd5441622df5a77c78d~aqF7pF27g2192921929eusmtip2G; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 26 Nov 2019 09:15:11 +0100 Message-Id: <20191126081512.5138-6-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126081512.5138-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpileLIzCtJLcpLzFFi42LZduzneV2j+3diDZ7947LYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGsUl01Kak5mWWqRvl0CV8be7w3sBbMUKlZ2LGBqYHwr3cXIySEhYCLxZc8CNhBb SGAFo8TPO1pdjFxA9hdGibtL97FDOJ8ZJSb/fMYE0/G3YRYrRGI5o8SMt1vZ4FpubW1jAali EzCU6HrbBTZXREBC4lf/VUaQImaB7UwS7a3XwYqEBUIkzu5+B2azCKhKdG1tAWvgFbCRuHNq DivEOnmJ1RsOMIPYnAK2Er/m/QO7SULgO5vE/32voYpcJNac2cUCYQtLvDq+hR3ClpE4PbmH BaKhmVHi4bm1UN09jBKXm2YwQlRZSxw+fhFoEgfQfZoS63fpQ4QdJS6u7GYECUsI8EnceCsI EmYGMidtm84MEeaV6GgTgqhWk5h1fB3c2oMXLjFD2B4SHbduQsNxAqPE9XcnmCYwys9CWLaA kXEVo3hqaXFuemqxcV5quV5xYm5xaV66XnJ+7iZGYMo4/e/41x2M+/4kHWIU4GBU4uH9cfZ2 rBBrYllxZe4hRgkOZiURXu3Dd2KFeFMSK6tSi/Lji0pzUosPMUpzsCiJ81YzPIgWEkhPLEnN Tk0tSC2CyTJxcEo1MKrYBbhfdT659ttbbretX8XcWKevCyvacEpywanLk7PXsLpN4cie712p b6ey0lG8cftm/8kzFA12dn2Qu/TcnO1fesavWXv8/geHzUwUebbzkUJH49brhyNE/7+2Llse d7CqOvGesNfT7+UmXhMuxMX8f3JklUd1scp5c7M/UXbLlmndWPJPsl+JpTgj0VCLuag4EQBO DCRjFQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRmVeSWpSXmKPExsVy+t/xe7qG9+/EGjQs07PYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsbe7w3sBbMUKlZ2LGBqYHwr3cXIySEhYCLxt2EWK4gtJLCUUeLdJ3eIuIzEyWkNrBC2 sMSfa11sXYxcQDWfGCU+Hj/BBpJgEzCU6HrbBWaLCEhI/Oq/yghSxCywm0ni+qpjjCAJYYEg ibPrvrCA2CwCqhJdW1vAGngFbCTunJoDtUFeYvWGA8wgNqeArcSvef/YIS6ykZh47B/zBEa+ BYwMqxhFUkuLc9Nziw31ihNzi0vz0vWS83M3MQLDd9uxn5t3MF7aGHyIUYCDUYmH98fZ27FC rIllxZW5hxglOJiVRHi1D9+JFeJNSaysSi3Kjy8qzUktPsRoCnTURGYp0eR8YGzllcQbmhqa W1gamhubG5tZKInzdggcjBESSE8sSc1OTS1ILYLpY+LglGpg1OTQPddVMf00f8xS2xTj/R0v yoxb7W4mTclniN1j8sUi69NiKemGaf2q3mlluslBWV9sj/Du0Ngjv+ZEhdjDLZ5v7Zq/7tJ/ l9hVo95lrerS/N64a/3hL6fzo97HlxbOv1R/9duf3dGLv2hd/dp1KeR54Qq2Q39tzYLP8s99 as5eeOPhlluCSizFGYmGWsxFxYkAEn80+XUCAAA= X-CMS-MailID: 20191126081545eucas1p2618ea32363f28c8b3e1ed060c45a44fa X-Msg-Generator: CA X-RootMTR: 20191126081545eucas1p2618ea32363f28c8b3e1ed060c45a44fa X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191126081545eucas1p2618ea32363f28c8b3e1ed060c45a44fa References: <20191126081512.5138-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v3 5/6] usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Broadcom 2835 SoC requires special conversion of physical memory addresses for DMA purpose, so add needed wrappers to dwc2_udc_otg driver. Also extend the list of compatible devices with 'brcm,bcm2835-usb' entry. This allows to use USB gadget drivers (i.e. DFU) on Raspberry Pi4 boards. Signed-off-by: Marek Szyprowski Reviewed-by: Lukasz Majewski --- drivers/usb/gadget/dwc2_udc_otg.c | 2 ++ drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c index 35f4147840..49f342eb21 100644 --- a/drivers/usb/gadget/dwc2_udc_otg.c +++ b/drivers/usb/gadget/dwc2_udc_otg.c @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -1213,6 +1214,7 @@ static int dwc2_udc_otg_remove(struct udevice *dev) static const struct udevice_id dwc2_udc_otg_ids[] = { { .compatible = "snps,dwc2" }, + { .compatible = "brcm,bcm2835-usb" }, { .compatible = "st,stm32mp1-hsotg", .data = (ulong)dwc2_set_stm32mp1_hsotg_params }, {}, diff --git a/drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c b/drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c index 7eb632d3b1..5e695b4ff2 100644 --- a/drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c +++ b/drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c @@ -28,7 +28,7 @@ static inline void dwc2_udc_ep0_zlp(struct dwc2_udc *dev) { u32 ep_ctrl; - writel(usb_ctrl_dma_addr, ®->in_endp[EP0_CON].diepdma); + writel(phys_to_bus((unsigned long)usb_ctrl_dma_addr), ®->in_endp[EP0_CON].diepdma); writel(DIEPT_SIZ_PKT_CNT(1), ®->in_endp[EP0_CON].dieptsiz); ep_ctrl = readl(®->in_endp[EP0_CON].diepctl); @@ -49,7 +49,7 @@ static void dwc2_udc_pre_setup(void) writel(DOEPT_SIZ_PKT_CNT(1) | sizeof(struct usb_ctrlrequest), ®->out_endp[EP0_CON].doeptsiz); - writel(usb_ctrl_dma_addr, ®->out_endp[EP0_CON].doepdma); + writel(phys_to_bus((unsigned long)usb_ctrl_dma_addr), ®->out_endp[EP0_CON].doepdma); ep_ctrl = readl(®->out_endp[EP0_CON].doepctl); writel(ep_ctrl|DEPCTL_EPENA, ®->out_endp[EP0_CON].doepctl); @@ -75,7 +75,7 @@ static inline void dwc2_ep0_complete_out(void) writel(DOEPT_SIZ_PKT_CNT(1) | sizeof(struct usb_ctrlrequest), ®->out_endp[EP0_CON].doeptsiz); - writel(usb_ctrl_dma_addr, ®->out_endp[EP0_CON].doepdma); + writel(phys_to_bus((unsigned long)usb_ctrl_dma_addr), ®->out_endp[EP0_CON].doepdma); ep_ctrl = readl(®->out_endp[EP0_CON].doepctl); writel(ep_ctrl|DEPCTL_EPENA|DEPCTL_CNAK, @@ -113,7 +113,7 @@ static int setdma_rx(struct dwc2_ep *ep, struct dwc2_request *req) (unsigned long) ep->dma_buf + ROUND(ep->len, CONFIG_SYS_CACHELINE_SIZE)); - writel((unsigned long) ep->dma_buf, ®->out_endp[ep_num].doepdma); + writel(phys_to_bus((unsigned long)ep->dma_buf), ®->out_endp[ep_num].doepdma); writel(DOEPT_SIZ_PKT_CNT(pktcnt) | DOEPT_SIZ_XFER_SIZE(length), ®->out_endp[ep_num].doeptsiz); writel(DEPCTL_EPENA|DEPCTL_CNAK|ctrl, ®->out_endp[ep_num].doepctl); @@ -161,7 +161,7 @@ static int setdma_tx(struct dwc2_ep *ep, struct dwc2_request *req) while (readl(®->grstctl) & TX_FIFO_FLUSH) ; - writel((unsigned long) ep->dma_buf, ®->in_endp[ep_num].diepdma); + writel(phys_to_bus((unsigned long)ep->dma_buf), ®->in_endp[ep_num].diepdma); writel(DIEPT_SIZ_PKT_CNT(pktcnt) | DIEPT_SIZ_XFER_SIZE(length), ®->in_endp[ep_num].dieptsiz); @@ -921,7 +921,7 @@ static int dwc2_udc_get_status(struct dwc2_udc *dev, (unsigned long) usb_ctrl + ROUND(sizeof(g_status), CONFIG_SYS_CACHELINE_SIZE)); - writel(usb_ctrl_dma_addr, ®->in_endp[EP0_CON].diepdma); + writel(phys_to_bus(usb_ctrl_dma_addr), ®->in_endp[EP0_CON].diepdma); writel(DIEPT_SIZ_PKT_CNT(1) | DIEPT_SIZ_XFER_SIZE(2), ®->in_endp[EP0_CON].dieptsiz);