From patchwork Thu Oct 27 06:56:40 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sriram Dash X-Patchwork-Id: 687497 X-Patchwork-Delegate: yorksun@freescale.com 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 3t4JV85RV6z9t9k for ; Thu, 27 Oct 2016 18:31:27 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 479A4A7548; Thu, 27 Oct 2016 09:31:23 +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 xATJYwTkijb9; Thu, 27 Oct 2016 09:31:23 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id AA8744BD3D; Thu, 27 Oct 2016 09:31:22 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 04E8D4BD3D for ; Thu, 27 Oct 2016 09:31:17 +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 HfQtVFh3nxPp for ; Thu, 27 Oct 2016 09:31:16 +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 NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0070.outbound.protection.outlook.com [104.47.37.70]) by theia.denx.de (Postfix) with ESMTPS id 11C324BA81 for ; Thu, 27 Oct 2016 09:31:12 +0200 (CEST) Received: from BN6PR03CA0027.namprd03.prod.outlook.com (10.175.124.13) by CY1PR0301MB1627.namprd03.prod.outlook.com (10.162.166.29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.669.16; Thu, 27 Oct 2016 06:56:48 +0000 Received: from BY2FFO11FD017.protection.gbl (2a01:111:f400:7c0c::112) by BN6PR03CA0027.outlook.office365.com (2603:10b6:404:10c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.639.5 via Frontend Transport; Thu, 27 Oct 2016 06:56:48 +0000 Authentication-Results: spf=none (sender IP is 192.88.168.50) smtp.mailfrom=lvd5587.freescale.com; nxp.com; dkim=none (message not signed) header.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: None (protection.outlook.com: lvd5587.freescale.com does not designate permitted sender hosts) Received: from tx30smr01.am.freescale.net (192.88.168.50) by BY2FFO11FD017.mail.protection.outlook.com (10.1.14.105) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.679.5 via Frontend Transport; Thu, 27 Oct 2016 06:56:48 +0000 Received: from lvd5587.freescale.com (lvd5587.ap.freescale.net [10.232.34.77]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u9R6ujlq016054; Wed, 26 Oct 2016 23:56:46 -0700 Received: by lvd5587.freescale.com (Postfix, from userid 65022120) id F1A2B68086; Thu, 27 Oct 2016 12:26:44 +0530 (IST) From: Sriram Dash To: Date: Thu, 27 Oct 2016 12:26:40 +0530 Message-ID: <1477551400-21921-1-git-send-email-sriram.dash@nxp.com> X-Mailer: git-send-email 1.7.7.4 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131220250084776029; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6039001)(6009001)(7916002)(2980300002)(428002)(189002)(199003)(11100500001)(15975445007)(50226002)(5003940100001)(68736007)(305945005)(7846002)(6666003)(47776003)(4720700003)(8676002)(45336002)(81156014)(586003)(110136003)(52956003)(81166006)(50466002)(46386002)(230783001)(8936002)(48376002)(86372001)(97736004)(6916009)(42882006)(356003)(87936001)(5660300001)(101416001)(189998001)(105586002)(19580405001)(103686003)(42186005)(90966002)(92566002)(106466001)(229853001)(2906002)(19580395003)(960300001)(33646002)(4326007)(50986999)(36756003)(2351001)(626004)(8666005)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB1627; H:tx30smr01.am.freescale.net; FPR:; SPF:None; PTR:InfoDomainNonexistent; MX:1; A:0; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD017; 1:ZliyGbbBBx1uYlnDMeLS5lr4nWbaQ5vE6XHADFXGWHrbyqIojnjVAnNzPBrwnO2XawHQf7F1L5/XBXfUmkxaFOmCtM47ktpzRbMFYfZSoSARtZVAC018qLmiymuVhRPGDQaYtoIcOcFTmPom3a1O4LDVFdmiyrZGNsD7bDlRNGDSjMkzNVPTB1BH53IcjDG3lVnd8SksOt80Ls055bTYDYm6z/jdHjWzmA+OG7FVqutTmL7ZQvXtTZauU81VmXF2d5PdxdOdYCgtkq+x/rAEg0dNkFVYR5oIdtmWtfS6ZZz2TdkFebNNcLmyPGWzabRx9/cjChAihvggep5moFw9MNj3PGZKQnP6rfyt0sx687pBSBvVPdXhSLPpBD6ilAVCcFnpaZ+Je7UUlSrXEjnMolNr3PcJ4L+jwBxC/pdk9sA+lOAtIColtRBjXmgdODthMrYPou8B1KsKX9Ub4J5xWP4gAzfWpypCw2KNDeCd9Ks+NyUDi5ztATKNvorxK5JihWSyRsCtg2pjsiCJzBHCIm1S8KytET6wN0fwDBjrGYMEuWIqWpSVz9W9SSaG9Y1CS0URIOStzoIlb/abJJ5qL1/AmwqSbgPuue3zhFeMPEznJKt9/qCMHv4Hx+spW5WvudFUlkGXde0O9Bnur/YcVfiBEAMoE6tFeuzvuzpDo80Rzq83nwMpYUV5lfO+TAClx88DAbI+rj3P1LnmEdUQm7gil5SPIB4IyJ6u6O9BF6TOtuRNmfnpqHqCfQLk9kFn MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 0a8ee226-b0af-45f8-185d-08d3fe366c1b X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1627; 2:zrApicm8cIY6tutLFin9K1sHrg65dxRR3XjCw30EgRoerOGxhyiwkYPoEF7Nz/KI1fqrIhlRK7g7sJYtD9bEVa/EnFXLQHIwD7ecqry3kM+LZRy+tbvQO7FNvBtyUz1gkrsyYBGPVlY5ini66eXg22pD/VfyeMGyWBRP+SuVhc0t3+FEQ8KIaUETYyuZxhl1LMVzUvdWe9QPpoEs/75LFA==; 3:1XjdoUlEmDT97leZd79sbMk0nWzQCdJwgyMywQXWUavHLZQFgIT4vrdZTH5hl2TYoU5OnBsK/eYxZDl9xS+izvfwsNZ7F3VeXLz0AihjYDMD8F50aFphV3tqSvitxEl+KXWygU6XJRJcNoZ+QCVM7UYwBJKqrrw7uKkFolzBhXG0GVRZ8DIK2bmHumBXiup1elL/hYQQZwuHrxl39n+PUKUyiSML+fjZBqSYdMn2oM+1OK4dUe478TRl8yZz4e/M X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1627; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1627; 25:pbvzopiNTkGqiWljqNpYMDQGHaAqoMHWedg1+z6+mzV+1CG5raVAPX9z8t4IdkzhdnBVS6hSEWSFWZYMoKdpoAu9otXztGE4FSqZvzUhxCYOHaXadPTKG29fFnM8yjtFuUtFoHP0EyNX4atpzoJL+1j5/DKp/fOLlH4VKUxM5yNHzAk3Jg93c1/oXZ6yqzx5j69Gt9qrAfT1fMNzvbSzNtdnch9cXvqnkDWAtt9LvZuMRkjTp2mZKCyBuzeXwOE8KhvyXfzqRFdhidh3nJbMDXK5l3mx5AFTSChF6ThDp8Ej/fLBwiXYFDoNCbCzCvOjz/dL33Tx/Uo6c+H2UaK+5WpGmL/joS4c1gcaBmBXmHy72h+CHgL/zCqNfH8I/IkPJgUZycQFM/WpcvgnOa+zcEc8lULnMpfLagkupv9EtXOieY8ZD5wejlUEAiQhWGTUKP9o8zSec1Gy0dBei0mIbR1daRGo+Mj8JIXTk7/d+y7Tt7GNZ0dNi9FgfK3eO8MgXSunD5xzaujxJ1w2Do7TgopFa5lL1k/XJZpY4WD+VDkt1BbJPewRli0wp3KQOMnBz5b84Y27nr4uti/oC9ZoHxVSSmgVZ5fN09hvoqxs9U0TPn9wEgueCB0ww1PDlRwvf/MYNozfSzR+JFo17fcBbLE4KJuTylRqJ6SZUtpdliwvqZY9yUUyX/PmtGnY+2pz43L0hWQ7Bq5SYjHZR5/JPb2ZJZIWwhm1fMbkH1oTEO22DHJ1uU7L/Lw/oC6Z04g6waYo7aznXwbuffXjSTv984tlT8bUtYcm0esk6j5TEqH6XXExK9WnoaJfUxlz2azS/CtwzrqUjTEwKg5kJOg7kwGRamZrJWpvXs7S+ZkUH8ifafIiXRQy7vCTSNcaCKkuwaUfievxqzLEG705KWgetadviZcVD9+SrzUf6oTyJ/4= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1627; 31:1Pjn4iotIg0GUoJEjR45yjIdenMFi2Z0kJcNuXfTyV0DX6OPGI+CJvimo0kWfo1qWjoVsxCqFjCjovQg5oD4LxOSAglpC5R7BNTl5UzZhi8jwXoXbZn/N1oTPxrTVu7wBeR8HJlNgHCIh3aB1BwDiAT7IJL6dxH8KF9/mKN/nkz3Bxsjvj1EC0axdemoEMbIvIPdyAYfKmmR80Av1f+oCeaE7vt9GrRV7HwR7EfZHOEcBpmVkvNDVSbGavWCqmJAvckqNvsMhAakdYgt9q2i7Q==; 4:tMeOKz6hE9iyX5dLIREZLm9aUpk83IXP/4HqEvRnCcNCxsWpNiiLQbHxjzGW4RM6MB8ggmtMiqUFJOsrVVSBEQnwvrarho/Ldl51qSzmtA00hnNUQsfCYLG3ftV09xoBb5r9BLBw3bOCb+TV5tWMOT91bnhKJor1qxIh3GO0/dE4OqK+R4OExoV1QBI7PaoUgemobRla6u5YNsR/FZn5Yi/DHVEl9FPkV4IUTBFQqZrsci5HflmNy9q3hKYY3wDhqmNu1dRxp1SqwDzWXWKoivJjeS3tVkWswfK5vrLydHP0QYFsZd43kAaHP+i19uV1qyDvYYP+ds+lhfmXGByptZWhJoUwagAdwNEttaPas8Xr95sADKFweEkICu2nTmjtYieyWpsGRouEuhKH/Qz47X0xTDWz3BBIYnaUie1wi8L2DUSlkWhQOAvZowzT8/lD27CTnOZ2rTlWZUFS0EwoJbFr3e+HvAdpPfanxi7sni9mu7i8HWzM/cacUn1acIgRjPQNUXZsAPLNUjTwYyCVhXG206GXs8yp8OoCCnOeHbPLn66wkeEByfkCpm2z9rEd X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(13023025)(5005006)(8121501046)(13017025)(13024025)(13018025)(13015025)(10201501046)(3002001)(6055026); SRVR:CY1PR0301MB1627; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB1627; X-Forefront-PRVS: 0108A997B2 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB1627; 23:WQiW55f8aghRFhVZ/WAByGVX/d1jdbCeYkLu4GV?= =?us-ascii?Q?2qKArhlOv5xvNy97cBmpaDLag5xns5Lr10NEIsVASkKXnfNKK+U/KFZEazv7?= =?us-ascii?Q?lTSbB8gOmkRC4M8Yyeik+sRAoBJehuRhNwlOqey3L98bBcS37BFOMoaFbvT+?= =?us-ascii?Q?O+n9PRihOL0Pbx7zwNmPG5JoQ6qj3A53OnTD7r6TG/YZqHbJkn6PBTyWUfMJ?= =?us-ascii?Q?xGldTe4dTQZB3iu938dPdXMapvknOditEAfrCXpscPoUH446B5fk6zFoHwYd?= =?us-ascii?Q?umeQNYDqz39jziKJH3M2jZ/dSkeeXJ+RRKjs7k7GobpMOfr1DncYtXBeMrUD?= =?us-ascii?Q?M3+EQlqIxkXyzzvenk+pZJ+LZV9uw7Ogx9nPExZdaZQ6lb/ZLNA6Qz75BNu3?= =?us-ascii?Q?ZfnczrSWHGgqpdU4Ooi0XXDTBkXD8FDVsXQguEmMIxHMi9LDKv3jSCW874Ym?= =?us-ascii?Q?w9EKhq23hoVhRujnuaRMGnI5DAU0E3S4tkzdMxXckKf3CShQ2CCUbni1jtqm?= =?us-ascii?Q?/uqHXQCtuRdYVR7/it3P1LJlcCCvo15FkR02/m2a/mD+cowOnfgtQcNskX4a?= =?us-ascii?Q?0l9YM6eLgM0Po5al+74b+Jy/PJb3QzMjYkutB8nKwgAkisRubVmyaCECv/KL?= =?us-ascii?Q?ybFgIr2QSBbyiK4ZhbFL/vT7SbNHaHYUZRgYAPI5SdCwAIkCqEaSSGC7Xo+m?= =?us-ascii?Q?uZrpb02qRtsJSjwFVazRnrqYTkpNosriWDwsJLxKQNLoPVSBPUARqCMJwz6E?= =?us-ascii?Q?s2+QHJhmcPsoDOIbVu9sAdMOdvaRvaRerJjQQ4yhn9G4Lj3tm7xrp7z7exE1?= =?us-ascii?Q?ilbypFnTBCWwUwFjtDqZiQMRYWy0oUyeKZLZd+Lkj0n0yT5HGFJhkwoxH5AO?= =?us-ascii?Q?pngwn9ez/AOMTQxbtSjaA5tg1Al7uuYRLIy3FOAs2JfIYSLQPxr6kbBdv8Jp?= =?us-ascii?Q?7yLKQAu0erjsHDwkCgnd3GMrtSoQ8YfeDA1yB/VbGWrN9RdFcGOEtUCYkune?= =?us-ascii?Q?TvdKp5Ceq+p0Ml8XRU4KrFpRoIas49Wf0s+VbdVerfzEHGvLrWeQ4rtJyljO?= =?us-ascii?Q?erb+b0I5NLqIs7X208A6E/26boYbXi+nUxLcBOkDNSQjsEfKUOc9r4W1UTzc?= =?us-ascii?Q?jAoPu/eBDJQUqNQnFkdakla1m1jMZTo3wnHiYUa7k4DIeBtH3G0b0g8yPGGO?= =?us-ascii?Q?2iyiJlL+V0YlYFHsaPUiqWVnRY7tAqubP7tfDaYdxBpYWhgO7JjhJipD5xCi?= =?us-ascii?Q?dYe37xUknPWJCTkACeW3LsT+tZoqzItWApu8w0uX7U/iAWZ+qZvGEMgqOVhQ?= =?us-ascii?Q?vO4P4ES//5jN1RKZgZ7IT/Kx1/iFjT9VYmUt5j9cxQHagYIrthtZ4ppPbS3A?= =?us-ascii?Q?xHKAChw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1627; 6:GJVbvy1cVAiopFN8PkS7mUOQv5GsC0wbAY7iWf1MhzD2m6xMoF51I99EGZDSUkJhq+/euaDZuV3KrPwM0w7rIKTBJPH789fOkzCfRhsx8UZCrogHPfSML4WxU1ZM0sl9gyTC/ui9+35dKJGn953myxsa4ZpDcNAQc9xSsOFi+mX4z4Fm5vo6erQx8KjhY6BCvi/5UbwcszRUivPbDCFTQfDGkpkqHhMW9JrGn2mzGbOGoas8q04UcNq5t6GP0k/sQaJf44SbroM/Ty5iCyODud99iztDHGFegjlVtSN28xpSSiUh7vkDMg7h77sksABI; 5:HHVXmcTEx6XHQ0rOQo6LZ6qUIN6TgfZTyvoe4TeiZJ5zBIsgd3V8nlXkWL9PP5ObcSD9BJuBG+GVKHMZoR5KuAJLbUwo1CTfywT5AOn9ybKORKVGD8tUZDhMPUYB6sIdDw2lv/8oz6BjM4xAoc3LKWp2dUKlBZyPJJbLiFdv7NzJ+9Azi9J/T2G3T/sopM8V; 24:+U0jYCvpu9UnpqlKqYO+kh2ZJp1imSrIdDT9OJnT2x8a5n9njkZEjyeoV15Tx8DeKmyR/RYfExO+S9vtwAH1dI6tDQi6W9CIdcY36HJ6Gyo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1627; 7:9W+H9RMoKKL1uhOKl3DXgmnxezyoBil1KdnWNtblajuPmQrshRgYtzK6elrv1mMCdgYZ1EIJkhrQyytTOekl4hE867BH3r+YanXpqDUNMYKWMG4R+eD4kRyCrksUx/3ZeSWKGoeP0+v7W/YueYRB7S50TdGH/eCOWt/I6/gLkmc3t3leDYWDWQt7vRK+hPWkE0KS6q4N0BS8ZAeWaGutcnMH0QeHEmIUTzksYjWgcVKkDn+VT7L5Y+poZcH+rT9GqIGJIX+kCK4u3zLSDeILQ9OFkpzXPG8YqGy33t8SywSmbwXbaTwlBT2Tq7TAjOOYmpZIPR5ywfq/SiNjJQygCKhYMWiLPfKt71OABgN6tyE= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2016 06:56:48.2904 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB1627 Cc: marex@denx.de, suresh.gupta@nxp.com Subject: [U-Boot] [PATCH v3] drivers: usb: fsl-dt-fixup: Fix the dt for multiple USB nodes in single traversal of device tree 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" For FSL USB node fixup, the dt is walked multiple times for fixing erratum and phy type. This patch walks the tree and fixes the node till no more USB nodes are left. Signed-off-by: Sriram Dash --- Depends on the following patch: https://patchwork.ozlabs.org/patch/682139/ Changes in v3: - Remove ENOSPC. - Create a table of USB erratum, to be used to fix dt. Changes in v2: - Modify patch description and title - Remove counting the dt nodes drivers/usb/common/fsl-dt-fixup.c | 209 ++++++++++++++++++++------------------ 1 file changed, 109 insertions(+), 100 deletions(-) diff --git a/drivers/usb/common/fsl-dt-fixup.c b/drivers/usb/common/fsl-dt-fixup.c index 63a24f7..addeb8c 100644 --- a/drivers/usb/common/fsl-dt-fixup.c +++ b/drivers/usb/common/fsl-dt-fixup.c @@ -16,10 +16,6 @@ #include #include -#ifndef CONFIG_USB_MAX_CONTROLLER_COUNT -#define CONFIG_USB_MAX_CONTROLLER_COUNT 1 -#endif - /* USB Controllers */ #define FSL_USB2_MPH "fsl-usb2-mph" #define FSL_USB2_DR "fsl-usb2-dr" @@ -33,6 +29,52 @@ static const char * const compat_usb_fsl[] = { NULL }; +enum usb_node_type { + USB2_MPH = 0, + USB2_DR, + SNPS, + USB_COMPAT_END +}; + +enum fdt_fsl_usb_erratum { + A006261, + A007075, + A007792, + A005697, + A008751, + FSL_USB_ERRATUM_END +}; + +struct fsl_dt_usb_erratum { + bool (*has_fsl_usb_erratum)(void); + char *dt_set_prop; +}; + +struct fsl_dt_usb_erratum + erratum_tlb[USB_COMPAT_END][FSL_USB_ERRATUM_END] = { +/*MPH Erratum */ + [USB2_MPH][A006261] = {&has_erratum_a006261, + "fsl,usb-erratum-a006261"}, + [USB2_MPH][A007075] = {&has_erratum_a007075, + "fsl,usb-erratum-a007075"}, + [USB2_MPH][A007792] = {&has_erratum_a007792, + "fsl,usb-erratum-a007792"}, + [USB2_MPH][A005697] = {&has_erratum_a005697, + "fsl,usb-erratum-a005697"}, +/*DR Erratum */ + [USB2_DR][A006261] = {&has_erratum_a006261, + "fsl,usb-erratum-a006261"}, + [USB2_DR][A007075] = {&has_erratum_a007075, + "fsl,usb-erratum-a007075"}, + [USB2_DR][A007792] = {&has_erratum_a007792, + "fsl,usb-erratum-a007792"}, + [USB2_DR][A005697] = {&has_erratum_a005697, + "fsl,usb-erratum-a005697"}, +/*SNPS Erratum */ + [SNPS][A008751] = {&has_erratum_a008751, + "fsl,usb-erratum-a008751"}, +}; + static int fdt_usb_get_node_type(void *blob, int start_offset, int *node_offset, const char **node_type) { @@ -54,25 +96,19 @@ static int fdt_usb_get_node_type(void *blob, int start_offset, } static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode, - const char *phy_type, int start_offset) + const char *phy_type, int node_offset, + const char **node_type) { const char *prop_mode = "dr_mode"; const char *prop_type = "phy_type"; - const char *node_type = NULL; - int node_offset; - int err; - - err = fdt_usb_get_node_type(blob, start_offset, - &node_offset, &node_type); - if (err < 0) - return err; + int err = 0; if (mode) { err = fdt_setprop(blob, node_offset, prop_mode, mode, strlen(mode) + 1); if (err < 0) printf("WARNING: could not set %s for %s: %s.\n", - prop_mode, node_type, fdt_strerror(err)); + prop_mode, *node_type, fdt_strerror(err)); } if (phy_type) { @@ -80,79 +116,77 @@ static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode, strlen(phy_type) + 1); if (err < 0) printf("WARNING: could not set %s for %s: %s.\n", - prop_type, node_type, fdt_strerror(err)); + prop_type, *node_type, fdt_strerror(err)); } - return node_offset; + return err; } -static int fsl_fdt_fixup_usb_erratum(void *blob, const char *prop_erratum, - const char *controller_type, - int start_offset) +static int fsl_fdt_fixup_usb_erratum(int node_offset, void *blob, + int dt_node_type) { - int node_offset, err; - const char *node_type = NULL; - const char *node_name = NULL; + int i, j, ret = -1; + for (i = dt_node_type; i < USB_COMPAT_END; i++) { + for (j = 0; j < FSL_USB_ERRATUM_END; j++) { + if (erratum_tlb[i][j].has_fsl_usb_erratum != NULL) { + if (!erratum_tlb[i][j].has_fsl_usb_erratum()) + continue; + ret = fdt_setprop(blob, node_offset, + erratum_tlb[i][j].dt_set_prop, + NULL, 0); + if (ret < 0) { + printf("ERROR: could not set %s: %s.\n", + erratum_tlb[i][j].dt_set_prop, + fdt_strerror(ret)); + return ret; + } + } + } + } + return ret; +} - err = fdt_usb_get_node_type(blob, start_offset, - &node_offset, &node_type); - if (err < 0) - return err; +static int fsl_fdt_fixup_erratum(int node_offset, void *blob, + const char **node_type) +{ + int dt_node_type; + int ret; - if (!strcmp(node_type, FSL_USB2_MPH) || !strcmp(node_type, FSL_USB2_DR)) - node_name = CHIPIDEA_USB2; + if (!strcmp(*node_type, FSL_USB2_MPH)) + dt_node_type = USB2_MPH; + else if (!strcmp(*node_type, FSL_USB2_DR)) + dt_node_type = USB2_DR; + else if (!strcmp(*node_type, SNPS_DWC3)) + dt_node_type = SNPS; else - node_name = node_type; - if (strcmp(node_name, controller_type)) - return err; - - err = fdt_setprop(blob, node_offset, prop_erratum, NULL, 0); - if (err < 0) { - printf("ERROR: could not set %s for %s: %s.\n", - prop_erratum, node_type, fdt_strerror(err)); - } + return -ENOENT; - return node_offset; -} + ret = fsl_fdt_fixup_usb_erratum(node_offset, blob, dt_node_type); -static int fsl_fdt_fixup_erratum(int *usb_erratum_off, void *blob, - const char *controller_type, char *str, - bool (*has_erratum)(void)) -{ - char buf[32] = {0}; - - snprintf(buf, sizeof(buf), "fsl,usb-erratum-%s", str); - if (!has_erratum()) - return -EINVAL; - *usb_erratum_off = fsl_fdt_fixup_usb_erratum(blob, buf, controller_type, - *usb_erratum_off); - if (*usb_erratum_off < 0) - return -ENOSPC; - debug("Adding USB erratum %s\n", str); - return 0; + return ret; } void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd) { static const char * const modes[] = { "host", "peripheral", "otg" }; static const char * const phys[] = { "ulpi", "utmi", "utmi_dual" }; - int usb_erratum_a006261_off = -1; - int usb_erratum_a007075_off = -1; - int usb_erratum_a007792_off = -1; - int usb_erratum_a005697_off = -1; - int usb_erratum_a008751_off = -1; - int usb_mode_off = -1; - int usb_phy_off = -1; + const char *node_type = NULL; + int node_offset = -1; char str[5]; - int i, j; + int i = 1, j; int ret; - for (i = 1; i <= CONFIG_USB_MAX_CONTROLLER_COUNT; i++) { + do { const char *dr_mode_type = NULL; const char *dr_phy_type = NULL; int mode_idx = -1, phy_idx = -1; - snprintf(str, 5, "%s%d", "usb", i); + ret = fdt_usb_get_node_type(blob, node_offset, + &node_offset, &node_type); + if (ret < 0) + return; + + snprintf(str, 5, "%s%d", "usb", i++); if (hwconfig(str)) { for (j = 0; j < ARRAY_SIZE(modes); j++) { if (hwconfig_subarg_cmp(str, "dr_mode", @@ -185,45 +219,20 @@ void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd) if (has_dual_phy()) dr_phy_type = phys[2]; - usb_mode_off = fdt_fixup_usb_mode_phy_type(blob, - dr_mode_type, NULL, - usb_mode_off); - - if (usb_mode_off < 0) + ret = fdt_fixup_usb_mode_phy_type(blob, dr_mode_type, NULL, + node_offset, &node_type); + if (ret < 0) return; - usb_phy_off = fdt_fixup_usb_mode_phy_type(blob, - NULL, dr_phy_type, - usb_phy_off); - - if (usb_phy_off < 0) + ret = fdt_fixup_usb_mode_phy_type(blob, NULL, dr_phy_type, + node_offset, &node_type); + if (ret < 0) return; - ret = fsl_fdt_fixup_erratum(&usb_erratum_a006261_off, blob, - CHIPIDEA_USB2, "a006261", - has_erratum_a006261); - if (ret == -ENOSPC) - return; - ret = fsl_fdt_fixup_erratum(&usb_erratum_a007075_off, blob, - CHIPIDEA_USB2, "a007075", - has_erratum_a007075); - if (ret == -ENOSPC) - return; - ret = fsl_fdt_fixup_erratum(&usb_erratum_a007792_off, blob, - CHIPIDEA_USB2, "a007792", - has_erratum_a007792); - if (ret == -ENOSPC) - return; - ret = fsl_fdt_fixup_erratum(&usb_erratum_a005697_off, blob, - CHIPIDEA_USB2, "a005697", - has_erratum_a005697); - if (ret == -ENOSPC) - return; - ret = fsl_fdt_fixup_erratum(&usb_erratum_a008751_off, blob, - SNPS_DWC3, "a008751", - has_erratum_a008751); - if (ret == -ENOSPC) - return; + ret = fsl_fdt_fixup_erratum(node_offset, blob, &node_type); + if (ret < 0) + printf("WARNING: USB dt fixup fail , %d\n", + fdt_strerror(ret)); - } + } while (node_offset > 0); }