From patchwork Thu Dec 22 09:06:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 708210 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 3tkqNL29x3z9t1F for ; Thu, 22 Dec 2016 22:41:05 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="fdBFE9i3"; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id B8276B3950; Thu, 22 Dec 2016 12:41:00 +0100 (CET) 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 Zh1slRB09Im8; Thu, 22 Dec 2016 12:41:00 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id EDB15B393C; Thu, 22 Dec 2016 12:40:59 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 6D01FB393C for ; Thu, 22 Dec 2016 12:40:56 +0100 (CET) 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 WRianKrlSsO4 for ; Thu, 22 Dec 2016 12:40:56 +0100 (CET) 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 EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0063.outbound.protection.outlook.com [104.47.2.63]) by theia.denx.de (Postfix) with ESMTPS id 12C0EB3937 for ; Thu, 22 Dec 2016 12:40:52 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=J74PtybrLJsTbzePURj8yJZnwdYT6Zjq3y6TUcYNTDI=; b=fdBFE9i3qeAE2KXNJ2dCqwqzZeieEJD5guwPHrBbG14GirGmFPHHzz1XGam/PH8MIeEvbCxNRU6YGjJAGGXkasxx1iwaS58q1F7+Xm6BpW+7UMUvls05C5gV3O4J+U1hJUzD8w6iDTpAG0EP2R8OVAmwM9ozNMl8n5OyywBnWS0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-7smt.suse (123.151.195.52) by AM4PR0401MB1795.eurprd04.prod.outlook.com (10.165.244.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.789.14; Thu, 22 Dec 2016 09:08:15 +0000 From: Peng Fan To: , Date: Thu, 22 Dec 2016 17:06:42 +0800 Message-ID: <1482397604-28826-1-git-send-email-peng.fan@nxp.com> X-Mailer: git-send-email 2.6.2 MIME-Version: 1.0 X-Originating-IP: [123.151.195.52] X-ClientProxiedBy: KL1PR06CA0007.apcprd06.prod.outlook.com (10.165.15.145) To AM4PR0401MB1795.eurprd04.prod.outlook.com (10.165.244.153) X-MS-Office365-Filtering-Correlation-Id: 34a16732-fe3a-4c97-73f9-08d42a4a1195 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:AM4PR0401MB1795; X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1795; 3:s2rpM8eC6Q6IRU+nW36XPS0hQLFDZIwanV1D0P4SOAPM/T0ld0NmmsSn3ShrH18BdymDI/nTFU+9pLtm6zmIiAk4QPyr7Yy+GYG1ru9moi0Gy6+PehfYhOcPwWh54IaxJUgMubGRelZSWMnZ6+Y7zqH+b8qBCg6QtGwd88PIPez60hSjdhY05QpnnU4WtIEJZpL00rMtFzZWc4boljZijtbplUGnWfuw73NdU91n8M8fSXF5fn7Nki1/Qtquu4oyN45FyDwh1JHC5PvpsPAkaQ== X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1795; 25:N+CB8XnWq/CQ2Um7gek5knC1vcCTBMreKVmSglaGyBN5uANUCU9MUk9odVFLXVy7qxd+5gSZcDooVHRAwfURfN+8jPJb4urXLlvyer9HGE+hY4uM9uYJgr09UdalEgwP4hKK1PFCM16d2nnjkakDnw6eSU5UtDDTzkaaUwLjEZpuLVbdkSQkQALV1g8qZ2nFmxJjIBLNwFkBIRvwQ0xvqlOK3ZhgQtOfEo/SrYjBCu9QqWop1ZBujTE16fhfJS8shRTh7EIAxdeLMiY/L2YfsLkQ7qUjwgcJL98gnjnUdIzaKSa8avBENi59tMB6gDSPHvLWY/xd4qLmO5NrvUF8h6hB5WXFrUuKKZH+N5TPhbfrci1dYo0MGfmT2iwwD5yS8nOirk+xq06/ZdMnn4tr+/W8MUdmdq8zcqSmGjZujnpmp7b2w5V+cQu0/pfcMBhukVq+RuDqTrH0n0WJ3qMqSGOtkzRD5M6hYldxDLUWGaa7ZcyI5zWCzL+ohS5Fn147edSGwQQ/m1l8kGAxr0ygK4vpylo0f9rJM4+BOfdfVL8Kc+teylkXMQnV0pE4KvuaF3w3MflvrD80d9jiT5e5ea+ouOslQ6ZoG5ZCEZymEg6ZQZ1c6CLtJS1Lv3m7ZWHO21nQvGnfxDghK9piU36EyQ2yd4XuXeEttvCxOGGbSGHE2oPnowFrXCcP7OdmpzPUFn2wJN1pUVaIIcFLwmqxdJHBXp245+jQ55w3cMFH9IIkMHGVqSnM2r2P3VZUIFWT X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1795; 31:hy3E2MpSo+evAKOvwfq2JhcxGmQaY20G/K2Y+VGy8uugSm0PjvVon/k8gNqJ/XUeidC5UEUrDTBdk8wpZXObrdo4pDYrtE5zjgacN1/EoJRIQbvEluRbixTuYMxoiMAGGadyX7/5x2SEEOT7gUkSujfv1NYAB0p6dSYvBtcbI24/K5JcLiMwK8gbuedOiNYYS+SoPQoLf+LLwjfUnBYWb5YHMV1iiKVZ1TZftOOdeHqjgaiDyk9h32gDVqvo784Q; 20:kpozaY2F3DRYI9L/jsJuF+rgQFa9YkxAcnV/PtsBevwOmM5C+KUNhxzRkZxTCls43RbqIKw9JSOWySnRyaQugVT0uXd43WfVKamNUMW+xKm2fLXSckz04RbDDlP0DHcougG6s2H56HP0NCQ0r5sGfpPs7M2ifzZLkttowdsbuKRSd24QQIrSn2PRpIdAcNotW2UI1wsfm9RuuNOjFPn3xuzCFkiPqm/0QDOJD2OS1XLJ13uY8QJw3Le9VeeNyCklPv4IEFtPPSddG5D8WVGfUGZxFlhYAnMwV957O3ii7q0WsM+EDiyr9uwGDmCl/6EAbkzRRr+x3D9B3gmtitYM8bmSvWrRPBAHxHFsPMIhMFyNkl0KAGyn3xTpgfeAnydEywKHAOYiXvN0fav2Q78EwPP8sCV+qBU7hghCHbATNaEHQxy/8cHFiVnKZgeEXxtCRaMibwzdWH7NwApXkUGzfxCAyKG2zae+IIiTthGlrt8zcKp4irw8/xO6HwAdWHQB X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6055026)(6041248)(20161123555025)(20161123562025)(20161123560025)(20161123564025)(6072148)(6047074); SRVR:AM4PR0401MB1795; BCL:0; PCL:0; RULEID:; SRVR:AM4PR0401MB1795; X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1795; 4:PTULjshfCn3bk/eRvCjfDHuP4tpPxrRB3OqDqvX9/shc9WGQgQldDTD0UvE2SN7tbI9tsL554o4i0oX2dl/9F7QuILDAPBc9y7wPuMsAMVAWJ8rAcbgykskvMRJU9h7MRxZJwNrP+FAgsmxMIDU8YpoTUOqpvwuXvAzxeO/kHeFdiq9DEkiC2hV7LWLWUSoBJr1pjReeWI0SpL2XAFBiCNqWiip7Ft2oUHau6iFSbtmwgg8pbchhTgoA92EJVyLSlimok+coDR+W5am5EFVq1qX3ev+9IL8r/P+JKH100ix8WEYLjRiOQIlhk6sM4i6WRT7uVaI3YHegeanYTk4soeaI1lDOolEvmLto6iXzA3XPGyPIhlA5WXdaiPsntF3YmtCqXmVQVIKcdwVfx8GQCOv0ocWhjTlqBxSMwp38RPrAieu6u+wDpIG33bE3eMsPpTUo7/hzx4iGc4j+RYFDnMkg0PPpfdmTWXA0Wnui0qG8GHHSAA2QA0NYDuSM84wr6wUf1XXbCqLJPqklQiE4ovu4bYLy/3yBIA638/UuVdYkTjew+AP8i/+TWVKxivS3GfhusFDE+tMHXeyNhF5EE0TzPprxoUVLJJbKe8GngEBshJXjM08qwrRWfTPqsIFjhwYTkpdy046XW7e4THWX+nmy8l1TFJxJPkA5iNdfn5s= X-Forefront-PRVS: 01644DCF4A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39850400002)(39410400002)(39860400002)(39450400003)(39840400002)(189002)(199003)(33646002)(5001770100001)(69596002)(81156014)(97736004)(81166006)(6512006)(86362001)(106356001)(6486002)(50226002)(6506006)(6666003)(5003940100001)(38730400001)(8676002)(39060400001)(5660300001)(25786008)(101416001)(36756003)(7736002)(92566002)(305945005)(2906002)(189998001)(21086003)(68736007)(3846002)(50986999)(4326007)(6116002)(42186005)(50466002)(48376002)(105586002)(47776003)(66066001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0401MB1795; H:linux-7smt.suse; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM4PR0401MB1795; 23:8XKjA9gT1EKeT/W4uWtUmPKaW4mrh4ClQnjBqC+?= =?us-ascii?Q?asUQbyvBF2WvjSo1pB/1DlZJGTwB+b1GL8iiKPQYSfc/pbymlGbuU9skYAJ8?= =?us-ascii?Q?uK+EM/qQbkDWgoSfbxADLRU4LnBpkZO9p1RiJEsxa2Se2cSB47s6hNPhePiV?= =?us-ascii?Q?//X1XjKAhJsQowOjPdT/Fu/xcVhAjgM5rAgvCM8W8zfc/H0zi9XYuKb10VPa?= =?us-ascii?Q?cX0yGZulUZfty1JSunYFTGkRddkgcbYovX0iYCnXkf8dXD7w5sFQmdQBuux9?= =?us-ascii?Q?QV9ixKUFfxx2LjHNujqblTrD/Lf6zIuhY/UhDUeHsmG/rszfk0GnXzvZEo5B?= =?us-ascii?Q?hPhLzPTu7dBwnkeUwBhvLKrrmH5TS6CXcPR71Va8JwMZHBMzVB4jCMm2jXK1?= =?us-ascii?Q?g5s96rL9lgWJR2Kt4Pdp9e2pIKFXScVZILqiT0egnYv4v2WMmlvdrmla1P/U?= =?us-ascii?Q?oHdBlxDYgvVZqZEVIYTmyG4NGAnJf/dZlug2i1tIqXw4Lp2tUHo/U+0FT32k?= =?us-ascii?Q?3L7GIRw1ZzYY3DdZg3NgCG3efs8asd2BpHfyvJ1pBYaq9LBdvcV4CJqRx/mk?= =?us-ascii?Q?5ORZXb6ERIFs0JOJzHGe5sXcZNa2ZyPWh5vR83+8M/w2hsZlyEUtagFKCTPN?= =?us-ascii?Q?qndLZvNCmQGlKJJTpvYIOCQaqG9ZUc4H4aX9U1ltY2hvjlegVls2T90UyZRt?= =?us-ascii?Q?2cJN9A38kjEM68Xyfz3XvIs8oO/0CtfJ4SywhTuOP7AS9fJWYiCk+tSid1Qk?= =?us-ascii?Q?9DBXDEu9mhNaiFUOerj4jAcjWibYfZqUNYL14uzrM9P4PkvNgqRUSa6tOwD0?= =?us-ascii?Q?xkfjsoveOekbvQb2A0FLDRYevzhaeuZDgbhTz0J61sRYXClS5ofY/q65H/Nd?= =?us-ascii?Q?L1Hw+ggaHw3FvMEqbWYlMNkY7UOryKxn0qgdFFSW8l/AUdOC9hidwccVQW/x?= =?us-ascii?Q?nR++aL5CZd3uU/IgMdjLZUMmX8PbBw06mzc+sTMClOkuJ6doBSQHTRmCzNt6?= =?us-ascii?Q?TN+WdepNXVcF/pTpwa6ojXMM5i1yvTAiBL6ro1V0XPrK+WKNebLYab8flFac?= =?us-ascii?Q?3FQsdiTYhshox4uKZUD7PtMMXdKynmxNlrD+Y45+XmPtmR4CDPRrk2MZSbse?= =?us-ascii?Q?SkZcsr3hJDtZczK1Q6ibzTPdtrrTJNUmuHPIc0dsPEdQNhXrzLUFTm1mV4Ha?= =?us-ascii?Q?Us+chumKSwZWVZw7yduH81py0dEvIH6OIcHhW?= X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1795; 6:7DgK0mugL6odT/Z7ZT5hBsViV2gy/SSisEMb4h991TPet4FKNYvp03IhP9Ip1BRzslHTZbYhbwlIo9xbxVYMNGcSS56/zLcYuFBYqDL8ieL7cUDJ2pNAukAkQMXoNUtgi1L0hBcZV2nMpHI52S3mcc1Z+UFsrIz7ZJR432l79ejOVAh+DM8oK9I/2NqRSA3+ccYmN+qvUUVH/Wqek5lPnfG1LxZqJ1ymUolyjta3Bns1Wp6HE3nhzCany8yao5Q4w2gcBu+SXzOY1BJKt5iNASPWLQkCKel8abfR4YNhHPswdV2smcEBpyZZaLW11d4tftlxFJRA7qQWQ8qQpCV/zxXQXJAYSGI8sVDJEK8i7nN7FcQHHaAdmOfYYSud5T1sodg2fVfbAQOa/VcL1CBEbNRXnPLujkIohTst6k7ZrmzldaI2xdfQykQKgjMY+7wUHRfbTv+ZVHjIKKbRS/uTsQ==; 5:br80TpFC1FktpYrvv4qcdYMf9NEwdCbliifdOd2MvtZqoIGaC5ej6DYw+xS+l+Q+hKmF47ks5svCpiVVgc9ovcnVAWypjjDIuRa5HPnhA3QTtk/9E1wOfJAEYPVI5RugagWx5MliujlCrTtzgJTnGnTgCJdw3C1JISjUw012/vw=; 24:GH6e5M12OPqtaLxlKmgPe+/ub9i9S+LCJRqgGdaYtAyH7juO8H9T7L/d5ACn1/OAYgxgPin136QX6XwXV5t/6T1hvfIF8nnyKtNwtk3urlE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM4PR0401MB1795; 7:oURSL05OTsnped8yNGn2Jv8tRXvEoIC6V4sHUvTFnedfWpAHV/LXwfg/MUutrxLXddJOE7qvEiPYcFPq6w3eAK8vl8g8hltT8JhIxG8PsnnfsXYzKYzCuP+woQ1/vgKLykyEeMiztfr393klUZYbtcOTf83z5jaFqbSR4jVjhGAX8VJHqjM1WX8f/r/XPpla2gpDoeawvplRZPdkrSKXVdt/wn5nm846U2GwymiJdv5z/TqdezU9Lb/v5G9ukVBVauztuYcHDoXWKX1J3wEquMBmOvUkaxMyyjKdIT0r2GUIIZzGjCxski8+WAUkQ+ROJOgtHs9CjXpOmbYqwN+OqVE7bOvBKPZhhGr6JEm2/YzXAlDV5VdZsPKIDGLxP36+nuDQVMJxaXsAFdTy4t1LgjsU1f0nZyv7b/tyBmRgxrFABq4VXGk3rkZCv3U14a+w1EI/v3sPjRVexD+jHpG5iw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2016 09:08:15.0363 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0401MB1795 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH V2 1/3] usb: ehci-mx6: implement ofdata_to_platdata 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" Implement ofdata_to_platdata to set the type to host or device. - Check "dr-mode" property. - If there is no "dr-mode", check phy_ctrl for i.MX6 and phy_status for i.MX7 Signed-off-by: Peng Fan Cc: Marek Vasut Cc: Simon Glass Cc: Stefano Babic Reviewed-by: Simon Glass --- V2: Add a ehci_usb_phy_mode function to check phy mode when dr-mode is otg, or no mode property provided. drivers/usb/host/ehci-mx6.c | 75 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c index 48889c1..18b7fc3 100644 --- a/drivers/usb/host/ehci-mx6.c +++ b/drivers/usb/host/ehci-mx6.c @@ -15,10 +15,13 @@ #include #include #include +#include #include #include "ehci.h" +DECLARE_GLOBAL_DATA_PTR; + #define USB_OTGREGS_OFFSET 0x000 #define USB_H1REGS_OFFSET 0x200 #define USB_H2REGS_OFFSET 0x400 @@ -48,6 +51,7 @@ #define ANADIG_USB2_PLL_480_CTRL_EN_USB_CLKS 0x00000040 #define USBNC_OFFSET 0x200 +#define USBNC_PHY_STATUS_OFFSET 0x23C #define USBNC_PHYSTATUS_ID_DIG (1 << 4) /* otg_id status */ #define USBNC_PHYCFG2_ACAENB (1 << 4) /* otg_id detection enable */ #define UCTRL_PWR_POL (1 << 9) /* OTG Polarity of Power Pin */ @@ -417,6 +421,76 @@ static const struct ehci_ops mx6_ehci_ops = { .init_after_reset = mx6_init_after_reset }; +static int ehci_usb_phy_mode(struct udevice *dev) +{ + struct usb_platdata *plat = dev_get_platdata(dev); + void *__iomem addr = (void *__iomem)dev_get_addr(dev); + void *__iomem phy_ctrl, *__iomem phy_status; + const void *blob = gd->fdt_blob; + int offset = dev->of_offset, phy_off; + u32 val; + + /* + * About fsl,usbphy, Refer to + * Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt. + */ + if (is_mx6()) { + phy_off = fdtdec_lookup_phandle(blob, + offset, + "fsl,usbphy"); + if (phy_off < 0) + return -EINVAL; + + addr = (void __iomem *)fdtdec_get_addr(blob, phy_off, + "reg"); + if ((fdt_addr_t)addr == FDT_ADDR_T_NONE) + return -EINVAL; + + phy_ctrl = (void __iomem *)(addr + USBPHY_CTRL); + val = readl(phy_ctrl); + + if (val & USBPHY_CTRL_OTG_ID) + plat->init_type = USB_INIT_DEVICE; + else + plat->init_type = USB_INIT_HOST; + } else if (is_mx7()) { + phy_status = (void __iomem *)(addr + + USBNC_PHY_STATUS_OFFSET); + val = readl(phy_status); + + if (val & USBNC_PHYSTATUS_ID_DIG) + plat->init_type = USB_INIT_DEVICE; + else + plat->init_type = USB_INIT_HOST; + } else { + return -EINVAL; + } + + return 0; +} + +static int ehci_usb_ofdata_to_platdata(struct udevice *dev) +{ + struct usb_platdata *plat = dev_get_platdata(dev); + const char *mode; + + mode = fdt_getprop(gd->fdt_blob, dev->of_offset, "dr_mode", NULL); + if (mode) { + if (strcmp(mode, "peripheral") == 0) + plat->init_type = USB_INIT_DEVICE; + else if (strcmp(mode, "host") == 0) + plat->init_type = USB_INIT_HOST; + else if (strcmp(mode, "otg") == 0) + return ehci_usb_phy_mode(dev); + else + return -EINVAL; + + return 0; + } + + return ehci_usb_phy_mode(dev); +} + static int ehci_usb_probe(struct udevice *dev) { struct usb_platdata *plat = dev_get_platdata(dev); @@ -460,6 +534,7 @@ U_BOOT_DRIVER(usb_mx6) = { .name = "ehci_mx6", .id = UCLASS_USB, .of_match = mx6_usb_ids, + .ofdata_to_platdata = ehci_usb_ofdata_to_platdata, .probe = ehci_usb_probe, .remove = ehci_deregister, .ops = &ehci_usb_ops,