From patchwork Wed Feb 15 15:13:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ashish Kumar X-Patchwork-Id: 728262 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 3vNjhv3w2kz9rxm for ; Thu, 16 Feb 2017 02:22:55 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 0472B4ACF9; Wed, 15 Feb 2017 16:22:54 +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 aan2Bl0IGn_k; Wed, 15 Feb 2017 16:22:53 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 8371D4AC0C; Wed, 15 Feb 2017 16:22:53 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id EDCE64AC0C for ; Wed, 15 Feb 2017 16:22:49 +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 DARwCd6VzphA for ; Wed, 15 Feb 2017 16:22:49 +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 NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0040.outbound.protection.outlook.com [104.47.36.40]) by theia.denx.de (Postfix) with ESMTPS id 22C1A4AAA7 for ; Wed, 15 Feb 2017 16:22:45 +0100 (CET) Received: from CY4PR03CA0017.namprd03.prod.outlook.com (10.168.162.27) by BN6PR03MB2946.namprd03.prod.outlook.com (10.175.126.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.16; Wed, 15 Feb 2017 15:07:36 +0000 Received: from BY2FFO11OLC011.protection.gbl (2a01:111:f400:7c0c::177) by CY4PR03CA0017.outlook.office365.com (2603:10b6:903:33::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.16 via Frontend Transport; Wed, 15 Feb 2017 15:07:36 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.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: Fail (protection.outlook.com: domain of nxp.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 BY2FFO11OLC011.mail.protection.outlook.com (10.1.15.22) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.904.16 via Frontend Transport; Wed, 15 Feb 2017 15:07:36 +0000 Received: from SIGKILL.ap.freescale.net (SIGKILL.ap.freescale.net [10.232.132.32]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v1FF7WJ7028601; Wed, 15 Feb 2017 08:07:33 -0700 From: Ashish Kumar To: Date: Wed, 15 Feb 2017 20:43:54 +0530 Message-ID: <1487171634-26454-1-git-send-email-Ashish.Kumar@nxp.com> X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131316448565818430; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(7916002)(39380400002)(39840400002)(39850400002)(39450400003)(39860400002)(39400400002)(39410400002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(104016004)(8936002)(626004)(81156014)(5003940100001)(8676002)(2906002)(86362001)(97736004)(68736007)(92566002)(5660300001)(54906002)(81166006)(8656002)(4326007)(6666003)(77096006)(575784001)(6916009)(85426001)(2351001)(36756003)(50226002)(50986999)(53936002)(47776003)(189998001)(105606002)(106466001)(110136004)(305945005)(50466002)(356003)(48376002)(38730400002)(389900002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR03MB2946; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC011; 1:WiSwzgi0le+MnMB2GsHhq5L9aHpSxjGckyiNG4X4TJBUpT/PgSHj/JoNK63mBz581b1/w6SqEWWxjlhcnn+3D8chc47ewh+FnwZknKbE9866DEslkKPGzdmdS/51RT5fzI/uDynbJDudcVok5QdJy5Z0NioynQ0t0ZT+IBkojNsqgOY0hkftlsCoqFUG1W5MlvmfsHYYn6g8bvqGIEwzo1kx9KDz36eM0H0yd87DTlxg+Y3TuDen8sxtczm8WjQk+YP45+Q44VnQ4MXllfF55Bnjdg3VAScim++w+6iHPBFr2gI9pS8MUdYCNP5rox/XM+/5CkN6scKd+pxbB/aQgQzHmEUPSxM6DM4ny44ufw9kjKzZCgGmSauNwXCOmeX5i9GMca4s7fH6+5g/VCHWQp/rZ4ypDJzFZAAkYtoLDxH+8byniPzzFxzuMGkoa93gid5d22WbXMSr44inXzdkS5/Uxe1RqZobjRSVIDJL8rdVKNuROdgKp+VpYhnYLfLHWEYvMx2R5DE/EACsoGfk9AOaqYBKrMvi70FW+4bQnROP1fBpxSOSLcHlAiAnmKScEOU4pzE2X+RVqqSkMpY0VIIZfbIkR4Z8dCGsgKCtx2muuwJtnAPhq7cySnA9AwEE08w/ppHqb0v8R6rRfocVoYUeRiQxNZmY5M6ZDeWwIdDSJvV7j5E3q8ivI+JXMoitSofCHuR0koDJ7MbeqffAwQ== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 396914b2-0dcb-4112-12e2-08d455b46063 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN6PR03MB2946; X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2946; 3:9REIZWcD4kG5+mLZo2NNgw8YOCtNKjFwa1/bCs51x3HrCuunpE2rQPveizGd14LgWipvK/wCMkO0LK4eUVDv/u5WBh3ujb5GLTyxo+1efAK56xAnar83r6qHg1kZjesSU1T1MGO5EVn+6q9oc6VnMBjFrfVpJuKBBWnM28+fAjK/tSsTFITtWZNRkkOfgYof8l4gVZcv43cgUc5B9s3xaDGC/oJpqDSGUnZfYLdjeSKi+yn6QjX9OMU/j/JMj+E9f+USnKbvkiUC7+D5bLzVggwvs3pk2VNSd6JMZA3+lIBsH40S8q4n013wgp/LI0YNiUY/vE0bUBW9EO72Xqsg0STLTwdBhT64PzxWONVSU3GWfIezhwVGFFLZm5FD4/fV; 25:HZN9ONKhiE4MAfS3pqs8rtWLIsMh6C3261d6dl6SwJFIeZQHx+LvAoxuhF1yHwfZdJFvpAQ07BYUH/HyqFIvp/WYJeYXTF+EgpbQri5qsOpiOFBjWoVPwdBtyeuJtqMW8MHC2FUmHpJYTsI6NYLuC/04NL3gb2832G0PvqpduzoVqLoxQCZ6ke84IiL/muqhERiqnQDdSYZtAYhAj6g6LMFUJApbjogfDirnPJKiMjnSaV0iYBVP97+0otiRfdwsMzFA32Pqr1LphssVOryn9lpJ6lLgaJ/ogBUrp0AM26j7orLFj6FaLdakmlLkZ6vJlaNglYjwNWiu8IDMD8MuAWEYHaEKIz4ssATN7Zal8MNq3tuZecv2rCO9iT+DYJK1oBYDkBu8u5hNPvOGsKeWhx27ByGji4Qg2lNUmr7fMJ2Ipuo2GTYaFUuIGT6ZBTqXGOkb6YB+SmgOZ2yNJ5boEw== X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2946; 31:/3UlCotBMKBAowvIRHQs6tTUufup8/YP2g52yD5wmzxKz/NnkXzCEztzqi54S33uXyMN4HBtKzWAeJd82CMLI/CtkvZHZRVwihId6UTV7+mLzbMwf6q4euMxOFRdoBMFE9zv97ORTY+MMlArcD7yhGHxmfznIQV+ugS7uJCMyBDegnBn8Itub12z5xecq7RozPwALII3ERixwGHET/2RqFSYK+8CyQ3BJrByvveLhbnyBL70bB1JWN/cdhGotU0BoHXb8VCCDg64gEnN82W2Pg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192374486261705)(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(13023025)(13015025)(13017025)(5005006)(8121501046)(13018025)(13024025)(3002001)(10201501046)(6055026)(6096035)(20161123563025)(20161123561025)(20161123556025)(20161123559025)(20161123565025); SRVR:BN6PR03MB2946; BCL:0; PCL:0; RULEID:(400006); SRVR:BN6PR03MB2946; X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2946; 4:ACrREVbEVuP/Oig1/vMHRpuDdZUPzMrql6CWM2RVWkQTkiRgg4ipgQhoEhFJztxeo7MEvO0Bb3aYN+BJzc9vij8BAW5XF8o4IBVPDgKKLVbM93X4Ck2D03r9pAziajWDn+vL7WfOposwXKpWEtiIWIcKFSZkptt5ugGKaCb5FDgyaw39e7S8O5eoRQ/srXs8t3Fg0W1TOxzw1UYm4L489TtFXCddgPIba2ofMUQnRUAS4s59BdQV7cnru3e0JFI/RGnV4hzeYHJ2BY9zJ3ZxaRIqnPVAMSSbw44syYSf+tg29N8lm9DJKlnPF6Ue+m7yELF5fRKVJ4h4at1SqpSP5c6bxLSeVKzaDh2BY8LeAqjw+Qw2qbjfmKz256tsYh25Ylg6UxEDO/yMr4Ck1SbocLV2I9AG8bOoFFt1e8jCFvVSLNx1rE7rnwe1JBusRNaYLU7snDs14oSXD6Cbt2mahfWJIycl64H7eN4bceAc7q/NVxpzgbB8C2/SL10LXgdky8iO/xwmrIzHC1VwVizuNZj6lF1I9I0ruFRtybFVgbeWgqjwcj6vhZj1Bxpiocnqdn9oizhW/PKCEoh19CyTRsNz91kPDaPj+b523jlmY7mRFot9VWaqqECgbV3TYVA4/PorHR9Bhf+KgrZLq8ab/X/qRsf5jZErrUe5ymzDP3PW7XWtJSDKUn/XrzGJbZq4Tgc8ozccsZKZyLJtEXQpBpuGaPgEkT+p7AEYYnOpOuV0+DTNvRFf9TEv2iWbdfLZH67O6S0KAylfgNneva1C6w== X-Forefront-PRVS: 021975AE46 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN6PR03MB2946; 23:gBkcy6n5Xl4hbzgV+tV4lOjA2wmWP4B1F13k1e79T?= =?us-ascii?Q?Cl30PyRtYw6nrTWv3qx5c/1VlCc47j3AWQ8YpCA4H1KTYa6ILnMUZNj37GKq?= =?us-ascii?Q?YjbjVC8nwQiu6MyvO8TvGVOCcVASMnm+zudKwDNncKy5H09dgn65OGHg8631?= =?us-ascii?Q?ZFPdM4DWW7FB0xAKBC8TAZFLI+BVIBxAgaHJPaGd3VFvDfOqBjJ3maC46oAg?= =?us-ascii?Q?ESQIYRDy2ue+ME/HVXKDTjykxgrDsF263bet9CRJJqkT7m3iOFjI6sDoFTCz?= =?us-ascii?Q?ysyM6ZxwTMeWm5BWoiDrPReiakAo7BN5JpEP2NatZN4mD3UDZdR6wntaIeg+?= =?us-ascii?Q?DiuzUAICKH884DBwyyrf6jAvOzsqKvXlQmZWTMnT3pidcUOkbk181SBHKnja?= =?us-ascii?Q?et9Hlvl4xLStUAJMsmjkkq2p7j5wYzJ/P9OYRD9AhEC21AUShN5NsYOGQaza?= =?us-ascii?Q?G4TmK/OzkcBh06luL1RxtvVQeUJDt9yPDC4qNCmAUeDNp3GovbhxRZ2dDPiC?= =?us-ascii?Q?AnvcJDokNXjQ8VCRMd1XW8m/kAnFcf5ivdEuUwuKkA7Z602ZDSIHHV7YzAPz?= =?us-ascii?Q?OU6EKWkzdt2Ix+tAPuR2gPkpEQjhq2d7lJnpfXxrsT1+4HLGxefMK4vI3J0K?= =?us-ascii?Q?0OCywJunmTEtH/86ko2mNKsDsduGzhGwhRILYUyskTOkz5uOijdXezLY1aVE?= =?us-ascii?Q?CgQnUWzmUbqD4VED80VF2cjbV/UuWcO/xEBfkknb8qnZ+jMHhEYCac7TU9gA?= =?us-ascii?Q?yDhrWsnY26lykBsEs3Ov2hpiQeS7FjGo+cvwPpAEIBdUh+sSxsSDPatu+vJo?= =?us-ascii?Q?q6cXT45huQZujxNjnDThksAtMIOlkx93ocl9v/xU6rC95kkFuGpz8fHAL4Yj?= =?us-ascii?Q?RclV/r7YlpCfKO/h/DTgkr0R62y/zmQ9RZMW27+ZPJ6pZ+KlU69RnqJuTl1h?= =?us-ascii?Q?yWJZ+WidqX3YLWvkqAOLKTRgaWi/yrbK4Bx7BN2dvCcawqgtwDqCqjxNKino?= =?us-ascii?Q?c2HJbYcgyl2gLU4WBcEEjgZqNu4MUJEqurb3gzteSyKOU4OBRQBJQSNMPkic?= =?us-ascii?Q?WaUDmxXJtwiTxDc/Dz83r9KIjOXfIR/NdNKOWfF9uqCCLzTnjbeyk8XRoMeJ?= =?us-ascii?Q?0HZoMPqcJjKOYV6/STM7lsuICanIyfaQS8fHrDYK7Hnku9qWCiiiayRkxJrG?= =?us-ascii?Q?DvcZA12bfUdYnOq4xic9k16h2D+UHdilAt54P7O75hpdvLcx+7gA3GB6SuEJ?= =?us-ascii?Q?z1QWCtBfrZngtkjwsq8BEGPQUAqBK3h+ySUT11yWm3Tb2Uk63AxYlfdC7Dtj?= =?us-ascii?B?Zz09?= X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2946; 6:NjlKHDgc7gcQDnY3ccUtip6u4L0VlHMMIoN29g6Pb3cz+1MWQXZgw+81xqPhGsLdgYPtk88D8ofKt2QjOG7vkBYYuiI1husZRlxTnMKFJ6PDw5kgcmwuhXopbNmImjzliP2cCbFvl2OPNnb+9rbii5sZJbwi9+PIVuvNL4H3iMPVX6NZ5PID3+h1u62ax5CSK2G9Wo+c5Bx4jcl1xNVM5VkT/3owR2wd1s8EyTSxEzq5tqeodwInvTQlRkDMj02mYsuMJFkYyPfK0kj47hejG8Cpc5R0IDX/C1yeMXAP0+m5IeWOuj1NlHDh1RHZg0xCdhBwVpveNeWdIxG8ZnQ78d2NFvp7H/agSXXqRNMih88TQtM566pMxVilEvf6tksc99f3+jBKCX3TGENwwqLqvbawAOeAq98ieZxLeLOTrqo=; 5:l+HRdmK0eiZN7QgVoPgoXK6jDrlNwGVW0H35UVsdy5VPebct55bQOuNo4HE86wenoxrf5PHtQ/6SP11dLMJmolmesa1vKWg52Af5oPtYlK8H8ec6zX7/UX0cTDqrCSREPmnqVDv0jPk+tqGafX0LaO1WSoSJND/qOKVp8Nh7wYChXwNBCIpWxmbPPWwVpxgd; 24:S1lPM8bKq4rLncvHgMvaHxipQg+sTOWYBwD8xzP1Dqlc0m57uqK2RsJl6ciIZVl4RX+L8RxawPmWhHQpxfzjEzHzDLsy+i6hiJzAYaejBAU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2946; 7:ysvIlQoVIsqBgnAGbMrqdwBl2SaTIwZO8dtB/LOm3LAsDeqKOaskfPwtUxUuzJXgf75zhAiIFsIB6TfeIBJeMbGeGI2NQEMmaS0itrD5e2Y9+GakKkqAuncilddGRS8+x82pmRRvHSplSqvu4p5mz0P/tA9FXGKe9PK7q9KLLjvgVCPNbkJqRScHOJv4VQwD/NAJWna7dfJrCywfoAUqT0kImVzynXs5UppEgHgrAJo8mvTpWiC/4hpsIOk/nnvrYbMDCLTKaTBWDzDgdc82M6jlM1yk1SyUHMJySMldBEBFM3ognkd5yBFmxbU+Yt4vUr0qylbNMgUDdZIRdaufUr2ZbvpRIVBAv3V1eVqqcpvOFUjJUWvq0cATL1LvOK40C8MBlZLjYRG1woYhnJsfGdrZM+LPtRTDzfSOXddZpbj6HHOPuTqPtV6cxX7wZp+BMTp5/wqE0/iLjLNl93ERQxmlHkxa5gcb0qV5FSA3yPBjEh3XX9H4PtTxShtHth4MvTkJJfl+GD+lybx15x4bCA== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Feb 2017 15:07:36.3790 (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: BN6PR03MB2946 Cc: Alison Wang Subject: [U-Boot] [PATCH 1/3] armv8: ls1088a: Add NXP LS1088A SoC support 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" The QorIQ LS1088A processor is built on the Layerscape architecture combining eight ARM A53 processor cores with advanced, high-performance datapath acceleration and networks, peripheral interfaces required for networking, wireless infrastructure, and general-purpose embedded applications. LS1088A is compliant to the Layerscape Chassis Generation 3. Features summary: - Eight 32-bit / 64-bit ARM v8 Cortex-A53 CPUs - Cores are in 2 cluster of 4-cores each - Cache coherent interconnect (CCI-400) - One 64-bit DDR4 SDRAM memory controller with ECC - Data path acceleration architecture 2.0 (DPAA2) - Ethernet interfaces: SGMIIs, RGMIIs, QSGMIIs, XFIs - QSPI, IFC, 3 PCIe, 1 SATA, 2 USB, 1 SDXC, 2 DUARTs etc Signed-off-by: Alison Wang Signed-off-by: Prabhakar Kushwaha Signed-off-by: Ashish Kumar --- arch/arm/cpu/armv8/fsl-layerscape/Makefile | 4 + .../cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c | 10 ++ arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c | 124 +++++++++++++++++++++ arch/arm/include/asm/arch-fsl-layerscape/config.h | 46 ++++++++ arch/arm/include/asm/arch-fsl-layerscape/cpu.h | 4 + .../include/asm/arch-fsl-layerscape/fsl_serdes.h | 1 + .../include/asm/arch-fsl-layerscape/immap_lsch3.h | 11 ++ arch/arm/include/asm/arch-fsl-layerscape/soc.h | 4 + drivers/net/ldpaa_eth/Makefile | 1 + drivers/net/ldpaa_eth/ls1088a.c | 87 +++++++++++++++ 10 files changed, 292 insertions(+) create mode 100644 arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c create mode 100644 drivers/net/ldpaa_eth/ls1088a.c diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Makefile b/arch/arm/cpu/armv8/fsl-layerscape/Makefile index c9ab93e..cfad154 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/Makefile +++ b/arch/arm/cpu/armv8/fsl-layerscape/Makefile @@ -38,3 +38,7 @@ endif ifneq ($(CONFIG_ARCH_LS1046A),) obj-$(CONFIG_SYS_HAS_SERDES) += ls1046a_serdes.o endif + +ifneq ($(CONFIG_ARCH_LS1088A),) +obj-$(CONFIG_SYS_HAS_SERDES) += ls1088a_serdes.o +endif diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c index 955e0b7..d7e2d3c 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c @@ -28,6 +28,11 @@ __weak void wriop_init_dpmac_qsgmii(int sd, int lane_prtcl) return; } +__weak int serdes_get_number(int serdes, int cfg) +{ + return cfg; +} + int is_serdes_configured(enum srds_prtcl device) { int ret = 0; @@ -73,6 +78,9 @@ int serdes_get_first_lane(u32 sd, enum srds_prtcl device) printf("invalid SerDes%d\n", sd); break; } + + cfg = serdes_get_number(sd, cfg); + /* Is serdes enabled at all? */ if (cfg == 0) return -ENODEV; @@ -99,6 +107,8 @@ void serdes_init(u32 sd, u32 sd_addr, u32 rcwsr, u32 sd_prctl_mask, cfg = gur_in32(&gur->rcwsr[rcwsr - 1]) & sd_prctl_mask; cfg >>= sd_prctl_shift; + + cfg = serdes_get_number(sd, cfg); printf("Using SERDES%d Protocol: %d (0x%x)\n", sd + 1, cfg, cfg); if (!is_serdes_prtcl_valid(sd, cfg)) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c b/arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c new file mode 100644 index 0000000..9f89bd0 --- /dev/null +++ b/arch/arm/cpu/armv8/fsl-layerscape/ls1088a_serdes.c @@ -0,0 +1,124 @@ +/* + * Copyright 2017 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include + +struct serdes_config { + u8 ip_protocol; + u8 lanes[SRDS_MAX_LANES]; + u8 rcw_lanes[SRDS_MAX_LANES]; +}; + +static struct serdes_config serdes1_cfg_tbl[] = { + /* SerDes 1 */ + {0x12, {SGMII3, SGMII7, SGMII1, SGMII2 }, {3, 3, 3, 3 } }, + {0x15, {SGMII3, SGMII7, XFI1, XFI2 }, {3, 3, 1, 1 } }, + {0x16, {SGMII3, SGMII7, SGMII1, XFI2 }, {3, 3, 3, 1 } }, + {0x17, {SGMII3, SGMII7, SGMII1, SGMII2 }, {3, 3, 3, 2 } }, + {0x18, {SGMII3, SGMII7, SGMII1, SGMII2 }, {3, 3, 2, 2 } }, + {0x19, {SGMII3, QSGMII_B, XFI1, XFI2}, {3, 4, 1, 1 } }, + {0x1A, {SGMII3, QSGMII_B, SGMII1, XFI2 }, {3, 4, 3, 1 } }, + {0x1B, {SGMII3, QSGMII_B, SGMII1, SGMII2 }, {3, 4, 3, 2 } }, + {0x1C, {SGMII3, QSGMII_B, SGMII1, SGMII2 }, {3, 4, 2, 2 } }, + {0x1D, {QSGMII_A, QSGMII_B, XFI1, XFI2 }, {4, 4, 1, 1 } }, + {0x1E, {QSGMII_A, QSGMII_B, SGMII1, XFI2 }, {4, 4, 3, 1 } }, + {0x1F, {QSGMII_A, QSGMII_B, SGMII1, SGMII2 }, {4, 4, 3, 2 } }, + {0x20, {QSGMII_A, QSGMII_B, SGMII1, SGMII2 }, {4, 4, 2, 2 } }, + {0x35, {SGMII3, QSGMII_B, SGMII1, SGMII2 }, {3, 4, 3, 3 } }, + {0x36, {QSGMII_A, QSGMII_B, SGMII1, SGMII2 }, {4, 4, 3, 3 } }, + {} +}; +static struct serdes_config serdes2_cfg_tbl[] = { + /* SerDes 2 */ + {0x0C, {PCIE1, PCIE1, PCIE1, PCIE1 }, {8, 8, 8, 8 } }, + {0x0D, {PCIE1, PCIE2, PCIE3, SATA1 }, {5, 5, 5, 9 } }, + {0x0E, {PCIE1, PCIE1, PCIE2, SATA1 }, {7, 7, 6, 9 } }, + {0x13, {PCIE1, PCIE1, PCIE3, PCIE3 }, {7, 7, 7, 7 } }, + {0x14, {PCIE1, PCIE2, PCIE3, PCIE3 }, {5, 5, 7, 7 } }, + {} +}; + +static struct serdes_config *serdes_cfg_tbl[] = { + serdes1_cfg_tbl, + serdes2_cfg_tbl, +}; + +int serdes_get_number(int serdes, int cfg) +{ + struct serdes_config *ptr; + int i, j, index, lnk; + int is_found, max_lane = SRDS_MAX_LANES; + + if (serdes >= ARRAY_SIZE(serdes_cfg_tbl)) + return 0; + + ptr = serdes_cfg_tbl[serdes]; + + while (ptr->ip_protocol) { + is_found = 1; + for (i = 0, j = max_lane - 1; i < max_lane; i++, j--) { + lnk = cfg & (0xf << 4 * i); + lnk = lnk >> (4 * i); + + index = (serdes == FSL_SRDS_1) ? j : i; + + if (ptr->rcw_lanes[index] == lnk && is_found) + is_found = 1; + else + is_found = 0; + } + + if (is_found) + return ptr->ip_protocol; + ptr++; + } + + return 0; +} + +enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane) +{ + struct serdes_config *ptr; + + if (serdes >= ARRAY_SIZE(serdes_cfg_tbl)) + return 0; + + ptr = serdes_cfg_tbl[serdes]; + while (ptr->ip_protocol) { + if (ptr->ip_protocol == cfg) + return ptr->lanes[lane]; + ptr++; + } + + return 0; +} + +int is_serdes_prtcl_valid(int serdes, u32 prtcl) +{ + int i; + struct serdes_config *ptr; + + if (serdes >= ARRAY_SIZE(serdes_cfg_tbl)) + return 0; + + ptr = serdes_cfg_tbl[serdes]; + while (ptr->ip_protocol) { + if (ptr->ip_protocol == prtcl) + break; + ptr++; + } + + if (!ptr->ip_protocol) + return 0; + + for (i = 0; i < SRDS_MAX_LANES; i++) { + if (ptr->lanes[i] != NONE) + return 1; + } + + return 0; +} diff --git a/arch/arm/include/asm/arch-fsl-layerscape/config.h b/arch/arm/include/asm/arch-fsl-layerscape/config.h index 83f5501..3aed123 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/config.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/config.h @@ -219,6 +219,52 @@ #define CONFIG_SYS_FSL_MAX_NUM_OF_SEC 1 +#elif defined(CONFIG_ARCH_LS1088A) +#define CONFIG_MAX_CPUS 8 +#define CONFIG_SYS_FSL_NUM_CC_PLLS 3 +#define CONFIG_SYS_FSL_IFC_BANK_COUNT 8 +#define CONFIG_NUM_DDR_CONTROLLERS 1 +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS { 1, 1 } +#define CONFIG_SYS_FSL_PLATFORM_CLK_RATIO 1 +#define CONFIG_GICV3 +#define CONFIG_FSL_TZPC_BP147 +#define CONFIG_FSL_TZASC_400 +#define CONFIG_FSL_TZASC_1 + +#define SRDS_MAX_LANES 4 +#define CONFIG_SYS_FSL_SRDS_1 +#define CONFIG_SYS_FSL_SRDS_2 + +/* DDR */ +#define CONFIG_SYS_FSL_DDR_LE +#define CONFIG_SYS_LS2_DDR_BLOCK1_SIZE ((phys_size_t)2 << 30) +#define CONFIG_MAX_MEM_MAPPED CONFIG_SYS_LS2_DDR_BLOCK1_SIZE + +#define CONFIG_SYS_FSL_CCSR_GUR_LE +#define CONFIG_SYS_FSL_CCSR_SCFG_LE +#define CONFIG_SYS_FSL_ESDHC_LE +#define CONFIG_SYS_FSL_IFC_LE +#define CONFIG_SYS_FSL_PEX_LUT_LE + +#define CONFIG_SYS_MEMAC_LITTLE_ENDIAN + +/* SFP */ +#define CONFIG_SYS_FSL_SFP_VER_3_4 +#define CONFIG_SYS_FSL_SFP_LE +#define CONFIG_SYS_FSL_SRK_LE + +/* SEC */ +#define CONFIG_SYS_FSL_SEC_LE +#define CONFIG_SYS_FSL_SEC_COMPAT 5 + +/* Security Monitor */ +#define CONFIG_SYS_FSL_SEC_MON_LE + +/* Secure Boot */ +#define CONFIG_ESBC_HDR_LS + +/* DCFG - GUR */ +#define CONFIG_SYS_FSL_CCSR_GUR_LE #else #error SoC not defined #endif diff --git a/arch/arm/include/asm/arch-fsl-layerscape/cpu.h b/arch/arm/include/asm/arch-fsl-layerscape/cpu.h index 4ea4aea..104a5b0 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/cpu.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/cpu.h @@ -21,6 +21,10 @@ static struct cpu_type cpu_type_list[] = { CPU_TYPE_ENTRY(LS1026A, LS1026A, 2), CPU_TYPE_ENTRY(LS2040A, LS2040A, 4), CPU_TYPE_ENTRY(LS1012A, LS1012A, 1), + CPU_TYPE_ENTRY(LS1088A, LS1088A, 8), + CPU_TYPE_ENTRY(LS1084A, LS1084A, 8), + CPU_TYPE_ENTRY(LS1048A, LS1048A, 4), + CPU_TYPE_ENTRY(LS1044A, LS1048A, 4), }; #ifndef CONFIG_SYS_DCACHE_OFF diff --git a/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h b/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h index 70181c5..8e18246 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h @@ -158,6 +158,7 @@ void fsl_serdes_init(void); int serdes_get_first_lane(u32 sd, enum srds_prtcl device); enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane); int is_serdes_prtcl_valid(int serdes, u32 prtcl); +int serdes_get_number(int serdes, int cfg); #ifdef CONFIG_FSL_LSCH2 const char *serdes_clock_to_string(u32 clock); diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h index 04add3b..71dd7b5 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h @@ -245,6 +245,17 @@ struct ccsr_gur { #define FSL_CHASSIS3_SRDS2_PRTCL_SHIFT FSL_CHASSIS3_RCWSR28_SRDS2_PRTCL_SHIFT #define FSL_CHASSIS3_SRDS1_REGSR 29 #define FSL_CHASSIS3_SRDS2_REGSR 29 +#elif defined(CONFIG_ARCH_LS1088A) +#define FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_MASK 0xFFFF0000 +#define FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_SHIFT 16 +#define FSL_CHASSIS3_RCWSR30_SRDS2_PRTCL_MASK 0x0000FFFF +#define FSL_CHASSIS3_RCWSR30_SRDS2_PRTCL_SHIFT 0 +#define FSL_CHASSIS3_SRDS1_PRTCL_MASK FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_MASK +#define FSL_CHASSIS3_SRDS1_PRTCL_SHIFT FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_SHIFT +#define FSL_CHASSIS3_SRDS2_PRTCL_MASK FSL_CHASSIS3_RCWSR30_SRDS2_PRTCL_MASK +#define FSL_CHASSIS3_SRDS2_PRTCL_SHIFT FSL_CHASSIS3_RCWSR30_SRDS2_PRTCL_SHIFT +#define FSL_CHASSIS3_SRDS1_REGSR 29 +#define FSL_CHASSIS3_SRDS2_REGSR 30 #endif #define RCW_SB_EN_REG_INDEX 9 #define RCW_SB_EN_MASK 0x00000400 diff --git a/arch/arm/include/asm/arch-fsl-layerscape/soc.h b/arch/arm/include/asm/arch-fsl-layerscape/soc.h index 426fe8e..2531d45 100644 --- a/arch/arm/include/asm/arch-fsl-layerscape/soc.h +++ b/arch/arm/include/asm/arch-fsl-layerscape/soc.h @@ -54,6 +54,10 @@ struct cpu_type { #define SVR_LS2084A 0x870910 #define SVR_LS2048A 0x870920 #define SVR_LS2044A 0x870930 +#define SVR_LS1048A 0x870320 +#define SVR_LS1084A 0x870302 +#define SVR_LS1088A 0x870300 +#define SVR_LS1044A 0x870322 #define SVR_DEV_LS2080A 0x8701 diff --git a/drivers/net/ldpaa_eth/Makefile b/drivers/net/ldpaa_eth/Makefile index 5587aa6..125d6c2 100644 --- a/drivers/net/ldpaa_eth/Makefile +++ b/drivers/net/ldpaa_eth/Makefile @@ -7,3 +7,4 @@ obj-y += ldpaa_wriop.o obj-y += ldpaa_eth.o obj-$(CONFIG_LS2080A) += ls2080a.o +obj-$(CONFIG_ARCH_LS1088A) += ls1088a.o diff --git a/drivers/net/ldpaa_eth/ls1088a.c b/drivers/net/ldpaa_eth/ls1088a.c new file mode 100644 index 0000000..703945c --- /dev/null +++ b/drivers/net/ldpaa_eth/ls1088a.c @@ -0,0 +1,87 @@ +/* + * Copyright 2017 NXP + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include +#include +#include + +u32 dpmac_to_devdisr[] = { + [WRIOP1_DPMAC1] = FSL_CHASSIS3_DEVDISR2_DPMAC1, + [WRIOP1_DPMAC2] = FSL_CHASSIS3_DEVDISR2_DPMAC2, + [WRIOP1_DPMAC3] = FSL_CHASSIS3_DEVDISR2_DPMAC3, + [WRIOP1_DPMAC4] = FSL_CHASSIS3_DEVDISR2_DPMAC4, + [WRIOP1_DPMAC5] = FSL_CHASSIS3_DEVDISR2_DPMAC5, + [WRIOP1_DPMAC6] = FSL_CHASSIS3_DEVDISR2_DPMAC6, + [WRIOP1_DPMAC7] = FSL_CHASSIS3_DEVDISR2_DPMAC7, + [WRIOP1_DPMAC8] = FSL_CHASSIS3_DEVDISR2_DPMAC8, + [WRIOP1_DPMAC9] = FSL_CHASSIS3_DEVDISR2_DPMAC9, + [WRIOP1_DPMAC10] = FSL_CHASSIS3_DEVDISR2_DPMAC10, +}; + +static int is_device_disabled(int dpmac_id) +{ + struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR; + u32 devdisr2 = in_le32(&gur->devdisr2); + + return dpmac_to_devdisr[dpmac_id] & devdisr2; +} + +void wriop_dpmac_disable(int dpmac_id) +{ + struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR; + + setbits_le32(&gur->devdisr2, dpmac_to_devdisr[dpmac_id]); +} + +void wriop_dpmac_enable(int dpmac_id) +{ + struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR; + + clrbits_le32(&gur->devdisr2, dpmac_to_devdisr[dpmac_id]); +} + +phy_interface_t wriop_dpmac_enet_if(int dpmac_id, int lane_prtcl) +{ + enum srds_prtcl; + + if (is_device_disabled(dpmac_id + 1)) + return PHY_INTERFACE_MODE_NONE; + + switch (lane_prtcl) { + case SGMII1: + case SGMII2: + case SGMII3: + case SGMII7: + return PHY_INTERFACE_MODE_SGMII; + } + + if (lane_prtcl >= XFI1 && lane_prtcl <= XFI2) + return PHY_INTERFACE_MODE_XGMII; + + if (lane_prtcl >= QSGMII_A && lane_prtcl <= QSGMII_B) + return PHY_INTERFACE_MODE_QSGMII; + + return PHY_INTERFACE_MODE_NONE; +} + +void wriop_init_dpmac_qsgmii(int sd, int lane_prtcl) +{ + switch (lane_prtcl) { + case QSGMII_A: + wriop_init_dpmac(sd, 3, (int)lane_prtcl); + wriop_init_dpmac(sd, 4, (int)lane_prtcl); + wriop_init_dpmac(sd, 5, (int)lane_prtcl); + wriop_init_dpmac(sd, 6, (int)lane_prtcl); + break; + case QSGMII_B: + wriop_init_dpmac(sd, 7, (int)lane_prtcl); + wriop_init_dpmac(sd, 8, (int)lane_prtcl); + wriop_init_dpmac(sd, 9, (int)lane_prtcl); + wriop_init_dpmac(sd, 10, (int)lane_prtcl); + break; + } +}