From patchwork Tue Jul 21 00:17:06 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Alonso X-Patchwork-Id: 497958 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 5E2A2140DEF for ; Tue, 21 Jul 2015 10:18:15 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D19354B62B; Tue, 21 Jul 2015 02:18:13 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iWwOEP5_6CkQ; Tue, 21 Jul 2015 02:18:13 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2CA9E4B61F; Tue, 21 Jul 2015 02:18:13 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D7D354B61F for ; Tue, 21 Jul 2015 02:18:09 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id c536NKCiiP7B for ; Tue, 21 Jul 2015 02:18:09 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0115.outbound.protection.outlook.com [157.56.110.115]) by theia.denx.de (Postfix) with ESMTPS id 097104A039 for ; Tue, 21 Jul 2015 02:18:05 +0200 (CEST) Received: from DM2PR03CA0053.namprd03.prod.outlook.com (10.141.96.52) by CY1PR0301MB1225.namprd03.prod.outlook.com (10.161.212.147) with Microsoft SMTP Server (TLS) id 15.1.213.14; Tue, 21 Jul 2015 00:18:02 +0000 Received: from BN1BFFO11FD029.protection.gbl (2a01:111:f400:7c10::1:108) by DM2PR03CA0053.outlook.office365.com (2a01:111:e400:2428::52) with Microsoft SMTP Server (TLS) id 15.1.219.17 via Frontend Transport; Tue, 21 Jul 2015 00:18:02 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD029.mail.protection.outlook.com (10.58.144.92) with Microsoft SMTP Server (TLS) id 15.1.213.8 via Frontend Transport; Tue, 21 Jul 2015 00:18:01 +0000 Received: from bluefly.am.freescale.net (bluefly.am.freescale.net [10.81.17.130]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id t6L0I0tr022076; Mon, 20 Jul 2015 17:18:00 -0700 From: Adrian Alonso To: , Date: Mon, 20 Jul 2015 19:17:06 -0500 Message-ID: <1437437826-3171-1-git-send-email-aalonso@freescale.com> X-Mailer: git-send-email 2.1.4 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD029; 1:p6br8OE9XtMDnBWT1ycLs0oALcw59aFvdrbEGSuB6QIpffOtQVkrIrhMuU73wuoYYU80mUaFjyT7EdAOG8vDpa93Ep+rdM7tCAkqSjGeab1TTEjL+WteOXluSccBL+puUxAULTR1rtSZ3959rvHOjpeKmd7gAYpfSSdZAJg1VK5qHVnCKNkmOsHr2xavUklXfrWUD5mhHjlUL9KKwzehkq9SP97kxlAFy8UOG8H/4bE2ZxAmbhKhJ8wUDweLD3mT+8DCssf/k8Gi0S2+boXs5QLVTmDzBPSbCoEDWNxh+RtHZ7HHzDYJ4LZz4lm6FFaYfqdQGYw+0cXp/QFzTfHesHiJPrHJZq+nn8bJC6C9W+4E9xr+wswwynlSsp5ZuLaDJWT9hs6HSZ/XWTO4dpU8cXKkOHJ/3lU6kT26+FpdoFCxqZw1+xwTW3N/SuGydMCC X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(339900001)(199003)(189002)(50986999)(189998001)(106466001)(50226001)(104016003)(5001770100001)(85426001)(107886002)(33646002)(86362001)(19580395003)(47776003)(48376002)(19580405001)(62966003)(92566002)(77156002)(229853001)(87936001)(6806004)(77096005)(36756003)(105606002)(46102003)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:CY1PR0301MB1225; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:sfv; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1225; 2:YhcAiPgvvdLC6oOPaDdiPukuz4xCIZKq/OTGJv5IZrn9DUWN/xs3qAGkCzIbI8jt; 3:+7tKrQPFTR5LoCLxFmGhJMMyrES7GxHYHciHwL89pIW9vahzDzppKM5bY07zfmgE7pKQjjsuDv05cr6ZZKpsOt81egVWWZDnzCOOGe3CJKSUfTTy40EolaCNlvBSLAcTM9owEBABj5ZlI4hD182Sq+dHUN8r/TwRL6VbMXWVWuLJYQ0jSNtbpVDPfNgJj/DUMc6PThZdX130toh9CL5A7Hab1GvSsV11uVMRoXNz5+w=; 25:qzhsfbVGLSTJvXLtJS58oUBOWWzv+A8/tmd05ukwrM2is9eiU9yR5td2w7gxPjxDaglkFPe1nC6P5lbGI0rdCnYHsmywNQmyVkjd7RxfCDggkTFb+X0EuDMhYmH5/YfeEFHlo1ORqMZ24ITNacOM7AYaW+uRi78p/8P2o1ZW0Rzs26JjJ0lb7/3qnaMaQicfYmwBs/7DtiTIxcppte6KH9y9pNlJsBGuRPFsU5+Jp0J2A04qQJg/RU0MKD/J77Xa; 20:V/8goPvg+eoxVSR+/Ya9tWmLKu7y6aMCIJqgimuAFUINrCKzdpBlPlG7fOgZJKWOzds/yX/axiQMyum5vD0R5IFA3MeUnsHNq4KCVRDQW1gC5EJJGLfr28JtmVMtZ36XRlczWb2g97VD3f73lLy0nrqTCHl8yhnee9ujw0bBjR2UhPl3bs7ZWAqyJf4j8bgYogrSjwt69BS6AZxbZVatn7s/EN2jsirYbgfEfeMBN2b9qesw5qrPO9iRk3Uq/NSz046yVdHAovM6FmVsVlUzYyG8Ymz95U8ljBotdGHZkOfMI/IwLJ/Jnk3mkzGQZfCOju5vKUznYEsebUeE71NTelK0t33P0LzReX3DAmvc3Q8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1225; CY1PR0301MB1225: X-MS-Exchange-Organization-RulesExecuted X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(3002001); SRVR:CY1PR0301MB1225; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0301MB1225; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1225; 4:YBX1qujAedbjyUO/gPJiF0W5PhLO0Em7v62HihYTN1AajyTDCzsBtZIetf2O294xsExnir0Lfx1kL6WaBvrOr/Ys2GL3rxAAg2x9v4h4N/zV/rNZn000dMghHTVlE51OmfbwjA/67ZmZ9MxFdhCR8FDXj0/EvruEMWPL76r0R3xXPR5/5X8oK3it0Jhy8z9Kb7PG59xdfe65zFwleC4aD4U00ZsD0MZNwuS5Dckwfsu2IPIR9EVyTCBzc8RujiZBAEoti+9rRaOEWTGLcWtsQAxVzgsReVYiA+snRUH/nSM= X-Forefront-PRVS: 0644578634 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1225; 23:JIpHY+bpJ6o+k3OJKrALcxWb7v0ugWiYOoeXwaxeKCgVJCCIEzWZ7qzLFNwfb/r00fafMzhwCvEnRbTYKj464yVoQBPnjxYVvAYaDwcEOmKPMn8xmDg6dzCpeGR72+zV5x1oazjBoooIGtNct2bibh1JEwr9sxZHRvQODWXqA+h1Ldw0ok0g3wrDnxus+Xm+6tUiCsuyw2GhE4TISMovox2zhOL3rqjOWfsti8LKeGH/7+pUhbnqhtZTQA9iPhT26eKpjf1JNWBED5lyxNTBQL4pU5uCgM9lCoWsoZZxNAcV8R4liH8NiF02d3WHjYdOoJ9TTpjhrOJ5S58pdt0ChIofYNhxhgUueeypLCAa+AzEiU6CngzYqqkLGx0yKTOLIeA27BRUtpxYeNeA3xcZdnk2bQn78IOf4ZAwdtNXpCPtum0dIwUwPKHZRqYFUGMMur98NAeO1d8IoQuTL8AtCAe8Dr9veqmJctF03Jstr3cVd8UtIvCrq8Tp9I3oz9tidxJMR1piMNaz3Veav5yTfKKa9sTdzvQ94PKny/o8V29s455ezAfhFVdXuG6Ty0jt/KDG918u7PtwchVMkba484bnr8SQCrbJTB7NKBZ9M5UKflOaI5Q4DHBzk2GqMHPmHcjnOHmbp3k8ZW3+LJe4ld7gI+PS+I3VTELUwDwpO5I/d0V4dbsoQT1bDZzhJGRQLpZxf1gcm7A88d+odwnuxCUWvRVGkPPezLQonoeSi199iJhivzylXrOfLnCLaE7/2iV1IkP/F//YCi5MW4Xln5IDvvh+G0CCFP6rK5y71hW8Rt53ovvRijWqeO60AoFJ X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1225; 5:cwek+Op5IG5eumQzzpoQjaS/Gh6RLEc3v4BQPLPYR2ktCJeRNlfbg1q6xJTrqSnK5Rj2C+lda6eqQqLHGp3kgpQ+Hi9x48v+//M9ZRTJptkifJvVGErflpM0GX3sSOmYpGO/mL4u09PR5UVwXan6FQ==; 24:7lKdWdKBG0mFgxIecCHMOTZReVxTYBV7EZX+4p+ZpdGUXJBhivDW7sBytJRj1pu/DHsRrxAJtbU4Wn/b7bvm1KHyxfxQbW7fHj8loilgjZQ=; 20:RO+U9oeFaFxNMQ8V/32yiX0Ht1KnYMKVf2c+9LsKIzjiSX+JJoahnUyXAJqrXeBGXqFgiSV/oU/93LN1uwXhig== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2015 00:18:01.6251 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB1225 Cc: Fabio.Estevam@freescale.com, otavio@ossystems.com.br Subject: [U-Boot] [PATCH 02/15][v2] imx: usb: ehci-mx7 add usb driver for i.MX7D X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" * Add support for usb driver for i.MX7D SoC Signed-off-by: Adrian Alonso Signed-off-by: Ye.Li Signed-off-by: Peng Fan --- Changes for V2: Resend drivers/usb/host/Makefile | 1 + drivers/usb/host/ehci-mx7.c | 103 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 drivers/usb/host/ehci-mx7.c diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile index 4d35d3e..7267160 100644 --- a/drivers/usb/host/Makefile +++ b/drivers/usb/host/Makefile @@ -36,6 +36,7 @@ obj-$(CONFIG_USB_EHCI_MXC) += ehci-mxc.o obj-$(CONFIG_USB_EHCI_MXS) += ehci-mxs.o obj-$(CONFIG_USB_EHCI_MX5) += ehci-mx5.o obj-$(CONFIG_USB_EHCI_MX6) += ehci-mx6.o +obj-$(CONFIG_USB_EHCI_MX7) += ehci-mx7.o obj-$(CONFIG_USB_EHCI_OMAP) += ehci-omap.o obj-$(CONFIG_USB_EHCI_PPC4XX) += ehci-ppc4xx.o obj-$(CONFIG_USB_EHCI_MARVELL) += ehci-marvell.o diff --git a/drivers/usb/host/ehci-mx7.c b/drivers/usb/host/ehci-mx7.c new file mode 100644 index 0000000..7429d62 --- /dev/null +++ b/drivers/usb/host/ehci-mx7.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2009 Daniel Mack + * Copyright (C) 2010-2015 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ehci.h" + +#define USB_NC_OFFSET 0x200 + +#define UCTRL_PM (1 << 9) /* OTG Power Mask */ +#define UCTRL_OVER_CUR_POL (1 << 8) /* OTG Polarity of Overcurrent */ +#define UCTRL_OVER_CUR_DIS (1 << 7) /* Disable OTG Overcurrent Detection */ + +/* USBCMD */ +#define UCMD_RUN_STOP (1 << 0) /* controller run/stop */ +#define UCMD_RESET (1 << 1) /* controller reset */ + +/* Base address for this IP block is 0x02184800 */ +struct usbnc_regs { + u32 ctrl1; + u32 ctrl2; + u32 reserve1[11]; + u32 phy_ctrl2; + u32 reserve2[6]; + u32 adp_cfg1; + u32 reserve3; + u32 adp_status; +}; + +static void usb_oc_config(int index) +{ + struct usbnc_regs *usbnc = (struct usbnc_regs *)(USB_BASE_ADDR + + (0x10000 * index) + USB_NC_OFFSET); + void __iomem *ctrl = (void __iomem *)(&usbnc->ctrl1); + u32 val; + + val = __raw_readl(ctrl); + val |= UCTRL_OVER_CUR_POL; + __raw_writel(val, ctrl); + + val = __raw_readl(ctrl); + val |= (UCTRL_OVER_CUR_DIS | UCTRL_PM); + __raw_writel(val, ctrl); +} + +int __weak board_ehci_hcd_init(int port) +{ + return 0; +} + +int __weak board_ehci_power(int port, int on) +{ + return 0; +} + +int ehci_hcd_init(int index, enum usb_init_type init, + struct ehci_hccr **hccr, struct ehci_hcor **hcor) +{ + struct usb_ehci *ehci = (struct usb_ehci *)(USB_BASE_ADDR + + (0x10000 * index)); + + if (index > 3) + return -EINVAL; + enable_usboh3_clk(1); + mdelay(1); + + /* Do board specific initialization */ + board_ehci_hcd_init(index); + + usb_oc_config(index); + + *hccr = (struct ehci_hccr *)((uint32_t)&ehci->caplength); + *hcor = (struct ehci_hcor *)((uint32_t)*hccr + + HC_LENGTH(ehci_readl(&(*hccr)->cr_capbase))); + + board_ehci_power(index, (init == USB_INIT_DEVICE) ? 0 : 1); + if (init == USB_INIT_DEVICE) + return 0; + setbits_le32(&ehci->usbmode, CM_HOST); + __raw_writel(CONFIG_MXC_USB_PORTSC, &ehci->portsc); + setbits_le32(&ehci->portsc, USB_EN); + + mdelay(10); + + return 0; +} + +int ehci_hcd_stop(int index) +{ + return 0; +}