From patchwork Mon Sep 16 12:24:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1162771 X-Patchwork-Delegate: lukma@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) 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="VrgKdYWJ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46X58J0cvLz9sN1 for ; Mon, 16 Sep 2019 22:26:39 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 82EDDC22042; Mon, 16 Sep 2019 12:26:15 +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 4FCDEC22006; Mon, 16 Sep 2019 12:24:40 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id CB2C8C22004; Mon, 16 Sep 2019 12:24:39 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id 04E3BC22004 for ; Mon, 16 Sep 2019 12:24:33 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20190916122432euoutp019b06cc4b8ceffd8f631ee3356921fd35~E6r4IFm6z3267232672euoutp01I for ; Mon, 16 Sep 2019 12:24:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20190916122432euoutp019b06cc4b8ceffd8f631ee3356921fd35~E6r4IFm6z3267232672euoutp01I DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1568636672; bh=n2agG1AMWNudGSLcTQ3TabOVLlk0M19UrXxdN6E9yjo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VrgKdYWJOnbtoy+UDEiUPJ8A90IoqaboLDfAqrKPtfYBqvmUoRDd9RTf0U01XEeX1 PvJqtpE4+QrUfH/IgdvYlb81B5XpwRJfPco6wW/Vf9U9/F0f+8skUcBcR13fT8bXEx PxxnVwkr2dp+IjFHelEgjXzDqz+5SEAKzffNh0pg= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20190916122431eucas1p23330eb01b9c5c0fc0624289ab2a1b596~E6r3vtJEu1035410354eucas1p2X; Mon, 16 Sep 2019 12:24:31 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id B1.43.04469.FFE7F7D5; Mon, 16 Sep 2019 13:24:31 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20190916122430eucas1p2dc270f6d0b8ee4da5521fe63d6df072f~E6r2-PpCr1034910349eucas1p2f; Mon, 16 Sep 2019 12:24:30 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190916122430eusmtrp2c5f0676c3ce7a59ee1d872ecca96978d~E6r2xKIuB1025710257eusmtrp2O; Mon, 16 Sep 2019 12:24:30 +0000 (GMT) X-AuditID: cbfec7f2-569ff70000001175-bc-5d7f7eff8cfa Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 60.8B.04117.EFE7F7D5; Mon, 16 Sep 2019 13:24:30 +0100 (BST) Received: from AMDC2765.DIGITAL.local (unknown [106.120.51.73]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190916122430eusmtip12b57641c527e1af81eb7f4cbf4ddc0b6~E6r2YED-n1375613756eusmtip1G; Mon, 16 Sep 2019 12:24:30 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 16 Sep 2019 14:24:16 +0200 Message-Id: <20190916122417.27520-3-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190916122417.27520-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrBIsWRmVeSWpSXmKPExsWy7djP87r/6+pjDTack7LYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC1mTH7JZvF2bye7A7vHvFknWDzO3tnB6NG3ZRWjx/otV1kCWKK4 bFJSczLLUov07RK4Mpb8WclY8EG+ouHBFuYGxhPSXYycHBICJhKXLn1h6mLk4hASWMEo8efY M0YI5wujRNf+JVCZz4wSHX9es8C0HPq1ASqxnFHi0c3H7HAtd/+sYQWpYhMwlOh628UGYosI SEj86r8KNpdZoIlJom3te7BRwgKBEnO3nmTuYuTgYBFQldjXkAwS5hWwlTj4ZwIzxDZ5idUb DoCVcArYSWx76QgyRkLgPZvE7i1fWCFqXCQuH9oAZQtLvDq+hR3ClpH4v3M+E0RDM6PEw3Nr 2SGcHkaJy00zGCGqrCUOH7/ICrKBWUBTYv0ufYiwo0Tbrh+MIGEJAT6JG28FQcLMQOakbdOZ IcK8Eh1tQhDVahKzjq+DW3vwwiWo8z0kGi8fYYaEz0RGiTkrXzFNYJSfhbBsASPjKkbx1NLi 3PTUYsO81HK94sTc4tK8dL3k/NxNjMD0cPrf8U87GL9eSjrEKMDBqMTD29BaFyvEmlhWXJl7 iFGCg1lJhDegtj5WiDclsbIqtSg/vqg0J7X4EKM0B4uSOG81w4NoIYH0xJLU7NTUgtQimCwT B6dUA2NfoFzcYQZ+9dYJBtGbu47a3BHbKt7qMd12x8INDyvVdqqyfNz4mGVmo4/FIuXAhWU/ 5vCnyfpcD1z5/m6enkey9BRRFscziXPO3S+UcVYxln2irL47tuLJ826l9A2H15elvJ/UXuV3 9XpD7IUjpoUJ52wzjjO7MBRd9I4/aNb04LjEjErBlUosxRmJhlrMRcWJAHIZDWULAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrBLMWRmVeSWpSXmKPExsVy+t/xu7r/6upjDa7vV7fYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC1mTH7JZvF2bye7A7vHvFknWDzO3tnB6NG3ZRWjx/otV1kCWKL0 bIryS0tSFTLyi0tslaINLYz0DC0t9IxMLPUMjc1jrYxMlfTtbFJSczLLUov07RL0Mpb8WclY 8EG+ouHBFuYGxhPSXYycHBICJhKHfm1g6mLk4hASWMoo8WriZxaIhIzEyWkNrBC2sMSfa11s EEWfGCWuf3/NDpJgEzCU6HoLkuDkEBGQkPjVf5URpIhZoI1JYsqsjWBFwgL+EvOnfwWyOThY BFQl9jUkg4R5BWwlDv6ZwAyxQF5i9YYDzCAlnAJ2EtteOoKEhYBKjjzZzDKBkW8BI8MqRpHU 0uLc9NxiI73ixNzi0rx0veT83E2MwFDdduznlh2MXe+CDzEKcDAq8fA2tNbFCrEmlhVX5h5i lOBgVhLhDaitjxXiTUmsrEotyo8vKs1JLT7EaAp00kRmKdHkfGAc5ZXEG5oamltYGpobmxub WSiJ83YIHIwREkhPLEnNTk0tSC2C6WPi4JRqYCzJTrF4UhQfrfxqZsTsabPuX/p452gPe9mU gqfn/5bIZ+3XLvo7mTMl+BVH6b/f2+ZMZmP+GGCe+nc9l/T3H3XXGWZJPjroeG27S4Kj44x1 q1f8km9ruF8o/c3Y7vOEp2GuN27ZmxgaTOM7yxie05RwcP5xa66ii7v9pOWKm87sCX/5n4nN sFeJpTgj0VCLuag4EQA+Phk7awIAAA== X-CMS-MailID: 20190916122430eucas1p2dc270f6d0b8ee4da5521fe63d6df072f X-Msg-Generator: CA X-RootMTR: 20190916122430eucas1p2dc270f6d0b8ee4da5521fe63d6df072f X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190916122430eucas1p2dc270f6d0b8ee4da5521fe63d6df072f References: <20190916122417.27520-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH 2/3] 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 35f4147840e..49f342eb211 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 7eb632d3b14..5e695b4ff2a 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);