From patchwork Mon Dec 2 11:11:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1203102 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="sCmT6YEi"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47RMs82qLVz9sP3 for ; Mon, 2 Dec 2019 22:12:28 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id CF8AEC21E34; Mon, 2 Dec 2019 11:11:54 +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 F1030C21DB3; Mon, 2 Dec 2019 11:11:35 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A3692C21C50; Mon, 2 Dec 2019 11:11:33 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id D1498C21C57 for ; Mon, 2 Dec 2019 11:11:32 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191202111132euoutp0247dea0401a4ea68da74ec9af5085319b~ciXIEeMpn0593905939euoutp02d for ; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191202111132euoutp0247dea0401a4ea68da74ec9af5085319b~ciXIEeMpn0593905939euoutp02d DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1575285092; bh=CwwafpuhTZS6ffS0Qs2YmyoWKnhPg+/Y3yZNpaGiDxA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sCmT6YEi4ROE3nlh8Bw6byyfAEgcXrRRbh/YQHGvbCQ3tfBbrrOKs/1oS3iBbaK/z 760UsvV7B8WG8YppPLA7B/daKjZ1L3dsddKytB/5Htms5+50YmOJ2HDeEoH4gtNYSv T+ekK/yDPkhU3M+CIoBldrRVHb2gdXwx+c4E/Ayk= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191202111132eucas1p2f281fe9a8e92e6362938fd8e5857d706~ciXHwFnFO2172121721eucas1p2r; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id E4.F2.60698.361F4ED5; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c~ciXHcvsxR1647916479eucas1p2G; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191202111131eusmtrp1fbcf62b8881300bd79660a84f8fd9b83~ciXHcHgTj1453714537eusmtrp1T; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-c0-5de4f1638d06 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 15.F8.07950.361F4ED5; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191202111131eusmtip2f825ad9937fb22c2e2b914c6b54ef1a0~ciXG1C8xI1559815598eusmtip2Z; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 2 Dec 2019 12:11:17 +0100 Message-Id: <20191202111118.12868-6-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191202111118.12868-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprHKsWRmVeSWpSXmKPExsWy7djP87opH5/EGkzzt9g4Yz2rxY1fbawW z99dZrJYe+Quu8WCyU9YLTbMf8tiMWPySzaLP/t/slhMnbSZ3eLt3k52i8NTPzA6cHvMm3WC xePDxziPVwdWsXvcubaHzePsnR2MHn1bVjF6rN9ylcVj0yuPAI4oLpuU1JzMstQifbsEroy9 3xvYC2YpVKzsWMDUwPhWuouRk0NCwESi7XoLSxcjF4eQwApGiderGpggnC+MEpMbH0NlPjNK nOqZzwjT8nX1SXaIxHJGic4na5nhWtZsfAhWxSZgKNH1tosNxBYRkJD41X+VEaSIWWADs8S9 tkNgRcICIRIPfj9mBrFZBFQl9v3/zQpi8wrYSnSebmSBWCcvsXrDAbAaTgE7if2di6Hiy9gl VuzwgrBdJJrmzmWDsIUlXh3fwg5hy0icntwD9oOEQDOjxMNza9khnB5GictNM6AespY4fPwi 0GYOoPM0Jdbv0ocIO0q8ufqKBSQsIcAnceOtIEiYGcictG06M0SYV6KjTQiiWk1i1vF1cGsP XrjEDGF7SEy7fZcVEkATGSUOTjrBOoFRfhbCsgWMjKsYxVNLi3PTU4uN81LL9YoTc4tL89L1 kvNzNzECU83pf8e/7mDc9yfpEKMAB6MSD2/Hq8exQqyJZcWVuYcYJTiYlUR4rys9jBXiTUms rEotyo8vKs1JLT7EKM3BoiTOW83wIFpIID2xJDU7NbUgtQgmy8TBKdXAWLL0U+VXIY6QKP+7 LZuTl29gD46rSOFID/bz6uO2uOH1xKq28cmsiZMDj0yXDrwzVfcWnySPE/OryRuN+8ptF15M P3KgJSr2p/isyTLuJf3zJlfnqjyYJBzO/oul5xAfx3NXoRX+s6c/WnLSicm0+vxt+eaPW4Ml t1QferYoT31yuM+1ZS1KSizFGYmGWsxFxYkAL0R/rTEDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPLMWRmVeSWpSXmKPExsVy+t/xe7rJH5/EGmydrm2xccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFn/2/2SxmDppM7vF272d7BaHp35gdOD2mDfr BIvHh49xHq8OrGL3uHNtD5vH2Ts7GD36tqxi9Fi/5SqLx6ZXHgEcUXo2RfmlJakKGfnFJbZK 0YYWRnqGlhZ6RiaWeobG5rFWRqZK+nY2Kak5mWWpRfp2CXoZe783sBfMUqhY2bGAqYHxrXQX IyeHhICJxNfVJ9m7GLk4hASWMkosW/mCESIhI3FyWgMrhC0s8edaFxtE0SdGiRU3bjKDJNgE DCW63oIkODlEBCQkfvVfZQQpYhbYwSyx+G0rWJGwQJDEluf3wYpYBFQl9v3/DTaVV8BWovN0 IwvEBnmJ1RsOgNVzCthJ7O9cDBTnANpmK/H+fdwERr4FjAyrGEVSS4tz03OLjfSKE3OLS/PS 9ZLzczcxAgN/27GfW3Ywdr0LPsQowMGoxMPb8epxrBBrYllxZe4hRgkOZiUR3utKD2OFeFMS K6tSi/Lji0pzUosPMZoC3TSRWUo0OR8YlXkl8YamhuYWlobmxubGZhZK4rwdAgdjhATSE0tS s1NTC1KLYPqYODilGhgzixZ5T0pbcJqVbeUTTmvhibXKdy7+jp3gnHhVcPk7i4DCzGlpsRZt 1UpPgs5x75D4lMjXXjS7bV3GvqItV33Z7QUCd0zM9OMzEbjsuWTH9P0PpD0yvGcu+SZyQvOl D1+VecZmFivfjjLe1XV2P978mf74l/SkqeLVhj8+T78W+2ifr7AX11klluKMREMt5qLiRAAV l2nLkgIAAA== X-CMS-MailID: 20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c X-Msg-Generator: CA X-RootMTR: 20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c References: <20191202111118.12868-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Heinrich Schuchardt , Tom Rini , Marek Szyprowski Subject: [U-Boot] [PATCH v4 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);