From patchwork Mon Jun 20 16:36:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645591 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=auczKe8M; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb0P2zNgz9sFx for ; Tue, 21 Jun 2022 02:37:25 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 0368582139; Mon, 20 Jun 2022 18:37:20 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="auczKe8M"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 8AFFA820FC; Mon, 20 Jun 2022 18:37:18 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02on060e.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe05::60e]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 54E9580F88 for ; Mon, 20 Jun 2022 18:37:16 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UVjJf63KnTxoQx+ccgJRcRC0tpxyAb1ED7D9VVUvYnpA0bK5/1WoDGZsZofDYvH6ovfw/e58OIxVe+LgspEDsTMcOKHE+TRp0lcoMHVhPSaq1YJFoeru9N2T7cGFX854/0jdJ98r+J+MARb6ftdhKvBnrL0BO7ky3omxiOw6wcgN1i2O5jclpRNRqIw7bItkkN5zSnbUdHrv1qmH/rc7dGpg23SLLi4Vhw2N+o6HYuaa4NTxOo5YFKMmIXVBkimlm//nLaUZAGU344jeWeQv5L0RatmgX+TJtOQSGicC5OFzbSfS4x2I3pd2d/DzJlD2UrVBZXE3gGeFLXPtNaeQrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iNzjXoTtIvbBILr7QH4WD6KxvDDrXDRpBU3IvjBxxu4=; b=e4y3ijtWLPnzLu/quV/6ActJDf7rN+ohiBWt6hrFLLNNVPwLXOqKtVm/7VfMXm0dHS6dpghktowatP4Kq6wLD/MH7yd/qwcGbd6XokWQE0E6cBmDPlf89HKA21Pbu0Wcp+1n2IcnR/c1RvGNRnI/BBoONsY+2dJHWHTbaCC70hxGD4apb08Klgux8Ndc/kdfAOxvt7E5Mcq3wcgqnDSGQIjW8Vwl80Cvcl2qc5wPbVuU5nYwL98v+XfG507mqvz3lvZDrHnK8Q7gGTwprq6sl/wVDy/tpkV1PXKrt4tjePWzxeywe+gdYhHpazYmD61dfi+kQ+UO3WJ4FMvNeaCcdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iNzjXoTtIvbBILr7QH4WD6KxvDDrXDRpBU3IvjBxxu4=; b=auczKe8MWvJysssbvn9rJtz6V+8ZzSn7bnRr3BOPIz+g7Co2KF7CMSJFlnWMlCvYaTOnIxYqFtcSF9JXrVTeo1K/AopS3yAqqSsEvAhkh3I/N6mIRbBHHKGqHywY+POhyLJ1BnTKQ+z+OR8J5+6ywsUY7FmfJQA9eCaKwopVfZc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by DU0PR08MB8114.eurprd08.prod.outlook.com (2603:10a6:10:3ea::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:13 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:13 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier , Adrian Fiergolski , Ashok Reddy Soma , Jaehoon Chung , T Karthik Reddy Subject: [PATCH v2 01/15] firmware: zynqmp: Check if rx channel dev pointer is valid Date: Mon, 20 Jun 2022 18:36:36 +0200 Message-Id: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 79c745a3-71c2-4cdc-76ae-08da52db20f5 X-MS-TrafficTypeDiagnostic: DU0PR08MB8114:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NwRMPslFOXQS80AIlyA2KHyAe9WnHKAgGXCvzMLsoQrkrTCFRDxhv1zpIzxpB8VuyHkXYfZMT5x9zVIiDCOBBiLbsHSjeMcZtp7CRPk5hzAZzY8dlww28XAgs/QWBMwrrfPQotdu14tM4WzbDYFZM9hY+1yfFpCHrfnFbRTcnop0WBgtEqc76/xzov25Cyp3VOaRrUkVGPXol5/fQUUTGIuyJOQs9W8yEGVc7G/pMek/3Ylcv/2kQbtMEnCVcK8D1SKikRRvFtYEuuuueMwUa4wHXB/HT8GzeubG5qHCiuDn1advyHQXJGNBVblJb8JrYqZ0Nv2+JRnUO6TQ+od4urVWhuliRIWScPsjGMaVUiuJB/wDlM04VSAonGapHXWSwWTuLm+GlzducvFTE/VLCk7kH3L2r8rubxCaLXHv7PtrjsDkwrXy48+/tFX/2rEWtEuxtxCcl97mY4hquXLxCD0tV/FBrUfzII4XVU3NPr2gvqjhxNuOmQNjl2zZgl1gk2+di0wuxBTCIyFJ+nPfgVPL4QQ/FaYpVieUvaM3Q0chBl/UjefcHhimYjbDDaoWaFCNv20qfcVop7QDKX7QLm12fXpGfvoO++oX81Wcv5Zswqwv/MkmUJefExAAI/kSTrjdgwz3w+IZBc43APQerxuZsGjJJ1rX2YnQl1Nx0Br5KDpHD0UOn8NfqyTPkY7/ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(396003)(366004)(346002)(376002)(39860400002)(136003)(6486002)(316002)(5660300002)(8936002)(2616005)(26005)(86362001)(38100700002)(4744005)(38350700002)(6512007)(478600001)(8676002)(6506007)(6666004)(1076003)(66476007)(66946007)(41300700001)(186003)(4326008)(66556008)(83380400001)(54906003)(52116002)(36756003)(2906002)(6916009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9SrXfOL4M1GKUGt8Ug5L/nDrqtystoKGH3pct4uI7ACBg6p1lQkGMkHQQw2m5GPESrDReCUSFZLbhO/6KHFu9NwvK0V7tDA7136OA4YdD2DliYhV19vSyT/DM21tlnB+YI/H7YUxZqNdEd1n/+p9BTFpm7HcZVfMRHqzwCQfj1hOHvt2TnKSN3hAmwSoClLBUsbFvVpr+qMSSMlrncsEixtC+s9hKnQpkEXANKsBTjOl5ocxgGyxlfRQrxXl8z1vawuvGVvlFQYA66k83/ThkMFatoUb9H+b/vowQKaQcTgtCRjcc7cVf4A2FmJkL8lawGjmApwklGyEVC70/iPyMcBuUy8lmyc9Kbg+YeErgS5UQfrHFgKakhZaotBmF23cGHKE/YHOEPZlMl4DtBiku+8SwtjHOQEpPeVFjz4HdukbZ98OvGoK5UbsIdu6b45NPOxbb+r5NRFqf+he8omFbq7LMyiXQGAsTDZdoB1ufvT9utetDvNmJ4AWaUWK3OdkswEO3zd1AjELN4VgIld/ncDdnJhLPMReUsJvZzBf7IK8vthdzgct/D/QN6W2kyoiNvOBoNdy6+Uv+e7D0Q51baf/f1CHcgcb3K+h4EiFqXEiqwaYtS7W+UD+DrnM2d7eyNBkbVCktqYyJiHb2E4rshDKuuoaotFEp+ohjwlIh/ejIvTxUMemZV9CHo+Jr1O1E5Gf0T7Uf5UV3KKmAui2ZvpgtKEX7MYtfd/UJxXpzo8VCCoyGlJwvzVGGr0RkKiqw/TmjrbtSlNJJZBi8biV4rbt3ebESvaXAtQYIs1R98AwsgPwRxhpY3QSBxRT2NnxnHQMhCvdbd8TffXflIeZQkEGYG5lKmFWWufWdHvYBu6HDGZlemPL5i1cQ1fRi1no0dhQyt7qhUwiAIp/zp1m0TdMQ9x5QXaVCUhrkIKeYwrmjiurKjDz6/IBF0n1QDAsIh+PbB2BNpUIC1paud4dDWJjzC0H2yMTXAJPsBIb4VBvB+nOn2hQwdVFYvLAaxUkyupqdkHp4q0WWqRkO2+wz/ayg6b6SjD3lnv6p/cb0fbNxpFNSQvV3ZpdxH8mTc0fKV89T2TXyQyMQz22evXgzZ3vFTIIW5wGOUkGeLwC8WCJ/M8BA8p8tqa9yrcOQOt1NZMMqWY40z8V6uEmsUCOEBYT8ookBU96s5S92VL43/fWEhdg0QGYP5LuxTSzTA1fd74XphjM0bZDooGP72cHFMRP4csVx0jhAudEOGoT3R8gyWtk+DtujolSfkBCupnCgs50tlposhaxaLV0tybgZA7ddGd1k0bhY1t0cqKBr0aCWvY2n6dUHAiFlZUgkuT+TqQ+Hw/tF358nwRtRtXX+67oy8pTo23SPDLST2YFWkqBD4w5UG2es+jhoaBY7Wpi1+t61569mcjius5jarH1X6AdeeGssUs7ILOPPr0TN/bU60auLfd6v/M79BAX+Y4aCHpaYTVvPZlY5gWAGZN2SllV4rsJO2g/fwxAistzoGWQgGi/PlIE9wwT0jnRafusziAnxQUBvpArbixeKHOwlWNCxJDTppjqJWjlA7/LPrhVlVrMp+6jF9ZzyKdjiZ4LQtA83/F9EgRAuu8Az5A4p/Rhdh4mMdfEPxpcliTqScDEOSyt29GiRxBI5x4xkTp6hC+1mC9q/zNsn1WTz8bjJQCGJ9kESGDRg4RWsA+mJzvyqfMgkPJO15O8/DIPxZngpl/1gQLrZ9KILzbWGiVxRi8vdDkBlC4HCl8ANQ6mmvU= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79c745a3-71c2-4cdc-76ae-08da52db20f5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:13.6868 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ybtoyTNWSms6dvxh7zxZ7b4J9w7MfEv9ZBq1j5FgE0WKzr3hHHYO2Eb3q0qbo/ApLRhYj9QWo87xGpEwbqJVfA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8114 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Check if rx channel dev pointer is valid and not if the address of the pointer is valid. Signed-off-by: Stefan Herbrechtsmeier --- (no changes since v1) drivers/firmware/firmware-zynqmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c index 0f0d2b07c0..341d7cf135 100644 --- a/drivers/firmware/firmware-zynqmp.c +++ b/drivers/firmware/firmware-zynqmp.c @@ -92,7 +92,7 @@ static int ipi_req(const u32 *req, size_t req_len, u32 *res, size_t res_maxlen) res_maxlen > PMUFW_PAYLOAD_ARG_CNT) return -EINVAL; - if (!(zynqmp_power.tx_chan.dev) || !(&zynqmp_power.rx_chan.dev)) + if (!(zynqmp_power.tx_chan.dev) || !(zynqmp_power.rx_chan.dev)) return -EINVAL; debug("%s, Sending IPI message with ID: 0x%0x\n", __func__, req[0]); From patchwork Mon Jun 20 16:36:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645592 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=SWkRKeNT; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb0l1dpJz9sFx for ; Tue, 21 Jun 2022 02:37:43 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 944FA820E2; Mon, 20 Jun 2022 18:37:21 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="SWkRKeNT"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id B2FC88210A; Mon, 20 Jun 2022 18:37:18 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02on060e.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe05::60e]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 9BD7581F8B for ; Mon, 20 Jun 2022 18:37:16 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HZetEfqMClkqTUZ2NiwiGEGu7RE4YTJkoArDaa2m9BBr1E3K5dwz2WtvE/Cz3oh1UpNkThR+RHbEKHQfj0A8+XSR5Pz9BcmkESHnrpPZQMSZJoUsbH+bUgl/6ufphDFkFSH1axLahxbqaizG3FHOhpJHpbwdRCyCHelFt0GBPEsHZgTRc9iVEaMPKpvkDq4QW6NeyW1tYM/gNg+bCe01jTnyqKbtjaI3THWwFM3flbNfMvgnGF7rc0JS9tnYxkoS6VuEheSaEKX2m7BUx3lvXJ4v5Cc+oWX5er6tISJw09fG9A7GsFasElcqWpIIV0t8LTOj7IoiZIFE+pkolE1Cug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WQ69gKUUSRIGHXMSGATBOP8nJMpq4zxb+e8owCuII90=; b=GEHUR+ZrJPgFCpacHJc+mQJ88X3bt7EE/11WeP6uZA1X0sHRtLanFRYCNwo/HmxSgkSnyjjefv3oOfiF0jnHTaFvP0s9WtJ4NhJWjaN074LedDLD5vFzY2grlvtcxh9nb8eITYDspdxKBMUWq+0xtu1rsPx199JLzaga67r/h8CMjnlkX3bPXWFzFeWXVXDRwD1ch6L1MOu0jQAJqELC8GE2N6holupfOXES6x8ZzCTbvjJXhsf+uhQs3rrJJ3cJOCRGndmL1bGgR4loJlG27JTRBGVRrTRy4OWv0/VxjuGcoRKJdzVY2bkaiQajoexXb2GLrFWwT1LuBkkIUmnKEA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WQ69gKUUSRIGHXMSGATBOP8nJMpq4zxb+e8owCuII90=; b=SWkRKeNTmp9HhNAeM55+b3yeuAcWG7W0nsm0sfXxR+n2i6/QyteJc5ey5XnIqBCEhivBSm/a8VQ3xNYzlVKlLH0a6BGNx5KszaIqRGhDymbRPm0Pnj6xBeP7MbhhZXikxU2SFjnpZ00T7nCYPm8ZblMxGSLd9+XYCQaQSFYCknM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by DU0PR08MB8114.eurprd08.prod.outlook.com (2603:10a6:10:3ea::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:14 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:14 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier , Adrian Fiergolski , Ashok Reddy Soma , Jaehoon Chung , T Karthik Reddy Subject: [PATCH v2 02/15] firmware: zynqmp: Probe driver before use Date: Mon, 20 Jun 2022 18:36:37 +0200 Message-Id: <20220620163650.18756-2-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 844118a9-4e01-420e-53cb-08da52db219c X-MS-TrafficTypeDiagnostic: DU0PR08MB8114:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3G9C+4AARhR4+CsdpCH8YI21v/BQzmNNKaQY7KVy78vFQURkCgrIULp6gtHU4nyYGFwmaY+Lj6rIQwYEYOjRzTYBJPVmYctm2wpXYcT4MuimoIA06KpCnzFs3sOoc2r4YRuXQn5zhBe35fobW1iAQBqmrX4TQqtatd86viiaJXsaOIMd/740sKSJ6YHAu7BarJbjHODa5ZOLtldJCplsqIu/i3dUcBZBlQQDAjVQ+o7jM6znqFY9HP1FiSBSnrHQMIFf66AAb/rb1nB/QHar117jzVlRHax/NI/B8iAH3fnXLkzbOXVa4CR6rvdw8b8yVQ5WWt/hK5xSlIMDUnRUwctQR8u5nX+ti+fbzYHw9DCnK+5akkCb/U4umZS0COHgBys+hOryqHuNcp3L2Mm1rhPm6kZyNRbhMkAxV+2vgAdDWWhOkWUzYsoyB3M8pxDPqaEmaeKlkdIuy5ous4sG6hTzL8ot573M6/k2djuxIdlvMA9FPkd3Mbu74YVF5v+sA7yhHWO6Obk0b4hLqs9chREPNIedETSfXwSP2rALWnrqNwBwrBdiyMJP5GgLXw7TThj6exn0DekF42QjIbZMsmjyN3asJFSzGpTkhX7top3/UT5vpH1s8W28pIqheXuvo42N6W2omqvL/wvldqXGT3Uvo8gRjhzr+7Uy/kVcoih4SBP94o6hjcHSLHvx7zvCDeNQweY85HE4tqno9Nnx5A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(396003)(366004)(346002)(376002)(39860400002)(136003)(6486002)(316002)(5660300002)(8936002)(2616005)(26005)(86362001)(38100700002)(38350700002)(6512007)(478600001)(8676002)(6506007)(6666004)(1076003)(66476007)(66946007)(41300700001)(186003)(4326008)(66556008)(83380400001)(54906003)(52116002)(36756003)(2906002)(6916009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: z82QISCPvQDOVyr9LwWFHp96Gg5LdJNlbQ4tSCd1vQberrM/JwPlP+nMiQGHlprz02Swd3YRG0fPASUHvG0RUxbllzMKgB+QM7o5X7GKP068QaYI9rGCRBmfGmRKcrtVq3guC8N3nHbt2i5iOHLstYLV6jfywG+9+IqMKo9UKLLcKjUGa4B1J0x970rCFr4EOEJ+kpigrpa7NUThl4psFpiP4ZBRQCklbBXnF/v6SK8fjZELRizufbY6iGVsRSywucsvMSMgPmSgSJS+Ug7i+wZkwiAoQfKctid2v5JwKnpYYEfM4ubdRinipUrGzSo3yd0rR1iO9T4pM5nQzkKOiZvXwNOkbC2qZc9ge77DKw4pSpbn1mXwlleNqQ6/+w44SuC0O2A7FYzuELr56/Cs2zqAZhvMWRHS7i63kSjoTt3n4np2Oj9BfDO/FjZEsMEX9pmLL7/POgqnGtI4ZzDu3tsyWE41V4TtPBLXibGiC7IOdRUR1aYRIkXUzQH+RfGiZnyw1cihgVUIRLka9Jf9ne3O1wQ3RdZioeHUX37ylY5QEd4qVtIdYtXOPJ4Ru7rRSP8himuctay7gKCypAHL4yR/H0QdN7TaEv/+pDozVqkJsrqCuZEVvdvwSqod1Hjtazp8dZSfN+aAqMVVbnRzip69zmmJLg4kHYt8wbhz0RZs78aSoCsrxZb0tVL4NUFaxuIJKIBtHZQ7MKCwFOoDFmLM1xOqM7rBeyH8QnErpVILgqvltkclu+GPJZ5sdl1ZWihW0lGht1Rc8X8KhDINz7hP3jK/vs7gzCJgcP0l8w4qv5qzX0KHrIYj5A4oRFs/lxKw0dXiyBG6KRDCxm0ivOHrTGxq7zEA0XiwZ2e6uaE2CfVKMY1u2UdZkoJgtPTQXiwHyWqD2ilj7aiPdkDz2XY0DzkxGYC4IXikJaWkRgG7lb+T3SFbEF45kqlGNcyuABvH/0/+76SA42w+BMkmLI8dSLHCq9EBDs+spAgmzQWdgx2/G+vV1FXxY3sWcreY/yxExuIcW6IVBFS5oxtQcn4N6sAMA5ABdCkNKxs6e7rasHJ/Ceww5RGsstzCcUC72Bv0VUtWvqtiQeckALL/fwJfNg+F3ZAQeOmEZ4PVNbgHRjUpkE7t+FqxIDR+Dnvuwc18p6dBaN4Ty3BfzDfNvOEJfK0e7g+SSiOFcE/OkPy7lDicUoecoYFuwDLDljsfZBAR1+cHHdx9oYQw6UDSQUs/XACIPyFx4DakaITJvQm0vYTrtqlPvT+pSOHxo0u+OuQwfRa3pbkdQ8Dnl0LuZV0vLXLXQbLkdcFCrRfXOKMawEsxm9TOiGPKbK+B5TjZjbGy1jTHhnHjUIq/ZKTvuz397OBulR7cc6QzAd1atvLhROFTJlZGuL0z+RjYSaVYiDJd5v2y6I3DtejL+7SIhw2NoDcc34MVKHllI0FeUdkSdvtygvhh8r8jMYdZ8LmjWwukRmJaZb4U1nS4k8WdWP1c1q0qCP5JBbRJi86EzGNVU1ERzzzIWHKN+JdIPIBKTM6scwZK94xYNK3JhKKydhUQg6E6Eb827R+56yNM+eY0WMqpvwPi9w3h8EYBrLgfsft6SaXrId4lXBo6y6HdIvgHzYFxEHR8Uvm4zwUhw8FrIc8W4qhzaZGB3pMPF6y7OpMvGio8j0xbqawUptSYYj7hkFKgV8e8Hb7oA6te6DwAKwx5bk3XLAuYwbl6wl/Ggh6J9rJGh2m6Ayd2mzMG1bOmgtbq+PUApOryetpf3Tc= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 844118a9-4e01-420e-53cb-08da52db219c X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:14.5004 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: f1G+QPyAe0DU5CWs+dcmLxiKfWdvg35xxtRR7AboslKPb0DTit4lXeX+fd3tAaCVOWIEJZ8I3wGdfry2oGYKVQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8114 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Probe the driver before use to ensure that the driver is always available and the global data are valid. Initialize the global data with zero and probe the driver if the global data are still zero. This allows a usage of the firmware functions from other drivers with arbitrary order between the drivers. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - Call probe only if drivers isn't initialized drivers/firmware/firmware-zynqmp.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c index 341d7cf135..b0cd647aa5 100644 --- a/drivers/firmware/firmware-zynqmp.c +++ b/drivers/firmware/firmware-zynqmp.c @@ -26,7 +26,7 @@ struct zynqmp_power { struct mbox_chan tx_chan; struct mbox_chan rx_chan; -} zynqmp_power; +} zynqmp_power = {}; #define NODE_ID_LOCATION 5 @@ -79,6 +79,20 @@ int zynqmp_pmufw_node(u32 id) return 0; } +static int do_pm_probe(void) +{ + struct udevice *dev; + int ret; + + ret = uclass_get_device_by_driver(UCLASS_FIRMWARE, + DM_DRIVER_GET(zynqmp_power), + &dev); + if (ret) + debug("%s: Probing device failed: %d\n", __func__, ret); + + return ret; +} + static int ipi_req(const u32 *req, size_t req_len, u32 *res, size_t res_maxlen) { struct zynqmp_ipi_msg msg; @@ -92,8 +106,11 @@ static int ipi_req(const u32 *req, size_t req_len, u32 *res, size_t res_maxlen) res_maxlen > PMUFW_PAYLOAD_ARG_CNT) return -EINVAL; - if (!(zynqmp_power.tx_chan.dev) || !(zynqmp_power.rx_chan.dev)) - return -EINVAL; + if (!(zynqmp_power.tx_chan.dev) || !(zynqmp_power.rx_chan.dev)) { + ret = do_pm_probe(); + if (ret) + return ret; + } debug("%s, Sending IPI message with ID: 0x%0x\n", __func__, req[0]); msg.buf = (u32 *)req; From patchwork Mon Jun 20 16:36:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645594 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=P8DEaH0b; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb180pk0z9sFx for ; Tue, 21 Jun 2022 02:38:04 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id C49B9820FC; Mon, 20 Jun 2022 18:37:27 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="P8DEaH0b"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 07AA382102; Mon, 20 Jun 2022 18:37:21 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02on061c.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe05::61c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 24EB4820E8 for ; Mon, 20 Jun 2022 18:37:18 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BCyElQSEfA22wFITzm9uNI2km1rOt55eKzzIZ5gBJPQyEyGyyKqKf4NCDQ25KbK8a5n+sD04iimKWFZizy/qrOgu5k90dQ7rZkGjWKE5DO+IZRWJsLiB6Qm3bTbFscddaPTiHm0oL8bgYXIjJVruAA2qC48wnouNp+D80l2j1zG47Mix4zzs3zEKS50/BsfBFiTq/VXPI5cngVXvXgLbuXWr2GrBaHOJ64SN5nlLOMblO2WyeLwmXx5TCCsByc8Y/YNxSLxHTUiES/NCx/qQbR6R8DZVxEERzXHd7Yt24cWmP+RRQM8LY4CF0FVXyx+Otkiyr91PkGkR1uTYm87umw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sIjfSf3i7CuR5iiDqhSXtkqtmJkMVSBBXp0hRY5WjFU=; b=c7j5J0p7hOP1SlmR0EJZMLwiMQCSgncYpAp8fQ3zqU+4FV/853dPGRmVT/zDSLLGIRn/7Z8TIVKWJSQONdF+oRFPsA7vtDMaHwS4twV/uYXGn44XW9cNycUuvjFmJ0jqmy6YYqa2IzBeIhJ+RiXP5IVe/S4eIEv7eiOYcu3O/KHmPMSLMGBJicGVSfjXFrLWt3nS7bFq6/qTcADF16yNvgDfYOtTlwJO/+6Bt6uvveHF7GfNFSzhg6YmHqbs1oxnw6Je+2Lmc2KRN69BTae7wuQ/zceLIhPfBuLATtQokygP3ZS7/V42LZd/eIJTtR5zAh1f7II/KiwOtwFAHa5h1Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sIjfSf3i7CuR5iiDqhSXtkqtmJkMVSBBXp0hRY5WjFU=; b=P8DEaH0b8tch0i5mRQH9b48x0t2Rt4FvP6vMYKTgN43CFExxFyvtoWjyaE9C+Y1Tvmy1IQQ96KFtAC3qPjZije4F5K4ytO7nzTX9IhvelE5Foz1/fZGED9E/Ad6xbvp/uUZwRsJNGPLL+/M62h6J7l4B+Wbak0RTyFTaIOrT+rE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by DU0PR08MB8114.eurprd08.prod.outlook.com (2603:10a6:10:3ea::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:15 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:15 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 03/15] xilinx: zynqmp: Replace strncat with strlcat Date: Mon, 20 Jun 2022 18:36:38 +0200 Message-Id: <20220620163650.18756-3-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 87ca38d8-e128-4934-4535-08da52db21fe X-MS-TrafficTypeDiagnostic: DU0PR08MB8114:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QgHYyCHexKqPGnoSePD2zta+wEl5Lg3lY1Uv+zdg2qDnSs4bPDOA7n5oxaG5AXArXj2ScvDk6K7Y8hpH+hgC3ET0ydhMEk5Lkahqe7VIbN0NxIfgarKzOWQAn2JSCI1KiK2TztbrITE28t4DJSkImwOEEeMXbsqF/vculrQUZgJUBFQiH3jpBDGNOwv3qmBq/3QOytjVZUVmXAWRrWiE98at1wsUm2VxTurNArJ7nqHL07XkFWCRfYBfm7JCYQHg/sHekmZCmL29JlZiCufo1dhDbq9WNq+QNsvnEw5qeF+5CsQlvImjSKp4YBzoqvr8a5Bofvn8hul9QwAtxWu9WUZgq31aIxLxi//AKbYRasyVNKLiAbBI1MZ/B614mYjTXOqUJczvFE4U9/zh9ZrRinU6gK5UODLbwtSkZqvd6gE6jSqo18+OcYtpQ8giMbL/jkwBoKJQvHSp7DTtPi0qMjc1YoqB0VVmm3ClKARcZJG2ifi99hmM2/EIgfrn4JvtTTP+f+H/7Eyn+AbIu5w5DHbLxrSMrmuaYVzky3bpBxdEq1cW/oUB+chxU1ynk807MauKniuBZq/8hIiHnNEQ94MxSF7StBCaszq7lO+80KuDPWMRAdhXVnSC6E65YVVoR9GaeC8yGhzUHGC0fWIZghQPcNHVLR7XJ73LF+SZEfzYZbr4tBd/90wTPASNVInMWhGyCt+iUFbhi3xTFsOsSw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(396003)(366004)(346002)(376002)(39860400002)(136003)(6486002)(316002)(5660300002)(8936002)(2616005)(26005)(86362001)(38100700002)(38350700002)(6512007)(478600001)(107886003)(8676002)(6506007)(6666004)(1076003)(66476007)(66946007)(41300700001)(186003)(4326008)(66556008)(83380400001)(52116002)(36756003)(2906002)(6916009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Hdh17uFw9unPZ3bx24s4SE+wge65kW0iPP97FBsnGOypNLfWZi5wWX67+01XAyylesVS3dSdiok+XMLnRV8LTcZB6lklPH6dFd7tOKcpIm9YI8JS3KmkG3HIQ9Np19vb468s5yWtX8YBQSeyk2pswbyPTdiC9iUIvuiOcwdARDtv+puZga8DtEPfIr+buRjGcX5v3t0ZBoOw6pHyjmIhdQ0OF12nnxrnzk+J5FkBfjns09pilrVkXUbQbllCVOHHTXT5/Jxyk4DZ9WD7mivjzOa7t9G+jdEM/mcS1coMp+h28YgQtvA+2ArZwXLO7bvQtjaA7ANU0bit1tNeAPFaXfG7tNZVgRDcLiPiiUsEejogLjWXW9okQhmMyhNfEwlKM25F2QkH6LneiOGxvsAmcPlKpR+Pstc/GCNMWDmf65mROhaLTfoPj8rgXPfk+hh195OiQYHrQbdxIxgIMjK5S7g6LZRyWbHpu2fEln5aQuQ734/b7zTBLLqxluqd1VztUWKHEd2QW9rUZH77OHE6otYWNpj2kM5X9PeKXparDw7tRFIDQfL0qCDn23z/qIetLNnQOsbAP0bueoRdWh3h+6RaXsBS4YWw+842SmOpywNJBILc95V8xGjybCaSAQ1mGxkIZRXv1nYdP4eMAP5No4F82jb/LGr5hdbP1pGLmoBrEIgRmMQKDM30CX72pFcWgsLAnE51LbqdMTbz88djEbTr4/wd+dAOSz62rZpbcS+kjiR2/bvKymRbu7g/zr4fClmL/wUUIF9VWIJqoykMh5aYfmP3eusLk2CMVjci3XzYsYpvBexM6TQsqLaj5hQfq+rtOOp0fdmaOOueJ5/K71F2sd8Se3Hx6/n70kVxUIqaaizEHVq+UPUYlso/Rc/kySNcePpvsiQ7mLodPpXUkcBxwl/QQ/xC089uQbEupl4N7aLRIwj/C7N7tFA3CH33oxumKY3R4DNxewoNokQUaN/3vihdoBqsl0HoFCSBbnT7ujMbZgnk20+sXdDNtvQeZmVcDxRCDpUgISku712A+vrpF22tZ4qR0w4KjP/DSr6b/21XYxv0Rq6ISHvgq3k1mZbneVuotLhCFiNALMtufFl+EVR4hOfbgbzO1dnUHb2KuwXSPhnjlBs9Lj5BTmALTPcdJpQ7NA6PA8ze+LEKHfHIu2PGTXfaIJbh/T7Ii5A6Zlbc0CE0IMYo7o65Wwlx5+rrE5B0rt1O+HqyHWn6ebWPJCFm/kFYJIYelt3lR6NBZkOS6abKJX559BUFXCNi2mGmYdWwOeKmCRaqa377+OkltzWgNXbL7iFzxrOPmqiFZv+pKVGb+4Q+0IqD6DhTnmdTES2GErvxxCDglQ191gvsIp9R/IaeeAgghLH10KB+I1/JXprbgnbxdBvekuG1K+RqQ2PvABA7Ul/D9Qxs6fWKqM+gVenpLw0yMfXSQCnd9Pe6DSsEvYuGcI6fxRvi1Jjph5mCtntyEsTozDoQkpmLFw8K5aMdco/8ls23zzybQwyrPskGImD1R6p9wB2WvfvSQGTFdUQDPYUf8F2SOvudkinzhmgzVQH71ypa+/VXkuDRblLqE/WJQ/GRZJKweaU7iHdok6g1dl6dhmP9SUgh3GX/qYhgYHRcXNqRE0UhI/OXgtLpf+2EmqpIolOoivRk3Rk4XefdJoaxNACrzk3snUmgQJdpP1L/3le2oZC8+Pw+1MoQnyHCrdIsvG85Cwt3IsplMqMXNsw9SB1UWeQCsXq/eRan5CdCY01IznE= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 87ca38d8-e128-4934-4535-08da52db21fe X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:14.9691 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NvwkJiJbS66NQOPzkVbx/T/V/KhpqCsoKeug8sdBUfu24goe9DYqptY8icHvwxj0WiM2yKDla6wU+bKOFzvYyQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8114 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Replace strncat with strlcat to always produce a valid null-terminated string. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - New commit board/xilinx/zynqmp/zynqmp.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index e311aa772c..9dfa4643fb 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -282,13 +282,13 @@ static char *zynqmp_get_silicon_idcode_name(void) */ switch (family) { case 0x00: - strncat(name, "ev", 2); + strlcat(name, "ev", sizeof(name)); break; case 0x10: - strncat(name, "eg", 2); + strlcat(name, "eg", sizeof(name)); break; case 0x11: - strncat(name, "cg", 2); + strlcat(name, "cg", sizeof(name)); break; default: /* Do not append family name*/ @@ -300,16 +300,17 @@ static char *zynqmp_get_silicon_idcode_name(void) * read. So, ignore the bit and just findout if it is CG * or EG/EV variant. */ - strncat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : - "e", 2); + strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : + "e", sizeof(name)); } } else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_CG) { /* Devices with CG variant might be EG or CG family */ - strncat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : "eg", 2); + strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : "eg", + sizeof(name)); } else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_EG) { - strncat(name, "eg", 2); + strlcat(name, "eg", sizeof(name)); } else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_DR) { - strncat(name, "dr", 2); + strlcat(name, "dr", sizeof(name)); } else { debug("Variant not identified\n"); } From patchwork Mon Jun 20 16:36:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645598 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=HJges2ez; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb200nnpz9sFx for ; Tue, 21 Jun 2022 02:38:45 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id BAF7283E49; Mon, 20 Jun 2022 18:37:32 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="HJges2ez"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 12610820E8; Mon, 20 Jun 2022 18:37:21 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02on061c.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe05::61c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id C8266820B3 for ; Mon, 20 Jun 2022 18:37:17 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MxdlRgOaYafGeE/I+nQkXB1K5IRn6xrIp68QD2P93jxw7BZZoykwqaYQNXJY1lIFG7Znx3c54UW0zk3ojBPh6ZL51WP0wkimdzmBWwp/B1lw3dnxJGfniWa3m9h0oO7ddWCubfcEOzfCuAVXAynzuu5ZHLCfwna8li9BN17ph3v9EL/bChmVQT9VWMB3d5wHUG8xtcGOka3nJUZADqJZpfn3HOAcDR3I76ug1aLsCfqdO9dFlBdWuz/RsXj6SLgcJY49DHY8U4sX7sfWQBjswVSgeTu2smwfOhrfmKtpoZ3EYw2lYvfgmBkUCe/WxsbViGlqzX1RUJPalMU5nUEh/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LoUVsoY4BgsaV0z8NTDJZDf73CgZPI5rRArvCQB1TXY=; b=cKpAhoLc/ThDopwVW/DMh/lNf0YqDge/l7DUlXhVJAohlWN3v45GOIz6zbASjvjeQWQ4WltPskOzZj2NpAzInJSP+t5XNLJ3hC1IQ9S/QyxI9qsdeti7WIBKD+bgDSIs94LO65jJuvAHLewDZDh2ZySJqMz2Zh7500QWmyf2uOiEWcimugjC+HYRaVDigZy6R7pIXw6VXB9KdlhTZcN01kpxNlaiJLRYCztg0By7UxbyxzFBw/a1Pt9LsTgixdvI85GBcYcFOZd3aYtMeSGT9urOqZfOtC/naT/BWURADyQlGW/Z3nilvuzBDCZqHEq+ZcekZnBO7Vt70Janb6iBwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LoUVsoY4BgsaV0z8NTDJZDf73CgZPI5rRArvCQB1TXY=; b=HJges2ezHhJwa04uoO5L/dFJAw8pR9ARshLdDwW9VB0xbDPoeelbW4Cpnx8h/WMWhOXIIQDrnc0gTkzY/hwVTc3vd0lOB+fi69KMe7qCghPmJ9MVd/ChOkgJtkUGShek8VvX+VdWsoQ5WGGYNrW5bAY3/BUt67xpmBhkBWbzMjY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by DU0PR08MB8114.eurprd08.prod.outlook.com (2603:10a6:10:3ea::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:15 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:15 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 04/15] xilinx: zynqmp: Add macro for device type mask Date: Mon, 20 Jun 2022 18:36:39 +0200 Message-Id: <20220620163650.18756-4-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d6726d2e-0e2b-46ab-2737-08da52db2248 X-MS-TrafficTypeDiagnostic: DU0PR08MB8114:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MhW8G2EkO6+ojwaU/Bj1gwPD1ZU6kq9piPHEh/Xnqi2BqZQ52H8UDbVVYjoucHK8c3yd82tendIRB8yseHv8l836eHcR4+O4kGiJ3ArLubG67n8sD/V3B0ptjxRH1z7zY5bbDlGdQJa3n1yBQ7c+h2fwRux3mkUCciIwD0YrZik2XZhzFYJrYw/Kh04SBWA4ubk1f7c0WJh2xDJM/BSoDpyi/g0PGUVkAHFsyofxxxWt4VHhUeEG9SVkY3fV1sRF66Pat1AedyGMtN/vE2e/P1d4LhBw7xNcuy2NlPCDsV8jAG0+QCAJVBLpYndxqPuXQ+9uH57V8EVfWVMEV/+o7RK6vXnlagiVfPpqdeqJV3lpnU9CDUXXH/Cr7wJm0rofkLAPO41SQdwsm621V5p+zT6GS05CxnuJ4xNLWOfAi78zsx4JLK60o3UXyc/C7w/HhZkPG3bkgNVe9pBWiyKb+3IiTQtvouU5R3FIAEaDrglNfnTmPSphKf73P1XJ0Ewy8bp0qiujNO5gRZ1al19kY9E0DNjfA572tns1mboH74BmHfAObSoDbxLQqdDO5bmjULBxc4IpYC5Vdi28trIMZKmeM3uaMYVGVBDWJjUWPYBY9taZdnweQTKCwO56icRucJOIvo8GNWr3Jt0uILaBdrqcAeACvPApqRbHe2sCkuU8m+QO/2KLm3a/zNkZL8lOClzL94mw5wWPDy4i408H0Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(396003)(366004)(346002)(376002)(39860400002)(136003)(6486002)(316002)(5660300002)(8936002)(2616005)(26005)(86362001)(38100700002)(38350700002)(6512007)(478600001)(107886003)(8676002)(6506007)(6666004)(1076003)(66476007)(66946007)(41300700001)(186003)(4326008)(66556008)(83380400001)(52116002)(36756003)(2906002)(6916009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: yOELdOzo9InyZu0M7Mj4Uo2/dAHu0nHd/dP3T2YUOtS8kwhpRIuv/TsZlx30n0VaYv4UGr4aJX/xGQZVpbfWsXuvr7538YWde3tTJzOJ4Ejm0eMYNjZ/bPpRM2xw63gJEt/Ed9zoiJ9br6TKLEEwPwjFYTuMMorxemMCKrnxQDgCxi26SqNPgJie7b2sqhdDEqTO2ozc2Xhjo0IfjF2T90OXvWoiYuWtSC5pVQ6JQjV7d1cI7CV9+yjdJbFFCVH30ZJiwPj+VzzwiK/p1VJtXW20/xguVLJxRX+60OnPtu/GBvHqLArDfOgM79ytexfpgveO21zIteE+QCOZXNQriLFwLGx1DjAvq9xV6a5dkIjvrDYLV/Rb/S5mI5cJriWE1BZoPoZfIxLglkjWcXNFgEZdznIhBl13l5PFvHRCJJclL/MzhG53dSgR1Z/oKT1VPQXvHXCepSVzI2nSdoYUhM/1Go/9LWSQz/mpxOq2bncjv+IxqJjVLcSGU1VfoIQt5ZJTnf/Ch65hiJoqRe7uLfiIz59vgzRo/ZRclInaC30wRKIrWneUUghXyU6IG8qorpTq9vw5uHdnOmWYv6zIc6jDlEQiGCQlVS3woVwKtWichnU6BB4M+Mw3F5t4zmCmaTGtnYpWDGsaeeFjiB53sBFBaaaq5wQgOEHL80CIpbHWypGDhpmdNZRcfKZdADSc3gsz2kq+kl9x1fdit4OMt7OvObxeYbfxjbSCRj7tZLT3SyT5cieZOYyvuziKdtwasB534IM5Q9eqiPWecPU2PCaQuEh2cH3UDfLKCl4m9idVJdz8YXY0OvKIYgNtBNq5L0NKMNGqBXCzv8T1ZbVrioFM0uHmH1eHAUyYOCFs4VJZX5GqcPcOvCYw90zbCY30dD/cNwQRQ45ZzJhpgmhPFbNo+74gsu3dwLpLFHtgLZMwnKtVDo4GidXIQWj0BWiCyoqinsl2D0iHaqnNBH6/Obc+/9x7F0LgD8YhFpaFlhxfJQEnlgT5npKhsycZfpCZomEfmaibfD7pOkfa11OcnllaVtFjElf/CSvp/Yi7iXZhT9TNH+QUI3lhOgLnj6XQJy4mDUINoXB95Hn/hQLCXxI2OBZQjEigaNrGaO5DnJNKSbIQHkdaFVeQKQzPH5DGTluQGO5Y4f1lpL2Vi05CV21v4T8I6aPubHVmR6hqxD6+ip2dH/w6iFxuBaGc3TWXAKNN9bq+UXssUzORXGYhndrVkjfo91jsUW6iQNF80epKiKC7z7dsaEE0y2QWlMegaWaBnnqfdK7/e6vi0m8rl4t5zoR9G1oA8Ue6hyoSJrQqg9MlVWz7xMwWaT+zqJl+x6ftEYcPWhWfYuuLDHDV77RWQYB/Lj4vfKDOPDv97XtS3OJ+kILhA3qGqPu0voCfHyawoIhZ2iqKJ11OEDL/CRGwLgq5eZ0oyLrtQZRLOPn30Ns5HskjnC3ZythJtQJK4Ld86hHiC9HQEl7G+dW2yNnAGe4i5V0QtT1n5dhXkzYvzvcmlNdvEJueTUXmaPQ7ootITp8PI6Or7sSq8haKL5iMDce6WIZPHwlpsEnpT2EKRGwG1gIejSOfFZ2nkEP+5l0XagPGAsTKueJCeeQW29RnY5oW8WdKdRYz2rE3lvLMgFxNSzXV6AWhqCeViiQ8VTDRZyzTFsw30n5FGBz9fsrafQY+pBO5jBLWrqblkJ4CN2i72joEL5mE/YgUAt0Owkn+74TkrsDirKW7C+Vr/bPZnC6UIqNt7v3fWKDTq3Y= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: d6726d2e-0e2b-46ab-2737-08da52db2248 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:15.4046 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tS3jzIoOdqzNCGVaue4Gf8Fq9Z6EE3C7FmB+4CGWp8GNdAafauucFfQ3B6IhKE9GqQ06X9D+fWONfGOtIOd2Qg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8114 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Add a macro for the device type mask of the id code. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - New commit board/xilinx/zynqmp/zynqmp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 9dfa4643fb..1a7383d023 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -49,6 +49,7 @@ #define EFUSE_VCU_DIS_SHIFT 8 #define EFUSE_GPU_DIS_MASK 0x20 #define EFUSE_GPU_DIS_SHIFT 5 +#define IDCODE_DEV_TYPE_MASK GENMASK(27, 0) #define IDCODE2_PL_INIT_MASK 0x200 #define IDCODE2_PL_INIT_SHIFT 9 @@ -218,7 +219,7 @@ static char *zynqmp_detect_svd_name(u32 idcode) u32 i; for (i = 0; i < ARRAY_SIZE(zynqmp_svd_devices); i++) { - if (zynqmp_svd_devices[i].id == (idcode & 0x0FFFFFFF)) + if (zynqmp_svd_devices[i].id == (idcode & IDCODE_DEV_TYPE_MASK)) return zynqmp_svd_devices[i].name; } @@ -254,7 +255,7 @@ static char *zynqmp_get_silicon_idcode_name(void) idcode2); for (i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { - if (zynqmp_devices[i].id == (idcode & 0x0FFFFFFF)) + if (zynqmp_devices[i].id == (idcode & IDCODE_DEV_TYPE_MASK)) break; } From patchwork Mon Jun 20 16:36:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645593 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=ew8u3tSq; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb0v1fZBz9sFx for ; Tue, 21 Jun 2022 02:37:51 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id ABC1382068; Mon, 20 Jun 2022 18:37:25 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="ew8u3tSq"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 003EF832C3; Mon, 20 Jun 2022 18:37:20 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02on061c.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe05::61c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id F181D82102 for ; Mon, 20 Jun 2022 18:37:17 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cDwCVGDUjtq5DeJ6Lx7bEL7OjeaXbzu+bnoN4+eNCtR049jfvAIENoHAIikNDtdYVjusuceUF2EhkfN0jzTfWhqw3tERKXd2xcvIKxWBgWC5fp6KPnu7OdMvW4pl3XCA7ceiu0pchw65XceQqx3eRRXgO8ZBOTKGgOCzujJO6TWx6c4yZ7aYDpwYHpPOdQ+gRn58X0In93fmwvOU5as8ltUyqK4z9YEJXU0ScJPSRGq0SSbM2M6TwohHaQD3tnwgRbL0foBiCxFkRJwndPlke/5dQYvvejd40ufsiC9HVem+2sAePXZS35Fpvsjg5/DORjcKE9BAu/PZE/iXgHh1QA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ksQDdcoi5euoYLp1nFxm6s5NUxnC0UPrNf7VLSdnOHg=; b=S0Ax69ifzXGVz0DXlxs1Rsw1NlR/vr0FwW4JwPfj6kIro1qLcmjujCBMwRi76C6DE7yUH9JeClFdCm8kv0Xw6lDc3+zWaIG32WIniDS89jq+7U8QaqsFPn+EPWFbQK8dYVvRcHzsEuj8HJu2omch8FkViCstAv7Mhq00tQEyt2E7CiCHUp2B2ImfRfW0IbDORHVYreNeuCkdXn5aGQCikhucpp1RrigZ2HFWIE5nHW7vnxcDgN84LBgMsFUSPT+nBjV6M9XR8Dk8J1P5uMhxPDwdwTOeKl5uux4XD2FC5RM85ABlzIfOHgr9mA/BHEdZeiZIrnzPqj3ILPrVlHgzxQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ksQDdcoi5euoYLp1nFxm6s5NUxnC0UPrNf7VLSdnOHg=; b=ew8u3tSqXZnfQyabbmpGnErAFc+HX1wPDTboai4HJ2k6XsvkgbKdBj9eRRUgXqdDVK4DMz73y7uoDRB0e8V7U0ln+aQGg86EZaA6fLmo1PUyWGszTJj9Dpy/OBcTdSWXdQuOWZ/2QFvFeSTQFiQ59J5ge2Q4MmLa0YlgnGx2nZQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by DU0PR08MB8114.eurprd08.prod.outlook.com (2603:10a6:10:3ea::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:16 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:15 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 05/15] xilinx: zynqmp: Reuse shift macros to define masks Date: Mon, 20 Jun 2022 18:36:40 +0200 Message-Id: <20220620163650.18756-5-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9f60d7ca-3575-4fb6-3888-08da52db2288 X-MS-TrafficTypeDiagnostic: DU0PR08MB8114:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: koUjjU88Omc3Wq5GhYkDrC0DVtS0cY9smKY8ZWLVWi/sG90NQJgIZ7f7x3+aIkTSRUY72e9OGsqAky9PcxttgTUtldHMSdGaF7C6eqMyqqC1fHMyt/ND0XIrZ+banE2KNqXq2pqoBYpz4H4RJaTgt/xOi6Pqb6Rz2MJcay9Q+caGdgcamck/VQtfVhHyOYWtUDhFpDu4w53RoUmNvqEQWfGq/dPwMzPVtZapkLpmD+N3KQa3+amp9I7rxrtfj1pK4VY/Vqpj9iQRROdHmeNt1sOSSj4qZkfOQ5nodAZ1VK8Ck1c0juYohAIcQeizvrqqNHL5uvQg6sTWz+bkKSq6kIylNqbLi/uOrvJqFtt9HW59L9Y9nCQfr17QbQbJ/WDB1UqJ4iPGYVjIm4jYXGCvl/nK7MRw3PdX+I5pJXlkcJ/Ahs85aC1oZlI9bBAk/AAlzawOdN3cda3lVV6HJNQj5k8MS7w9+m3SA2+enyJd/D16tFFiF4me8nBsx2wyt880sQiHvp3/9q91IZVM8xgEI36Pz29kwUdVKumbxxdn6CxuKU61hyeqKidmz90TxB8jwPtF+9LAlekAyJJo0DgX9clYGKbqnX/P5/6L37+rKMnYI93mg6ma+ga6lFyynQIM51/WpEh1mPkwmoSEUKI1K8oI21t1K17YrYIXsq2DMc40F6nICDWBvslewr++JdvwbjJCuNmrH62wL2qKhWzZZg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(396003)(366004)(346002)(376002)(39860400002)(136003)(6486002)(316002)(5660300002)(8936002)(2616005)(26005)(86362001)(38100700002)(38350700002)(6512007)(478600001)(107886003)(8676002)(6506007)(6666004)(1076003)(66476007)(66946007)(41300700001)(186003)(4326008)(66556008)(83380400001)(52116002)(36756003)(2906002)(6916009); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XgYwFMPxKN7LzuwN0nLTzC0CFnnz/SbTYtpeRpOXhF2VChqKsYJTDFs2fpkJXlm6XDN7C8NqbQQ9q7fK0+k7uRuTPIeT7Hzstjz+dByqyZZeIbZgWbN2LNB9dzkR8anTuA8Z4Sb4nRF6b3yHFVv/hKOsInCMtkHk5oyruiomHnmztrDDSCeMtCiDIaU+jMmQ0XeWUgQhE0HqyhKX3OrJcrGUGBDajXvUP3PidDJ97xHO3HIjiqOX70RZlky3RuozDA9SQBINQRCOmPQLJEyIpmKeStSz6qHWLo82eH0n53mZkuBTR5IaF2sq1pCpcdnyqB9g44PDDL5othdye5PweXtml8v3jaOpIHthy3liF+vgYL6KvVIn+NjkIVp/rEMA+23RZ8Uhu3qMxyTFjwzictlJ7CTNlFvuLhPfq2A6gg572o+gGtZi+7wg3bn3u6gJa0o59CMkQKAn4g0PJzAkDp7UdXfLHJP8hRpMF3PtfJr4QinT+jdygHu/yl4gw3orpHp1dz/AmH4oHPZZ23B4ZWW/N17exboiVr62AtmikWk5hdhHiG1ZeJZ7QIN+NKrYdgDku0lrJWbka3na1bJ6lRn1aNzYAn1ApF/nHVQ1dJ+xvtzFN4+47RPEd2kYSug7mkKX1isuvb6VOZjDi58jq1d+PDjdvXQBBaQUwfVG4yMzTpN9GE3eUOmswzcFyIlypPLy7WT1TLH8V1gP3AAiCbs980TVDP+9oR5yHKoa6z1dpvYhbRoKQXtu9+mDEUROz9Lf8/8gtZmTYZ9GpDhYH3dPlZltfWdKFn2bXitvxmKl9SurFf6TddDmcscCec6zazlquL3I2xysyoIzje0NREy9fgVDDAsIPYS0MRC/vFL34KlQ/GVU/PHU84jp1NvsxZeyg3yUk0JDrdXVCTrxOHIKOiJutr7WrTacHonE6NXLBPksnsESd+aH5CQaD1RteBDqNG7xXUPZiVgUpktf3UoNkIiJUXhY9498WwyRHwL/VKdqeusd3GZXCW2geJ09Qm/MjL14afJaIFSwwzF38IpyAkvzLgQ1yEQl+RT/lmxR1JJnxmKbgoLTYVQNS8lqJqu2Qoq4CUlskY5FLZEIHNbpGl2K9rGkEXk3aZP8afU/tthE5V0jaB3J4EMtYK2DW/U2tBVaVxgdM8cNp7sDoPCcUcdjq2YNNApY4hYhzFAu6Pc7XeM9fbRBFlnGdTXXLagFJES4JnOSmpBUKAaPyDULzcYaJu/rGjcoj+CRzDBUV8ONeQZ1PMLYKc/OUsoBCFG9u+/fh6C/ShsfdUOctu6/nTiwiLnQaZIMPNHAOn/Js5CBMwic8WKgxYGg/eEqnZeAcRb5I2qOaMCUTSThw6RoCiOjQs45T/3Cmda3ajnF55Pd78lqgexMtM8Ov86CPadsAaTzb+G65pJUAKQ/MvRjGzv+Ps2dN9p04rWSCOXLSG9fa35MvXJdauUrgtQdVh9hU5/8U9ANp5i/98+UZ+yB6tAzoISaJP8EBlWsTkESSThQ2GA8h0vcrKCbPkrvDGWEsLqV2w7aWiZ05ODtp4cGcgb5BDTGC7qYNkTS4IVIVYzm2N1Us45tPkfcKsIPKZaFe+hSFQcOudmY1aEdqS2wXKn6jqbDJlYhsiKM3innQnxL+R6g7J2BInNT2iDgn4uLvapa+4GLcstauanhjH2tJZ11zbP1QrSwZ2UZgZD6VtJh+/MCF5+DD4JBvT84qbFOpMfcfBi47xxw/C+4SuVRArQEWqXxpZkQmN/OqzY= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9f60d7ca-3575-4fb6-3888-08da52db2288 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:15.8889 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /6ECSD7gJ995cXbfpJZHSSuf94f0VhERNx9/wJ/mYv88/h/8s0H9ogk+Tp27p+M3a52xw1J/6U6HjdbcCnb2cg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8114 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Reuse the shift macros to define the masks. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - New commit board/xilinx/zynqmp/zynqmp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 1a7383d023..56bb01335d 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -45,13 +45,13 @@ #include "pm_cfg_obj.h" #define ZYNQMP_VERSION_SIZE 7 -#define EFUSE_VCU_DIS_MASK 0x100 #define EFUSE_VCU_DIS_SHIFT 8 -#define EFUSE_GPU_DIS_MASK 0x20 +#define EFUSE_VCU_DIS_MASK BIT(EFUSE_VCU_DIS_SHIFT) #define EFUSE_GPU_DIS_SHIFT 5 +#define EFUSE_GPU_DIS_MASK BIT(EFUSE_GPU_DIS_SHIFT) #define IDCODE_DEV_TYPE_MASK GENMASK(27, 0) -#define IDCODE2_PL_INIT_MASK 0x200 #define IDCODE2_PL_INIT_SHIFT 9 +#define IDCODE2_PL_INIT_MASK BIT(IDCODE2_PL_INIT_SHIFT) DECLARE_GLOBAL_DATA_PTR; From patchwork Mon Jun 20 16:36:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645597 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=FG3n18zH; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb1h3rd1z9sFx for ; Tue, 21 Jun 2022 02:38:32 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B5437839FE; Mon, 20 Jun 2022 18:37:30 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="FG3n18zH"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1DE5F82104; Mon, 20 Jun 2022 18:37:21 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on061c.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::61c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id BB3BE82068 for ; Mon, 20 Jun 2022 18:37:17 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MajAfoZXMZ3Tpp3FWNhlOWoXB700ze3aJnFequ44wZYtDt0eLYI+bZdUfgucKb0FOFqgwh5bAMwcJ72ITCZjQnsA5IRIJlMiIWdJEyYJ01KsLNkzAbOs6PUexF/ZzS/Q5qAYUBXIp+3HrxGJeibdvkZ7BQC1O3pMZSMn7yQJtQcmNFFIDvADCvwVlNeeYDIvcHB3DDq1roqTQiS35HtEGoD4wxGccoZUlbk9d8VAv1zlp/PBIN0glzvfWX7eADZJEvtCQziwdpMYYKzpYApbkIXCr/iAv5PHGb+oBu1nRH0v9wkCYP8WA/bKmAimUVi+fj+yfOX5RfDo6M3JuU5TLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7xgctPFnTs7+cuAMyo7tQU2UGrPgcc3z+nnrVKQgIGI=; b=Ojp02iADD7spoANFswpiUDaZGGjeb3YY8EtkWBOhI9luwl1Mozje9yoRlYFRtxt4VqjZUv6kKGG3cn69z2a7FW1fQBWIE2zccfXe8RmpugreK9ls8gMr0Ug/pmbNF0jGEF6wEudSjpfER48zYGW29uM1ufoyZihUVI4ZLGvsAQ2+Fpd1p4+DoddtdsEagOB0E2NBzyKB8Npp6FCOJ/rP8UnjI0N/GHIeXoVKPLduEmCfQiMtuxAZN5hzXdnN41/a1C2bhjBbn6Br15FGIeEzJC1niXIpk0D/vnP3hJldJE+4T+DkxXqAG0q4JiZ63BwrW4aFu+S/UEGjnxAGE0yeFg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7xgctPFnTs7+cuAMyo7tQU2UGrPgcc3z+nnrVKQgIGI=; b=FG3n18zHXkeh7j0icIvEusUOIrCsMy7s7QETKcr0+CHKdy5oYMmHfUdu5OV7KNlPyKPU0W/M+qpuSHc1dfd4ZOaNfnhpgOFbz9yUMbdu6gworKVy6IuEdL33LpHHYtWUa30QHRegb9Z7xu/yftFR/SSsWDbGAyXSl57H6gcOlpo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AM6PR08MB3928.eurprd08.prod.outlook.com (2603:10a6:20b:a9::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:16 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:16 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 06/15] xilinx: zynqmp: Merge device lists Date: Mon, 20 Jun 2022 18:36:41 +0200 Message-Id: <20220620163650.18756-6-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 879b4557-cafb-464b-b274-08da52db22d4 X-MS-TrafficTypeDiagnostic: AM6PR08MB3928:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: O3wwHHXvEFBrlAuUrXOigLYuv2Tny+tvznWRs7hKTRQomzjjPT2cztSE8DeXzs0sKvRVsHWWvAI8/1xH8vIpJoyXp8GJZF+p8iHLSmG22esKV1idtO2wJ7rMs3uKhQwAFnsfB/GSvhs1YQWERbjrybRgCTXU+55oEmrVxegsRDBZoMDhu5DYBSeQbOH67T8urCtvr0EA+hJZ1i7UF7b1K/FOyyI+JXaHwqa3YLK77PD6Mcp/PkPk6aU1/F7twxF/V9Naqf/GsUcqYAB2hi2RKPE2Uw9iYnG4RwGVs5osDrI9H7206cNvcnpe2qhqjoEH6cGUNLhuEoRnkT2Uxx7y/NldWeDNk5wBSvR+9qRGce7u+mQCkk8AIkVb6MgMAvssYSc/OiKW1Ko7vk2FxuH3TpELsczZTcv2bZR8fb/0q4hCiKi8k6ulXNHp4gfuO8PtWRn3vCVRboFnk7hro3H5SxCODUfdRwKr8S68lYGshJLcQuI2yo9LHULaEjeYrA6/TiSsRnrjyVFzqvD8vXx35ZEgmvbFDL7K43/b3ivvKeFQnR63tx7KESnNeg1ugympihyQPLNGhFeGDNW6HOkJNpFuEdMhDyRIi7Fx+dNiCXWX7Z8LnFtQ+JUv87K4KDGTWNC28/I8X9qcu+c4PIJgXtuAGdOhJEdmjULjXRC8NRvxTSQKUQGLMsOjrKIvPd9Qohq4OD2W0j6sash4mlYiGw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(346002)(136003)(376002)(366004)(396003)(39860400002)(66476007)(6506007)(66556008)(8936002)(4326008)(6486002)(1076003)(6916009)(478600001)(8676002)(316002)(66946007)(2616005)(5660300002)(186003)(38350700002)(41300700001)(107886003)(6666004)(36756003)(2906002)(83380400001)(38100700002)(6512007)(26005)(52116002)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Ysz2pqn/qqNQRYpp21ENVUK3RXrvshJHwXHPVP34y5PAWcems1CqxacDKU/SesY9t54MwvL6zDn4TsVARLF7j5re4fMYIRM3zEs9gjsS+ckqpMd4+/7kICUiCzrTKqX4SlgR6o6O5ORMuyOdJ/i8ks4CHmoHp30dNlfVcnfgE2G436jGxq5lz1INHf5we+Smnf8VjpT6qvAvwcDUf9V2bOpdcajVE5c9lD4/g589OSGShSK6IKW+lA/WWJYQluBEaf6Dpdy2odNKgOMbq4DRzXE9NcYFQzEJogzyr6Ff3lUk2/bL2ko/VuKkVIWn/Gsnz09/hitS3qCc2BBcr99Ye+aeV3XIOSvWWa8c2Q1YNJ5HZPmiWNLPH7Zpte+AbrUy9lf/5JK/iiEGAnn8DWAFmjV4eNDlqHHai9OLkUiKg0mtdFMWAp+xBZ/lcr0aEjGXbXF1o5jke99ywXaKPA/tj0J99/+r39stPXq9lC4OvkO3t2S/CgIauG4wNEzx/2GsC1Y8xGJ2roYyhto43pumbB3pFutUKKCm3HaGRXWTv5p5hoa56an+ilo+vb99c2TkLjXI1QC0T0i3YpmWasBhId9IHdXk9a3ZYHDe9Sq3Lv49H+Jgtrz0iy6jqqC7C716TllwuGtuv8ZY6XFAHPbejuj2zhshOTeraKEU7yAQvXNXP2BIuDKe2Ur9oupC0nRPgH2yxgX3YQTX9LorfXWCSuubHxLWUrHUDjAeRa/WRDtjtgc8mAIR4Ge6GgAYWzSoiHbXmKVDy0BuPisv5VIHJ2tGlgiM4J2EDRqZTaGMvgLcmkb5YjQoknWL1Z7nGenelaw6shmcB2EEqsapsjIzMrTKThjElvbTa2q/3Dvkzk+QRSxMWqkQ9oGBnBJhAsjxPwekjI1HLHfYKirQZs9vSuujEdZXhBz91LEo1Tq5wCKTwhC+TCuHsnInPWm/DxgUIzslBFTjQPvFO8gvW140Y8C6bgmJW8yeu8F2vK/c0NQ/qdsq6W6jwsqWGnviRlAnHq3vSEsIGdlicGVGU/7PkynK1ZI7YR00G4XA1VWlN23lPyJ4n3i5MdeDnijVX/LIxUvJsujVCGAHpij5xQ1Az+mmyFxRQEv0zJVAPjZImCL8xfJh2GN8IUhuz+L1RL/dFSTC6VwrBKe1dRF6XHZ/z5CoP6p+lvrbyNZHjgAUSIfTDGOy8CS8zFj5dI2u1Pe+YppVzQtmVL0TCrCLDM+1+fSWKWgTb68vz44fRBrmhRy67954GepaWi5R4y5JJJ5SLC8KypfOTIb/kwunE0XRB8bTl7pc1USwt9CCWGYojUMW8ffrM2pfzgcYdXWM/V8hTUkAvhJzLIz9gZ8+A8RXBlG8y/VGZPL3OOZJLKr/95lvK57SokabTu9XuD1OFLjweZZI0f5QeakG2Tce3dMFU3yjJigRVE0H6sWj3EeVwnAOWRB3c/mTC79qiQRDScJRSki6zpQ2MqRjrqTdnZG2gEtqbLnu7wUS4E58qQ/aBZW+rnXsfIKsKps6WOs76wdxiA9fo/+ibDiG83uzL+9p6JLKYEPPAtA/k0fP1c4WnXpYDkN2UYCYlMZMfUbnfhjESSsbQhf/qIFZe8VU7IYOHk1ynm28NZzLHv2iTOw7kOyfkbALExapZgPLTRNevbllB6gIdhrZNIdDHoGRhh9mA9IcyHF0KJjLy7F9v519aEJymhJl1hpOrqtIzZED2o1hw8J8fuyA7+G7Yxm2xeULyxwYG5ZsY5IYY9occA5Xki4= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 879b4557-cafb-464b-b274-08da52db22d4 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:16.3445 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: u8/+BdIGRYPCKwTLwq7nrZirpu2Aanw/ZLOROyh+krqR43eJyjQlTSbCItZgK853ZHcI8tO3lVia8WB+FbX6QQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3928 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Merge the svd / xck devices into to the common zynqmp device list. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - New commit board/xilinx/zynqmp/zynqmp.c | 54 ++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 56bb01335d..1f18fb3473 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -65,11 +65,13 @@ enum { ZYNQMP_VARIANT_DR = BIT(3U), }; -static const struct { +struct zynqmp_device { u32 id; u8 device; u8 variants; -} zynqmp_devices[] = { +}; + +static const struct zynqmp_device zynqmp_devices[] = { { .id = 0x04688093, .device = 1, @@ -198,37 +200,33 @@ static const struct { .device = 67, .variants = ZYNQMP_VARIANT_DR, }, -}; - -static const struct { - u32 id; - char *name; -} zynqmp_svd_devices[] = { { .id = 0x04714093, - .name = "xck24" + .device = 24, + .variants = 0, }, { .id = 0x04724093, - .name = "xck26", + .device = 26, + .variants = 0, }, }; -static char *zynqmp_detect_svd_name(u32 idcode) +static const struct zynqmp_device *zynqmp_get_device(u32 idcode) { - u32 i; + idcode &= IDCODE_DEV_TYPE_MASK; - for (i = 0; i < ARRAY_SIZE(zynqmp_svd_devices); i++) { - if (zynqmp_svd_devices[i].id == (idcode & IDCODE_DEV_TYPE_MASK)) - return zynqmp_svd_devices[i].name; + for (int i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { + if (zynqmp_devices[i].id == idcode) + return &zynqmp_devices[i]; } - return "unknown"; + return NULL; } static char *zynqmp_get_silicon_idcode_name(void) { - u32 i; + const struct zynqmp_device *device; u32 idcode, idcode2; char name[ZYNQMP_VERSION_SIZE]; u32 ret_payload[PAYLOAD_ARG_CNT]; @@ -254,21 +252,17 @@ static char *zynqmp_get_silicon_idcode_name(void) debug("%s, IDCODE: 0x%0x, IDCODE2: 0x%0x\r\n", __func__, idcode, idcode2); - for (i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { - if (zynqmp_devices[i].id == (idcode & IDCODE_DEV_TYPE_MASK)) - break; - } - - if (i >= ARRAY_SIZE(zynqmp_devices)) - return zynqmp_detect_svd_name(idcode); + device = zynqmp_get_device(idcode); + if (!device) + return "unknown"; /* Add device prefix to the name */ - ret = snprintf(name, ZYNQMP_VERSION_SIZE, "zu%d", - zynqmp_devices[i].device); + ret = snprintf(name, ZYNQMP_VERSION_SIZE, "%s%d", + device->variants ? "zu" : "xck", device->device); if (ret < 0) return "unknown"; - if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_EV) { + if (device->variants & ZYNQMP_VARIANT_EV) { /* Devices with EV variant might be EG/CG/EV family */ if (idcode2 & IDCODE2_PL_INIT_MASK) { u32 family = ((idcode2 & EFUSE_VCU_DIS_MASK) >> @@ -304,13 +298,13 @@ static char *zynqmp_get_silicon_idcode_name(void) strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : "e", sizeof(name)); } - } else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_CG) { + } else if (device->variants & ZYNQMP_VARIANT_CG) { /* Devices with CG variant might be EG or CG family */ strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : "eg", sizeof(name)); - } else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_EG) { + } else if (device->variants & ZYNQMP_VARIANT_EG) { strlcat(name, "eg", sizeof(name)); - } else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_DR) { + } else if (device->variants & ZYNQMP_VARIANT_DR) { strlcat(name, "dr", sizeof(name)); } else { debug("Variant not identified\n"); From patchwork Mon Jun 20 16:36:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645596 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=JAbJWS4k; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb1R0WDXz9sFx for ; Tue, 21 Jun 2022 02:38:18 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 4F965839E6; Mon, 20 Jun 2022 18:37:29 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="JAbJWS4k"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1BEA283345; Mon, 20 Jun 2022 18:37:21 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on061c.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::61c]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id E40E682072 for ; Mon, 20 Jun 2022 18:37:17 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kJKgo3tVhNYmMNxY3RqasuL3UGd6EOfl3dWZy2lkMzzue7EyetrDE1uBssDUclUNfDuJU/6IMr6G35tPHiFTvyFawAoY12kDtI6JryF+nyjBl8iCKS3SaxKND2OFwODBP52V7EB1TwDPmdMksKZ1nnbr8HqDkr8vH2q49ckFQDQS/VjRRCtArSf5ZivOg6U4gWZrsE//A9aoXnIQkhOwGGDC01GVx1EIB3tHCa4M5aTfmomT+8atO5bPEnLvBkk2YgfpLXeovAylYv65eLfjtckS2rfIf/aIa0GKcvamk/XOL5NhrxHDlaEZ/DW25jY8ROLEMDewfPNdMhDj6XuIDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=p6/ALjxl4PZAY2r3ZA0QE94eNb/R945z7mcr/Wjht0c=; b=dbFrCgyJv4nzlNXPYUjMMpjNe+exjZFp21ghLUFdmFsbYBVZVIv3ZqxrCwN1v57CN5O1q09rM2NCXpQf9X+9LME3deBog2LVpK5DfsPEwAq0HF3ene9cbRotuhcRjFy9CszMB9OGxElHA/1i66LPmk4D3R1nrS4CtrJFgdrREsQBD2qg/Y8PnJXvDRPJg8lRUT+NnoADLekmggP07A4hU0g5gPPQi7cjtyMJjvGvGxZoYUiwUfcXWzyMSy8jDjzkz9QU1Y4EXsyOBcdxUV7sLOM9OdBq1EbjOlafpsU23E0JoGFv+irHLK3MZf0mZ/fGrS8FGZz9Mf3g1h3EmEx37Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=p6/ALjxl4PZAY2r3ZA0QE94eNb/R945z7mcr/Wjht0c=; b=JAbJWS4kuXdphFOF0apkG9JlT60bIofYYhezMZ/Ezo4ejazfaIgySCINRq1M+mIyAz+b1ib42RJRrtGB4XNE56dhE/jLzFTQQHIoRPP2FRkDKzHD01aizEOpEos0fwzkt5b+uFAYCPGF6L1EwJyFKH1VB/AAG90CHqC09Gl1+zw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AM6PR08MB3928.eurprd08.prod.outlook.com (2603:10a6:20b:a9::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:16 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:16 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 07/15] soc: xilinx: zynqmp: Remove redundant checks for zynqmp_mmio_read Date: Mon, 20 Jun 2022 18:36:42 +0200 Message-Id: <20220620163650.18756-7-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ba4cd5a9-0977-4da0-a5ed-08da52db2317 X-MS-TrafficTypeDiagnostic: AM6PR08MB3928:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DF/Bc37TazetMf/7hxbVv9UjNm1zhhHn5u4Vk6pBvN/Qd1SEgRVzfz4oI6D6SYkqMIG2z1R4jy9p52gHEOxd1Eh2iiUSbBDrpVfT78mbJCFPme2+2DZw8qu5wenRsEyW8JwGnEX98XAQbcLKcLz7T6UX8bzjO5+J2dOHQERx7reT3Al+uSa4sEGWWH7Mn2DmbxX+oMedEoXzXou4Xa6BeIahggR4IbBnd4pU25AgWKAR5Fwp0jGhOTL6vcB/fVWghJNgbD0i/7c6QyCe7OahdHIUrOhkFtP4CVfxLYdows04u9lEXukdZQqOyNl1g4T0kC4Kd30bq6Otl1LTcqRw4OwrLIhvh+ISbsBwXKhKJSBjLNY0bFgS9ku29kcQVIHayYtfvFIMnmTUwRNS6uoxWtGQHm/ZLoGN9BIJgJtS5ToDJgjjZiZf20mcVNGyAuasb4LmQFgneZpsGZ5fgDEaNDBUxe0PeGQpCCED1gSamEqOtF/qVpIaFiSfeHzVionPrkDWX9KsNL9Rto6chdWhmQdYrv7qQKao40pvDymbXmv7whZLj2nAV3hBj9dZIMGsCq0hJkYtHR/xotoSmvlsv21Td7B0VKcm8YPUmhIete3EfIJwiKwZTqidCxieC44fGiHIuR/qE4H44s2hwAc9GYdMuVj77e03gZqC9Zxiez23zPoaovNxGNatr/7H0PatCxUQgHuf4xWVcCYM4wUVJw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(346002)(136003)(376002)(366004)(396003)(39860400002)(4744005)(66476007)(6506007)(66556008)(8936002)(4326008)(6486002)(1076003)(6916009)(478600001)(8676002)(316002)(66946007)(2616005)(5660300002)(186003)(38350700002)(41300700001)(107886003)(6666004)(36756003)(2906002)(83380400001)(38100700002)(6512007)(26005)(52116002)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: EkYLX9O+XIzLKe/pcKS07tkv2D5V1QSjEP0Mix2MpvRpneXbEKVxGKv2D6zKNBkl7kXyebaQ364iODGxI9Nyk/vIEm64hS8CiJk8AwsfkXE6S9vCG2dgSeEsuZ3Fg/cTp3+gTsy6S8CTJHH2Xukm4vq9dnORNmftmwIzclKw8bz6ssaW6/lyL0rihstBxPzYIChjkBL6Pmz4Wh/d/uIS4aaewN5ALEfG8KDHX8MBJafcCRJA/fFmWcmboHbA1v1WSVdc/RhT/k5lfCGiAXYilAhztYEqGnoSLItipiOQxGA+49bmHoU2fmlnylfIWuOi98WUVOsrMG4uqWn+UhdyfcyqF1oeOxDFB/aHPQ9StKpFe4YhgdFRxwsUFP6p3KuyS9onsyQsVkij7NqKBAgWsL9XtchsBCaBWyUL5gRpyf05XS4m8aLIcebm2FbMEYMNXIU7s8t8PbvSc9JEwYQD5+6+GKfT+iPkTBA94q05fP9oy/tOryNi7Mi3iVBKavxRf11NFd//d6uIaivR1TAJxIcPSA3F2SUoWIW+YU5X7RfAnBiUfX8gsWrnukqo2GOvGgJB07b19H/V67vjJ9gNaFw3wIyBdVXbrLS/kYvG1ztyJeDOOUlnIPs875E+lS0UZq4J/g12fvwcE5pw7455c9YrC2rA6mGo1X+kylBtcORrSE6a+2Xlt75eEuOXXBlEgBFdVLanW1ez9SLNAmOs8NEhgKkEjF5wWmiiX71QomHu6RNYd3f51VOuZ2sq3zpoEkkhkCZqYvZgFeCOQvDplXWyE1xJGgqZRo37FVRK/UJdOY/a/t67ghqMAvHOa3nFBvqhLSLkXqK0GtuLVzHNrHOr4zC++Biy5R12p7V9pivHNC2IifByBlcBv+P0UL1EY3pZ3uiIRNhQGO6e+9A4bxk5THuhvKsH/tJdc3EVIQd9appV1FLPwrjog/4DzzQ/Tb+/eZPffx8iDf/F2fy1EW5NvGHdY3ZOw+kVYOOAph2EY4BUXcTX2KUlWZhnSU9A6k0VLzhiZqfqEvIlqf/uakWs+53gavbEGLwFr5gZX1TmsQmUIurLm+Bq6xTWW27mOq0hyE1bm2lpdo0ok4h4YDjrZQUWhunrmkws/N0LR+bAeep8iDxA2eYY4O/jM8u9nGrJyMSK1awNW3O6ANQqVKjFMHfcZlV0Ghq5MUX/QPFJNK191gE9Wq5hyXbcGmJYeeM7dIUDVXJ23e5TcS20Sesxn81RGD2kL2fXs70E32AwjOHH4bjS/3MTSD5r2nnnExT/fAddi4TOeUvP33yNvJWsUzSWBqtqhX2Sv59s51eFaZl8NiL/u8riq6DoKtn0X9wEN7QPjcv7ip1tI+kTR9TsjGB8EBa/uWGTVCbfYFa+CVyEmo8J1CgD9dM/3vJtUISHxHIgVKZzu3bbqy7HjYkAdk/n1W3T36Nsmgr6RDTrBiLtl6CUQ5WxsBTn4mcds6a8pCVnk+OPDkWoBlqTSdBzuRHm9TBkzIMwflx1fYr0ZYKnxvJtyo4mzkdth4kVkXdVfOUoi7LpKlCPtJcw+Py5coF7XUAxs+J9HRbAYAZeTfmmv2a2tsjHiGpcKpHbmcA1kZCUZzIkc7qNG6Zh3ZeaKoRhstjhgOUdfxEEIAVXUNhp17Vx0PCf6Z6pLtbNo6ll0Dn0YuDkEbwsPcfGNFwPD47qrOi7HeXzwHy/D6SF5HnDzSfLVY5nmYnxDTRZ+WkMKMfphQMjTPRCywMiPyo/Hvt9xi+vQdXpBegB3yI= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: ba4cd5a9-0977-4da0-a5ed-08da52db2317 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:16.8757 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MX4Yu3HXe9K+T8QOafA22PWdmTD3dDWznpw0YumcdwX+OKJ+EQt8bVQCBKVS+uc3vdyekxprsIn97GD1+U+cQQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3928 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Remove the redundant SPL and CurrentEL checks for the zynqmp_mmio_read function call because the function itself runs the same checks. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - New commit drivers/soc/soc_xilinx_zynqmp.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/soc/soc_xilinx_zynqmp.c b/drivers/soc/soc_xilinx_zynqmp.c index a71115b17c..563d93da24 100644 --- a/drivers/soc/soc_xilinx_zynqmp.c +++ b/drivers/soc/soc_xilinx_zynqmp.c @@ -54,8 +54,7 @@ static int soc_xilinx_zynqmp_probe(struct udevice *dev) priv->family = zynqmp_family; - if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3 || - !IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE)) + if (!IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE)) ret = zynqmp_mmio_read(ZYNQMP_PS_VERSION, &ret_payload[2]); else ret = xilinx_pm_request(PM_GET_CHIPID, 0, 0, 0, 0, From patchwork Mon Jun 20 16:36:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645605 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=yA41WzZc; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb5j6T4mz9sFx for ; Tue, 21 Jun 2022 02:42:01 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E7EFE84253; Mon, 20 Jun 2022 18:37:41 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="yA41WzZc"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 0EBAD80F88; Mon, 20 Jun 2022 18:37:24 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on060f.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::60f]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id D6BE381F8B for ; Mon, 20 Jun 2022 18:37:18 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Wpip3txAUlCXO2gpp5MSy36ONC36KTfGNLfasuHgkBoA1AdJJdIHnifYABTRijUBdAJyVEUrnoJDAlF+B34kPKtyf1+i1YoD37TnOqGlJ4qEH2i+tjIf/nIw6RUzHkCb7zGzkRB4Gxo4qygzmIq/XS4LPEefuO+GmN9L4xrI2ITigrMhsQpcSmJ7hf1ygiEU0eS1U9mc78nXJFYC7ffekw/MYmTZh8/v54qrTPnKFNaM5dQDwE2GcH2WzH2tK7T6h1oZZkJcJ6J9+Rx7Ggygi44dGZBgTFvL030j84Q6MxRDnbHxosptS5ZIz+B/G099Q1gDE4YaJQJRIzXzsFyTeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZtYYhvJrZgJ6ugJmmA+unhbkSFNQ4Uhb1lGlxAHme/k=; b=SI8nEImrjL19SAxkjbXMil2It/xUOtaxRmUhjwQ1Pbcqob/CZlzCeO5NbrkqGLrEms2SAitMvZqxOcj+ZpU2rapqv5vOrOUYf39SU8ND1bPvM/GEdHg+GBCRPOjgIS3vYX17YgggJf1o9bYh4/xMX8EqyNCnWGvkcAsj54GZBGL8JoZItI3QdW898tjT1xLhPjPDRTWhlMZjjDJGHgK2nxIiHO2yvORdMECb3qXwIdsVJUjlqPe+6jaNjCP3rkR+nDlyABXsMg07d1uvnN7wAnij1zLNCBLr6YZFhgUY3GEhV82Oo+xALB/xDu4dxTrWn9cZ4FY6oQgWwSflbREE6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZtYYhvJrZgJ6ugJmmA+unhbkSFNQ4Uhb1lGlxAHme/k=; b=yA41WzZcEE1SXHFuuiroEa340hXIH2RcMDb+MmBznImgytoF97EwYLzRHCa3cM8pqqXuWQ9/ckSwSN1Hd18shhhC2KzId9pkVhHGdRzGQaamz9U2f6Z0apF3cQouTBMVXLqlXFEhvsLvtt8NJVEqM3oi9V6BlDePfHJEFwO09wM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AM6PR08MB3928.eurprd08.prod.outlook.com (2603:10a6:20b:a9::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:17 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:17 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 08/15] soc: xilinx: zynqmp: Add machine identification support Date: Mon, 20 Jun 2022 18:36:43 +0200 Message-Id: <20220620163650.18756-8-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d5fe69fd-88e7-43f8-28eb-08da52db236d X-MS-TrafficTypeDiagnostic: AM6PR08MB3928:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: slrZfURQva158AKkmccQ6HHLYrQ/2gdf1uR+8lffEdtU1gqJE97BoBBLn3jOp2zyEDKMV/cXAAiBCZa1RkQO4htxb/2937u+/I7uGjpq1raHzOONLFNpwGoPKyGKvyG3kByJngYjsPGXNVd56R2ekmNeKI7Lvc41yGXW/aLPXmJfmJdbUxTm9z7WID+rfCI8Ir6k5qBftwRfhzTFpK7Tv19wCrYBrk/zMVVXFi4F7zPMuYfzv5UrNu2PCdzCx/7RFo1+xhKWGzMRBnvdqtSSklhC4/lb+1+pizwHkY9XSS2s0l5o5wNm1CrDrZ9fQqpbaaiy5suhtXu/53zjPTjb2C6kmc1bV+StG8aBym91uQx5J2bAAfgAfH5sxAKQqtmiYje3G29wCsLzpBmpmToC/9X3MEIdf3mIbHwlKB+T6UY5QSxRS05QnRfA57CumtBEb39zmtzwRoYUMa160xUrTzGRkE7msEUyULdkOyQpSQkMSyvmeCwZcYsp9yQh+uvUC8IKBiq35pq+FLXPVeFCw903LUhfFu7flOrwbsjz4ky5lvHjOXG+88H6vKuzrUe0uheijB1pbQCo6WNTGZkiPhdypUEs8rz2PYhXx1Mo52SL5beLOtiD7VjmVqZD0hpa5H+j6M/WF0i7kZoidf2LVQEXxRa1VujCWgtuy8tESI62cETIK4qzODqORFOA6zSQkdud5Rxqzd+bFGNa09kR3g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(346002)(136003)(376002)(366004)(396003)(39860400002)(30864003)(66476007)(6506007)(66556008)(8936002)(4326008)(6486002)(1076003)(6916009)(478600001)(8676002)(316002)(66946007)(2616005)(5660300002)(186003)(38350700002)(41300700001)(107886003)(6666004)(36756003)(66574015)(2906002)(83380400001)(38100700002)(6512007)(26005)(52116002)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?H3Y7M885mbnD1eYTn4InRSUFAn4F?= =?utf-8?q?eDnNMqIIqJZpTMSFaHLaco4ZAkbgeCU0pigE4qjk1ukt1RB34Jn8LWcfZBImpQnd9?= =?utf-8?q?VIE7QV5h4k9EmtTRUVmhrkyHe73/WN/n0zp0oVPImeujv7AWBbKMO13p0ujSd1dbE?= =?utf-8?q?XC+NbDu80Hm4cY51Q8yf+E7uB0s02wyivEDcrrK5hRPFCKyrT+pjxk0Qk5/SEzcI6?= =?utf-8?q?LUuNHv0Di+m/Ui0hN2I9M+70eNTx/o3V00JsurTIsGnkotVy92IalYgQH8smr1Fr2?= =?utf-8?q?EEnEodiIdxC/9l8BxLsZBhuilYRbVQBv3AOpSEBsrLK05droD2Nv+tJy155X8w2W/?= =?utf-8?q?1h5HZjELIQON5XDTjkxAPe91jaVxduoJAlI4mjVUax9U9MDrJnMQs29htuokWLD7u?= =?utf-8?q?xezdrUCSTqkMEtgaiAfAkBXTZyAZ20EC6UugLkTNGdWmQF5cYdhhLJBb2tIapxtIn?= =?utf-8?q?v7KxzJC8RUoY4+bxAT41e7hQ9NMFL9L6D2mwR0REAokHJxTd25mxYXFmyBlQG73AW?= =?utf-8?q?qxh0vi3kSun2qsfhiQlAXQZ27u8R1qSzZl8Bt/Z45WyF9xb5Fo8tUSOMmR5n3cBot?= =?utf-8?q?jwjPzAi9C22ftm5VKf6zIAn+SENVrzQRHcNeAPv1Oae0zQOfFUTn2XZfPfJStuilf?= =?utf-8?q?BtYer0+AMaV4IxflI+r9TGX3XryRjz5L1hlRV6N0LcbaZvDww+tLYKOZKRU2xbo60?= =?utf-8?q?SUMO/X579XaocdmiaPpuGcw/QCiSvkZ0xkbbgCTyiaA1VXOx+ZkuhttuqW2ysSaV5?= =?utf-8?q?SAYVajc+/LHniEyG3NxBraOHSSOgq4izydHACYzcjYsLYrcc5tXPeyKPhx/yiB0Sq?= =?utf-8?q?kvfxD2RsKk2LMGUtdLGG+ZueT6jefA1ad2RC8RCRR0uYVVvKDG6ub7PM0q2eveIh/?= =?utf-8?q?hPj2bSMG2vSm+1QGRw13OykiZ8YaV+mT4pvSFDAqL3IoxrC0EgWnObqaq2UqrNJwZ?= =?utf-8?q?dGqPt0imDoVqoWJ9jPPv3PmDTGKuR1A7KyBnQ9dmJrK/s+ZiBYgmz5AnjyuQc959o?= =?utf-8?q?WT6SNzSGniDQA+mrkBYiMa/BPal4vkcNysZ/xisXrf2IfU5wEkdWOlhIsLbvv13/P?= =?utf-8?q?Psqi7UoTi25qOnjeNDS1grVafat7JXqAQoNVVua4fD4lm+iVyZFd+uxsxBnWZ9v0H?= =?utf-8?q?NDEXO0eF0JuTQ/43RvOAhnEseXfYUsX9YglQosaxySoUFutYNDouRcShMcolmJ0gQ?= =?utf-8?q?xG9MCA96wz8IhymAuWTL5nDiZPRFZEhfoCTohCAv+/CsYOJJvpqhAMQzch6NPfApw?= =?utf-8?q?1U1kA7uVjGOr9NsauexXx8HH68bnsJFBHJvzqPepFrttt+pPb4RQhqeQYnw9/SJif?= =?utf-8?q?WRu343oVAtG9KYJXJ/37lp7TmVzljOYgV+noBBO8ST6R2raWGuBbfI1DS3xu8K8QE?= =?utf-8?q?zGYo2Nt0HLkr77DsT5zSQyPKG825Y+EAfpLwdfavMeIj5tG7UWsXAHGFRdOJIt85k?= =?utf-8?q?SJhKaCOq0Q4bFL+YRGwjgdxZ/d2Ld6shWNq/PNGQgiZ4OGC4dA12P+O+akURMTXae?= =?utf-8?q?YQdVvPTnk4xHQnDEBmcbOk0DyXX53xg490c4f5D1r5P5Df6aAY4TdR31IQcjzxnno?= =?utf-8?q?kjmYPdltiuYeV5bUy1de/TWuBOkLHiSBRpDmfqJvxjj8gxCV9LW1RRmk5AqqkesGX?= =?utf-8?q?RYyCaZKnHDA3CbbFlB0hfetlRmZRaBUoh3oXwjziQ7n9Oh/C6Cuz4=3D?= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: d5fe69fd-88e7-43f8-28eb-08da52db236d X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:17.5455 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NTmEyB62JOxRB41JUWLKQxffpcHb095f9aCF1kjKu+ObnbKz4e81lRD6OCjwmb79KymeOKjfq9fywofEChCBlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3928 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Add machine identification support based on the zynqmp_get_silicon_idcode_name function and use the soc_get_machine function of the soc uclass to get silicon idcode name for the fpga init. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - Move zynqmp_family to its old place - Remove empty line after zynqmp_get_device - Add const to zynqmp_devices - Merge with 'xilinx: zynqmp: Use soc machine function to get silicon idcode name' patch board/xilinx/zynqmp/zynqmp.c | 283 ++------------------------------ drivers/soc/soc_xilinx_zynqmp.c | 283 ++++++++++++++++++++++++++++++++ 2 files changed, 298 insertions(+), 268 deletions(-) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 1f18fb3473..06f6dbab18 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -44,274 +45,10 @@ #include "pm_cfg_obj.h" -#define ZYNQMP_VERSION_SIZE 7 -#define EFUSE_VCU_DIS_SHIFT 8 -#define EFUSE_VCU_DIS_MASK BIT(EFUSE_VCU_DIS_SHIFT) -#define EFUSE_GPU_DIS_SHIFT 5 -#define EFUSE_GPU_DIS_MASK BIT(EFUSE_GPU_DIS_SHIFT) -#define IDCODE_DEV_TYPE_MASK GENMASK(27, 0) -#define IDCODE2_PL_INIT_SHIFT 9 -#define IDCODE2_PL_INIT_MASK BIT(IDCODE2_PL_INIT_SHIFT) - DECLARE_GLOBAL_DATA_PTR; #if CONFIG_IS_ENABLED(FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) static xilinx_desc zynqmppl = XILINX_ZYNQMP_DESC; - -enum { - ZYNQMP_VARIANT_EG = BIT(0U), - ZYNQMP_VARIANT_EV = BIT(1U), - ZYNQMP_VARIANT_CG = BIT(2U), - ZYNQMP_VARIANT_DR = BIT(3U), -}; - -struct zynqmp_device { - u32 id; - u8 device; - u8 variants; -}; - -static const struct zynqmp_device zynqmp_devices[] = { - { - .id = 0x04688093, - .device = 1, - .variants = ZYNQMP_VARIANT_EG, - }, - { - .id = 0x04711093, - .device = 2, - .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, - }, - { - .id = 0x04710093, - .device = 3, - .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, - }, - { - .id = 0x04721093, - .device = 4, - .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | - ZYNQMP_VARIANT_EV, - }, - { - .id = 0x04720093, - .device = 5, - .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | - ZYNQMP_VARIANT_EV, - }, - { - .id = 0x04739093, - .device = 6, - .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, - }, - { - .id = 0x04730093, - .device = 7, - .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | - ZYNQMP_VARIANT_EV, - }, - { - .id = 0x04738093, - .device = 9, - .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, - }, - { - .id = 0x04740093, - .device = 11, - .variants = ZYNQMP_VARIANT_EG, - }, - { - .id = 0x04750093, - .device = 15, - .variants = ZYNQMP_VARIANT_EG, - }, - { - .id = 0x04759093, - .device = 17, - .variants = ZYNQMP_VARIANT_EG, - }, - { - .id = 0x04758093, - .device = 19, - .variants = ZYNQMP_VARIANT_EG, - }, - { - .id = 0x047E1093, - .device = 21, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047E3093, - .device = 23, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047E5093, - .device = 25, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047E4093, - .device = 27, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047E0093, - .device = 28, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047E2093, - .device = 29, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047E6093, - .device = 39, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047FD093, - .device = 43, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047F8093, - .device = 46, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047FF093, - .device = 47, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047FB093, - .device = 48, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x047FE093, - .device = 49, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x046d0093, - .device = 67, - .variants = ZYNQMP_VARIANT_DR, - }, - { - .id = 0x04714093, - .device = 24, - .variants = 0, - }, - { - .id = 0x04724093, - .device = 26, - .variants = 0, - }, -}; - -static const struct zynqmp_device *zynqmp_get_device(u32 idcode) -{ - idcode &= IDCODE_DEV_TYPE_MASK; - - for (int i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { - if (zynqmp_devices[i].id == idcode) - return &zynqmp_devices[i]; - } - - return NULL; -} - -static char *zynqmp_get_silicon_idcode_name(void) -{ - const struct zynqmp_device *device; - u32 idcode, idcode2; - char name[ZYNQMP_VERSION_SIZE]; - u32 ret_payload[PAYLOAD_ARG_CNT]; - int ret; - - ret = xilinx_pm_request(PM_GET_CHIPID, 0, 0, 0, 0, ret_payload); - if (ret) { - debug("%s: Getting chipid failed\n", __func__); - return "unknown"; - } - - /* - * Firmware returns: - * payload[0][31:0] = status of the operation - * payload[1]] = IDCODE - * payload[2][19:0] = Version - * payload[2][28:20] = EXTENDED_IDCODE - * payload[2][29] = PL_INIT - */ - - idcode = ret_payload[1]; - idcode2 = ret_payload[2] >> ZYNQMP_CSU_VERSION_EMPTY_SHIFT; - debug("%s, IDCODE: 0x%0x, IDCODE2: 0x%0x\r\n", __func__, idcode, - idcode2); - - device = zynqmp_get_device(idcode); - if (!device) - return "unknown"; - - /* Add device prefix to the name */ - ret = snprintf(name, ZYNQMP_VERSION_SIZE, "%s%d", - device->variants ? "zu" : "xck", device->device); - if (ret < 0) - return "unknown"; - - if (device->variants & ZYNQMP_VARIANT_EV) { - /* Devices with EV variant might be EG/CG/EV family */ - if (idcode2 & IDCODE2_PL_INIT_MASK) { - u32 family = ((idcode2 & EFUSE_VCU_DIS_MASK) >> - EFUSE_VCU_DIS_SHIFT) << 1 | - ((idcode2 & EFUSE_GPU_DIS_MASK) >> - EFUSE_GPU_DIS_SHIFT); - - /* - * Get family name based on extended idcode values as - * determined on UG1087, EXTENDED_IDCODE register - * description - */ - switch (family) { - case 0x00: - strlcat(name, "ev", sizeof(name)); - break; - case 0x10: - strlcat(name, "eg", sizeof(name)); - break; - case 0x11: - strlcat(name, "cg", sizeof(name)); - break; - default: - /* Do not append family name*/ - break; - } - } else { - /* - * When PL powered down the VCU Disable efuse cannot be - * read. So, ignore the bit and just findout if it is CG - * or EG/EV variant. - */ - strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : - "e", sizeof(name)); - } - } else if (device->variants & ZYNQMP_VARIANT_CG) { - /* Devices with CG variant might be EG or CG family */ - strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : "eg", - sizeof(name)); - } else if (device->variants & ZYNQMP_VARIANT_EG) { - strlcat(name, "eg", sizeof(name)); - } else if (device->variants & ZYNQMP_VARIANT_DR) { - strlcat(name, "dr", sizeof(name)); - } else { - debug("Variant not identified\n"); - } - - return strdup(name); -} #endif int __maybe_unused psu_uboot_init(void) @@ -402,6 +139,11 @@ static void print_secure_boot(void) int board_init(void) { +#if CONFIG_IS_ENABLED(FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) + struct udevice *soc; + char name[SOC_MAX_STR_SIZE]; + int ret; +#endif #if defined(CONFIG_ZYNQMP_FIRMWARE) struct udevice *dev; @@ -428,10 +170,15 @@ int board_init(void) printf("EL Level:\tEL%d\n", current_el()); #if CONFIG_IS_ENABLED(FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) - zynqmppl.name = zynqmp_get_silicon_idcode_name(); - printf("Chip ID:\t%s\n", zynqmppl.name); - fpga_init(); - fpga_add(fpga_xilinx, &zynqmppl); + ret = soc_get(&soc); + if (!ret) { + ret = soc_get_machine(soc, name, sizeof(name)); + if (ret >= 0) { + zynqmppl.name = strdup(name); + fpga_init(); + fpga_add(fpga_xilinx, &zynqmppl); + } + } #endif /* display secure boot information */ diff --git a/drivers/soc/soc_xilinx_zynqmp.c b/drivers/soc/soc_xilinx_zynqmp.c index 563d93da24..c10fc7d444 100644 --- a/drivers/soc/soc_xilinx_zynqmp.c +++ b/drivers/soc/soc_xilinx_zynqmp.c @@ -3,10 +3,15 @@ * Xilinx ZynqMP SOC driver * * Copyright (C) 2021 Xilinx, Inc. + * Michal Simek + * + * Copyright (C) 2022 Weidmüller Interface GmbH & Co. KG + * Stefan Herbrechtsmeier */ #include #include +#include #include #include #include @@ -22,11 +27,257 @@ */ static const char zynqmp_family[] = "ZynqMP"; +#define EFUSE_VCU_DIS_SHIFT 8 +#define EFUSE_VCU_DIS_MASK BIT(EFUSE_VCU_DIS_SHIFT) +#define EFUSE_GPU_DIS_SHIFT 5 +#define EFUSE_GPU_DIS_MASK BIT(EFUSE_GPU_DIS_SHIFT) +#define IDCODE_DEV_TYPE_MASK GENMASK(27, 0) +#define IDCODE2_PL_INIT_SHIFT 9 +#define IDCODE2_PL_INIT_MASK BIT(IDCODE2_PL_INIT_SHIFT) + +#define ZYNQMP_VERSION_SIZE 7 + +enum { + ZYNQMP_VARIANT_EG = BIT(0), + ZYNQMP_VARIANT_EV = BIT(1), + ZYNQMP_VARIANT_CG = BIT(2), + ZYNQMP_VARIANT_DR = BIT(3), +}; + +struct zynqmp_device { + u32 id; + u8 device; + u8 variants; +}; + struct soc_xilinx_zynqmp_priv { const char *family; + char machine[ZYNQMP_VERSION_SIZE]; char revision; }; +static const struct zynqmp_device zynqmp_devices[] = { + { + .id = 0x04688093, + .device = 1, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x04711093, + .device = 2, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, + }, + { + .id = 0x04710093, + .device = 3, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, + }, + { + .id = 0x04721093, + .device = 4, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | + ZYNQMP_VARIANT_EV, + }, + { + .id = 0x04720093, + .device = 5, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | + ZYNQMP_VARIANT_EV, + }, + { + .id = 0x04739093, + .device = 6, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, + }, + { + .id = 0x04730093, + .device = 7, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG | + ZYNQMP_VARIANT_EV, + }, + { + .id = 0x04738093, + .device = 9, + .variants = ZYNQMP_VARIANT_EG | ZYNQMP_VARIANT_CG, + }, + { + .id = 0x04740093, + .device = 11, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x04750093, + .device = 15, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x04759093, + .device = 17, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x04758093, + .device = 19, + .variants = ZYNQMP_VARIANT_EG, + }, + { + .id = 0x047E1093, + .device = 21, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E3093, + .device = 23, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E5093, + .device = 25, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E4093, + .device = 27, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E0093, + .device = 28, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E2093, + .device = 29, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047E6093, + .device = 39, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047FD093, + .device = 43, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047F8093, + .device = 46, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047FF093, + .device = 47, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047FB093, + .device = 48, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x047FE093, + .device = 49, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x046d0093, + .device = 67, + .variants = ZYNQMP_VARIANT_DR, + }, + { + .id = 0x04714093, + .device = 24, + .variants = 0, + }, + { + .id = 0x04724093, + .device = 26, + .variants = 0, + }, +}; + +static const struct zynqmp_device *zynqmp_get_device(u32 idcode) +{ + idcode &= IDCODE_DEV_TYPE_MASK; + + for (int i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { + if (zynqmp_devices[i].id == idcode) + return &zynqmp_devices[i]; + } + + return NULL; +} + +static int soc_xilinx_zynqmp_detect_machine(struct udevice *dev, u32 idcode, + u32 idcode2) +{ + struct soc_xilinx_zynqmp_priv *priv = dev_get_priv(dev); + const struct zynqmp_device *device; + int ret; + + device = zynqmp_get_device(idcode); + if (!device) + return 0; + + /* Add device prefix to the name */ + ret = snprintf(priv->machine, sizeof(priv->machine), "%s%d", + device->variants ? "zu" : "xck", device->device); + if (ret < 0) + return ret; + + if (device->variants & ZYNQMP_VARIANT_EV) { + /* Devices with EV variant might be EG/CG/EV family */ + if (idcode2 & IDCODE2_PL_INIT_MASK) { + u32 family = ((idcode2 & EFUSE_VCU_DIS_MASK) >> + EFUSE_VCU_DIS_SHIFT) << 1 | + ((idcode2 & EFUSE_GPU_DIS_MASK) >> + EFUSE_GPU_DIS_SHIFT); + + /* + * Get family name based on extended idcode values as + * determined on UG1087, EXTENDED_IDCODE register + * description + */ + switch (family) { + case 0x00: + strlcat(priv->machine, "ev", + sizeof(priv->machine)); + break; + case 0x10: + strlcat(priv->machine, "eg", + sizeof(priv->machine)); + break; + case 0x11: + strlcat(priv->machine, "cg", + sizeof(priv->machine)); + break; + default: + /* Do not append family name*/ + break; + } + } else { + /* + * When PL powered down the VCU Disable efuse cannot be + * read. So, ignore the bit and just findout if it is CG + * or EG/EV variant. + */ + strlcat(priv->machine, (idcode2 & EFUSE_GPU_DIS_MASK) ? + "cg" : "e", sizeof(priv->machine)); + } + } else if (device->variants & ZYNQMP_VARIANT_CG) { + /* Devices with CG variant might be EG or CG family */ + strlcat(priv->machine, (idcode2 & EFUSE_GPU_DIS_MASK) ? + "cg" : "eg", sizeof(priv->machine)); + } else if (device->variants & ZYNQMP_VARIANT_EG) { + strlcat(priv->machine, "eg", sizeof(priv->machine)); + } else if (device->variants & ZYNQMP_VARIANT_DR) { + strlcat(priv->machine, "dr", sizeof(priv->machine)); + } + + return 0; +} + static int soc_xilinx_zynqmp_get_family(struct udevice *dev, char *buf, int size) { struct soc_xilinx_zynqmp_priv *priv = dev_get_priv(dev); @@ -34,6 +285,17 @@ static int soc_xilinx_zynqmp_get_family(struct udevice *dev, char *buf, int size return snprintf(buf, size, "%s", priv->family); } +int soc_xilinx_zynqmp_get_machine(struct udevice *dev, char *buf, int size) +{ + struct soc_xilinx_zynqmp_priv *priv = dev_get_priv(dev); + const char *machine = priv->machine; + + if (!machine[0]) + machine = "unknown"; + + return snprintf(buf, size, "%s", machine); +} + static int soc_xilinx_zynqmp_get_revision(struct udevice *dev, char *buf, int size) { struct soc_xilinx_zynqmp_priv *priv = dev_get_priv(dev); @@ -44,6 +306,7 @@ static int soc_xilinx_zynqmp_get_revision(struct udevice *dev, char *buf, int si static const struct soc_ops soc_xilinx_zynqmp_ops = { .get_family = soc_xilinx_zynqmp_get_family, .get_revision = soc_xilinx_zynqmp_get_revision, + .get_machine = soc_xilinx_zynqmp_get_machine, }; static int soc_xilinx_zynqmp_probe(struct udevice *dev) @@ -64,6 +327,26 @@ static int soc_xilinx_zynqmp_probe(struct udevice *dev) priv->revision = ret_payload[2] & ZYNQMP_PS_VER_MASK; + if (IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE)) { + /* + * Firmware returns: + * payload[0][31:0] = status of the operation + * payload[1] = IDCODE + * payload[2][19:0] = Version + * payload[2][28:20] = EXTENDED_IDCODE + * payload[2][29] = PL_INIT + */ + u32 idcode = ret_payload[1]; + u32 idcode2 = ret_payload[2] >> + ZYNQMP_CSU_VERSION_EMPTY_SHIFT; + dev_dbg(dev, "IDCODE: 0x%0x, IDCODE2: 0x%0x\n", idcode, + idcode2); + + ret = soc_xilinx_zynqmp_detect_machine(dev, idcode, idcode2); + if (ret) + return ret; + } + return 0; } From patchwork Mon Jun 20 16:36:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645600 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=TV/czQLA; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb2S3RD1z9sFx for ; Tue, 21 Jun 2022 02:39:12 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 588B583F4C; Mon, 20 Jun 2022 18:37:37 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="TV/czQLA"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 5B31681F4E; Mon, 20 Jun 2022 18:37:23 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on060f.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::60f]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 288DD820FC for ; Mon, 20 Jun 2022 18:37:19 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nQHjwOSlCKl0qrLhwPXulelWEgNQZRsZO+krRrJSKnqAbTPiy6oVQxa+2VnjXWr+Wl2y/tmf2WiNHxze7ZY51EOi08GJEoBVhQhBEwz9alUkY72ne9zmFmqyKREKk8fPUPyH2mtdb+ra9KrIzVwx/Jq8/qwj62jmWy3LQvgEeNepDbBnooZ1nQjQeUABWZaHb1sSithAtT1tG582DLM9YI/nvyxS6IXrFV3ZA2zymbiwYUKgGuETua6k0FN+QYLAdcTxfOWCug1cVTrqwqZbVqyY18tPC0sZBGjdJIp3n+eGVStaZjsD2tzRuBGF86PSwrqJVAFkiNLMxoVsxQKH/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bAlu28MbYXO4cZ1KHuE46/WR4vsgrPQfdgSYEv92gUg=; b=A3VBOrQuA+nK4VzhvJmnbvx5TmksGEai7JxlP+wQwFiRJIp7PQZcKFxm1AcCP94cm5LcxeuIIrlrkem9Xko7Gx1pN583yhTsIEEaJ3hgEJFVTliZhfOjo1FdfunkVsn4cF9tttsrwcQkDrPBjqCLeWkYi1zg61R9bIARL4+8PSmz2YPQu0n/Fi7qkIdPOSac9cxrUDHddXa0ekG0o6oOR1dct26ka8CzkgZwyvIPqPBnoJo44c5N2AGAlP/ciliWtfJEvvwzyRpP+kqfMUW26gIJlVvl49kVWlvxpFY4EOS7X7dOXH1m3NLPKxGOXyTKGEp4EibDoRiSaFfd6LKLNw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bAlu28MbYXO4cZ1KHuE46/WR4vsgrPQfdgSYEv92gUg=; b=TV/czQLASPBIAwEY6cHnJwI+qmVHgEjEaE2YWUagXAaTk7kuOw5BbsIwRCGeaWGwfzow3D6F23h8TMGCSjurz7uvIA0/yUtS51fAkyAj+RVrB5lfSIkrzrKPUZxJ3JO5xVXEwj8BHsTc6PuKVOLQyhHxFcmSrw/VLLAWuXW3D48= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AM6PR08MB3928.eurprd08.prod.outlook.com (2603:10a6:20b:a9::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:18 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:18 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 09/15] xilinx: cpuinfo: Print soc machine Date: Mon, 20 Jun 2022 18:36:44 +0200 Message-Id: <20220620163650.18756-9-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 11ababc0-4639-4d7c-7821-08da52db23ce X-MS-TrafficTypeDiagnostic: AM6PR08MB3928:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OgIs0KSIgD56aDMptTl5/WkR1T06JvEhaNPhpEbSitEmNWX0Cx7HSzKrTozM0IhUbUfLDDK6C23OxGSRSLCHZyLM8nxYsR1frqSpWFAuWqTTmrKeDLvpfyxeTAFkm54CdsctRyj5N8sVNZsLishX66+fib65YKsRUx7jZbvo3AJOhcPDec0uc8TInjyaED9iUeMuMN4XUrFiNF6q5zfhAL8FFtI+63VTKcVMZlq2/SOorXqaYquB28/8yMV2c699pJPy0QeJdEF2VPCzb82eaCCYzGTTwJ5aNT0CGyQZDzMMwG0mx+oAlpotAscbKxDWLdD+2kY9CseRRRZLryoK0YDJifQAgYp5/zAINmR6hwQSSf0dMTSv0NsD4ub0FjYza+TzTTo3osFoDGK2PYzZpsLc11FQdenyUFfsjU+RB9tsh9w9Cq1jIXYcYT2w+6hSQJzIuKXehTiU4l56Ziy5v1HiEa0/G/AUussLLheRDaWkjoA9WaHp9g+tbrQoW4A3C1A8ZMX/czu3PxNvcrb4JgAvV17SPJOiihcaFyF9t7KCOi+3/nuetQuyUOD/QTwQjmklDNg83ASmw0waSDeeoyUv4j3HPxU2zsk5RGFDYwBZ6k7FmxWvU+AviL6aeZRcZ2AaOizvtfhg48/jXxKhNgaYRABLPxcQoQ6XRIi3VJcQN31XPm8Bg9neWSNakSyqif8DeqPHEONHeZUXVsPrzw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(346002)(136003)(376002)(366004)(396003)(39860400002)(4744005)(66476007)(6506007)(66556008)(8936002)(4326008)(6486002)(1076003)(6916009)(478600001)(8676002)(316002)(66946007)(2616005)(5660300002)(186003)(38350700002)(41300700001)(107886003)(6666004)(36756003)(2906002)(38100700002)(6512007)(26005)(52116002)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TX+5O5OSz+MspCiWPgSlw3pHPiEWZxKgj+cz5B+Ee6IJhJNsceNwWe3XlO3OVP6CR9sIZKSHXsiKjR4+K/RBK2mnNSzQv4H3O8ym35kS+xmn6tXVnrEgC4CeWMdItvNQC9bsFXjNFKr/fu1jCdskJG48ArG6zVzJqt/n5AQaXcHBIi4nAjhiVS3Arqd4gNKLEjSf6V6NvVoMwDpf/EEds5qO/QC2fT1LdQSfMkdeab8hSBoeBSJOwFSzazRI9qE+AQlyQH76dbDCtS9fzn+/LU3I1kW26nmW2vZACS+hPyfYc5Uk11fhBztAf1E+PdHyMPheIYVfMY9CwKQX0a57iioTz1DYr7cclGdVvG29ddomKVtaSvOVY8A+5XXONmXjdc3WZBuJUfmLXcAEEHW9XYNrAKoSwrnmCxMUv3YLhnndcWg0pzt+8oUtvcnslMym/orBrEYGUy24gXkY6nHgFk0L/NK5MY9yr174ibomk6neJ5sgkdSCgJv9SRz7o2gPfIlS2BzKoGg4G7iKeFsHz6NxSt1c7DhJ8psN5oG6/nSS6gKv5Mlj/bpZFrYr50kFoPm3QfT7T0VVzE3L6IIqTZcfbRxOtiiB7sCwoHtOQyuKi5jqyMqwGq80pfbo/0B8b05HBz/z+Z32vwQjO3BIIqmtIrg49LKtX3IerzFp8csFoU3J9w9ELT9AsmcLxORmkIljBIulxydpaBSHZ9lf53BMEG49opy8eCtZKH9tFlJ0KbDItjGVW9KqZLmwmM9soTuogL/shwhndQX+CGFNvAAosYlCg2R8REsHRKrjiq0OHYhE7pMDAIKreR6y/0TACG1Why6gT9+AYWYnazmq6GdGgRRDV9CBSYVHdpsnnExBeQEvzYbGQu/2AN3kfbUAeCfHJcnRADpO72JmtJ7XHmAU3MajVSckRSpmnWPk2/G1Pt+AItR0dD6DDMXW7/UJ0KmNt2FF4lFo9PTcI781iAVbpAr4r0MkJYmMqiWelct2h+TLO88kKbonIzgJ39M/BK/CJdxRMnVCmCdytksfoi9K3xAuLLlgvG6hWVlXufAryvyYxAfN++vQ2sSRy8Nzw7sl+zbhsAUTm0cAQ+HFbvsxkqKzXkX4A6sQyen/yb+5GTQwCvIucbjWzaWn+WaolWH1K//NeSA9+DvuTV/NuCsKuTYVqcODma8kYDeTGeZ9FlJUiol0yTSmNuVp9tZk64Pa8y/nriilLDbclPcVqSGBjq/nP5m4ZBaNlAkzOm2fd6DYxVUkhLNuu+tNKcxznLwDamnX6w27YcX31LNx1MUeAMIqRQeypVnA0h7exdqHan32S7fP0NKMuMsm5FUmTtFbNEVtJdtU5MVRSKtmwfbqLGsRmrMkqDdNrBzTo7cPi+bbbQ6Nvt60nxPbSmpHvi9U9D6ZkJoCgFG6mgG4JWlpBYgofi4FQay8KkAEez3fkNJyRPW4A3X16k4ZkG2ljaRGZkhCjKPm1Sk8OZO+kK6nH2ASnOSla9ZiEGoSzUhNCdbnGmZ9NFl5AVhFXK0uLTaOhN0HibopiQCImY06kEgFoiLMvLvBAJ7osB/MDM74LoajRyGn2brER9k5/BMod8caJVUfZA4CTK9v8ZpjMclwVGmvlMH8Uvwq1CqwlB0OBoRVmFObkY4x2EYymRIg29E18f8FSry7pg8RJCEWYxZneoVkwPQiK2brbLCmmLKTVX5Hk8PQvCLrb8pWSXNaQhGhMvoyYIlrifSsCxnKEy7Rbu0sg+2nR8GzNllq48g= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11ababc0-4639-4d7c-7821-08da52db23ce X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:18.2770 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qL6gwLJ2XB+r9Zjh6ng0j3hmzcC9j6z4/x3VWDkqJjLyfaMdbRLLn2RvEqiR9qVhtjbrpJU9G139JCcCFdqpJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3928 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Print the soc machine in the print_cpuinfo function. Signed-off-by: Stefan Herbrechtsmeier --- (no changes since v1) board/xilinx/common/board.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c index 629a6ee036..402fa77006 100644 --- a/board/xilinx/common/board.c +++ b/board/xilinx/common/board.c @@ -506,6 +506,10 @@ int print_cpuinfo(void) if (ret) printf("Silicon: %s\n", name); + ret = soc_get_machine(soc, name, SOC_MAX_STR_SIZE); + if (ret) + printf("Chip: %s\n", name); + return 0; } #endif From patchwork Mon Jun 20 16:36:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645601 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=TfHbuy4F; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb2h4lgDz9sFx for ; Tue, 21 Jun 2022 02:39:24 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9AC9F84004; Mon, 20 Jun 2022 18:37:38 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="TfHbuy4F"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 7B89B820FC; Mon, 20 Jun 2022 18:37:23 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0612.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::612]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 954BF82119 for ; Mon, 20 Jun 2022 18:37:19 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HR1Mpo0PQifdWcbpptQfT2ALnLEwmc+CIuI3mmoSs0TnEZ9FE7jboDygj3ULpddaOq2whoBHm7er8gQeS2Y7jhSA4KXyqLsPAPgdH1n4DpzDmGbRWemuoaVf3IJa3BDvkI02s6zPl5iLEL45fLzPm2YAcYY7ac997Fc3x5a4g6CoLAoy5J0g2rag3pX8tu4CAZa33fdVSlDwLgyFwhc+wV5rANIBdaHEGcnM3uFQUc9iFIzdcZE8xVilfpEXXh5srfGs2e8TmzDKa1kdQAATejqexRxw628H+U7+6sDTpkHl9QT3T5df1tscd3lRmSxeV4ECXpw1EvTbgBvDSLPvRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Umg27XgD+U3uylfHlNfgJs60SIG8i452HsGxjpsk+D0=; b=VVWjuJVzApPROWpvs04sbjaPdHBM4FXn2WsnXcSQw+YuR3J6ZN1bFeXEoARRAlk93YRlCLqZbB/d1ODOGPIKjCWwtu9I879jQAlYeTlqFJQ/CZvCZ4ttuKF7T5FrJiyY7s7HLlhPLCHKrngJ2T4/yX4YrQlsS3lTPP8FekRXzwD3OR0rVJSRZn4P/1y8fRNMv1D9ByPKWpuglyQmE1YzxqHudhlOVMDJqIMVWjiAcoUQXm9qsC7xa5c8XINqC/XNHy04JDJkJV2o5PMtdUC3M32Zh7dE4XC3I2wtTBtIUzC/gisutXfgniaPyuLP5Re0ixzIyjLdNBBMw0UM0O2+Sw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Umg27XgD+U3uylfHlNfgJs60SIG8i452HsGxjpsk+D0=; b=TfHbuy4Fx8OQD39VLZJDeqOy0wzFKbKAEQ0FHY0JoEuFgRfrYNuML7wV9IjJ3KVycyHK2/dftR/ZF9et39XrodfuZToqKq9vREP9m0pkUuXlRWlbsVue7H7qhUefH7N5MsrwgyzViT172eywVLBT3tPwJp9KigUVT11ilFGsXoo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AM6PR08MB3928.eurprd08.prod.outlook.com (2603:10a6:20b:a9::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:18 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:18 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 10/15] xilinx: common: Separate display cpu info function Date: Mon, 20 Jun 2022 18:36:45 +0200 Message-Id: <20220620163650.18756-10-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d4887e0b-7df0-4c96-1903-08da52db2441 X-MS-TrafficTypeDiagnostic: AM6PR08MB3928:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Lt202OdCTz6wQS2Pp+2fvmvQznchtqidoiS0v+py4DndCG59nD9QEjtUoWjcblsFrPY55HWFYaHiKnGLSsad45mMMs6xQ7sC1qGVKbkzmqW4cM9m/B+E0YooZZSWpo8uYJMbLdU2dELvFkX8/3D5JccuXaOJkUGZvD8chPYgtC6PmW8UgE7Iqn19FVh0t+af/8bg44FdoJnxcn/d9VMzrnljZkHzNUpwpaYIliVXlW7OmT7nZ+cLlTj4fS+Tqwj+Fk5yE/KbdM3295OnUm1oxGhNEJpzblRtg6wUC9X7C5p4VsQC6r0YR5Ye77tppJcCtaNCHSgiCUydBi9HOrq0/ZOV9YT7Vu5BoDBJJoNPP/di7lQPUnxezCzJr+VP4wfip22ilQU9qmVL078O6Kt219LLcMo8/HcIVlDK3QKJukAOc0UjFkLNUrvIY8kvx0VJkceMJ5dMA/2DSgDysYUDEwFC43oMgL14v21C6fKv0xe9zI8Sinqaq2FmR9vlfYHG3pZrEtcLzija3vfoaNHqdmNVo9fjA74Gjbb2/Tl0fayxND8urR97k41Y6sUQiBcz+jbfs93xgHLBR6bvIZWM21TAuC5gd0CZtSJyNfz2eU6WkvpSKlruQhX7dc02Mbg74GA5InICZ3IU1yv8QGwDaxxUTlrLhj0VKUv7gMB8xj6QHokBah/hURuVOdB06Um+JM3TFqZlbLpulPvgG+n05w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(346002)(136003)(376002)(366004)(396003)(39860400002)(66476007)(6506007)(66556008)(8936002)(4326008)(6486002)(1076003)(6916009)(478600001)(8676002)(316002)(66946007)(2616005)(5660300002)(186003)(38350700002)(41300700001)(107886003)(6666004)(36756003)(2906002)(83380400001)(38100700002)(6512007)(26005)(52116002)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VSZXkkcFDmfHF7wVOxpVqx5M3KiqDuB6ZJJrOTDe1dWCjOlCZBuw8I/WpIFn13HCCU79dzhVGWdJvt6viRp5Ii08ZSCJsjnmoFdE1wzR6G3b597LuOf2bj3mzD6YhNWiP7PWE2Ip5JaX7kY96JSUSr8I+nwJ0MoyMgvIpi/Tu1g2/yUeYwgS4+AhZzaEfOyqwhy3YCxK8L+6LkY39tGFSeRr8TKxfjd80WiGphpGjzC4x5t8auDzlwdFXF1+WO2ZanCpnwcggr3z3IcNIbufK65POgPSkIpzYjfXDRd/5OqWf/Asdz1OJW3FiYK346RfmXA35olAAS1wMMvw11UexRdNs2pbpGtkSpJ2EiC8gaUbdPgjrxBdqA1cczgR9cJ+gAhPuvUyGpG4BUk1trlTZ8oJh6uo5NXevfTn6gfcU2dppK8TFdeTMJXeVbnPI35r/CBtPis8/0wbVwepH16PAdhVvOVgav3caLGE8Qn9frj3ErETfUMuZ5PKuNxijmDMc33imy/4yxuYmhj+BEA3dymvzXshCLWXqxK9Zil5hltjYaeieRmhX7jbM6YrPv/XuY24nxDNvhvWW4JAHdyCNcE379d3UPT6WIzR6P91mBI9PFZNdPQhhGXSLXKzjx9N0GGZk7+qyLv2/v4qh84Q+kroN6xxBw5ng/HRv7TOgy6+p368PC5n+HxryfcZdmed6KYf7cWGka2bW08X6l6tPwQJx1Juvb+byBTblU0n5ixqW3FGO/lgeXrSTngxL9VGkSEZ/MLfaVCBwsfR5DLiApcJUVXiEtfPEXebtqwNTxVq1y7xE7kLdqU/uAabZT1o/RPdSHcQdb3nYBBFrzGL5GuZouEC5h+PKf2y9PYt2sOf99pcoAxzsqDDX7+w4VEJBbi0PdfmWrQUM8PuGft4jvJcagPrP+6dh/kZhKLaXYo3F8sWlLnOWVmKWzykgZd3CEFIMGPkGiiCU3qzEFMrOZ1RA+cQwXhiNDls9WktH5b+X73EpNycWY3J4TrItzQ2cPR+u6Btb0W0rzfiKJ8yxR84liFOSl33tTIkh0Hf2X2+/6un7zk1E3MxZzocg8AU6JG62EVICF42HOEp4FqOpOu+Pcx/WNSeSQRWrcLGn/xCVVEQPQ+E8RpGLq5+vq0+yCYd4bWA8OGB3p2fGspG8cVP0mQFcDSBRSMzGxGh4dMY/GwGYPyjdqSqhDZV+eMU1WmTuOBeSG0YLlsGaKw0XecAD2ogGZVk+E0DajDLEQMylvS+qrxM1sRL4bgH6T15ogBuspPV9nXwD7RgOjKHQRF8TKsJIS0t3Npo2u440b8m6TZ38y0mVDOWSAwJjqjrBmZU7WzYON3XefEgW0VdqCP8ViVVpRdd/Iw2M9QTX6RgBDA7IPYLWdMhw/pyMqCjhcyiCoNuQRKlKcuAg5/7zTB0a26+ts14c/QQ9Ph3d7hXa0AVTjb+ZDkgGTXCfKqvnld/cgZFoqclSXPPDpCtcM1uNMeLsd5iz0Cb3YhmooxbFvSZRyewML6cHyZj0Ix+A5FCqIDHUitMjlisp49Sz4AsDK+9+GhJWfSzrIAWEt+IT1TDC8V8nu8MXCXSY5t1i0yy97RiWPBrNrAkJZDsLcX6aFC6PvHRRxUjZl+pwr0rpuOiZ4y/7W0w7AofpLLKVDzp4AtQsOeKt6IbgPN1WZZQoG9tzxo8F+F0C4OzKXQ3RfRGtvjxmaxMypGhvElui0Yt9+qLRhnoD30uNtRxzLVk7x3DuDk0KHK8K4wj0rY= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: d4887e0b-7df0-4c96-1903-08da52db2441 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:18.7156 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oC58RTccL+GRYulAfGKaKHuIfYXjrQhMg9PlN1ERtYmmk8YaFeQob8iOdzZ5uql7ia4PszYwN8C5vowIwAagFQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3928 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Move the print_cpuinfo function of CONFIG_DISPLAY_CPUINFO into its own source file to support reuse by other board vendors. Signed-off-by: Stefan Herbrechtsmeier --- (no changes since v1) board/xilinx/common/Makefile | 3 +++ board/xilinx/common/board.c | 29 ---------------------------- board/xilinx/common/cpu-info.c | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 29 deletions(-) create mode 100644 board/xilinx/common/cpu-info.c diff --git a/board/xilinx/common/Makefile b/board/xilinx/common/Makefile index 212028478c..cdc3c96774 100644 --- a/board/xilinx/common/Makefile +++ b/board/xilinx/common/Makefile @@ -5,6 +5,9 @@ # obj-y += board.o +ifndef CONFIG_ARCH_ZYNQ +obj-$(CONFIG_DISPLAY_CPUINFO) += cpu-info.o +endif ifndef CONFIG_SPL_BUILD obj-$(CONFIG_CMD_FRU) += fru.o fru_ops.o endif diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c index 402fa77006..5f2afb9def 100644 --- a/board/xilinx/common/board.c +++ b/board/xilinx/common/board.c @@ -485,35 +485,6 @@ int __maybe_unused board_fit_config_name_match(const char *name) return -1; } -#if defined(CONFIG_DISPLAY_CPUINFO) && !defined(CONFIG_ARCH_ZYNQ) -int print_cpuinfo(void) -{ - struct udevice *soc; - char name[SOC_MAX_STR_SIZE]; - int ret; - - ret = soc_get(&soc); - if (ret) { - printf("CPU: UNKNOWN\n"); - return 0; - } - - ret = soc_get_family(soc, name, SOC_MAX_STR_SIZE); - if (ret) - printf("CPU: %s\n", name); - - ret = soc_get_revision(soc, name, SOC_MAX_STR_SIZE); - if (ret) - printf("Silicon: %s\n", name); - - ret = soc_get_machine(soc, name, SOC_MAX_STR_SIZE); - if (ret) - printf("Chip: %s\n", name); - - return 0; -} -#endif - #if CONFIG_IS_ENABLED(DTB_RESELECT) #define MAX_NAME_LENGTH 50 diff --git a/board/xilinx/common/cpu-info.c b/board/xilinx/common/cpu-info.c new file mode 100644 index 0000000000..4a863d00de --- /dev/null +++ b/board/xilinx/common/cpu-info.c @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2014 - 2020 Xilinx, Inc. + * Michal Simek + */ + +#include +#include + +int print_cpuinfo(void) +{ + struct udevice *soc; + char name[SOC_MAX_STR_SIZE]; + int ret; + + ret = soc_get(&soc); + if (ret) { + printf("CPU: UNKNOWN\n"); + return 0; + } + + ret = soc_get_family(soc, name, SOC_MAX_STR_SIZE); + if (ret) + printf("CPU: %s\n", name); + + ret = soc_get_revision(soc, name, SOC_MAX_STR_SIZE); + if (ret) + printf("Silicon: %s\n", name); + + ret = soc_get_machine(soc, name, SOC_MAX_STR_SIZE); + if (ret) + printf("Chip: %s\n", name); + + return 0; +} From patchwork Mon Jun 20 16:36:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645599 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=DpUffvj3; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb2C21VTz9sFx for ; Tue, 21 Jun 2022 02:38:59 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B262C83AC6; Mon, 20 Jun 2022 18:37:34 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="DpUffvj3"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 46E3983879; Mon, 20 Jun 2022 18:37:23 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0611.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::611]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 0E6468213E for ; Mon, 20 Jun 2022 18:37:20 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hp67ww2522OHZ9I4+7H1/Ygs1et1WPHo9vCDJdqrefh3yVycnUAer8VzNf/368IeN9l5uabrxvzZq9mr5NSMAKZUj9m1jW97IYjSXElSogx9QblRLnaYXiI/8rPRqxPXjdldYy1ZYzTBMZrzCRc0myyOKFtkMAHAa2Nj6YocDjO5fG2Ney000aOD80iJQZnUMhyUpOAYtM5GX83tf7Q4j+szajn4VBo4noL0Cn+OOn2PBsitgAKyeNQdOvh6Q+XOp6fFxTKAVC1qUbZhxe+0/zHPRCiqQgDtAGl9/U1DLhHtFYgbX6SbBlJZyMVpII4saNTunvEjS+b97oh2lc/O9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Gh4V8hao50QfXvKZQOSdUW4VfRTXrgRyAoc27rRNpHU=; b=L4N7YCUDDu0AGqrDWJGyGezlkjJL+bgpSwc03AQ16UCPNct0yOyzaPHwoKQIsLXBUQb+6XJLb8d8fBvYhIqg6Zh6RZshxI7lIEbBFkdJaJd0zNRR7Tm1HO7qhx0z5HpfzG8mcQ1TOqTxCX827tQohUQLMXpTulTP+F055rBBZy6pQpkdRtyMSedRPmsXTGk3bUrxEI2XJA1f+WRlHlhCpJ9il5fh9IXv0nD2Lv2DOTK0HV9PtkYd0cKrtYZ9lsJ69mxd71Sq8/IWpAy20eGExj9E74hDH0FMwVTl0xlwHXvU4yrVgsheuaC5yYdq4cBYkf3c0etDdh1tvJYzHZi8JA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Gh4V8hao50QfXvKZQOSdUW4VfRTXrgRyAoc27rRNpHU=; b=DpUffvj3tOa9AnMu8kX8yLJFWNUNsK2ghCqnocULrXIVk1xjXu5XtSkCcOkd/UC5k8hirECYJczOZQhfMq++GfV9S4Cun2U/Q80CZ0NN8M4IhI9K5eSDxOZWV6jqvxCKLWUf9KLP+qQdk49qzFDN7+Tto2XjATnF+Uv6VmppGzc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AM6PR08MB3928.eurprd08.prod.outlook.com (2603:10a6:20b:a9::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 16:37:19 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:19 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 11/15] xilinx: zynqmp: make spi flash support optional Date: Mon, 20 Jun 2022 18:36:46 +0200 Message-Id: <20220620163650.18756-11-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 62ce4d4d-1f9e-41b9-d43e-08da52db2483 X-MS-TrafficTypeDiagnostic: AM6PR08MB3928:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6kG6WUQYvcvWbUVhVaLugxLC3TsB0lZCSTue5D5FffEHbatsnFmAxD+L+6kAVtwKJbg4xcrn9nwap0Z28PaOtaFlAY/fmlgyioSer8kwa+HrV5APIdyw/klDXXA7s3HQkUe9sOufSuK74UqAsluvOa2n5aDx4TrslSksHQHNLbS5RIdTwFyOJEV1+7Iv5Dl8su/HgG1leVxQhN7HA2ShHdvZRnpMSUxIGs80HXm0rceG/n+BoR2zdymo9kutS/807tgUSI6bA/ZrOtS7CiUuFuexJu66589Pmte0TaLtcIjGPSVU/ouGuXRRqTWdtGCEZxVT5Jwq+jwXOBzeSm0L5jLH4pY+aQWH1ZsU4s23zMdZUwPi1ZMEdvHVLxyjw36Rc9BsJX7tGocI46C5iZ+a61CWDk+LdRZLfY8IJc6igAFjI00c29L4lDx2F+Ip7QQ99kGFrsD2j7POTQFHqwZMeDa1wwcimHkxjaax8isBkokz8iKWrAo0AumZZfS45p39THPteqhFl/OgCicGXsx600iETP1ieI9QQgcWxruo0oOvtQaqcKDis1rPm7T6Nmaf1vUbCkWHXbN45fetPodssYwrtAWclnLraRUGRMHCuqxxiNlYJwSb0GeOoCvi5wbRpvJ/XlA11QZejEAAsMesSrk3yuWE1DNa3dnHUFnSg79B50Plrzcm4E86mGd3uMCzg+hycXJ3CdVAlpqzcgOXLQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(346002)(136003)(376002)(366004)(396003)(39860400002)(66476007)(6506007)(66556008)(8936002)(4326008)(6486002)(1076003)(6916009)(478600001)(8676002)(316002)(66946007)(2616005)(5660300002)(186003)(38350700002)(41300700001)(107886003)(6666004)(36756003)(2906002)(38100700002)(6512007)(26005)(52116002)(86362001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jATZXKYCfImjE587QQLX6BkP7j6kMckBpszM2GW9GG31H4uuzD1XlRCAIeREiA6954Q4kap6JLtNbUh5teDOLeepPJ5SGywwCaf+ji8M7Y8BJ2CsBHwVZ3eLjYSQAPpbIeLPxgOakohmoeFRwOIj0wcAyxJHM09z+7FjeuY1Dnc6RRHLdhcDYcMGDW/6MW7rpj8wviniqjGIalZ3o5bLT0DEMozFJyRdy2obXDKTmtaioIhixPGqTpRcC+orI13DBKlE5cYv2YxzAFPJc8csn84eMl95pId1q950DopLtaf8QKLc7C8L4H6KDuDcU0DG/s1w0QeaGMzinRUJ2kfqwknGCfUrzecCU/t6caUI5Oj9GBAcD7NXQKPU1Q0XXC79V+f0Pu8LsmQl7VEMztk8DRJGj1h0U7LjwrUoycc2c07sizgynljfGL2ORA1rZlyCsdZSpg8gN674mpArFuMgKsOVNVOxFggwPFBUOuB+nx/gMwnua5JzZBtHM+728nBhZB9NaZWWmw641vAwfPTLaHfVjPXJV/88UVJAFzNi8D2hFn3Xc8zxuEasHLYtCyJBGyeAia+U7buYv46EsBVyYutrfdAQLUq3in1+bmGbfPQevXwyV6SjRbcH41OCFN3VZJVKAyCfgMBxFew0zEBLN73Zis6XbUClNAOIEO9mdU/v3BDReLOirlIFWIS6mnp2Mq3amq2mwEdxz3HI3Xpx7x229kNp9BKMf9gy4XNHfK93tDZ2Y1MtjlmaSVBxWbp6X97Y+K593TbC3KbcdumIFrAbm+1xxifTfn/SsEdJ+v76M8tsrz7Q5+ZhshxNhCfj68O96JUjGm+yHzu1u8fh4yoSJ+DZ3HqQFO4ABrCmgMwd/t9/ZhHUND/iHuDO/dAg3ej+vcmu+cYaFQzNhrIMWBhnhaaMV0RawyTcL2hpgdlS6+kYxB97rEqvupTs1SSicK/QJ4WioA6ia88X3GjXK5iVNtaQg5IuQ+KBvW/rGTiPye6dlK1wunrSXIvypIWsYCK357a+tklVogPY1b6V6/kq/hzMeGTbFrRf8i2ZXfRPS6baqDNpPxGrr+/aBzghH/Z7r5S9oR9HWSG8qcut4Sco/mF58cdIFo8SLQciSRAbogLWUruFyA9RFETYi4oDGOkHUL5+BOMbQ8ku7gdyesgBOoS7vEeHAW86c8nsC0Cgfn5jyp58qZeXCeofDKJ8XYljMAKihFtnY6TRxmG0b4dygLJNFAW7FqmKhMxArakuoSmT6g6spBfBamf/vZt81/LW0FjOQ4ol6SXaevLPhI+158SvGO99GKrTC7tRfbQrbZw7Hoa7ajVsICa91dwJKN/z865wcs5l5ggyvbPUe+jiJtW9LvDGXFWbsa88OgUtJAuGwzChjMIKR3Eeyoe3bHzoVYcyBm1ZznA4cnW84NpUJfO6fESxxV8UlRLlb1CJPd5fVOh7ybhS99Yb0S24hteo4UVnvad+hQbNz8rSFxf3aI5HbNlg6sEzM9EgaQvfRXxTG1+phSfLTy/rJZEeuBjHozvWHGLPvXiXUY32s4Hz1oIEuavCmwsia5Lgk8wKrI0NWtABHnsg5JRkjc6c3ZJKXt4r9XoTF9eo8kMIzh5q/lsuQ28Sx3MbUNDDqx+NStyBuM4HmpmT5M4+qX96l7BPg40BgZIHNezkdBQy1MPk3hjiZmfh5ZBuWLmM/rplZpXVtAPiaIm/m+FUOmhVAUYxe1Kso/GVjZZ0i6BOJEuGdQ2gCnbnuA51/vuuo4o= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 62ce4d4d-1f9e-41b9-d43e-08da52db2483 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:19.1531 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NBZl3oub7pVDA1d6MzoEdSrasrzAeqJN0AlZCJ6HolXwbv+o/gIakUAUInbegnrdruOhZdl7GzNofIPWYfJ8LA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3928 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier The set_dfu_alt_info function use the CONFIG_SYS_SPI_U_BOOT_OFFS define to set the dfu_alt_info environment variable for qspi boot mode. Guard the usage of CONFIG_SYS_SPI_U_BOOT_OFFS to make spi flash support optional. Signed-off-by: Stefan Herbrechtsmeier --- (no changes since v1) board/xilinx/zynqmp/zynqmp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 06f6dbab18..106c3953e1 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -667,6 +667,7 @@ void set_dfu_alt_info(char *interface, char *devstr) bootseq, multiboot, bootseq, CONFIG_SPL_FS_LOAD_PAYLOAD_NAME, bootseq); break; +#if defined(CONFIG_SYS_SPI_U_BOOT_OFFS) case QSPI_MODE_24BIT: case QSPI_MODE_32BIT: snprintf(buf, DFU_ALT_BUF_LEN, @@ -675,6 +676,7 @@ void set_dfu_alt_info(char *interface, char *devstr) multiboot * SZ_32K, CONFIG_SPL_FS_LOAD_PAYLOAD_NAME, CONFIG_SYS_SPI_U_BOOT_OFFS); break; +#endif default: return; } From patchwork Mon Jun 20 16:36:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645604 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=eTxmU9rW; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb5V3cF2z9sFx for ; Tue, 21 Jun 2022 02:41:50 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6F549840DF; Mon, 20 Jun 2022 18:37:40 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="eTxmU9rW"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 83F6280F88; Mon, 20 Jun 2022 18:37:23 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on061a.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::61a]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 3A5AA82068 for ; Mon, 20 Jun 2022 18:37:21 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B8NP1/M6BZMvLzY3FYsnMkO/QhpiuuxY8l3/ObVKX1HHqHfSojStIsQoNp8iPYkSrJhuL9rQm2Jzo8M3WmmwGBVvrCzT6X4JBbIqUCeJhQmJlXv3YuYGKqXGaka0ghfNwhRhX2K8dzsAAQgatRioyPnr0tatlQw5oPATKUF/2aYctWr48wX3iXhrdiIDIDZ/fVCbE22OKf4w/9PId0ud20wuAdx5R0CT7qChwaU/qfWdw/3Ke5OA2DoWX8ZuW0vtkztaWYYBIC9YipZoYw+Cq5wNJhcUxYiIgHcX0k58H/GZHPZzSKm9Q9A1QmC7JPi3+J64Bhirfp+7x7eHBhOzNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uE4KQIXo6DNbt7gchPHXjrxc62zyGJJuCfxBLeIT3Q4=; b=Mx4+MlfFOCxCwZus9TNbuUe2NWR3CKbfjKkgxr/XKiXxUScJdbawmchvI1vXAx66SgrQ3hhzFTtALFgia2k3+IgQE0+NX/PgD/Vwo2CtSkSq9GZKjn0kAwpZieW1WsO3UJ3AkSriZadYTZHNs2nP+duquv0dV7Pd2Q1m3s3S3pjLFKUxy5WxxVT6cJGfOotr3/vbNOqmI9rFTtxdexYvilSxg84+Irygsso1xIhOmdyQIHseEWCvPszeheFIwYgDRMxwubqKANj6U3/FRzFsFCF58yhDSrTSflHiTSlFPzSy20N8lLRxkXHJQG+PFAVEhTEOdIdiZ669RFeSB4eheg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uE4KQIXo6DNbt7gchPHXjrxc62zyGJJuCfxBLeIT3Q4=; b=eTxmU9rW9pZoPC/DOWi82KnEQ/fin5wD6y0SEZLIYKa7yBBIGtIJOZSWPFejjbWiT4xr3eC+HP800hpqtbRjU89VT3zXpCFFBdRPoTPIsbzOy4fgO98JikwCnT25bT9TByL6+ubtYjKTyRo7daVd76x9BshKUtZdKz/VY8YrMnQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AS8PR08MB7838.eurprd08.prod.outlook.com (2603:10a6:20b:529::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.16; Mon, 20 Jun 2022 16:37:20 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:19 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 12/15] tools: zynqmp_psu_init_minimize: Remove low level uart settings Date: Mon, 20 Jun 2022 18:36:47 +0200 Message-Id: <20220620163650.18756-12-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d4c09b75-97b1-47cd-966f-08da52db24c6 X-MS-TrafficTypeDiagnostic: AS8PR08MB7838:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jzLY2JgwqBXabip3t01sjhAAWDJZ6BXPXzZdnRhNyhsyRcY5AHyz1LDb3UJv5TlrWBEFJXNS5vL99mVJH51R2fKWPcdemJOFUWhFeTgA//MrhuRqKrWYQ6YVEqEe1nCo1yFnESFPaDNePF4/SPNrWV73yVf+pJS2FQWZ3qf5v0Lqj5/AVee707kwOZreeFcbY1C6jdmN+2r1fwJNjqOBi7x+9u6OuSYxQfyMscKYkUCWbMq9hqLVHmJlxsCTvJwiMxXPh147sQYCifiS5klmsAovko45j8USuWz4ZlCPFtS61dvF/o5il/qYJN34HoXUc/Y6tC6FnQXnCh8BpLt012u6CSQM0+VP3Bpnw13GaI4F9Ty8bDdBJFM6JgMHZ/a6hMaa4Q0sLlyg7WsdHa5qMmrfirG8FxBMHf9HuXdHZ+IjiVukfefvFGQu3ZR8OjhjYkE7Tebyb8kaiPyMCpr5yeN0gTfRHOlLtmfSxqUSUR+0FF0kkH1SREk5dWHgfSyDKMrIHlIhOSC07spSbr7mKivmqILsCqSsh1jTgjGsK/aGLt4EoOpx7pEyBRKhrm+zRH81T5rmPGgKQVIFIWOYqGxu7lp8YgAdRxrfOIzgM5VzHerxvHZSf6p+OaP0UA6cdgyXnOVVV0fHOZx1pvGKCUwnxvdp258qBiF+oYfJ2NgKjv5zS/0fdHM2nkjKK3IyLBd1QaLVpc6X9Y/Uqyz+ug== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(376002)(396003)(39860400002)(346002)(136003)(366004)(26005)(1076003)(36756003)(6486002)(66946007)(6506007)(86362001)(66556008)(38350700002)(52116002)(41300700001)(5660300002)(6512007)(66476007)(6916009)(2616005)(186003)(38100700002)(6666004)(316002)(2906002)(8936002)(8676002)(107886003)(478600001)(4326008); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?xavcahXZNZKnu8IomO5AS4Peu2WO?= =?utf-8?q?xPINlzz9HkKBCbSVPkBRcyI7RYcsTX2PB5c9J/TPPSPfEEYQGYCksCobOFO1ZVrL6?= =?utf-8?q?mMyxTcC+kayXkFKkXJc6EqOwXMeCCucRJqJcDbO7386LPKbyE1EorBISwcRE+zF7t?= =?utf-8?q?iQHskfBD69ChuokfsSGINvR0f/fr2sruzKz6iO4hlea5O9mkRAj8TGDtDoByuCdxk?= =?utf-8?q?GVDs2gfjV8PHfdReb+4x1LoTjFD5DQhuuRocqJ6Tm13Pb8Ddfl6cfHCadYUxRyCiy?= =?utf-8?q?2+8vD8HC61kYsPRhmdIgpOEaAWMLI72lC3pkSvQ5wdtA8mcgsWGQOqdnDpnR9bNfw?= =?utf-8?q?86zThn4urptfdnLyJf31ZnL7XKqeQR2Z2WCERdI0iRybJvW7AUQ6nZRj9OlHm4YRR?= =?utf-8?q?r4sq0heT2ULD6ehyMV2icbsQIJW02i3O5CCrS+ar0TSXN8ZhQzK6eejl+J+TgrV1A?= =?utf-8?q?US/lslUOL3Ce0RtZy8IwWKHfDc6zg+JfYs43lr4ApNERo/3fGN+FOXt4oOKd0fJYj?= =?utf-8?q?2IOfmbrzYwgLSfvh1Avyk+HqR/tAz3BXVaYMpo0zAaXa7tgkxjgqZqZi+eZBl76f6?= =?utf-8?q?TmbYXls4DtRT+TVp9hN5h7jpz+FaQjL6JIpMVVb9NMTukrI1mfUOPOK+v5S489IDw?= =?utf-8?q?r9LexHAC7YafQJ8J/m5c4+BMNuJbMyBYerYSgAAliXhgvOnXFFn310Xlk6iZY2zO/?= =?utf-8?q?Cmi14uJqu2SloLEA5g3vdBkzZcXxktqcz8U5U8JPfni3qTXxWsL7g//cv9Ao7rRRc?= =?utf-8?q?P02zRVKCAdFvZJeq1Cca878QiCiaRQLtV4ymS+OW+uBQ+F2UzPXsaSU9hykBlbPmw?= =?utf-8?q?d8aoJ8eq8Q9z0EvPM3iWYxOOznpoAZ6TXR37brDJF3bCJcsCw1b9N8yBNHLeRHDog?= =?utf-8?q?/ndRpBqm01g6XdWDavUDo5DXNCkoWvgMr/uClFxUqxpr/NWqJGUGMHqvvrpquZ9Gy?= =?utf-8?q?q2k/z6z++oEfquTNuPoIVOhidTNpxr6ofTT2mZym9jVWvMUL6wpqep8mDuZdLE8UQ?= =?utf-8?q?M4qQwvKnkITP4TFkj7MrS5wkbV0gSax4SHspikHUFAOL6il7W1Op/Hj8VNcz2gcz0?= =?utf-8?q?J8D9c+p3qKA2IRkPkjU43WmCbGrTQpyM9WQ8hEmgNs/+FhJgCRp1gaojZLzQlOcSI?= =?utf-8?q?/RtVnWQE7rK5z330vSwN0Rlhe+AWaFldf8Y1R/JZOpAn/k99OI/w7OANK+YuIy+3F?= =?utf-8?q?/ffOOTlejNtzBSDq/cjVuU1ahB70ZMQ2Rd6gO71VMWfMAEdimjNrLOYTvAf71772v?= =?utf-8?q?GfrkUdvX34cxd4szk+ZmahLNyM09I/tptz9EDBwkcFjXRK5XKclMSGcFJHJ0p/HFZ?= =?utf-8?q?DvplXDyIERoVbiNtR8chfKznAVFpCamYUXVZ6apjcPow5jnGVBBS1mC3OkzJrwtet?= =?utf-8?q?3iNbaKMor4RLfq2eD/lY0mvy3kvoXY8xYaiTY996YFNzGIWnXPaII7HUxhR+0nPD3?= =?utf-8?q?f4KwEpn9gOAS1+i6b905N10I0ecPwkhLXgXHpNTaa20eX6dvKtAVLRt6CbvtbHYuM?= =?utf-8?q?jOk7ViHY22TfZzKU3NphAVkqx7JFShtPJ1vNgmDllI/LlT0QM55cezAleQFkwU3Kr?= =?utf-8?q?gCgUyMRw6g5Cmu+FVA0uPN8l5FqKmqtTiTQW1vwnXR3dSpgmbCZ5qWgFpekQNBuYY?= =?utf-8?q?JqB9TNeN5xkfpJUO1r7RGWQCHge7w4e7dobS9HN7kIXqF+2ovO1oI=3D?= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: d4c09b75-97b1-47cd-966f-08da52db24c6 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:19.7467 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tyaH+eF90rYkJumDOP1oWSJ88hlRxlKTgioFOZpswPCV2DaWPhZUcZh13UKD0b+eXQJ13odmdf4mdPf7ANXqhg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB7838 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier There is no reason to do serial initialization. Uart driver does it already based on DT. Good effect is that it is clear which interface is console. The resulting change was done in past by commit 84d2bbf082fa ("arm64: zynqmp: Remove low level UART setting"). Signed-off-by: Stefan Herbrechtsmeier --- (no changes since v1) tools/zynqmp_psu_init_minimize.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tools/zynqmp_psu_init_minimize.sh b/tools/zynqmp_psu_init_minimize.sh index 4ee418f07e..31fbeac327 100755 --- a/tools/zynqmp_psu_init_minimize.sh +++ b/tools/zynqmp_psu_init_minimize.sh @@ -2,6 +2,8 @@ # SPDX-License-Identifier: GPL-2.0+ # Copyright (C) 2018 Michal Simek # Copyright (C) 2019 Luca Ceresoli +# Copyright (C) 2022 Weidmüller Interface GmbH & Co. KG +# Stefan Herbrechtsmeier usage() { @@ -144,4 +146,19 @@ sed -i -r 's|\((._code .= [x[:xdigit:]]+)\)|\1|g' ${TMP} # Convert back newlines tr "\r" "\n" <${TMP} >${OUT} +# Remove unnecessary settings +# - Low level UART +SETTINGS_TO_REMOVE="0xFF000000 +0xFF000004 +0xFF000018 +0xFF000034 +0xFF010000 +0xFF010004 +0xFF010018 +0xFF010034 +" +for i in $SETTINGS_TO_REMOVE; do +sed -i "/^\tpsu_mask_write($i,.*$/d" ${OUT} +done + rm ${TMP} From patchwork Mon Jun 20 16:36:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645606 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=mv9W/RhY; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb5y1Q6Lz9sFx for ; Tue, 21 Jun 2022 02:42:14 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id D3E7184292; Mon, 20 Jun 2022 18:37:43 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="mv9W/RhY"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 711DA81F4E; Mon, 20 Jun 2022 18:37:25 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on061a.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::61a]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 6CE0882072 for ; Mon, 20 Jun 2022 18:37:21 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hk6ZF28uOfjFHlEgDTb6G21ebz8zsyMHVN0EWzKbjGIKNCdN9eGuGzknAUCrRbYD/GHdTGNW+npfcuWHTqROGLjqmG4sTUZoajhmJDjdzKx8kuQWP9ybn5P10V5Ta0GGHIaSCzrVntHBvk0NLfUPJe4qDEz/MDk+rOYfYW0loJhQcb0let5k7QCwMNqpuEDDHev/z1tZEV3Yy9koa3ZnKTvYu+ihqjIoTI3V8EYCGV84+eh9ckoKqFM8php2zN5oa2bfyT1hmU8JP+2FZRzhM9rxf8pGIYrtX1tk/Jr4t80WP+zXOsOGQrcasiYabKuG/eXBjDyG9lEOC6Ghl/IqbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2EikQgHn8yEnYNiATjh6AmTjk8kUTn4Xsqe813p+gJw=; b=jj/jpgmmfg660lQhddc8rJmRygL5H+mr2ForYpMRb2kol6yWvWsQwQ8eQc48/hlc8yfDg5NbDKUrUfskE1PYF6nofXIZq3IFTLZxLhAFnoKQNMnRPCbCj0s9aD1rkuZOy+Ru+RwS4QUKzojYF/Q/CUpE8w7y24c5zwmVrBK2sUpH0TXgStt4ceRxTseUaEOzv0OniU6ogRFaHJcmyPUzcbrEJothD+IU2gHwyGqqIRcuXDch2Hzg5zxxZgPCiwFZb5sJPbwcYXov3HxsjkON1cEejMMgFDM5jFMPqw3/gPjH2FgGT8dfh9Mt9OhUE2pAZkOB5hBnfobWhLqvQot5nQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2EikQgHn8yEnYNiATjh6AmTjk8kUTn4Xsqe813p+gJw=; b=mv9W/RhYIbKAGQuzb9KyoJcssNW7IYLfdRVYid1d/Wcs4f70geXFtMY8bkRwejmAHcjMyLb4vpqMJ7EVzeMPk4TJ8j3AbxkaucgYRiRCt/86dd+1FIA5hPl6QM5w5pFUwvjy1PKanSHEL7rzItSfuYgzHzArX75+4yQgMKPQsKU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AS8PR08MB7838.eurprd08.prod.outlook.com (2603:10a6:20b:529::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.16; Mon, 20 Jun 2022 16:37:20 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:20 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 13/15] tools: zynqmp_psu_init_minimize: Use CR instead of LF Date: Mon, 20 Jun 2022 18:36:48 +0200 Message-Id: <20220620163650.18756-13-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 29941d5a-aada-4818-2858-08da52db2521 X-MS-TrafficTypeDiagnostic: AS8PR08MB7838:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mq8SXIShK25eQGK1XEJMbiQoVDl31B0SxSjNbK8VlvrkdccMSmwCTCmYivvbZFuIfLtDfvsSy9tH2eXpIpna32e1rrEi2qzcLoVm/m3CDtx0avFQSGxX2PTnOfc8SxS3w/D+d8AzpAsAu/fHtX4g0++lTbogyyu0MB/5g1mdiFbl7rLtPXezG+KOJu/WfDN5UcN1NlKA5+loRzETxqeb/flLFZOtFF7ObNbYQz0DWLohQOoRHV+7w21S8sgQb4zUnWPdon7ksvT2THKi2GWaZ8tD68C2EqpfMSYcwkeO2UHXKG6+Yug5nGvLxMtFa1j4Oq3PKKzX6JfKJ5iOVDjcboIMYqbIgIGRRpOfilId4Tckq91FXY6JUv3FFxonNdzbGny17OXYBnQg0G81nB6PX3AS0qZUQmyWggOFXP9KE0j0rtoYfIeEMA6am2yjcszMqLbbInpuBd9HG5IQwNFbBzLFNYTc8G1ESnQRqY5zwP+pM+DgHyhDNLEuDTGYTd5RA0Z/chNJEbLtXhW8NWp/zrQeUtKRYx/D+y6YhjC8AoFzfAWs57Q0u6fksqVT310sVOBy3VpEaMYmjk1nOaLOYuTUDZFVHwD21P3x8y5EaRg8ZbeFv86S2AVAPsAIs2hpKSNAn/PWQ3R/OvtLneHihvLZRhvOgivMc9t89c/3XaIFix68EilheavEVQ8OOF4Ha8Gb49VInLV5c7ritmfTOQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(376002)(396003)(39860400002)(346002)(136003)(366004)(26005)(1076003)(36756003)(6486002)(66946007)(6506007)(86362001)(66556008)(38350700002)(52116002)(4744005)(41300700001)(5660300002)(6512007)(66476007)(6916009)(2616005)(186003)(38100700002)(6666004)(316002)(83380400001)(2906002)(8936002)(8676002)(107886003)(478600001)(4326008); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 46vYlatlvaInihabut3EaZtnbwl5xFJdmtZ64fkSICfM0fe1U0sk7A8kxV38UA+1FivtWwa9ew6f+g+m4+Lt1FVK7iKuBIEo/iR2lKLrtMOoUQWJ+C0adfDYbryLoXDdhKux1Gl6BCSHBTLZkzAubn6fRwjxYuvyq9csJrKfnbKTp4DE3ENphVmM9UKBqshd1e65poUe71XsF2zsUTgpEegWrVJO7B6HbBxTIYUzT42ePQV8XE8ZFLanUTJ2wulfia8gvUyEAMOjkiZujZEMAy4bU2xDYwmvIkxFLKH3pKr67wUVl9qxzQKgDpQqhkX196aEYqKlNAznU2RdyrpWNnUPFX+KH/3DvnYA8gEBavAIFA0joJGsn3CXnOOwrpQwbZXPOpY0mIhBP1tSb5dUVFYZkDt6hkv+Pkr7eUiwsZdnZjBEkY48ofP2aFllcd3y2D1MIF1/cm6FvsqqWoT+YjXwq/RvIooWOaZfIb28tHSgqilAec4Ghek+6nfhWnwR4JTg3KTXcuQw3rpvLeclMA5kPIm795v2knhTGVxUZemeQmNM0ZS3H0JYbtaTtBf0VMVvcBj103sXfMWGhzqwFxFFzq1HJkOxGh3e5++mp8r5rKHGLee7mEcjIgeuMnb++wDuEs54Of61uFnVKXcQLksb22XU7o8TGUyJTUOeI5Nf2+i7igKiXlSxV/uH7WxS2nA0snImKoIMHDymHFRiAmKztDZ9qDjgUIUqTBtSe8E2gonVpZb34ui7DPvlNxVDE8v0OIT2iZZVw8ScGmZLFBrXmqcM3B0L8bgQ86QjsT2xBi7H5DBOZF5ftdRfvgHxAGY0FJWNqBDugIbYlqYmP9VmTNODWv5b2m2WxClP0Ixcl9w8x/ZBM3ey0vYjVuIz8e/j0L+NCrRvxpRRrzw6gbW9Mm0rbt+N5XX1+CduJ9veynUmK7TqQn+vA7ha3A9BG3mpNprX+SNyhuXeLeIlmnD+agzGTBmrTLVRkIry7w7YRQhDDjMg7wBHoAMRka7GsVDzKGo3rzduZwsOkG5DwO+uBavKmiSco4UtT337mzPaCw/4fvwetr9pMdQKuJG4TfmaUp1n4H7RHT4q39h8DdjOAeOPiLNtEzZ+oNevSO6hJz27mDF4P4nUt9cJyzYHZ+3WMzORCPUJnCaUpv0/xAvNjIJyvXL+1KVJI3KAHipx09E9WZXJNEHBStkjbekPWVfhNoMzV+1+q2fqMXb+pTT67sdpSxKLptkKMdaycTLj8X5pIFsJrJCZbUv4hQU/T493UevKo+fe1DoAtCM9tn8Z8/vyTVz4vXFScqSak/6B//MEAsSY2jWi4DW6ay49Ie21wDotMcUej9cUrfit5xeL3YZCyShH7pwzkSqM50L2S+0qpAIM+zi8EDs5LM7pVMZ+wY0Z61vWx6gE9CtY6pvalkn+ckx9OYWqcmqP9Fvyp4jal3s2/q5u7FS/IQqGGQQGIf6x6wQ/cthO9WzPXeN/fPstmgbPjd8V6eLj/mjmkfw4oXjd4lmgL7gLLLG/RYXYhX4e74y8c774EUOfDUArXoYHPirq2C4dfSGbYkPJWcyzhG4FKxIJBat76yVFaySoYlymOT42lPR4Xz8obQ98RIGBMTB/7ZAwWBq44WPPbq61qgpnuNmaR6Qghg95nW6ytsCuGmLw4wGBiItYXO282DY0NRh+pO9H3aZXwkF9IiFU7GBfR3uOOYS6h1Qs5OcvNqcD0OoqAKbVw775A+xH0PBK2bTsTvh8J2ZxRlo= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29941d5a-aada-4818-2858-08da52db2521 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:20.2622 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dAF2IGJj5J+CoHsKalGdcEAYBkpzy4WgbumXnnoCNqIB5tLmtMKJGp/osULAv0+MIUSXIrDupXgauBdP7iwZJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB7838 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Use carriage return instead of line feed to support mangling across lines. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - New commit tools/zynqmp_psu_init_minimize.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/zynqmp_psu_init_minimize.sh b/tools/zynqmp_psu_init_minimize.sh index 31fbeac327..c0a7a89465 100755 --- a/tools/zynqmp_psu_init_minimize.sh +++ b/tools/zynqmp_psu_init_minimize.sh @@ -121,7 +121,7 @@ tr "\n" "\r" <${OUT} >${TMP} # | | ==> |while (e)| # | } | | ; | # | | -sed -i -r 's| \{\r+(\t*)\}\r\r|\n\1\t;\n|g' ${TMP} +sed -i -r 's| \{\r+(\t*)\}\r\r|\r\1\t;\r|g' ${TMP} # Remove empty line between variable declaration sed -i -r 's|\r(\r\t(unsigned )?int )|\1|g' ${TMP} From patchwork Mon Jun 20 16:36:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645607 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=JybqLX83; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRb6B4R1Jz9sFx for ; Tue, 21 Jun 2022 02:42:26 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 93C3384458; Mon, 20 Jun 2022 18:37:45 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="JybqLX83"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 85BCC81F8B; Mon, 20 Jun 2022 18:37:25 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on061a.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::61a]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 9762D82104 for ; Mon, 20 Jun 2022 18:37:21 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RDk6CEGQ0ZL+DNL9xnAZ7cABbL3ZJWf1s2nLdrWj3GbFpj+B3kuxcJgZOmTojblq+8d9KlWLBKKYFkYBjUxgze/PMyRU9SKIkR4QdWCySnmEudmWYhU7yI5xLW06u24RLMPIU2L7TJkWx4VafAdtnZituuCY0dO5fYUEhRcTpiOa00cJ62PfJ4btJzd7ztGjwKAmGSwrf5OeZBOTjzsKqrwzx1aT4JiplPl8I4HXQoYTFPHUHVZ1OvDvtLJQejSr8rd0YjQC++ZemBfljXJUezKptOnltK65P9wOXo7x74zzUKEORAMyR+ZmYSlHBrxs8+9XfeT/s4tQnPPC6ufBRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CqZSmllvmeYnUU9qxdHHbvMtmGO/u2Rkmo0SC6MVOVo=; b=PrbiwfFwrVHDyZ0iO1Sg6bUAkjK89JvzJJg1DyWKIs/ly41+z8jITnRmHyGEYepRwPK42MDD0VBFPrmT7DlZyq6m5GsjjOAHEbaU+GnnZt4P0TyKyy94awQtkMCcht0QRGJK9TOEbs8YMoVUPzXs/t8JHi58vrY9qwa3y4Ecgx/9srFpVg77uy7VhD06djopMW9mHuDIQhWEqlu5sZZSVvXjRxzidxqBHcHH44bvy+RBypq07SiLn9g7b6rBVVlutqFsc6nyoDXiSO383oymFOrE4Re0Ud5qlk14F9tcUoTU3RW6F07DnMKcTKgwztrACtymVN8bY2/hGaI71rTo2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CqZSmllvmeYnUU9qxdHHbvMtmGO/u2Rkmo0SC6MVOVo=; b=JybqLX83r+eBSQ62OBM/dZBDigAoAUJv11QJVnWm8wxR1+5JZ3dCSGCi1Rxh4eQp7dDB5GohIrR1POEUnmGMCNCV3H16+mKkE3jJSn8BFvD07tp156gTqqFeQrBEJyLgi2yqvIja/VM6WqDFOlVVYPhduoXLaA/16tHsqasXz3g= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AS8PR08MB7838.eurprd08.prod.outlook.com (2603:10a6:20b:529::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.16; Mon, 20 Jun 2022 16:37:20 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:20 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 14/15] tools: zynqmp_psu_init_minimize: Move helper functions below header includes Date: Mon, 20 Jun 2022 18:36:49 +0200 Message-Id: <20220620163650.18756-14-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 494f76e8-acc2-4c27-a61d-08da52db256d X-MS-TrafficTypeDiagnostic: AS8PR08MB7838:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dF8W35pgGkOzURTWUs4N7Sh6niZyMZhLSx80E7jf11zGnafHuK2ySvnV4mnkjBH6CjNvb3X/FVyl5+X0v5mW0IlhB7LzOAMfrQcuODSo4TWzPs2o59kFV5SvhAWn36MjbOaAaHNw/ERrDiBcK5UWYJR20JC30ID9uon50nxvGLOm/TCW27MhL1J61c/GEoPacEQgW+N/NsyRuWcXXre7guDDUMdmI2+g8K5QeoGndngRvjIxhwu6mwj5KHoZEWQIrFfrMlKC2tC0qqYpEHDBJ4xVd6ChvgdbGPNGq8kO1H2GmIl8+7fYP6acf6FY9UGsTXLMojU3hN/EMEeJyWGwGkdQwKB1qHrLK5Tvl34994FObBOLzd9Li3bJPeO7buQsa2i6Ewe6OVkcbqzJdGyFuuMM7i4mX9+N33bDKEO7Q4vWR6i8Xlg9oZ0dTUsTnfUoytpUG9pORLU2ztRN79tGlydUmfGEtJolJ51NKWz8FFK7/vxB3Zy4l65G9cwQHfM1YAIAxhh4slpAAO4OTVx95ncyUgGKrNyR3OF6oBELCvwfgqEWAZm+tUYZKhOG4ydGdsl1XMQ6DLdms73Bg4bRL8VB6O6udGJdGEAG9VYMtDFcGu6wHG5ktlh255SppFnyIvxC7C49LdmJwqsl3+Vn+mZJVp4hnUCVQtoQ89izuN9Q1qsmtJoDT4vwo+5ANZBhp0yqIQ6pEO3YUzbpsgXeGA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(376002)(396003)(39860400002)(346002)(136003)(366004)(26005)(1076003)(36756003)(6486002)(66946007)(6506007)(86362001)(66556008)(38350700002)(52116002)(41300700001)(5660300002)(6512007)(66476007)(6916009)(2616005)(186003)(38100700002)(6666004)(316002)(2906002)(8936002)(8676002)(107886003)(478600001)(4326008); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +a0wPVLv5d//noPrVvsvPhVUyltqkINRoMN0rxCqjUIfvgaQdiLx9DeJaevfXMSWSd2OFLDbMmVbj3XbHQTbJs45Y4+DDjoKko7EZZMz2FKy9Sk377U7mEAnV9B1sBol01zejx/hGN/pQkJxzi5zGqCFOoJ4fWuUsQTtvrkM+35KPT2fs0KnBOuDqqyBjr3Ntn/EALOdrX2DppMV211rmy8wyLX1TnbjojQRclH/8J9HlD2Km34GVkoedSq/uIBqWLFHzZPIZSkrsR6GB6EZaaToCQiljGWD6g1/ewYh/SDc61t8qJYV0aLkVCQCLkcBgSWDD1b1YHyZpYPS7lDKFPSgj+nIWwbgSArwl4J300iFpFCZG+TlAzPGG4kDK30Wo6VzPPpwz6D05D8J4Sdx11VyhGTEJniPsiqwXN1Bwx9lYudGmL9zGgaGSKV+wdQSaNGMdJX4YTsG8GB5L20XiQTGR9Zy6Do6gd99NkF9iND7guReTXdYkB4THRkVZBXim1+B4jfDs4GnAqHYgCLRQRIFcOi0ElS4CvWA4TQkg008FLUMgy1x/iKLdgX9+vjezWIK508ddcrLf4vA4FWYDgeD0F6M9/naz5zn6waLY3mO2DE724+rtOcks1EtKE0PyME/O42a/SwKhLiQkQrfn2XAnYTgX8l1BBaYEzUnbx1R9SN1cxSRHkgyAnqwCkwNxcdT3+72aOgKoHb8kgnjZOz3ayaZ32H1hkAioJ6cidjfBNEDGxbjP3ddwmbHXCbhU3HTb8PeHdWvH/L7FxSG84QtUTrqvlXJjqzoPnCZUlV/7Nuh33grTBZaluhKQ5pSoiwRcBUS3pQ/WDSzpu2H6OrJZxcSys/tnnRrCxsBJ+7G3thi7qjbz2mBjQP1bdKUKWh+rB6jbZsFlIGUjSn0hBQkQzwaVcH79rJcT1auLHCPHFY498CfI5iEKFtYWeQxFEnqEKslE/Qyt3bvwXYwCXDkheC2h/Hd6fJGQxNlZNcKGNuLmtGHz+Tx9k+R5+bCjnx/0fhTJWSKGOILUrNRgsguA6hJribLmSxDVEBZesnbW9wpH3rR8UZTughy2Hlz8S+mES3YFoftrTAomx2SOgSNu0cj0qpicf2mmBw7IconEiMzRvwUoC6me/t/Ur8cdx0TMTStSmI5Xq+/feHeczhAmNAopGW1Qvvx2oeYVYZbVdMvZylkywMSpjUNb5zMCU9YzvCWcY/wAa7yKJE3o2PTSu2xi7MapmyeKUXXlGhuX3+DWe0CaD2g06zG296fJApCdNrfsD0EqxLEyPQWkP2iSQCSnzHeRpPO8BXv0dS5GAf8ZJpxN61G8qDbcoGqHTyrwpqRqk+ldZ3wqg7KyJJ+vllXjPQEpB2bL7s4cOeiTAI5e3eIPnlrxeXJcBgZ0rTapd1uEzXMALUOipZNN3Siye0TZ6yRO1y3QsAb5rqy2QzvJn9sE+r6v/XhEnKAXEjXqf3gIebQLs2so10/jmey9pkyhbM6Wa90Md0DRAMLtlon19N4bvMpZsqCXudWMbo4eoSjdnYCvWYgEExV7ZqHXeC+21hQ2QaXf6wT88ppcAtFWhQtT/Mu4EGqZRs8wohGcGRb2+kjS+O7F1ErX9vcVVjvRnNJAIbMgwhcmLlM3/1oIC5d95xu7zKcE35OZyJe14adxpbvfyCumWytwEOunLF3a0q18zS0l0kU+PDxmrebVCP15fNxx1MxlXM/d9Yh6U13dDgwavjVMt/IqCqgRJpjh06J6LRTWgHgsF8= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: 494f76e8-acc2-4c27-a61d-08da52db256d X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:20.7010 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3xdU8FZF1EXrGmmC8wwXhihZwywsOGMO9avPSVperxMnHahpU5dwVZRHq8y0G4WEaZqc8wpw1UMKJ26IwbLXdg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB7838 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Move helper functions below header includes to avoid forward declarations. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - Remove forward declarations and move functions instead tools/zynqmp_psu_init_minimize.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/zynqmp_psu_init_minimize.sh b/tools/zynqmp_psu_init_minimize.sh index c0a7a89465..16c622f6ce 100755 --- a/tools/zynqmp_psu_init_minimize.sh +++ b/tools/zynqmp_psu_init_minimize.sh @@ -143,6 +143,14 @@ sed -i -r 's| \{(\r[^\r]*;)\r\t*\}|\1|g' ${TMP} # if ((p_code >= 0x26) && ...) -> if (p_code >= 0x26 && ...) sed -i -r 's|\((._code .= [x[:xdigit:]]+)\)|\1|g' ${TMP} +# Move helper functions below header includes +TARGET="#include " +START="static int serdes_rst_seq" +END="static int serdes_enb_coarse_saturation" + +sed -i -e "s|\(${TARGET}\r\r\)\(.*\)\(${START}(.*\)\(${END}(\)|\1\3\2\4|g" \ + ${TMP} + # Convert back newlines tr "\r" "\n" <${TMP} >${OUT} From patchwork Mon Jun 20 16:36:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Herbrechtsmeier X-Patchwork-Id: 1645675 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-weidmueller-onmicrosoft-com header.b=uKTTosN4; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LRdQK1J5mz9sGG for ; Tue, 21 Jun 2022 04:26:33 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A464282064; Mon, 20 Jun 2022 20:26:28 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=weidmueller.onmicrosoft.com header.i=@weidmueller.onmicrosoft.com header.b="uKTTosN4"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 863F2843D1; Mon, 20 Jun 2022 18:38:00 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,SPF_HELO_PASS,T_SCC_BODY_TEXT_LINE, T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0610.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe1e::610]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 80F5D83B68 for ; Mon, 20 Jun 2022 18:37:32 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=weidmueller.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=stefan.herbrechtsmeier-oss@weidmueller.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Rba7C5f/4slDykLOOE4JChdz+2qoGmeZOc8l1Z2KsK/RBHpfr4oD2mpbUNt5AQKynWTKWZXOsWEYIDXponU3IheEQi82r8Wj5k6AGsGZHOxWH/G3Xf5PhufcfB7h1lxA9rqUusygmceRzh8gZJG7T8ctYoTngnrJTinz0f9N/tAfNQJzVxW1nC3RrGwg61DAk71IoGa0F6W6bv0nYQ8QqXXL+/VMAqBANrI2NT5TQJUoSGRJbXhsujY43eUzbFaN5VxGEvr0ydFshYqDPXNjJyC6feubtpjUR0detvles5anDqzxgrHeNojf7YocIJB22hJFaCUFA3msSLaJwuRMvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1wYi/Aq2x4QF4lgQEVAoLFy2AsljHLbZzs0aXuKY/z4=; b=YTdQI7irkRJG9chthqETAfqG5x0+PPteCyTAmnkRycInc11uhnmrfcw+IhP9xY0sPQH0pS62J17v0Gc6rMdECjj582JJKi5RY0OdEaJPA9FMZ2eoGAhyfKFqdGiI7wLGTzoXyUXUm886APwKImGQQc+e+tekfqqYvTNlllQPLsxMHZPxk/4VblLvkYgCfRwVrX+WWbd+HJZPUgeEQyEox0avsxqpiqGHSRunLL1eUPhNjjNjk3GEuepNkYF8oGZ8aetoZMJmdcMZ76gKNnwI0vgNSDl5omHqW0GSoYaRBUw5gxmqrLpV/AVftjJjPMB+OBVlS0wPGtP4q6O5/TpC0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=weidmueller.com; dmarc=pass action=none header.from=weidmueller.com; dkim=pass header.d=weidmueller.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=weidmueller.onmicrosoft.com; s=selector1-weidmueller-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1wYi/Aq2x4QF4lgQEVAoLFy2AsljHLbZzs0aXuKY/z4=; b=uKTTosN4+CTmI7Gz4DrzmZhjwmb9u4wUqVKtORbXD8Vjsbt/peNSLfz4RAt0o2+5TX3sZXmnpDVhQPajLAEInfgPhsKky+daPOE2IFN+V/LYuIh/wvA/o8SE4lc1cV/5mxH/Zc0jSC8GAymUF2ofmA3MO7Jknm69uzsurlMt98s= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=weidmueller.com; Received: from PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) by AS8PR08MB7838.eurprd08.prod.outlook.com (2603:10a6:20b:529::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.16; Mon, 20 Jun 2022 16:37:21 +0000 Received: from PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787]) by PAXPR08MB6969.eurprd08.prod.outlook.com ([fe80::49a6:e5ff:7f94:8787%7]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 16:37:21 +0000 From: Stefan Herbrechtsmeier To: u-boot@lists.denx.de, Michal Simek Cc: Stefan Herbrechtsmeier Subject: [PATCH v2 15/15] arm64: zynqmp: Move helper functions below header includes Date: Mon, 20 Jun 2022 18:36:50 +0200 Message-Id: <20220620163650.18756-15-stefan.herbrechtsmeier-oss@weidmueller.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> References: <20220620163650.18756-1-stefan.herbrechtsmeier-oss@weidmueller.com> X-ClientProxiedBy: AS9PR06CA0560.eurprd06.prod.outlook.com (2603:10a6:20b:485::10) To PAXPR08MB6969.eurprd08.prod.outlook.com (2603:10a6:102:1d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b0858beb-68ba-4e70-2968-08da52db25b5 X-MS-TrafficTypeDiagnostic: AS8PR08MB7838:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rlui7UYSf1tsNcUVHkq/QBY3dIVo0M31Z2O2CFp1I8QN0oyqDjSUq/uHbBgE/PpNx9qhx/RR/9QDFgJgxdxVKTxt6Pk/mH8V5AGfzy3k/MvGiQpd0xroSimkrFTCYmv1A1Uk8hirjR1/I8Bt/g+DzgUPZRczzl+daQPbXKA6qRg7GMc3NeawQkJEc2AFoRs/YZps76ArZ7U4RKAqjBtznB+AGSdC87swSMHJqhmai1PSqL8zaPd3EoxfZMnHTs6+RenfPM+mDswLPyGr9MRjBGVv2Uhi7bef8drB7mmfcT/Ld7WX8nLj6rdCYTy3vlvLowc/LVRGzRH4lJPRBuk/qpTcrme7emn/gS4495w/03WiuKJGFN+0mpyB8YjY4sxfJZx+vrqs19AffwrGmfvySrUiGb2Aegi7WOII1FvCsaueVY3hLt7UCXFeAa2YdjknV9Ys7zjW9yAHXzdfmTxkipGwuvvEjkvmefWYHKCNcQd1DuOlDufzOh8WS3M/JdMJPI0Q7eYanY8i7Z9aAlN44YedMGU0KTTd727WsfY1M+Ex/tOQORQmbBNQeXOe8yNGpqee/aQ0I/eTRaw9l0HKgIOmRfZ3NS1OsbHYBg/Eh54EByUsbx6l/rMPpeuvwWTq8D7V65KFiDT/ELEkl2QDKQH+kV8IhrbGf/XoynPUbAIhiBhIMwn2vQzqNJhrxcy00uGhyDjbGYouKnvw6Pygfw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR08MB6969.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(376002)(396003)(39860400002)(346002)(136003)(366004)(26005)(1076003)(36756003)(6486002)(66946007)(6506007)(86362001)(66556008)(38350700002)(52116002)(41300700001)(5660300002)(6512007)(66476007)(6916009)(2616005)(186003)(38100700002)(6666004)(30864003)(316002)(83380400001)(2906002)(8936002)(8676002)(107886003)(478600001)(4326008)(559001)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7v6k09cItIUJm6EL8RJonVVLoLiYJiFVNUs3KO4qzl2KzMcr3S4KWxVCUg0qI3DHQIi9P2x3/p/UWjLG+RF8KWTrV78CAlJz9Trxf1mgTI0id9oB8IW37b3bzOyD11y+EV2pLLPhdxYzUApQFt/G4Gk3rguQAHLY3vJJfAz5UJHno0UFHqGDVa+8dMUena+wLNkPaumW7w5ifhgFBcSxV7JcPhdcnTQ9jDtT/rFyJRXvnTFBMJkF35hNLXehrqIBMAzKkAkQNAjbf89DPl1Os5gJ/ONkD6ypQ4nuJdwggPZlW9k7uK/w8R5Hd3VzJyieExcFCiGd0gIxZZ3wJfpoT/01r0lbzQoh8SWkNwhaE2Kedmb4QKw3XYiuHeI+TmJhMLkW1Y61sODwb7grQAlDl1yjKeb5GXpCmnPKV1OSDv2+s0+oFG2OPsy2xQvcRbTCLaNtpHzw7FLsXmI6sYJ19pc/SpF7K5oj2wh1IBlTpVwpFAV3tRJMNTFyqiFa6o24IKj1WPQY0gsTOa6SljUkB1F0UmXZwn3jHcj/qDjtjHDtN8ZZhmOCiqDTzLUjc5q3/7U21ycClgkxj+XxhBsQudCmgj6Dl7TmTjEVP4aagqGjfFmKiT7s+rESGcdUKjWOykBd7FBEodFB+by/mc0nHMDUg9MUAs6w3nPP4FfgX4F+Zaj0xBORDLTFTzlGqEf/A4mm79qcnSe3zxq2OWL+twTNLUu7DNhuiRZZY0BEeqp6Da+9Ccx//+HqnQuM3QbdN6ev0WpdRz92hFx2YBhVVTmvNucB7rUOT4fOr5Y5R1E91sQj6vQzbGUennjXlAdf1xxzd9fFg3kadxb19q2A9XNceMidUNOtsraCFpGf0oGj5/AHYRXWP0vU5Afr2bJxTnmrishoy9rZzUUpt3DVj7LtQ2JKxdQKzs+Zbrnyo4CZXkJv7P2ybpQNhO1xdhsqpj1/2y/cOOYIeBaeIJfvvUl5m2PZpJnnlBGZgUBp+rCj3+h10OOHJC+N5XFJNwneQ2gSzNE3s0xCny+2C2fUJj0FKjf9WBdCp7A7TICOM09ohYeK0GdXIr0xLBoFe55v7ICqgvMXGYMJsUSrGr19GQ4jz+AdC0S2GIN0Zj6eSFHKPkfQkdfJJ4ZFuOWvbS7oYKO3hZxHevruVKk5fCM5BFnnSS8NcIk/Vz5P+uZUGFUr4UX0AbJg36M+SP27v2PM9Ur4ndk7OeYNwWM8NjRtePihoHyaHlvKTlImw6Q0/OLUMXhWGr87uKcT9Og9DZL0izymSImBcDLiQCmAKX2cyZy0qnQgemDNrATt9Xworua92jjLLr9CSNNWgNz0xUgqALjDDdWunGoc037iSYfz1lRCwKJCTQjTUizxTFK4y5G6u8zfo7qCNdTy0RUAnmAFiA0DMc9lqtS4kjnodyO/x5Dc2h+Rxa56UHYR4Kt+QMK7xOChgBhHS/d9iV3A5RDhCNC1iGegA8KeN4zoEVoO9IZdipsyJ8/kb6UXa2PVZJqGlwn6NqK9u0AmZpnYJnsgqCHPz1GUABaRckiwguZrF8mgis6mlEGYOzYtD+VU5v4MRNMZqB3ewuEAXnSOMn+GMsiYZs0hN9sEtQtmFQFnEUGV+QuF6//YOQalxlXATu7Kps3kr1W6imT/iSWbjrnA8rkD4QUi8gt3vrivJaGkacs26hyOlKgCygng3pP7v8e+XcshjHL5EQcQT+uGa/EeonoedXlfmbqXG4OU26u6sEIfQdEEIKV//zVafeXuFmo= X-OriginatorOrg: weidmueller.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0858beb-68ba-4e70-2968-08da52db25b5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR08MB6969.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 16:37:21.4978 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e4289438-1c5f-4c95-a51a-ee553b8b18ec X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5dwzFB6ZvTzLpRaPH2LUZsVMWDqu74X0Sb2yXCOb4RzP9zYG7g9a/tMkAqobShiZ4TPuXMaoicoXjRihrdND6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB7838 X-Mailman-Approved-At: Mon, 20 Jun 2022 20:26:27 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean From: Stefan Herbrechtsmeier Move helper functions in psu_init files below header includes to avoid forward declarations. Signed-off-by: Stefan Herbrechtsmeier --- Changes in v2: - New commit .../zynqmp-e-a2197-00-revA/psu_init_gpl.c | 3478 ++++++++--------- .../zynqmp/zynqmp-zcu208-revA/psu_init_gpl.c | 3231 ++++++++------- .../zynqmp/zynqmp-zcu216-revA/psu_init_gpl.c | 3231 ++++++++------- 3 files changed, 4961 insertions(+), 4979 deletions(-) diff --git a/board/xilinx/zynqmp/zynqmp-e-a2197-00-revA/psu_init_gpl.c b/board/xilinx/zynqmp/zynqmp-e-a2197-00-revA/psu_init_gpl.c index 40d9279378..5ec327134b 100644 --- a/board/xilinx/zynqmp/zynqmp-e-a2197-00-revA/psu_init_gpl.c +++ b/board/xilinx/zynqmp/zynqmp-e-a2197-00-revA/psu_init_gpl.c @@ -6,1866 +6,1858 @@ #include #include -static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate); - -static void dpll_prog(int div2, int ddr_pll_fbdiv, int d_lock_dly, - int d_lock_cnt, int d_lfhf, int d_cp, int d_res); - -static unsigned long psu_pll_init_data(void) +static int serdes_rst_seq(u32 pllsel, u32 lane3_protocol, u32 lane3_rate, + u32 lane2_protocol, u32 lane2_rate, + u32 lane1_protocol, u32 lane1_rate, + u32 lane0_protocol, u32 lane0_rate) { - psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E4B0C62U); - psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00014600U); - psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); - mask_poll(0xFF5E0040, 0x00000002U); - psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U); - psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFF5E0038, 0x8000FFFFU, 0x00000000U); - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012300U); - psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E672C6CU); - psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00002D00U); - psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U); - mask_poll(0xFF5E0040, 0x00000001U); - psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U); - psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFF5E0028, 0x8000FFFFU, 0x00000000U); - psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U); - psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014800U); - psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000001U); - psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFD1A0028, 0x8000FFFFU, 0x00000000U); - psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U); - psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00014000U); - psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000002U); - psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFD1A0034, 0x8000FFFFU, 0x00000000U); - psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C62U); - psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00014700U); - psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000004U); - psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFD1A0040, 0x8000FFFFU, 0x00000000U); + Xil_Out32(0xFD410098, 0x00000000); + Xil_Out32(0xFD401010, 0x00000040); + Xil_Out32(0xFD405010, 0x00000040); + Xil_Out32(0xFD409010, 0x00000040); + Xil_Out32(0xFD40D010, 0x00000040); + Xil_Out32(0xFD402084, 0x00000080); + Xil_Out32(0xFD406084, 0x00000080); + Xil_Out32(0xFD40A084, 0x00000080); + Xil_Out32(0xFD40E084, 0x00000080); + Xil_Out32(0xFD410098, 0x00000004); + mask_delay(50); + if (lane0_rate == 1) + Xil_Out32(0xFD410098, 0x0000000E); + Xil_Out32(0xFD410098, 0x00000006); + if (lane0_rate == 1) { + Xil_Out32(0xFD40000C, 0x00000004); + Xil_Out32(0xFD40400C, 0x00000004); + Xil_Out32(0xFD40800C, 0x00000004); + Xil_Out32(0xFD40C00C, 0x00000004); + Xil_Out32(0xFD410098, 0x00000007); + mask_delay(400); + Xil_Out32(0xFD40000C, 0x0000000C); + Xil_Out32(0xFD40400C, 0x0000000C); + Xil_Out32(0xFD40800C, 0x0000000C); + Xil_Out32(0xFD40C00C, 0x0000000C); + mask_delay(15); + Xil_Out32(0xFD410098, 0x0000000F); + mask_delay(100); + } + if (pllsel == 0) + mask_poll(0xFD4023E4, 0x00000010U); + if (pllsel == 1) + mask_poll(0xFD4063E4, 0x00000010U); + if (pllsel == 2) + mask_poll(0xFD40A3E4, 0x00000010U); + if (pllsel == 3) + mask_poll(0xFD40E3E4, 0x00000010U); + mask_delay(50); + Xil_Out32(0xFD401010, 0x000000C0); + Xil_Out32(0xFD405010, 0x000000C0); + Xil_Out32(0xFD409010, 0x000000C0); + Xil_Out32(0xFD40D010, 0x000000C0); + Xil_Out32(0xFD401010, 0x00000080); + Xil_Out32(0xFD405010, 0x00000080); + Xil_Out32(0xFD409010, 0x00000080); + Xil_Out32(0xFD40D010, 0x00000080); + Xil_Out32(0xFD402084, 0x000000C0); + Xil_Out32(0xFD406084, 0x000000C0); + Xil_Out32(0xFD40A084, 0x000000C0); + Xil_Out32(0xFD40E084, 0x000000C0); + mask_delay(50); + Xil_Out32(0xFD402084, 0x00000080); + Xil_Out32(0xFD406084, 0x00000080); + Xil_Out32(0xFD40A084, 0x00000080); + Xil_Out32(0xFD40E084, 0x00000080); + mask_delay(50); + Xil_Out32(0xFD401010, 0x00000000); + Xil_Out32(0xFD405010, 0x00000000); + Xil_Out32(0xFD409010, 0x00000000); + Xil_Out32(0xFD40D010, 0x00000000); + Xil_Out32(0xFD402084, 0x00000000); + Xil_Out32(0xFD406084, 0x00000000); + Xil_Out32(0xFD40A084, 0x00000000); + Xil_Out32(0xFD40E084, 0x00000000); + mask_delay(500); return 1; } -static unsigned long psu_clock_init_data(void) +static int serdes_bist_static_settings(u32 lane_active) { - psu_mask_write(0xFF5E0050, 0x063F3F07U, 0x06010C00U); - psu_mask_write(0xFF180360, 0x00000003U, 0x00000001U); - psu_mask_write(0xFF180308, 0x00000006U, 0x00000006U); - psu_mask_write(0xFF5E0100, 0x013F3F07U, 0x01010600U); - psu_mask_write(0xFF5E0070, 0x013F3F07U, 0x01010800U); - psu_mask_write(0xFF18030C, 0x00020000U, 0x00000000U); - psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0120, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0124, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000602U); - psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000800U); - psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U); - psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U); - psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E00C4, 0x013F3F07U, 0x01040F00U); - psu_mask_write(0xFF5E00C8, 0x013F3F07U, 0x01010500U); - psu_mask_write(0xFF5E00CC, 0x013F3F07U, 0x01010400U); - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011D02U); - psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U); - psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000F00U); - psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U); - psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000200U); - psu_mask_write(0xFD1A0084, 0x07003F07U, 0x07000100U); - psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000203U); - psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U); - psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U); - psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U); + if (lane_active == 0) { + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); + Xil_Out32(0xFD403068, 0x1); + Xil_Out32(0xFD40306C, 0x1); + Xil_Out32(0xFD4010AC, 0x0020); + Xil_Out32(0xFD403008, 0x0); + Xil_Out32(0xFD40300C, 0xF4); + Xil_Out32(0xFD403010, 0x0); + Xil_Out32(0xFD403014, 0x0); + Xil_Out32(0xFD403018, 0x00); + Xil_Out32(0xFD40301C, 0xFB); + Xil_Out32(0xFD403020, 0xFF); + Xil_Out32(0xFD403024, 0x0); + Xil_Out32(0xFD403028, 0x00); + Xil_Out32(0xFD40302C, 0x00); + Xil_Out32(0xFD403030, 0x4A); + Xil_Out32(0xFD403034, 0x4A); + Xil_Out32(0xFD403038, 0x4A); + Xil_Out32(0xFD40303C, 0x4A); + Xil_Out32(0xFD403040, 0x0); + Xil_Out32(0xFD403044, 0x14); + Xil_Out32(0xFD403048, 0x02); + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); + } + if (lane_active == 1) { + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); + Xil_Out32(0xFD407068, 0x1); + Xil_Out32(0xFD40706C, 0x1); + Xil_Out32(0xFD4050AC, 0x0020); + Xil_Out32(0xFD407008, 0x0); + Xil_Out32(0xFD40700C, 0xF4); + Xil_Out32(0xFD407010, 0x0); + Xil_Out32(0xFD407014, 0x0); + Xil_Out32(0xFD407018, 0x00); + Xil_Out32(0xFD40701C, 0xFB); + Xil_Out32(0xFD407020, 0xFF); + Xil_Out32(0xFD407024, 0x0); + Xil_Out32(0xFD407028, 0x00); + Xil_Out32(0xFD40702C, 0x00); + Xil_Out32(0xFD407030, 0x4A); + Xil_Out32(0xFD407034, 0x4A); + Xil_Out32(0xFD407038, 0x4A); + Xil_Out32(0xFD40703C, 0x4A); + Xil_Out32(0xFD407040, 0x0); + Xil_Out32(0xFD407044, 0x14); + Xil_Out32(0xFD407048, 0x02); + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); + } - return 1; -} - -static unsigned long psu_ddr_init_data(void) -{ - psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD070000, 0xE30FBE3DU, 0xC1081020U); - psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U); - psu_mask_write(0xFD070020, 0x000003F3U, 0x00000202U); - psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00516120U); - psu_mask_write(0xFD070030, 0x0000007FU, 0x00000000U); - psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00408410U); - psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U); - psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U); - psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U); - psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x00418096U); - psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U); - psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U); - psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0030051FU); - psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00030413U); - psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x006A0000U); - psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00002305U); - psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x00440024U); - psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00310008U); - psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00210004U); - psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x00000000U); - psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U); - psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000077FU); - psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x15161117U); - psu_mask_write(0xFD070104, 0x001F1F7FU, 0x00040422U); - psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x060C1A10U); - psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x00F08000U); - psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x0A04060CU); - psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x01040808U); - psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010005U); - psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000401U); - psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x04040606U); - psu_mask_write(0xFD070124, 0x40070F3FU, 0x0004040DU); - psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x440C011CU); - psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U); - psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x82160010U); - psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x01B65B96U); - psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x0495820AU); - psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00030304U); - psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U); - psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U); - psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x83FF0003U); - psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x00C800FFU); - psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000004U); - psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x00001308U); - psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000001U); - psu_mask_write(0xFD070200, 0x0000001FU, 0x0000001FU); - psu_mask_write(0xFD070204, 0x001F1F1FU, 0x00070707U); - psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x00000000U); - psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x0F000000U); - psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU); - psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x060F0606U); - psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x06060606U); - psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F0FU); - psu_mask_write(0xFD070220, 0x00001F1FU, 0x00000000U); - psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x06060606U); - psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x06060606U); - psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000006U); - psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x04000400U); - psu_mask_write(0xFD070244, 0x00003333U, 0x00000000U); - psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U); - psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U); - psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U); - psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U); - psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070300, 0x00000011U, 0x00000000U); - psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U); - psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U); - psu_mask_write(0xFD070400, 0x00000111U, 0x00000001U); - psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU); - psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U); - psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U); - psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U); - psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U); - psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU); - psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U); - psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x87001E00U); - psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F07E38U); - psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U); - psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U); - psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x42C21590U); - psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0xD05512C0U); - psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04161U); - psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD0800C4, 0xFFFFFFFFU, 0x000000E4U); - psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0000040DU); - psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x0B2E1708U); - psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x282B0711U); - psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x000F0133U); - psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x82000501U); - psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x012B2B0BU); - psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x0044260BU); - psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000C18U); - psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U); - psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U); - psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000044U); - psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000024U); - psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000031U); - psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000008U); - psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000056U); - psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x00000056U); - psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U); - psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x00000019U); - psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000016U); - psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x800091C7U); - psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00010236U); - psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U); - psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U); - psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12340800U); - psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x0000000AU); - psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U); - psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000005U); - psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300BD99U); - psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF1032019U); - psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U); - psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x008AAC58U); - psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x0001B39BU); - psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U); - psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U); - psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x0001BB9BU); - psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080704, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08070C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00F50CU); - psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080804, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08080C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00F50CU); - psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08090C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00F504U); - psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080A0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00F504U); - psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x80803660U); - psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x55556000U); - psu_mask_write(0xFD080B08, 0xFFFFFFFFU, 0xAAAAAAAAU); - psu_mask_write(0xFD080B0C, 0xFFFFFFFFU, 0x0029A4A4U); - psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0C00BD00U); - psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x80803660U); - psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x55556000U); - psu_mask_write(0xFD080C08, 0xFFFFFFFFU, 0xAAAAAAAAU); - psu_mask_write(0xFD080C0C, 0xFFFFFFFFU, 0x0029A4A4U); - psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0C00BD00U); - psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x80803660U); - psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x55556000U); - psu_mask_write(0xFD080D08, 0xFFFFFFFFU, 0xAAAAAAAAU); - psu_mask_write(0xFD080D0C, 0xFFFFFFFFU, 0x0029A4A4U); - psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0C00BD00U); - psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x80803660U); - psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x55556000U); - psu_mask_write(0xFD080E08, 0xFFFFFFFFU, 0xAAAAAAAAU); - psu_mask_write(0xFD080E0C, 0xFFFFFFFFU, 0x0029A4A4U); - psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0C00BD00U); - psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x80803660U); - psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x55556000U); - psu_mask_write(0xFD080F08, 0xFFFFFFFFU, 0xAAAAAAAAU); - psu_mask_write(0xFD080F0C, 0xFFFFFFFFU, 0x0029A4A4U); - psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0C00BD00U); - psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09091616U); - psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x000C1800U); - psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x71000000U); - psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x000C1800U); - psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x71000000U); - psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x15019FFEU); - psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x21100000U); - psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01266300U); - psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x000C1800U); - psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70400000U); - psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x15019FFEU); - psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x21100000U); - psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01266300U); - psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x000C1800U); - psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70400000U); - psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x15019FFEU); - psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x21100000U); - psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01266300U); - psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x000C1800U); - psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70400000U); - psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U); - - return 1; -} - -static unsigned long psu_ddr_qos_init_data(void) -{ - psu_mask_write(0xFD360008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD36001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD370008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD37001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD380008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD38001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD390008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD39001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3A0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3A001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3B0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3B001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFF9B0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFF9B001C, 0x0000000FU, 0x00000000U); + if (lane_active == 2) { + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); + Xil_Out32(0xFD40B068, 0x1); + Xil_Out32(0xFD40B06C, 0x1); + Xil_Out32(0xFD4090AC, 0x0020); + Xil_Out32(0xFD40B008, 0x0); + Xil_Out32(0xFD40B00C, 0xF4); + Xil_Out32(0xFD40B010, 0x0); + Xil_Out32(0xFD40B014, 0x0); + Xil_Out32(0xFD40B018, 0x00); + Xil_Out32(0xFD40B01C, 0xFB); + Xil_Out32(0xFD40B020, 0xFF); + Xil_Out32(0xFD40B024, 0x0); + Xil_Out32(0xFD40B028, 0x00); + Xil_Out32(0xFD40B02C, 0x00); + Xil_Out32(0xFD40B030, 0x4A); + Xil_Out32(0xFD40B034, 0x4A); + Xil_Out32(0xFD40B038, 0x4A); + Xil_Out32(0xFD40B03C, 0x4A); + Xil_Out32(0xFD40B040, 0x0); + Xil_Out32(0xFD40B044, 0x14); + Xil_Out32(0xFD40B048, 0x02); + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); + } + if (lane_active == 3) { + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); + Xil_Out32(0xFD40F068, 0x1); + Xil_Out32(0xFD40F06C, 0x1); + Xil_Out32(0xFD40D0AC, 0x0020); + Xil_Out32(0xFD40F008, 0x0); + Xil_Out32(0xFD40F00C, 0xF4); + Xil_Out32(0xFD40F010, 0x0); + Xil_Out32(0xFD40F014, 0x0); + Xil_Out32(0xFD40F018, 0x00); + Xil_Out32(0xFD40F01C, 0xFB); + Xil_Out32(0xFD40F020, 0xFF); + Xil_Out32(0xFD40F024, 0x0); + Xil_Out32(0xFD40F028, 0x00); + Xil_Out32(0xFD40F02C, 0x00); + Xil_Out32(0xFD40F030, 0x4A); + Xil_Out32(0xFD40F034, 0x4A); + Xil_Out32(0xFD40F038, 0x4A); + Xil_Out32(0xFD40F03C, 0x4A); + Xil_Out32(0xFD40F040, 0x0); + Xil_Out32(0xFD40F044, 0x14); + Xil_Out32(0xFD40F048, 0x02); + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); + } return 1; } -static unsigned long psu_mio_init_data(void) +static int serdes_bist_run(u32 lane_active) { - psu_mask_write(0xFF180000, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180004, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180008, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18000C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180010, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180014, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180018, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18001C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180020, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180024, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180028, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18002C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180030, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180034, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180038, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18003C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180040, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180044, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180048, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18004C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180050, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180054, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180058, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18005C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180060, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180064, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180068, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18006C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180070, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180074, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180078, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180080, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180084, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180088, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF18008C, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180090, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180094, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180098, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF18009C, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF1800A0, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800A4, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800A8, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800AC, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800B0, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800B4, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800B8, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800BC, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C0, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C4, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C8, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800CC, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800D0, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800D4, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800D8, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800DC, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800E0, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800E4, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800E8, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800EC, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800F0, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800F4, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800F8, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800FC, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180100, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180104, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180108, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18010C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180110, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180114, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180118, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18011C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180120, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180124, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180128, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18012C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180130, 0x000000FEU, 0x00000060U); - psu_mask_write(0xFF180134, 0x000000FEU, 0x00000060U); - psu_mask_write(0xFF180204, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFF180208, 0xFFFFFFFFU, 0x00002040U); - psu_mask_write(0xFF18020C, 0x00003FFFU, 0x00000000U); - psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U); - + if (lane_active == 0) { + psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD410038, 0x00000007U, 0x00000001U); + Xil_Out32(0xFD4010AC, 0x0020); + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) | 0x1)); + } + if (lane_active == 1) { + psu_mask_write(0xFD410044, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD410040, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD410038, 0x00000070U, 0x00000010U); + Xil_Out32(0xFD4050AC, 0x0020); + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) | 0x1)); + } + if (lane_active == 2) { + psu_mask_write(0xFD410044, 0x00000030U, 0x00000000U); + psu_mask_write(0xFD410040, 0x00000030U, 0x00000000U); + psu_mask_write(0xFD41003C, 0x00000007U, 0x00000001U); + Xil_Out32(0xFD4090AC, 0x0020); + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) | 0x1)); + } + if (lane_active == 3) { + psu_mask_write(0xFD410040, 0x000000C0U, 0x00000000U); + psu_mask_write(0xFD410044, 0x000000C0U, 0x00000000U); + psu_mask_write(0xFD41003C, 0x00000070U, 0x00000010U); + Xil_Out32(0xFD40D0AC, 0x0020); + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) | 0x1)); + } + mask_delay(100); return 1; } -static unsigned long psu_peripherals_pre_init_data(void) +static int serdes_bist_result(u32 lane_active) { - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012302U); + u32 pkt_cnt_l0, pkt_cnt_h0, err_cnt_l0, err_cnt_h0; + if (lane_active == 0) { + pkt_cnt_l0 = Xil_In32(0xFD40304C); + pkt_cnt_h0 = Xil_In32(0xFD403050); + err_cnt_l0 = Xil_In32(0xFD403054); + err_cnt_h0 = Xil_In32(0xFD403058); + } + if (lane_active == 1) { + pkt_cnt_l0 = Xil_In32(0xFD40704C); + pkt_cnt_h0 = Xil_In32(0xFD407050); + err_cnt_l0 = Xil_In32(0xFD407054); + err_cnt_h0 = Xil_In32(0xFD407058); + } + if (lane_active == 2) { + pkt_cnt_l0 = Xil_In32(0xFD40B04C); + pkt_cnt_h0 = Xil_In32(0xFD40B050); + err_cnt_l0 = Xil_In32(0xFD40B054); + err_cnt_h0 = Xil_In32(0xFD40B058); + } + if (lane_active == 3) { + pkt_cnt_l0 = Xil_In32(0xFD40F04C); + pkt_cnt_h0 = Xil_In32(0xFD40F050); + err_cnt_l0 = Xil_In32(0xFD40F054); + err_cnt_h0 = Xil_In32(0xFD40F058); + } + if (lane_active == 0) + Xil_Out32(0xFD403004, 0x0); + if (lane_active == 1) + Xil_Out32(0xFD407004, 0x0); + if (lane_active == 2) + Xil_Out32(0xFD40B004, 0x0); + if (lane_active == 3) + Xil_Out32(0xFD40F004, 0x0); + if (err_cnt_l0 > 0 || err_cnt_h0 > 0 || + (pkt_cnt_l0 == 0 && pkt_cnt_h0 == 0)) + return 0; return 1; } -static unsigned long psu_peripherals_init_data(void) +static int serdes_illcalib_pcie_gen1(u32 pllsel, u32 lane3_protocol, + u32 lane3_rate, u32 lane2_protocol, + u32 lane2_rate, u32 lane1_protocol, + u32 lane1_rate, u32 lane0_protocol, + u32 lane0_rate, u32 gen2_calib) { - psu_mask_write(0xFD1A0100, 0x0000007CU, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U); - psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U); - psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000040U, 0x00000000U); - psu_mask_write(0xFF180310, 0x00008000U, 0x00000000U); - psu_mask_write(0xFF180320, 0x33840000U, 0x00800000U); - psu_mask_write(0xFF18031C, 0x7FFE0000U, 0x64500000U); - psu_mask_write(0xFF180358, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF180324, 0x03C00000U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000600U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U); - psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U); - psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U); - psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U); - psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x05F5DD18U); - psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U); - return 1; -} + u64 tempbistresult; + u32 currbistresult[4]; + u32 prevbistresult[4]; + u32 itercount = 0; + u32 ill12_val[4], ill1_val[4]; + u32 loop = 0; + u32 iterresult[8]; + u32 meancount[4]; + u32 bistpasscount[4]; + u32 meancountalt[4]; + u32 meancountalt_bistpasscount[4]; + u32 lane0_active; + u32 lane1_active; + u32 lane2_active; + u32 lane3_active; -static unsigned long psu_serdes_init_data(void) -{ - psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000FU); - psu_mask_write(0xFD402860, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD40106C, 0x0000000FU, 0x0000000FU); - psu_mask_write(0xFD4000F4, 0x0000000BU, 0x0000000BU); - psu_mask_write(0xFD401074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD405074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD409074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40D074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40189C, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD4018F8, 0x000000FFU, 0x0000007DU); - psu_mask_write(0xFD4018FC, 0x000000FFU, 0x0000007DU); - psu_mask_write(0xFD401990, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD401924, 0x000000FFU, 0x00000082U); - psu_mask_write(0xFD401928, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD401900, 0x000000FFU, 0x00000064U); - psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD401980, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD401914, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD401918, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD401940, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD401944, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD401994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD405994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD409994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD40D994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD40107C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40507C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40907C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40D07C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD4019A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD401038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40102C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4059A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD405038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40502C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4099A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD409038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40902C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40D9A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD40D038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40D02C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4019AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD4059AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD4099AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD40D9AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD401978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD405978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD409978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40D978, 0x00000010U, 0x00000010U); + lane0_active = (lane0_protocol == 1); + lane1_active = (lane1_protocol == 1); + lane2_active = (lane2_protocol == 1); + lane3_active = (lane3_protocol == 1); + for (loop = 0; loop <= 3; loop++) { + iterresult[loop] = 0; + iterresult[loop + 4] = 0; + meancountalt[loop] = 0; + meancountalt_bistpasscount[loop] = 0; + meancount[loop] = 0; + prevbistresult[loop] = 0; + bistpasscount[loop] = 0; + } + itercount = 0; + if (lane0_active) + serdes_bist_static_settings(0); + if (lane1_active) + serdes_bist_static_settings(1); + if (lane2_active) + serdes_bist_static_settings(2); + if (lane3_active) + serdes_bist_static_settings(3); + do { + if (gen2_calib != 1) { + if (lane0_active == 1) + ill1_val[0] = ((0x04 + itercount * 8) % 0x100); + if (lane0_active == 1) + ill12_val[0] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane1_active == 1) + ill1_val[1] = ((0x04 + itercount * 8) % 0x100); + if (lane1_active == 1) + ill12_val[1] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane2_active == 1) + ill1_val[2] = ((0x04 + itercount * 8) % 0x100); + if (lane2_active == 1) + ill12_val[2] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane3_active == 1) + ill1_val[3] = ((0x04 + itercount * 8) % 0x100); + if (lane3_active == 1) + ill12_val[3] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + + if (lane0_active == 1) + Xil_Out32(0xFD401924, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x000000F0U, + ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405924, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x000000F0U, + ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409924, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x000000F0U, + ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D924, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x000000F0U, + ill12_val[3]); + } + if (gen2_calib == 1) { + if (lane0_active == 1) + ill1_val[0] = ((0x104 + itercount * 8) % 0x100); + if (lane0_active == 1) + ill12_val[0] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane1_active == 1) + ill1_val[1] = ((0x104 + itercount * 8) % 0x100); + if (lane1_active == 1) + ill12_val[1] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane2_active == 1) + ill1_val[2] = ((0x104 + itercount * 8) % 0x100); + if (lane2_active == 1) + ill12_val[2] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane3_active == 1) + ill1_val[3] = ((0x104 + itercount * 8) % 0x100); + if (lane3_active == 1) + ill12_val[3] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + + if (lane0_active == 1) + Xil_Out32(0xFD401928, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x0000000FU, + ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405928, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x0000000FU, + ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409928, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x0000000FU, + ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D928, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x0000000FU, + ill12_val[3]); + } - serdes_illcalib(0, 0, 0, 0, 0, 0, 5, 0); - psu_mask_write(0xFD410010, 0x00000007U, 0x00000005U); - psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U); + if (lane0_active == 1) + psu_mask_write(0xFD401018, 0x00000030U, 0x00000010U); + if (lane1_active == 1) + psu_mask_write(0xFD405018, 0x00000030U, 0x00000010U); + if (lane2_active == 1) + psu_mask_write(0xFD409018, 0x00000030U, 0x00000010U); + if (lane3_active == 1) + psu_mask_write(0xFD40D018, 0x00000030U, 0x00000010U); + if (lane0_active == 1) + currbistresult[0] = 0; + if (lane1_active == 1) + currbistresult[1] = 0; + if (lane2_active == 1) + currbistresult[2] = 0; + if (lane3_active == 1) + currbistresult[3] = 0; + serdes_rst_seq(pllsel, lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, lane1_protocol, + lane1_rate, lane0_protocol, lane0_rate); + if (lane3_active == 1) + serdes_bist_run(3); + if (lane2_active == 1) + serdes_bist_run(2); + if (lane1_active == 1) + serdes_bist_run(1); + if (lane0_active == 1) + serdes_bist_run(0); + tempbistresult = 0; + if (lane3_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(3); + tempbistresult = tempbistresult << 1; + if (lane2_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(2); + tempbistresult = tempbistresult << 1; + if (lane1_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(1); + tempbistresult = tempbistresult << 1; + if (lane0_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(0); + Xil_Out32(0xFD410098, 0x0); + Xil_Out32(0xFD410098, 0x2); - return 1; -} + if (itercount < 32) { + iterresult[0] = + ((iterresult[0] << 1) | + ((tempbistresult & 0x1) == 0x1)); + iterresult[1] = + ((iterresult[1] << 1) | + ((tempbistresult & 0x2) == 0x2)); + iterresult[2] = + ((iterresult[2] << 1) | + ((tempbistresult & 0x4) == 0x4)); + iterresult[3] = + ((iterresult[3] << 1) | + ((tempbistresult & 0x8) == 0x8)); + } else { + iterresult[4] = + ((iterresult[4] << 1) | + ((tempbistresult & 0x1) == 0x1)); + iterresult[5] = + ((iterresult[5] << 1) | + ((tempbistresult & 0x2) == 0x2)); + iterresult[6] = + ((iterresult[6] << 1) | + ((tempbistresult & 0x4) == 0x4)); + iterresult[7] = + ((iterresult[7] << 1) | + ((tempbistresult & 0x8) == 0x8)); + } + currbistresult[0] = + currbistresult[0] | ((tempbistresult & 0x1) == 1); + currbistresult[1] = + currbistresult[1] | ((tempbistresult & 0x2) == 0x2); + currbistresult[2] = + currbistresult[2] | ((tempbistresult & 0x4) == 0x4); + currbistresult[3] = + currbistresult[3] | ((tempbistresult & 0x8) == 0x8); -static unsigned long psu_resetout_init_data(void) -{ - psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000000U); - psu_mask_write(0xFD480064, 0x00000200U, 0x00000200U); - mask_poll(0xFD4023E4, 0x00000010U); + for (loop = 0; loop <= 3; loop++) { + if (currbistresult[loop] == 1 && + prevbistresult[loop] == 1) + bistpasscount[loop] = bistpasscount[loop] + 1; + if (bistpasscount[loop] < 4 && + currbistresult[loop] == 0 && itercount > 2) { + if (meancountalt_bistpasscount[loop] < + bistpasscount[loop]) { + meancountalt_bistpasscount[loop] = + bistpasscount[loop]; + meancountalt[loop] = + ((itercount - 1) - + ((bistpasscount[loop] + 1) / 2)); + } + bistpasscount[loop] = 0; + } + if (meancount[loop] == 0 && bistpasscount[loop] >= 4 && + (currbistresult[loop] == 0 || itercount == 63) && + prevbistresult[loop] == 1) + meancount[loop] = + itercount - 1 - + ((bistpasscount[loop] + 1) / 2); + prevbistresult[loop] = currbistresult[loop]; + } + } while (++itercount < 64); - return 1; -} + for (loop = 0; loop <= 3; loop++) { + if (lane0_active == 0 && loop == 0) + continue; + if (lane1_active == 0 && loop == 1) + continue; + if (lane2_active == 0 && loop == 2) + continue; + if (lane3_active == 0 && loop == 3) + continue; -static unsigned long psu_resetin_init_data(void) -{ - psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000001U); + if (meancount[loop] == 0) + meancount[loop] = meancountalt[loop]; - return 1; -} + if (gen2_calib != 1) { + ill1_val[loop] = ((0x04 + meancount[loop] * 8) % 0x100); + ill12_val[loop] = + ((0x04 + meancount[loop] * 8) >= + 0x100) ? 0x10 : 0x00; + } + if (gen2_calib == 1) { + ill1_val[loop] = + ((0x104 + meancount[loop] * 8) % 0x100); + ill12_val[loop] = + ((0x104 + meancount[loop] * 8) >= + 0x200) ? 0x02 : 0x01; + } + } + if (gen2_calib != 1) { + if (lane0_active == 1) + Xil_Out32(0xFD401924, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x000000F0U, ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405924, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x000000F0U, ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409924, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x000000F0U, ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D924, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x000000F0U, ill12_val[3]); + } + if (gen2_calib == 1) { + if (lane0_active == 1) + Xil_Out32(0xFD401928, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x0000000FU, ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405928, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x0000000FU, ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409928, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x0000000FU, ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D928, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x0000000FU, ill12_val[3]); + } -static unsigned long psu_afi_config(void) -{ - psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U); - psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U); - psu_mask_write(0xFF419000, 0x00000300U, 0x00000000U); + if (lane0_active == 1) + psu_mask_write(0xFD401018, 0x00000030U, 0x00000000U); + if (lane1_active == 1) + psu_mask_write(0xFD405018, 0x00000030U, 0x00000000U); + if (lane2_active == 1) + psu_mask_write(0xFD409018, 0x00000030U, 0x00000000U); + if (lane3_active == 1) + psu_mask_write(0xFD40D018, 0x00000030U, 0x00000000U); + Xil_Out32(0xFD410098, 0); + if (lane0_active == 1) { + Xil_Out32(0xFD403004, 0); + Xil_Out32(0xFD403008, 0); + Xil_Out32(0xFD40300C, 0); + Xil_Out32(0xFD403010, 0); + Xil_Out32(0xFD403014, 0); + Xil_Out32(0xFD403018, 0); + Xil_Out32(0xFD40301C, 0); + Xil_Out32(0xFD403020, 0); + Xil_Out32(0xFD403024, 0); + Xil_Out32(0xFD403028, 0); + Xil_Out32(0xFD40302C, 0); + Xil_Out32(0xFD403030, 0); + Xil_Out32(0xFD403034, 0); + Xil_Out32(0xFD403038, 0); + Xil_Out32(0xFD40303C, 0); + Xil_Out32(0xFD403040, 0); + Xil_Out32(0xFD403044, 0); + Xil_Out32(0xFD403048, 0); + Xil_Out32(0xFD40304C, 0); + Xil_Out32(0xFD403050, 0); + Xil_Out32(0xFD403054, 0); + Xil_Out32(0xFD403058, 0); + Xil_Out32(0xFD403068, 1); + Xil_Out32(0xFD40306C, 0); + Xil_Out32(0xFD4010AC, 0); + psu_mask_write(0xFD410044, 0x00000003U, 0x00000001U); + psu_mask_write(0xFD410040, 0x00000003U, 0x00000001U); + psu_mask_write(0xFD410038, 0x00000007U, 0x00000000U); + } + if (lane1_active == 1) { + Xil_Out32(0xFD407004, 0); + Xil_Out32(0xFD407008, 0); + Xil_Out32(0xFD40700C, 0); + Xil_Out32(0xFD407010, 0); + Xil_Out32(0xFD407014, 0); + Xil_Out32(0xFD407018, 0); + Xil_Out32(0xFD40701C, 0); + Xil_Out32(0xFD407020, 0); + Xil_Out32(0xFD407024, 0); + Xil_Out32(0xFD407028, 0); + Xil_Out32(0xFD40702C, 0); + Xil_Out32(0xFD407030, 0); + Xil_Out32(0xFD407034, 0); + Xil_Out32(0xFD407038, 0); + Xil_Out32(0xFD40703C, 0); + Xil_Out32(0xFD407040, 0); + Xil_Out32(0xFD407044, 0); + Xil_Out32(0xFD407048, 0); + Xil_Out32(0xFD40704C, 0); + Xil_Out32(0xFD407050, 0); + Xil_Out32(0xFD407054, 0); + Xil_Out32(0xFD407058, 0); + Xil_Out32(0xFD407068, 1); + Xil_Out32(0xFD40706C, 0); + Xil_Out32(0xFD4050AC, 0); + psu_mask_write(0xFD410044, 0x0000000CU, 0x00000004U); + psu_mask_write(0xFD410040, 0x0000000CU, 0x00000004U); + psu_mask_write(0xFD410038, 0x00000070U, 0x00000000U); + } + if (lane2_active == 1) { + Xil_Out32(0xFD40B004, 0); + Xil_Out32(0xFD40B008, 0); + Xil_Out32(0xFD40B00C, 0); + Xil_Out32(0xFD40B010, 0); + Xil_Out32(0xFD40B014, 0); + Xil_Out32(0xFD40B018, 0); + Xil_Out32(0xFD40B01C, 0); + Xil_Out32(0xFD40B020, 0); + Xil_Out32(0xFD40B024, 0); + Xil_Out32(0xFD40B028, 0); + Xil_Out32(0xFD40B02C, 0); + Xil_Out32(0xFD40B030, 0); + Xil_Out32(0xFD40B034, 0); + Xil_Out32(0xFD40B038, 0); + Xil_Out32(0xFD40B03C, 0); + Xil_Out32(0xFD40B040, 0); + Xil_Out32(0xFD40B044, 0); + Xil_Out32(0xFD40B048, 0); + Xil_Out32(0xFD40B04C, 0); + Xil_Out32(0xFD40B050, 0); + Xil_Out32(0xFD40B054, 0); + Xil_Out32(0xFD40B058, 0); + Xil_Out32(0xFD40B068, 1); + Xil_Out32(0xFD40B06C, 0); + Xil_Out32(0xFD4090AC, 0); + psu_mask_write(0xFD410044, 0x00000030U, 0x00000010U); + psu_mask_write(0xFD410040, 0x00000030U, 0x00000010U); + psu_mask_write(0xFD41003C, 0x00000007U, 0x00000000U); + } + if (lane3_active == 1) { + Xil_Out32(0xFD40F004, 0); + Xil_Out32(0xFD40F008, 0); + Xil_Out32(0xFD40F00C, 0); + Xil_Out32(0xFD40F010, 0); + Xil_Out32(0xFD40F014, 0); + Xil_Out32(0xFD40F018, 0); + Xil_Out32(0xFD40F01C, 0); + Xil_Out32(0xFD40F020, 0); + Xil_Out32(0xFD40F024, 0); + Xil_Out32(0xFD40F028, 0); + Xil_Out32(0xFD40F02C, 0); + Xil_Out32(0xFD40F030, 0); + Xil_Out32(0xFD40F034, 0); + Xil_Out32(0xFD40F038, 0); + Xil_Out32(0xFD40F03C, 0); + Xil_Out32(0xFD40F040, 0); + Xil_Out32(0xFD40F044, 0); + Xil_Out32(0xFD40F048, 0); + Xil_Out32(0xFD40F04C, 0); + Xil_Out32(0xFD40F050, 0); + Xil_Out32(0xFD40F054, 0); + Xil_Out32(0xFD40F058, 0); + Xil_Out32(0xFD40F068, 1); + Xil_Out32(0xFD40F06C, 0); + Xil_Out32(0xFD40D0AC, 0); + psu_mask_write(0xFD410044, 0x000000C0U, 0x00000040U); + psu_mask_write(0xFD410040, 0x000000C0U, 0x00000040U); + psu_mask_write(0xFD41003C, 0x00000070U, 0x00000000U); + } return 1; } -static unsigned long psu_ddr_phybringup_data(void) +static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, + u32 lane2_protocol, u32 lane2_rate, + u32 lane1_protocol, u32 lane1_rate, + u32 lane0_protocol, u32 lane0_rate) { - unsigned int regval = 0; - - for (int tp = 0; tp < 20; tp++) - regval = Xil_In32(0xFD070018); - int cur_PLLCR0; - - cur_PLLCR0 = (Xil_In32(0xFD080068U) & 0xFFFFFFFFU) >> 0x00000000U; - int cur_DX8SL0PLLCR0; - - cur_DX8SL0PLLCR0 = (Xil_In32(0xFD081404U) & 0xFFFFFFFFU) >> 0x00000000U; - int cur_DX8SL1PLLCR0; - - cur_DX8SL1PLLCR0 = (Xil_In32(0xFD081444U) & 0xFFFFFFFFU) >> 0x00000000U; - int cur_DX8SL2PLLCR0; - - cur_DX8SL2PLLCR0 = (Xil_In32(0xFD081484U) & 0xFFFFFFFFU) >> 0x00000000U; - int cur_DX8SL3PLLCR0; - - cur_DX8SL3PLLCR0 = (Xil_In32(0xFD0814C4U) & 0xFFFFFFFFU) >> 0x00000000U; - int cur_DX8SL4PLLCR0; - - cur_DX8SL4PLLCR0 = (Xil_In32(0xFD081504U) & 0xFFFFFFFFU) >> 0x00000000U; - int cur_DX8SLBPLLCR0; - - cur_DX8SLBPLLCR0 = (Xil_In32(0xFD0817C4U) & 0xFFFFFFFFU) >> 0x00000000U; - Xil_Out32(0xFD080068, 0x02120000); - Xil_Out32(0xFD081404, 0x02120000); - Xil_Out32(0xFD081444, 0x02120000); - Xil_Out32(0xFD081484, 0x02120000); - Xil_Out32(0xFD0814C4, 0x02120000); - Xil_Out32(0xFD081504, 0x02120000); - Xil_Out32(0xFD0817C4, 0x02120000); - int cur_div2; - - cur_div2 = (Xil_In32(0xFD1A002CU) & 0x00010000U) >> 0x00000010U; - int cur_fbdiv; - - cur_fbdiv = (Xil_In32(0xFD1A002CU) & 0x00007F00U) >> 0x00000008U; - dpll_prog(1, 49, 63, 625, 3, 3, 2); - for (int tp = 0; tp < 20; tp++) - regval = Xil_In32(0xFD070018); - unsigned int pll_retry = 10; - unsigned int pll_locked = 0; - - while ((pll_retry > 0) && (!pll_locked)) { - Xil_Out32(0xFD080004, 0x00040010); - Xil_Out32(0xFD080004, 0x00040011); + unsigned int rdata = 0; + unsigned int sata_gen2 = 1; + unsigned int temp_ill12 = 0; + unsigned int temp_PLL_REF_SEL_OFFSET; + unsigned int temp_TM_IQ_ILL1; + unsigned int temp_TM_E_ILL1; + unsigned int temp_tx_dig_tm_61; + unsigned int temp_tm_dig_6; + unsigned int temp_pll_fbdiv_frac_3_msb_offset; - while ((Xil_In32(0xFD080030) & 0x1) != 1) - ; - pll_locked = (Xil_In32(0xFD080030) & 0x80000000) - >> 31; - pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000) - >> 16; - pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000) >> 16; - pll_retry--; + if (lane0_protocol == 2 || lane0_protocol == 1) { + Xil_Out32(0xFD401910, 0xF3); + Xil_Out32(0xFD40193C, 0xF3); + Xil_Out32(0xFD401914, 0xF3); + Xil_Out32(0xFD401940, 0xF3); + } + if (lane1_protocol == 2 || lane1_protocol == 1) { + Xil_Out32(0xFD405910, 0xF3); + Xil_Out32(0xFD40593C, 0xF3); + Xil_Out32(0xFD405914, 0xF3); + Xil_Out32(0xFD405940, 0xF3); + } + if (lane2_protocol == 2 || lane2_protocol == 1) { + Xil_Out32(0xFD409910, 0xF3); + Xil_Out32(0xFD40993C, 0xF3); + Xil_Out32(0xFD409914, 0xF3); + Xil_Out32(0xFD409940, 0xF3); + } + if (lane3_protocol == 2 || lane3_protocol == 1) { + Xil_Out32(0xFD40D910, 0xF3); + Xil_Out32(0xFD40D93C, 0xF3); + Xil_Out32(0xFD40D914, 0xF3); + Xil_Out32(0xFD40D940, 0xF3); } - Xil_Out32(0xFD0800C4, Xil_In32(0xFD0800C4) | (pll_retry << 16)); - if (!pll_locked) - return 0; - - Xil_Out32(0xFD080004U, 0x00040063U); - Xil_Out32(0xFD0800C0U, 0x00000001U); - - while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) - ; - prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); - - while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) - ; - Xil_Out32(0xFD070010U, 0x80000018U); - Xil_Out32(0xFD0701B0U, 0x00000005U); - regval = Xil_In32(0xFD070018); - while ((regval & 0x1) != 0x0) - regval = Xil_In32(0xFD070018); - - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - Xil_Out32(0xFD070014U, 0x00000331U); - Xil_Out32(0xFD070010U, 0x80000018U); - regval = Xil_In32(0xFD070018); - while ((regval & 0x1) != 0x0) - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - Xil_Out32(0xFD070014U, 0x00000B36U); - Xil_Out32(0xFD070010U, 0x80000018U); - regval = Xil_In32(0xFD070018); - while ((regval & 0x1) != 0x0) - regval = Xil_In32(0xFD070018); + if (sata_gen2 == 1) { + if (lane0_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD402360); + Xil_Out32(0xFD402360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410000); + psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4018F8); + temp_TM_E_ILL1 = Xil_In32(0xFD401924); + Xil_Out32(0xFD4018F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4000F4); + temp_tm_dig_6 = Xil_In32(0xFD40106C); + psu_mask_write(0xFD4000F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40106C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD401990) & 0xF0; - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - Xil_Out32(0xFD070014U, 0x00000C56U); - Xil_Out32(0xFD070010U, 0x80000018U); - regval = Xil_In32(0xFD070018); - while ((regval & 0x1) != 0x0) - regval = Xil_In32(0xFD070018); + serdes_illcalib_pcie_gen1(0, 0, 0, 0, 0, 0, 0, 1, 0, 0); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - Xil_Out32(0xFD070014U, 0x00000E19U); - Xil_Out32(0xFD070010U, 0x80000018U); - regval = Xil_In32(0xFD070018); - while ((regval & 0x1) != 0x0) - regval = Xil_In32(0xFD070018); + Xil_Out32(0xFD402360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD410000, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4018F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4000F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40106C, temp_tm_dig_6); + Xil_Out32(0xFD401928, Xil_In32(0xFD401924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD401990) >> 4 & 0xF); + Xil_Out32(0xFD401990, temp_ill12); + Xil_Out32(0xFD401924, temp_TM_E_ILL1); + } + if (lane1_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD406360); + Xil_Out32(0xFD406360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410004); + psu_mask_write(0xFD410004, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4058F8); + temp_TM_E_ILL1 = Xil_In32(0xFD405924); + Xil_Out32(0xFD4058F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4040F4); + temp_tm_dig_6 = Xil_In32(0xFD40506C); + psu_mask_write(0xFD4040F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40506C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD405990) & 0xF0; - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - regval = Xil_In32(0xFD070018); - Xil_Out32(0xFD070014U, 0x00001616U); - Xil_Out32(0xFD070010U, 0x80000018U); - Xil_Out32(0xFD070010U, 0x80000010U); - Xil_Out32(0xFD0701B0U, 0x00000005U); - Xil_Out32(0xFD070320U, 0x00000001U); - while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) - ; - prog_reg(0xFD0701B0U, 0x00000001U, 0x00000000U, 0x00000000U); - prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); - prog_reg(0xFD080028U, 0x00000001U, 0x00000000U, 0x00000001U); - prog_reg(0xFD080004U, 0x20000000U, 0x0000001DU, 0x00000001U); - prog_reg(0xFD08016CU, 0x00000004U, 0x00000002U, 0x00000001U); - prog_reg(0xFD080168U, 0x000000F0U, 0x00000004U, 0x00000007U); - prog_reg(0xFD080168U, 0x00000F00U, 0x00000008U, 0x00000002U); - prog_reg(0xFD080168U, 0x0000000FU, 0x00000000U, 0x00000001U); - for (int tp = 0; tp < 20; tp++) - regval = Xil_In32(0xFD070018); + serdes_illcalib_pcie_gen1(1, 0, 0, 0, 0, 1, 0, 0, 0, 0); - Xil_Out32(0xFD080068, cur_PLLCR0); - Xil_Out32(0xFD081404, cur_DX8SL0PLLCR0); - Xil_Out32(0xFD081444, cur_DX8SL1PLLCR0); - Xil_Out32(0xFD081484, cur_DX8SL2PLLCR0); - Xil_Out32(0xFD0814C4, cur_DX8SL3PLLCR0); - Xil_Out32(0xFD081504, cur_DX8SL4PLLCR0); - Xil_Out32(0xFD0817C4, cur_DX8SLBPLLCR0); - for (int tp = 0; tp < 20; tp++) - regval = Xil_In32(0xFD070018); + Xil_Out32(0xFD406360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD410004, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4058F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4040F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40506C, temp_tm_dig_6); + Xil_Out32(0xFD405928, Xil_In32(0xFD405924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD405990) >> 4 & 0xF); + Xil_Out32(0xFD405990, temp_ill12); + Xil_Out32(0xFD405924, temp_TM_E_ILL1); + } + if (lane2_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40A360); + Xil_Out32(0xFD40A360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410008); + psu_mask_write(0xFD410008, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4098F8); + temp_TM_E_ILL1 = Xil_In32(0xFD409924); + Xil_Out32(0xFD4098F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4080F4); + temp_tm_dig_6 = Xil_In32(0xFD40906C); + psu_mask_write(0xFD4080F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40906C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD409990) & 0xF0; - dpll_prog(cur_div2, cur_fbdiv, 63, 625, 3, 3, 2); - for (int tp = 0; tp < 2000; tp++) - regval = Xil_In32(0xFD070018); + serdes_illcalib_pcie_gen1(2, 0, 0, 1, 0, 0, 0, 0, 0, 0); - prog_reg(0xFD080004U, 0x20000000U, 0x0000001DU, 0x00000000U); - prog_reg(0xFD080004U, 0x00040000U, 0x00000012U, 0x00000001U); - prog_reg(0xFD080004U, 0x00000040U, 0x00000006U, 0x00000001U); - prog_reg(0xFD080004U, 0x00000020U, 0x00000005U, 0x00000001U); - prog_reg(0xFD080004U, 0x00000010U, 0x00000004U, 0x00000001U); - prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); + Xil_Out32(0xFD40A360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD410008, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4098F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4080F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40906C, temp_tm_dig_6); + Xil_Out32(0xFD409928, Xil_In32(0xFD409924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD409990) >> 4 & 0xF); + Xil_Out32(0xFD409990, temp_ill12); + Xil_Out32(0xFD409924, temp_TM_E_ILL1); + } + if (lane3_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40E360); + Xil_Out32(0xFD40E360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD41000C); + psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD40D8F8); + temp_TM_E_ILL1 = Xil_In32(0xFD40D924); + Xil_Out32(0xFD40D8F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD40C0F4); + temp_tm_dig_6 = Xil_In32(0xFD40D06C); + psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40D06C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD40D990) & 0xF0; - while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) - ; - prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); + serdes_illcalib_pcie_gen1(3, 1, 0, 0, 0, 0, 0, 0, 0, 0); - while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) - ; - for (int tp = 0; tp < 2000; tp++) - regval = Xil_In32(0xFD070018); + Xil_Out32(0xFD40E360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD40D8F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD40C0F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40D06C, temp_tm_dig_6); + Xil_Out32(0xFD40D928, Xil_In32(0xFD40D924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD40D990) >> 4 & 0xF); + Xil_Out32(0xFD40D990, temp_ill12); + Xil_Out32(0xFD40D924, temp_TM_E_ILL1); + } + rdata = Xil_In32(0xFD410098); + rdata = (rdata & 0xDF); + Xil_Out32(0xFD410098, rdata); + } - prog_reg(0xFD080028U, 0x00000001U, 0x00000000U, 0x00000000U); - prog_reg(0xFD08016CU, 0x00000004U, 0x00000002U, 0x00000001U); - prog_reg(0xFD080168U, 0x000000F0U, 0x00000004U, 0x00000007U); - prog_reg(0xFD080168U, 0x00000F00U, 0x00000008U, 0x00000003U); - prog_reg(0xFD080168U, 0x0000000FU, 0x00000000U, 0x00000001U); - for (int tp = 0; tp < 2000; tp++) - regval = Xil_In32(0xFD070018); + if (lane0_protocol == 2 && lane0_rate == 3) { + psu_mask_write(0xFD40198C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000094U); + } + if (lane1_protocol == 2 && lane1_rate == 3) { + psu_mask_write(0xFD40598C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40592C, 0x000000FFU, 0x00000094U); + } + if (lane2_protocol == 2 && lane2_rate == 3) { + psu_mask_write(0xFD40998C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000094U); + } + if (lane3_protocol == 2 && lane3_rate == 3) { + psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000094U); + } - prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); - Xil_Out32(0xFD080004, 0x0014FE01); + if (lane0_protocol == 1) { + if (lane0_rate == 0) { + serdes_illcalib_pcie_gen1(0, lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, 0, 0); + } else { + serdes_illcalib_pcie_gen1(0, lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, 0, 0); + serdes_illcalib_pcie_gen1(0, lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, lane0_rate, + 1); + } + } - regval = Xil_In32(0xFD080030); - while (regval != 0x8000007E) - regval = Xil_In32(0xFD080030); + if (lane0_protocol == 3) + Xil_Out32(0xFD401914, 0xF3); + if (lane0_protocol == 3) + Xil_Out32(0xFD401940, 0xF3); + if (lane0_protocol == 3) + Xil_Out32(0xFD401990, 0x20); + if (lane0_protocol == 3) + Xil_Out32(0xFD401924, 0x37); - Xil_Out32(0xFD080200U, 0x000091C7U); - regval = Xil_In32(0xFD080030); - while (regval != 0x80008FFF) - regval = Xil_In32(0xFD080030); + if (lane1_protocol == 3) + Xil_Out32(0xFD405914, 0xF3); + if (lane1_protocol == 3) + Xil_Out32(0xFD405940, 0xF3); + if (lane1_protocol == 3) + Xil_Out32(0xFD405990, 0x20); + if (lane1_protocol == 3) + Xil_Out32(0xFD405924, 0x37); - Xil_Out32(0xFD080200U, 0x800091C7U); - regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); - if (regval != 0) - return 0; - prog_reg(0xFD070320U, 0x00000001U, 0x00000000U, 0x00000000U); - prog_reg(0xFD0701B0U, 0x00000001U, 0x00000000U, 0x00000001U); - prog_reg(0xFD0701A0U, 0x80000000U, 0x0000001FU, 0x00000000U); - prog_reg(0xFD070320U, 0x00000001U, 0x00000000U, 0x00000001U); - Xil_Out32(0xFD070180U, 0x02160010U); - Xil_Out32(0xFD070060U, 0x00000000U); - prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U); - for (int tp = 0; tp < 4000; tp++) - regval = Xil_In32(0xFD070018); + if (lane2_protocol == 3) + Xil_Out32(0xFD409914, 0xF3); + if (lane2_protocol == 3) + Xil_Out32(0xFD409940, 0xF3); + if (lane2_protocol == 3) + Xil_Out32(0xFD409990, 0x20); + if (lane2_protocol == 3) + Xil_Out32(0xFD409924, 0x37); - prog_reg(0xFD080090U, 0x00000FC0U, 0x00000006U, 0x00000007U); - prog_reg(0xFD080090U, 0x00000004U, 0x00000002U, 0x00000001U); - prog_reg(0xFD08070CU, 0x02000000U, 0x00000019U, 0x00000000U); - prog_reg(0xFD08080CU, 0x02000000U, 0x00000019U, 0x00000000U); - prog_reg(0xFD08090CU, 0x02000000U, 0x00000019U, 0x00000000U); - prog_reg(0xFD080A0CU, 0x02000000U, 0x00000019U, 0x00000000U); - prog_reg(0xFD080F0CU, 0x02000000U, 0x00000019U, 0x00000000U); - prog_reg(0xFD080200U, 0x00000010U, 0x00000004U, 0x00000001U); - prog_reg(0xFD080250U, 0x00000002U, 0x00000001U, 0x00000000U); - prog_reg(0xFD080250U, 0x0000000CU, 0x00000002U, 0x00000001U); - prog_reg(0xFD080250U, 0x000000F0U, 0x00000004U, 0x00000000U); - prog_reg(0xFD080250U, 0x00300000U, 0x00000014U, 0x00000001U); - prog_reg(0xFD080250U, 0xF0000000U, 0x0000001CU, 0x00000002U); - prog_reg(0xFD08070CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD08080CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD08090CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD080A0CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD080B0CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD080C0CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD080D0CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD080E0CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD080F0CU, 0x08000000U, 0x0000001BU, 0x00000000U); - prog_reg(0xFD080254U, 0x000000FFU, 0x00000000U, 0x00000001U); - prog_reg(0xFD080254U, 0x000F0000U, 0x00000010U, 0x0000000AU); - prog_reg(0xFD080250U, 0x00000001U, 0x00000000U, 0x00000001U); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D914, 0xF3); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D940, 0xF3); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D990, 0x20); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D924, 0x37); return 1; } -static int serdes_rst_seq(u32 pllsel, u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate) +static void dpll_prog(int div2, int ddr_pll_fbdiv, int d_lock_dly, + int d_lock_cnt, int d_lfhf, int d_cp, int d_res) { - Xil_Out32(0xFD410098, 0x00000000); - Xil_Out32(0xFD401010, 0x00000040); - Xil_Out32(0xFD405010, 0x00000040); - Xil_Out32(0xFD409010, 0x00000040); - Xil_Out32(0xFD40D010, 0x00000040); - Xil_Out32(0xFD402084, 0x00000080); - Xil_Out32(0xFD406084, 0x00000080); - Xil_Out32(0xFD40A084, 0x00000080); - Xil_Out32(0xFD40E084, 0x00000080); - Xil_Out32(0xFD410098, 0x00000004); - mask_delay(50); - if (lane0_rate == 1) - Xil_Out32(0xFD410098, 0x0000000E); - Xil_Out32(0xFD410098, 0x00000006); - if (lane0_rate == 1) { - Xil_Out32(0xFD40000C, 0x00000004); - Xil_Out32(0xFD40400C, 0x00000004); - Xil_Out32(0xFD40800C, 0x00000004); - Xil_Out32(0xFD40C00C, 0x00000004); - Xil_Out32(0xFD410098, 0x00000007); - mask_delay(400); - Xil_Out32(0xFD40000C, 0x0000000C); - Xil_Out32(0xFD40400C, 0x0000000C); - Xil_Out32(0xFD40800C, 0x0000000C); - Xil_Out32(0xFD40C00C, 0x0000000C); - mask_delay(15); - Xil_Out32(0xFD410098, 0x0000000F); - mask_delay(100); - } - if (pllsel == 0) - mask_poll(0xFD4023E4, 0x00000010U); - if (pllsel == 1) - mask_poll(0xFD4063E4, 0x00000010U); - if (pllsel == 2) - mask_poll(0xFD40A3E4, 0x00000010U); - if (pllsel == 3) - mask_poll(0xFD40E3E4, 0x00000010U); - mask_delay(50); - Xil_Out32(0xFD401010, 0x000000C0); - Xil_Out32(0xFD405010, 0x000000C0); - Xil_Out32(0xFD409010, 0x000000C0); - Xil_Out32(0xFD40D010, 0x000000C0); - Xil_Out32(0xFD401010, 0x00000080); - Xil_Out32(0xFD405010, 0x00000080); - Xil_Out32(0xFD409010, 0x00000080); - Xil_Out32(0xFD40D010, 0x00000080); + unsigned int pll_ctrl_regval; + unsigned int pll_status_regval; - Xil_Out32(0xFD402084, 0x000000C0); - Xil_Out32(0xFD406084, 0x000000C0); - Xil_Out32(0xFD40A084, 0x000000C0); - Xil_Out32(0xFD40E084, 0x000000C0); - mask_delay(50); - Xil_Out32(0xFD402084, 0x00000080); - Xil_Out32(0xFD406084, 0x00000080); - Xil_Out32(0xFD40A084, 0x00000080); - Xil_Out32(0xFD40E084, 0x00000080); - mask_delay(50); - Xil_Out32(0xFD401010, 0x00000000); - Xil_Out32(0xFD405010, 0x00000000); - Xil_Out32(0xFD409010, 0x00000000); - Xil_Out32(0xFD40D010, 0x00000000); - Xil_Out32(0xFD402084, 0x00000000); - Xil_Out32(0xFD406084, 0x00000000); - Xil_Out32(0xFD40A084, 0x00000000); - Xil_Out32(0xFD40E084, 0x00000000); - mask_delay(500); - return 1; -} + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); + pll_ctrl_regval = pll_ctrl_regval & (~0x00010000U); + pll_ctrl_regval = pll_ctrl_regval | (div2 << 16); + Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); -static int serdes_bist_static_settings(u32 lane_active) -{ - if (lane_active == 0) { - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); - Xil_Out32(0xFD403068, 0x1); - Xil_Out32(0xFD40306C, 0x1); - Xil_Out32(0xFD4010AC, 0x0020); - Xil_Out32(0xFD403008, 0x0); - Xil_Out32(0xFD40300C, 0xF4); - Xil_Out32(0xFD403010, 0x0); - Xil_Out32(0xFD403014, 0x0); - Xil_Out32(0xFD403018, 0x00); - Xil_Out32(0xFD40301C, 0xFB); - Xil_Out32(0xFD403020, 0xFF); - Xil_Out32(0xFD403024, 0x0); - Xil_Out32(0xFD403028, 0x00); - Xil_Out32(0xFD40302C, 0x00); - Xil_Out32(0xFD403030, 0x4A); - Xil_Out32(0xFD403034, 0x4A); - Xil_Out32(0xFD403038, 0x4A); - Xil_Out32(0xFD40303C, 0x4A); - Xil_Out32(0xFD403040, 0x0); - Xil_Out32(0xFD403044, 0x14); - Xil_Out32(0xFD403048, 0x02); - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); - } - if (lane_active == 1) { - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); - Xil_Out32(0xFD407068, 0x1); - Xil_Out32(0xFD40706C, 0x1); - Xil_Out32(0xFD4050AC, 0x0020); - Xil_Out32(0xFD407008, 0x0); - Xil_Out32(0xFD40700C, 0xF4); - Xil_Out32(0xFD407010, 0x0); - Xil_Out32(0xFD407014, 0x0); - Xil_Out32(0xFD407018, 0x00); - Xil_Out32(0xFD40701C, 0xFB); - Xil_Out32(0xFD407020, 0xFF); - Xil_Out32(0xFD407024, 0x0); - Xil_Out32(0xFD407028, 0x00); - Xil_Out32(0xFD40702C, 0x00); - Xil_Out32(0xFD407030, 0x4A); - Xil_Out32(0xFD407034, 0x4A); - Xil_Out32(0xFD407038, 0x4A); - Xil_Out32(0xFD40703C, 0x4A); - Xil_Out32(0xFD407040, 0x0); - Xil_Out32(0xFD407044, 0x14); - Xil_Out32(0xFD407048, 0x02); - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); - } + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); + pll_ctrl_regval = pll_ctrl_regval & (~0xFE000000U); + pll_ctrl_regval = pll_ctrl_regval | (d_lock_dly << 25); + Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); - if (lane_active == 2) { - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); - Xil_Out32(0xFD40B068, 0x1); - Xil_Out32(0xFD40B06C, 0x1); - Xil_Out32(0xFD4090AC, 0x0020); - Xil_Out32(0xFD40B008, 0x0); - Xil_Out32(0xFD40B00C, 0xF4); - Xil_Out32(0xFD40B010, 0x0); - Xil_Out32(0xFD40B014, 0x0); - Xil_Out32(0xFD40B018, 0x00); - Xil_Out32(0xFD40B01C, 0xFB); - Xil_Out32(0xFD40B020, 0xFF); - Xil_Out32(0xFD40B024, 0x0); - Xil_Out32(0xFD40B028, 0x00); - Xil_Out32(0xFD40B02C, 0x00); - Xil_Out32(0xFD40B030, 0x4A); - Xil_Out32(0xFD40B034, 0x4A); - Xil_Out32(0xFD40B038, 0x4A); - Xil_Out32(0xFD40B03C, 0x4A); - Xil_Out32(0xFD40B040, 0x0); - Xil_Out32(0xFD40B044, 0x14); - Xil_Out32(0xFD40B048, 0x02); - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); - } + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); + pll_ctrl_regval = pll_ctrl_regval & (~0x007FE000U); + pll_ctrl_regval = pll_ctrl_regval | (d_lock_cnt << 13); + Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); + pll_ctrl_regval = pll_ctrl_regval & (~0x00000C00U); + pll_ctrl_regval = pll_ctrl_regval | (d_lfhf << 10); + Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); + pll_ctrl_regval = pll_ctrl_regval & (~0x000001E0U); + pll_ctrl_regval = pll_ctrl_regval | (d_cp << 5); + Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); + pll_ctrl_regval = pll_ctrl_regval & (~0x0000000FU); + pll_ctrl_regval = pll_ctrl_regval | (d_res << 0); + Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); + pll_ctrl_regval = pll_ctrl_regval & (~0x00007F00U); + pll_ctrl_regval = pll_ctrl_regval | (ddr_pll_fbdiv << 8); + Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); + pll_ctrl_regval = pll_ctrl_regval & (~0x00000008U); + pll_ctrl_regval = pll_ctrl_regval | (1 << 3); + Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); + pll_ctrl_regval = pll_ctrl_regval & (~0x00000001U); + pll_ctrl_regval = pll_ctrl_regval | (1 << 0); + Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); + pll_ctrl_regval = pll_ctrl_regval & (~0x00000001U); + pll_ctrl_regval = pll_ctrl_regval | (0 << 0); + Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + + pll_status_regval = 0x00000000; + while ((pll_status_regval & 0x00000002U) != 0x00000002U) + pll_status_regval = Xil_In32(((0xFD1A0000U) + 0x00000044)); + + pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); + pll_ctrl_regval = pll_ctrl_regval & (~0x00000008U); + pll_ctrl_regval = pll_ctrl_regval | (0 << 3); + Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); +} + +static unsigned long psu_pll_init_data(void) +{ + psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E4B0C62U); + psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00014600U); + psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); + mask_poll(0xFF5E0040, 0x00000002U); + psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U); + psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFF5E0038, 0x8000FFFFU, 0x00000000U); + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012300U); + psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E672C6CU); + psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00002D00U); + psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U); + mask_poll(0xFF5E0040, 0x00000001U); + psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U); + psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFF5E0028, 0x8000FFFFU, 0x00000000U); + psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U); + psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014800U); + psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000001U); + psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFD1A0028, 0x8000FFFFU, 0x00000000U); + psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U); + psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00014000U); + psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000002U); + psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFD1A0034, 0x8000FFFFU, 0x00000000U); + psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C62U); + psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00014700U); + psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000004U); + psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFD1A0040, 0x8000FFFFU, 0x00000000U); - if (lane_active == 3) { - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); - Xil_Out32(0xFD40F068, 0x1); - Xil_Out32(0xFD40F06C, 0x1); - Xil_Out32(0xFD40D0AC, 0x0020); - Xil_Out32(0xFD40F008, 0x0); - Xil_Out32(0xFD40F00C, 0xF4); - Xil_Out32(0xFD40F010, 0x0); - Xil_Out32(0xFD40F014, 0x0); - Xil_Out32(0xFD40F018, 0x00); - Xil_Out32(0xFD40F01C, 0xFB); - Xil_Out32(0xFD40F020, 0xFF); - Xil_Out32(0xFD40F024, 0x0); - Xil_Out32(0xFD40F028, 0x00); - Xil_Out32(0xFD40F02C, 0x00); - Xil_Out32(0xFD40F030, 0x4A); - Xil_Out32(0xFD40F034, 0x4A); - Xil_Out32(0xFD40F038, 0x4A); - Xil_Out32(0xFD40F03C, 0x4A); - Xil_Out32(0xFD40F040, 0x0); - Xil_Out32(0xFD40F044, 0x14); - Xil_Out32(0xFD40F048, 0x02); - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); - } return 1; } -static int serdes_bist_run(u32 lane_active) +static unsigned long psu_clock_init_data(void) { - if (lane_active == 0) { - psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD410038, 0x00000007U, 0x00000001U); - Xil_Out32(0xFD4010AC, 0x0020); - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) | 0x1)); - } - if (lane_active == 1) { - psu_mask_write(0xFD410044, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD410040, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD410038, 0x00000070U, 0x00000010U); - Xil_Out32(0xFD4050AC, 0x0020); - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) | 0x1)); - } - if (lane_active == 2) { - psu_mask_write(0xFD410044, 0x00000030U, 0x00000000U); - psu_mask_write(0xFD410040, 0x00000030U, 0x00000000U); - psu_mask_write(0xFD41003C, 0x00000007U, 0x00000001U); - Xil_Out32(0xFD4090AC, 0x0020); - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) | 0x1)); - } - if (lane_active == 3) { - psu_mask_write(0xFD410040, 0x000000C0U, 0x00000000U); - psu_mask_write(0xFD410044, 0x000000C0U, 0x00000000U); - psu_mask_write(0xFD41003C, 0x00000070U, 0x00000010U); - Xil_Out32(0xFD40D0AC, 0x0020); - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) | 0x1)); - } - mask_delay(100); + psu_mask_write(0xFF5E0050, 0x063F3F07U, 0x06010C00U); + psu_mask_write(0xFF180360, 0x00000003U, 0x00000001U); + psu_mask_write(0xFF180308, 0x00000006U, 0x00000006U); + psu_mask_write(0xFF5E0100, 0x013F3F07U, 0x01010600U); + psu_mask_write(0xFF5E0070, 0x013F3F07U, 0x01010800U); + psu_mask_write(0xFF18030C, 0x00020000U, 0x00000000U); + psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0120, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0124, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000602U); + psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000800U); + psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U); + psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U); + psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E00C4, 0x013F3F07U, 0x01040F00U); + psu_mask_write(0xFF5E00C8, 0x013F3F07U, 0x01010500U); + psu_mask_write(0xFF5E00CC, 0x013F3F07U, 0x01010400U); + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011D02U); + psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U); + psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000F00U); + psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U); + psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000200U); + psu_mask_write(0xFD1A0084, 0x07003F07U, 0x07000100U); + psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000203U); + psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U); + psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U); + psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U); + return 1; } -static int serdes_bist_result(u32 lane_active) +static unsigned long psu_ddr_init_data(void) { - u32 pkt_cnt_l0, pkt_cnt_h0, err_cnt_l0, err_cnt_h0; + psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD070000, 0xE30FBE3DU, 0xC1081020U); + psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U); + psu_mask_write(0xFD070020, 0x000003F3U, 0x00000202U); + psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00516120U); + psu_mask_write(0xFD070030, 0x0000007FU, 0x00000000U); + psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00408410U); + psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U); + psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U); + psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U); + psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x00418096U); + psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U); + psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U); + psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0030051FU); + psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00030413U); + psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x006A0000U); + psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00002305U); + psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x00440024U); + psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00310008U); + psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00210004U); + psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x00000000U); + psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U); + psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000077FU); + psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x15161117U); + psu_mask_write(0xFD070104, 0x001F1F7FU, 0x00040422U); + psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x060C1A10U); + psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x00F08000U); + psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x0A04060CU); + psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x01040808U); + psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010005U); + psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000401U); + psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x04040606U); + psu_mask_write(0xFD070124, 0x40070F3FU, 0x0004040DU); + psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x440C011CU); + psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U); + psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x82160010U); + psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x01B65B96U); + psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x0495820AU); + psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00030304U); + psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U); + psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U); + psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x83FF0003U); + psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x00C800FFU); + psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000004U); + psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x00001308U); + psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000001U); + psu_mask_write(0xFD070200, 0x0000001FU, 0x0000001FU); + psu_mask_write(0xFD070204, 0x001F1F1FU, 0x00070707U); + psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x00000000U); + psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x0F000000U); + psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU); + psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x060F0606U); + psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x06060606U); + psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F0FU); + psu_mask_write(0xFD070220, 0x00001F1FU, 0x00000000U); + psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x06060606U); + psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x06060606U); + psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000006U); + psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x04000400U); + psu_mask_write(0xFD070244, 0x00003333U, 0x00000000U); + psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U); + psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U); + psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U); + psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U); + psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070300, 0x00000011U, 0x00000000U); + psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U); + psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U); + psu_mask_write(0xFD070400, 0x00000111U, 0x00000001U); + psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU); + psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U); + psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U); + psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U); + psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U); + psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU); + psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U); + psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x87001E00U); + psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F07E38U); + psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U); + psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U); + psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x42C21590U); + psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0xD05512C0U); + psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04161U); + psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD0800C4, 0xFFFFFFFFU, 0x000000E4U); + psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0000040DU); + psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x0B2E1708U); + psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x282B0711U); + psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x000F0133U); + psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x82000501U); + psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x012B2B0BU); + psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x0044260BU); + psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000C18U); + psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U); + psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U); + psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000044U); + psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000024U); + psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000031U); + psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000008U); + psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000056U); + psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x00000056U); + psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U); + psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x00000019U); + psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000016U); + psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x800091C7U); + psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00010236U); + psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U); + psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U); + psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12340800U); + psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x0000000AU); + psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U); + psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000005U); + psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300BD99U); + psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF1032019U); + psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U); + psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x008AAC58U); + psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x0001B39BU); + psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U); + psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U); + psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x0001BB9BU); + psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080704, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08070C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00F50CU); + psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080804, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08080C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00F50CU); + psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08090C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00F504U); + psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080A0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00F504U); + psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x80803660U); + psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x55556000U); + psu_mask_write(0xFD080B08, 0xFFFFFFFFU, 0xAAAAAAAAU); + psu_mask_write(0xFD080B0C, 0xFFFFFFFFU, 0x0029A4A4U); + psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0C00BD00U); + psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x80803660U); + psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x55556000U); + psu_mask_write(0xFD080C08, 0xFFFFFFFFU, 0xAAAAAAAAU); + psu_mask_write(0xFD080C0C, 0xFFFFFFFFU, 0x0029A4A4U); + psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0C00BD00U); + psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x80803660U); + psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x55556000U); + psu_mask_write(0xFD080D08, 0xFFFFFFFFU, 0xAAAAAAAAU); + psu_mask_write(0xFD080D0C, 0xFFFFFFFFU, 0x0029A4A4U); + psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0C00BD00U); + psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x80803660U); + psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x55556000U); + psu_mask_write(0xFD080E08, 0xFFFFFFFFU, 0xAAAAAAAAU); + psu_mask_write(0xFD080E0C, 0xFFFFFFFFU, 0x0029A4A4U); + psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0C00BD00U); + psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x80803660U); + psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x55556000U); + psu_mask_write(0xFD080F08, 0xFFFFFFFFU, 0xAAAAAAAAU); + psu_mask_write(0xFD080F0C, 0xFFFFFFFFU, 0x0029A4A4U); + psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0C00BD00U); + psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09091616U); + psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x000C1800U); + psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x71000000U); + psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x000C1800U); + psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x71000000U); + psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x15019FFEU); + psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x21100000U); + psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01266300U); + psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x000C1800U); + psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70400000U); + psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x15019FFEU); + psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x21100000U); + psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01266300U); + psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x000C1800U); + psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70400000U); + psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x15019FFEU); + psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x21100000U); + psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01266300U); + psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x000C1800U); + psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70400000U); + psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U); - if (lane_active == 0) { - pkt_cnt_l0 = Xil_In32(0xFD40304C); - pkt_cnt_h0 = Xil_In32(0xFD403050); - err_cnt_l0 = Xil_In32(0xFD403054); - err_cnt_h0 = Xil_In32(0xFD403058); - } - if (lane_active == 1) { - pkt_cnt_l0 = Xil_In32(0xFD40704C); - pkt_cnt_h0 = Xil_In32(0xFD407050); - err_cnt_l0 = Xil_In32(0xFD407054); - err_cnt_h0 = Xil_In32(0xFD407058); - } - if (lane_active == 2) { - pkt_cnt_l0 = Xil_In32(0xFD40B04C); - pkt_cnt_h0 = Xil_In32(0xFD40B050); - err_cnt_l0 = Xil_In32(0xFD40B054); - err_cnt_h0 = Xil_In32(0xFD40B058); - } - if (lane_active == 3) { - pkt_cnt_l0 = Xil_In32(0xFD40F04C); - pkt_cnt_h0 = Xil_In32(0xFD40F050); - err_cnt_l0 = Xil_In32(0xFD40F054); - err_cnt_h0 = Xil_In32(0xFD40F058); - } - if (lane_active == 0) - Xil_Out32(0xFD403004, 0x0); - if (lane_active == 1) - Xil_Out32(0xFD407004, 0x0); - if (lane_active == 2) - Xil_Out32(0xFD40B004, 0x0); - if (lane_active == 3) - Xil_Out32(0xFD40F004, 0x0); - if (err_cnt_l0 > 0 || err_cnt_h0 > 0 || - (pkt_cnt_l0 == 0 && pkt_cnt_h0 == 0)) - return 0; return 1; } -static int serdes_illcalib_pcie_gen1(u32 pllsel, u32 lane3_protocol, - u32 lane3_rate, u32 lane2_protocol, - u32 lane2_rate, u32 lane1_protocol, - u32 lane1_rate, u32 lane0_protocol, - u32 lane0_rate, u32 gen2_calib) +static unsigned long psu_ddr_qos_init_data(void) { - u64 tempbistresult; - u32 currbistresult[4]; - u32 prevbistresult[4]; - u32 itercount = 0; - u32 ill12_val[4], ill1_val[4]; - u32 loop = 0; - u32 iterresult[8]; - u32 meancount[4]; - u32 bistpasscount[4]; - u32 meancountalt[4]; - u32 meancountalt_bistpasscount[4]; - u32 lane0_active; - u32 lane1_active; - u32 lane2_active; - u32 lane3_active; - - lane0_active = (lane0_protocol == 1); - lane1_active = (lane1_protocol == 1); - lane2_active = (lane2_protocol == 1); - lane3_active = (lane3_protocol == 1); - for (loop = 0; loop <= 3; loop++) { - iterresult[loop] = 0; - iterresult[loop + 4] = 0; - meancountalt[loop] = 0; - meancountalt_bistpasscount[loop] = 0; - meancount[loop] = 0; - prevbistresult[loop] = 0; - bistpasscount[loop] = 0; - } - itercount = 0; - if (lane0_active) - serdes_bist_static_settings(0); - if (lane1_active) - serdes_bist_static_settings(1); - if (lane2_active) - serdes_bist_static_settings(2); - if (lane3_active) - serdes_bist_static_settings(3); - do { - if (gen2_calib != 1) { - if (lane0_active == 1) - ill1_val[0] = ((0x04 + itercount * 8) % 0x100); - if (lane0_active == 1) - ill12_val[0] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane1_active == 1) - ill1_val[1] = ((0x04 + itercount * 8) % 0x100); - if (lane1_active == 1) - ill12_val[1] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane2_active == 1) - ill1_val[2] = ((0x04 + itercount * 8) % 0x100); - if (lane2_active == 1) - ill12_val[2] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane3_active == 1) - ill1_val[3] = ((0x04 + itercount * 8) % 0x100); - if (lane3_active == 1) - ill12_val[3] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - - if (lane0_active == 1) - Xil_Out32(0xFD401924, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x000000F0U, - ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405924, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x000000F0U, - ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409924, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x000000F0U, - ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D924, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x000000F0U, - ill12_val[3]); - } - if (gen2_calib == 1) { - if (lane0_active == 1) - ill1_val[0] = ((0x104 + itercount * 8) % 0x100); - if (lane0_active == 1) - ill12_val[0] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane1_active == 1) - ill1_val[1] = ((0x104 + itercount * 8) % 0x100); - if (lane1_active == 1) - ill12_val[1] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane2_active == 1) - ill1_val[2] = ((0x104 + itercount * 8) % 0x100); - if (lane2_active == 1) - ill12_val[2] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane3_active == 1) - ill1_val[3] = ((0x104 + itercount * 8) % 0x100); - if (lane3_active == 1) - ill12_val[3] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; + psu_mask_write(0xFD360008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD36001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD370008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD37001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD380008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD38001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD390008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD39001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3A0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3A001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3B0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3B001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFF9B0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFF9B001C, 0x0000000FU, 0x00000000U); - if (lane0_active == 1) - Xil_Out32(0xFD401928, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x0000000FU, - ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405928, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x0000000FU, - ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409928, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x0000000FU, - ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D928, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x0000000FU, - ill12_val[3]); - } + return 1; +} - if (lane0_active == 1) - psu_mask_write(0xFD401018, 0x00000030U, 0x00000010U); - if (lane1_active == 1) - psu_mask_write(0xFD405018, 0x00000030U, 0x00000010U); - if (lane2_active == 1) - psu_mask_write(0xFD409018, 0x00000030U, 0x00000010U); - if (lane3_active == 1) - psu_mask_write(0xFD40D018, 0x00000030U, 0x00000010U); - if (lane0_active == 1) - currbistresult[0] = 0; - if (lane1_active == 1) - currbistresult[1] = 0; - if (lane2_active == 1) - currbistresult[2] = 0; - if (lane3_active == 1) - currbistresult[3] = 0; - serdes_rst_seq(pllsel, lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, lane1_protocol, - lane1_rate, lane0_protocol, lane0_rate); - if (lane3_active == 1) - serdes_bist_run(3); - if (lane2_active == 1) - serdes_bist_run(2); - if (lane1_active == 1) - serdes_bist_run(1); - if (lane0_active == 1) - serdes_bist_run(0); - tempbistresult = 0; - if (lane3_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(3); - tempbistresult = tempbistresult << 1; - if (lane2_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(2); - tempbistresult = tempbistresult << 1; - if (lane1_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(1); - tempbistresult = tempbistresult << 1; - if (lane0_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(0); - Xil_Out32(0xFD410098, 0x0); - Xil_Out32(0xFD410098, 0x2); +static unsigned long psu_mio_init_data(void) +{ + psu_mask_write(0xFF180000, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180004, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180008, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18000C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180010, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180014, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180018, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18001C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180020, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180024, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180028, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18002C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180030, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180034, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180038, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18003C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180040, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180044, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180048, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18004C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180050, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180054, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180058, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18005C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180060, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180064, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180068, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18006C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180070, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180074, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180078, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180080, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180084, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180088, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF18008C, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180090, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180094, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180098, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF18009C, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF1800A0, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800A4, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800A8, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800AC, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800B0, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800B4, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800B8, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800BC, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C0, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C4, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C8, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800CC, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800D0, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800D4, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800D8, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800DC, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800E0, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800E4, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800E8, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800EC, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800F0, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800F4, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800F8, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800FC, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180100, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180104, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180108, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18010C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180110, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180114, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180118, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18011C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180120, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180124, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180128, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18012C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180130, 0x000000FEU, 0x00000060U); + psu_mask_write(0xFF180134, 0x000000FEU, 0x00000060U); + psu_mask_write(0xFF180204, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFF180208, 0xFFFFFFFFU, 0x00002040U); + psu_mask_write(0xFF18020C, 0x00003FFFU, 0x00000000U); + psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U); - if (itercount < 32) { - iterresult[0] = - ((iterresult[0] << 1) | - ((tempbistresult & 0x1) == 0x1)); - iterresult[1] = - ((iterresult[1] << 1) | - ((tempbistresult & 0x2) == 0x2)); - iterresult[2] = - ((iterresult[2] << 1) | - ((tempbistresult & 0x4) == 0x4)); - iterresult[3] = - ((iterresult[3] << 1) | - ((tempbistresult & 0x8) == 0x8)); - } else { - iterresult[4] = - ((iterresult[4] << 1) | - ((tempbistresult & 0x1) == 0x1)); - iterresult[5] = - ((iterresult[5] << 1) | - ((tempbistresult & 0x2) == 0x2)); - iterresult[6] = - ((iterresult[6] << 1) | - ((tempbistresult & 0x4) == 0x4)); - iterresult[7] = - ((iterresult[7] << 1) | - ((tempbistresult & 0x8) == 0x8)); - } - currbistresult[0] = - currbistresult[0] | ((tempbistresult & 0x1) == 1); - currbistresult[1] = - currbistresult[1] | ((tempbistresult & 0x2) == 0x2); - currbistresult[2] = - currbistresult[2] | ((tempbistresult & 0x4) == 0x4); - currbistresult[3] = - currbistresult[3] | ((tempbistresult & 0x8) == 0x8); + return 1; +} - for (loop = 0; loop <= 3; loop++) { - if (currbistresult[loop] == 1 && - prevbistresult[loop] == 1) - bistpasscount[loop] = bistpasscount[loop] + 1; - if (bistpasscount[loop] < 4 && - currbistresult[loop] == 0 && itercount > 2) { - if (meancountalt_bistpasscount[loop] < - bistpasscount[loop]) { - meancountalt_bistpasscount[loop] = - bistpasscount[loop]; - meancountalt[loop] = - ((itercount - 1) - - ((bistpasscount[loop] + 1) / 2)); - } - bistpasscount[loop] = 0; - } - if (meancount[loop] == 0 && bistpasscount[loop] >= 4 && - (currbistresult[loop] == 0 || itercount == 63) && - prevbistresult[loop] == 1) - meancount[loop] = - itercount - 1 - - ((bistpasscount[loop] + 1) / 2); - prevbistresult[loop] = currbistresult[loop]; - } - } while (++itercount < 64); +static unsigned long psu_peripherals_pre_init_data(void) +{ + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012302U); - for (loop = 0; loop <= 3; loop++) { - if (lane0_active == 0 && loop == 0) - continue; - if (lane1_active == 0 && loop == 1) - continue; - if (lane2_active == 0 && loop == 2) - continue; - if (lane3_active == 0 && loop == 3) - continue; + return 1; +} + +static unsigned long psu_peripherals_init_data(void) +{ + psu_mask_write(0xFD1A0100, 0x0000007CU, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U); + psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U); + psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000040U, 0x00000000U); + psu_mask_write(0xFF180310, 0x00008000U, 0x00000000U); + psu_mask_write(0xFF180320, 0x33840000U, 0x00800000U); + psu_mask_write(0xFF18031C, 0x7FFE0000U, 0x64500000U); + psu_mask_write(0xFF180358, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF180324, 0x03C00000U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000600U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U); + psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U); + psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U); + psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U); + psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x05F5DD18U); + psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U); + return 1; +} - if (meancount[loop] == 0) - meancount[loop] = meancountalt[loop]; +static unsigned long psu_serdes_init_data(void) +{ + psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000FU); + psu_mask_write(0xFD402860, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD40106C, 0x0000000FU, 0x0000000FU); + psu_mask_write(0xFD4000F4, 0x0000000BU, 0x0000000BU); + psu_mask_write(0xFD401074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD405074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD409074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40D074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40189C, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD4018F8, 0x000000FFU, 0x0000007DU); + psu_mask_write(0xFD4018FC, 0x000000FFU, 0x0000007DU); + psu_mask_write(0xFD401990, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD401924, 0x000000FFU, 0x00000082U); + psu_mask_write(0xFD401928, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD401900, 0x000000FFU, 0x00000064U); + psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD401980, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD401914, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD401918, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD401940, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD401944, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD401994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD405994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD409994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD40D994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD40107C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40507C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40907C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40D07C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD4019A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD401038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40102C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4059A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD405038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40502C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4099A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD409038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40902C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40D9A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD40D038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40D02C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4019AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD4059AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD4099AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD40D9AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD401978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD405978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD409978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40D978, 0x00000010U, 0x00000010U); - if (gen2_calib != 1) { - ill1_val[loop] = ((0x04 + meancount[loop] * 8) % 0x100); - ill12_val[loop] = - ((0x04 + meancount[loop] * 8) >= - 0x100) ? 0x10 : 0x00; - } - if (gen2_calib == 1) { - ill1_val[loop] = - ((0x104 + meancount[loop] * 8) % 0x100); - ill12_val[loop] = - ((0x104 + meancount[loop] * 8) >= - 0x200) ? 0x02 : 0x01; - } - } - if (gen2_calib != 1) { - if (lane0_active == 1) - Xil_Out32(0xFD401924, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x000000F0U, ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405924, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x000000F0U, ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409924, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x000000F0U, ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D924, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x000000F0U, ill12_val[3]); - } - if (gen2_calib == 1) { - if (lane0_active == 1) - Xil_Out32(0xFD401928, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x0000000FU, ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405928, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x0000000FU, ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409928, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x0000000FU, ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D928, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x0000000FU, ill12_val[3]); - } + serdes_illcalib(0, 0, 0, 0, 0, 0, 5, 0); + psu_mask_write(0xFD410010, 0x00000007U, 0x00000005U); + psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U); - if (lane0_active == 1) - psu_mask_write(0xFD401018, 0x00000030U, 0x00000000U); - if (lane1_active == 1) - psu_mask_write(0xFD405018, 0x00000030U, 0x00000000U); - if (lane2_active == 1) - psu_mask_write(0xFD409018, 0x00000030U, 0x00000000U); - if (lane3_active == 1) - psu_mask_write(0xFD40D018, 0x00000030U, 0x00000000U); + return 1; +} + +static unsigned long psu_resetout_init_data(void) +{ + psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000000U); + psu_mask_write(0xFD480064, 0x00000200U, 0x00000200U); + mask_poll(0xFD4023E4, 0x00000010U); - Xil_Out32(0xFD410098, 0); - if (lane0_active == 1) { - Xil_Out32(0xFD403004, 0); - Xil_Out32(0xFD403008, 0); - Xil_Out32(0xFD40300C, 0); - Xil_Out32(0xFD403010, 0); - Xil_Out32(0xFD403014, 0); - Xil_Out32(0xFD403018, 0); - Xil_Out32(0xFD40301C, 0); - Xil_Out32(0xFD403020, 0); - Xil_Out32(0xFD403024, 0); - Xil_Out32(0xFD403028, 0); - Xil_Out32(0xFD40302C, 0); - Xil_Out32(0xFD403030, 0); - Xil_Out32(0xFD403034, 0); - Xil_Out32(0xFD403038, 0); - Xil_Out32(0xFD40303C, 0); - Xil_Out32(0xFD403040, 0); - Xil_Out32(0xFD403044, 0); - Xil_Out32(0xFD403048, 0); - Xil_Out32(0xFD40304C, 0); - Xil_Out32(0xFD403050, 0); - Xil_Out32(0xFD403054, 0); - Xil_Out32(0xFD403058, 0); - Xil_Out32(0xFD403068, 1); - Xil_Out32(0xFD40306C, 0); - Xil_Out32(0xFD4010AC, 0); - psu_mask_write(0xFD410044, 0x00000003U, 0x00000001U); - psu_mask_write(0xFD410040, 0x00000003U, 0x00000001U); - psu_mask_write(0xFD410038, 0x00000007U, 0x00000000U); - } - if (lane1_active == 1) { - Xil_Out32(0xFD407004, 0); - Xil_Out32(0xFD407008, 0); - Xil_Out32(0xFD40700C, 0); - Xil_Out32(0xFD407010, 0); - Xil_Out32(0xFD407014, 0); - Xil_Out32(0xFD407018, 0); - Xil_Out32(0xFD40701C, 0); - Xil_Out32(0xFD407020, 0); - Xil_Out32(0xFD407024, 0); - Xil_Out32(0xFD407028, 0); - Xil_Out32(0xFD40702C, 0); - Xil_Out32(0xFD407030, 0); - Xil_Out32(0xFD407034, 0); - Xil_Out32(0xFD407038, 0); - Xil_Out32(0xFD40703C, 0); - Xil_Out32(0xFD407040, 0); - Xil_Out32(0xFD407044, 0); - Xil_Out32(0xFD407048, 0); - Xil_Out32(0xFD40704C, 0); - Xil_Out32(0xFD407050, 0); - Xil_Out32(0xFD407054, 0); - Xil_Out32(0xFD407058, 0); - Xil_Out32(0xFD407068, 1); - Xil_Out32(0xFD40706C, 0); - Xil_Out32(0xFD4050AC, 0); - psu_mask_write(0xFD410044, 0x0000000CU, 0x00000004U); - psu_mask_write(0xFD410040, 0x0000000CU, 0x00000004U); - psu_mask_write(0xFD410038, 0x00000070U, 0x00000000U); - } - if (lane2_active == 1) { - Xil_Out32(0xFD40B004, 0); - Xil_Out32(0xFD40B008, 0); - Xil_Out32(0xFD40B00C, 0); - Xil_Out32(0xFD40B010, 0); - Xil_Out32(0xFD40B014, 0); - Xil_Out32(0xFD40B018, 0); - Xil_Out32(0xFD40B01C, 0); - Xil_Out32(0xFD40B020, 0); - Xil_Out32(0xFD40B024, 0); - Xil_Out32(0xFD40B028, 0); - Xil_Out32(0xFD40B02C, 0); - Xil_Out32(0xFD40B030, 0); - Xil_Out32(0xFD40B034, 0); - Xil_Out32(0xFD40B038, 0); - Xil_Out32(0xFD40B03C, 0); - Xil_Out32(0xFD40B040, 0); - Xil_Out32(0xFD40B044, 0); - Xil_Out32(0xFD40B048, 0); - Xil_Out32(0xFD40B04C, 0); - Xil_Out32(0xFD40B050, 0); - Xil_Out32(0xFD40B054, 0); - Xil_Out32(0xFD40B058, 0); - Xil_Out32(0xFD40B068, 1); - Xil_Out32(0xFD40B06C, 0); - Xil_Out32(0xFD4090AC, 0); - psu_mask_write(0xFD410044, 0x00000030U, 0x00000010U); - psu_mask_write(0xFD410040, 0x00000030U, 0x00000010U); - psu_mask_write(0xFD41003C, 0x00000007U, 0x00000000U); - } - if (lane3_active == 1) { - Xil_Out32(0xFD40F004, 0); - Xil_Out32(0xFD40F008, 0); - Xil_Out32(0xFD40F00C, 0); - Xil_Out32(0xFD40F010, 0); - Xil_Out32(0xFD40F014, 0); - Xil_Out32(0xFD40F018, 0); - Xil_Out32(0xFD40F01C, 0); - Xil_Out32(0xFD40F020, 0); - Xil_Out32(0xFD40F024, 0); - Xil_Out32(0xFD40F028, 0); - Xil_Out32(0xFD40F02C, 0); - Xil_Out32(0xFD40F030, 0); - Xil_Out32(0xFD40F034, 0); - Xil_Out32(0xFD40F038, 0); - Xil_Out32(0xFD40F03C, 0); - Xil_Out32(0xFD40F040, 0); - Xil_Out32(0xFD40F044, 0); - Xil_Out32(0xFD40F048, 0); - Xil_Out32(0xFD40F04C, 0); - Xil_Out32(0xFD40F050, 0); - Xil_Out32(0xFD40F054, 0); - Xil_Out32(0xFD40F058, 0); - Xil_Out32(0xFD40F068, 1); - Xil_Out32(0xFD40F06C, 0); - Xil_Out32(0xFD40D0AC, 0); - psu_mask_write(0xFD410044, 0x000000C0U, 0x00000040U); - psu_mask_write(0xFD410040, 0x000000C0U, 0x00000040U); - psu_mask_write(0xFD41003C, 0x00000070U, 0x00000000U); - } return 1; } -static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate) +static unsigned long psu_resetin_init_data(void) { - unsigned int rdata = 0; - unsigned int sata_gen2 = 1; - unsigned int temp_ill12 = 0; - unsigned int temp_PLL_REF_SEL_OFFSET; - unsigned int temp_TM_IQ_ILL1; - unsigned int temp_TM_E_ILL1; - unsigned int temp_tx_dig_tm_61; - unsigned int temp_tm_dig_6; - unsigned int temp_pll_fbdiv_frac_3_msb_offset; + psu_mask_write(0xFF5E0230, 0x00000001U, 0x00000001U); - if (lane0_protocol == 2 || lane0_protocol == 1) { - Xil_Out32(0xFD401910, 0xF3); - Xil_Out32(0xFD40193C, 0xF3); - Xil_Out32(0xFD401914, 0xF3); - Xil_Out32(0xFD401940, 0xF3); - } - if (lane1_protocol == 2 || lane1_protocol == 1) { - Xil_Out32(0xFD405910, 0xF3); - Xil_Out32(0xFD40593C, 0xF3); - Xil_Out32(0xFD405914, 0xF3); - Xil_Out32(0xFD405940, 0xF3); - } - if (lane2_protocol == 2 || lane2_protocol == 1) { - Xil_Out32(0xFD409910, 0xF3); - Xil_Out32(0xFD40993C, 0xF3); - Xil_Out32(0xFD409914, 0xF3); - Xil_Out32(0xFD409940, 0xF3); - } - if (lane3_protocol == 2 || lane3_protocol == 1) { - Xil_Out32(0xFD40D910, 0xF3); - Xil_Out32(0xFD40D93C, 0xF3); - Xil_Out32(0xFD40D914, 0xF3); - Xil_Out32(0xFD40D940, 0xF3); - } + return 1; +} - if (sata_gen2 == 1) { - if (lane0_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD402360); - Xil_Out32(0xFD402360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410000); - psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4018F8); - temp_TM_E_ILL1 = Xil_In32(0xFD401924); - Xil_Out32(0xFD4018F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4000F4); - temp_tm_dig_6 = Xil_In32(0xFD40106C); - psu_mask_write(0xFD4000F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40106C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD401990) & 0xF0; +static unsigned long psu_afi_config(void) +{ + psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U); + psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U); + psu_mask_write(0xFF419000, 0x00000300U, 0x00000000U); - serdes_illcalib_pcie_gen1(0, 0, 0, 0, 0, 0, 0, 1, 0, 0); + return 1; +} - Xil_Out32(0xFD402360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD410000, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4018F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4000F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40106C, temp_tm_dig_6); - Xil_Out32(0xFD401928, Xil_In32(0xFD401924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD401990) >> 4 & 0xF); - Xil_Out32(0xFD401990, temp_ill12); - Xil_Out32(0xFD401924, temp_TM_E_ILL1); - } - if (lane1_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD406360); - Xil_Out32(0xFD406360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410004); - psu_mask_write(0xFD410004, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4058F8); - temp_TM_E_ILL1 = Xil_In32(0xFD405924); - Xil_Out32(0xFD4058F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4040F4); - temp_tm_dig_6 = Xil_In32(0xFD40506C); - psu_mask_write(0xFD4040F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40506C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD405990) & 0xF0; +static unsigned long psu_ddr_phybringup_data(void) +{ + unsigned int regval = 0; - serdes_illcalib_pcie_gen1(1, 0, 0, 0, 0, 1, 0, 0, 0, 0); + for (int tp = 0; tp < 20; tp++) + regval = Xil_In32(0xFD070018); + int cur_PLLCR0; - Xil_Out32(0xFD406360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD410004, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4058F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4040F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40506C, temp_tm_dig_6); - Xil_Out32(0xFD405928, Xil_In32(0xFD405924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD405990) >> 4 & 0xF); - Xil_Out32(0xFD405990, temp_ill12); - Xil_Out32(0xFD405924, temp_TM_E_ILL1); - } - if (lane2_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40A360); - Xil_Out32(0xFD40A360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410008); - psu_mask_write(0xFD410008, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4098F8); - temp_TM_E_ILL1 = Xil_In32(0xFD409924); - Xil_Out32(0xFD4098F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4080F4); - temp_tm_dig_6 = Xil_In32(0xFD40906C); - psu_mask_write(0xFD4080F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40906C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD409990) & 0xF0; + cur_PLLCR0 = (Xil_In32(0xFD080068U) & 0xFFFFFFFFU) >> 0x00000000U; + int cur_DX8SL0PLLCR0; - serdes_illcalib_pcie_gen1(2, 0, 0, 1, 0, 0, 0, 0, 0, 0); + cur_DX8SL0PLLCR0 = (Xil_In32(0xFD081404U) & 0xFFFFFFFFU) >> 0x00000000U; + int cur_DX8SL1PLLCR0; - Xil_Out32(0xFD40A360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD410008, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4098F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4080F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40906C, temp_tm_dig_6); - Xil_Out32(0xFD409928, Xil_In32(0xFD409924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD409990) >> 4 & 0xF); - Xil_Out32(0xFD409990, temp_ill12); - Xil_Out32(0xFD409924, temp_TM_E_ILL1); - } - if (lane3_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40E360); - Xil_Out32(0xFD40E360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD41000C); - psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD40D8F8); - temp_TM_E_ILL1 = Xil_In32(0xFD40D924); - Xil_Out32(0xFD40D8F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD40C0F4); - temp_tm_dig_6 = Xil_In32(0xFD40D06C); - psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40D06C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD40D990) & 0xF0; + cur_DX8SL1PLLCR0 = (Xil_In32(0xFD081444U) & 0xFFFFFFFFU) >> 0x00000000U; + int cur_DX8SL2PLLCR0; - serdes_illcalib_pcie_gen1(3, 1, 0, 0, 0, 0, 0, 0, 0, 0); + cur_DX8SL2PLLCR0 = (Xil_In32(0xFD081484U) & 0xFFFFFFFFU) >> 0x00000000U; + int cur_DX8SL3PLLCR0; - Xil_Out32(0xFD40E360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD40D8F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD40C0F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40D06C, temp_tm_dig_6); - Xil_Out32(0xFD40D928, Xil_In32(0xFD40D924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD40D990) >> 4 & 0xF); - Xil_Out32(0xFD40D990, temp_ill12); - Xil_Out32(0xFD40D924, temp_TM_E_ILL1); - } - rdata = Xil_In32(0xFD410098); - rdata = (rdata & 0xDF); - Xil_Out32(0xFD410098, rdata); - } + cur_DX8SL3PLLCR0 = (Xil_In32(0xFD0814C4U) & 0xFFFFFFFFU) >> 0x00000000U; + int cur_DX8SL4PLLCR0; - if (lane0_protocol == 2 && lane0_rate == 3) { - psu_mask_write(0xFD40198C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000094U); - } - if (lane1_protocol == 2 && lane1_rate == 3) { - psu_mask_write(0xFD40598C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40592C, 0x000000FFU, 0x00000094U); - } - if (lane2_protocol == 2 && lane2_rate == 3) { - psu_mask_write(0xFD40998C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000094U); - } - if (lane3_protocol == 2 && lane3_rate == 3) { - psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000094U); - } + cur_DX8SL4PLLCR0 = (Xil_In32(0xFD081504U) & 0xFFFFFFFFU) >> 0x00000000U; + int cur_DX8SLBPLLCR0; - if (lane0_protocol == 1) { - if (lane0_rate == 0) { - serdes_illcalib_pcie_gen1(0, lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, 0, 0); - } else { - serdes_illcalib_pcie_gen1(0, lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, 0, 0); - serdes_illcalib_pcie_gen1(0, lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, lane0_rate, - 1); - } + cur_DX8SLBPLLCR0 = (Xil_In32(0xFD0817C4U) & 0xFFFFFFFFU) >> 0x00000000U; + Xil_Out32(0xFD080068, 0x02120000); + Xil_Out32(0xFD081404, 0x02120000); + Xil_Out32(0xFD081444, 0x02120000); + Xil_Out32(0xFD081484, 0x02120000); + Xil_Out32(0xFD0814C4, 0x02120000); + Xil_Out32(0xFD081504, 0x02120000); + Xil_Out32(0xFD0817C4, 0x02120000); + int cur_div2; + + cur_div2 = (Xil_In32(0xFD1A002CU) & 0x00010000U) >> 0x00000010U; + int cur_fbdiv; + + cur_fbdiv = (Xil_In32(0xFD1A002CU) & 0x00007F00U) >> 0x00000008U; + dpll_prog(1, 49, 63, 625, 3, 3, 2); + for (int tp = 0; tp < 20; tp++) + regval = Xil_In32(0xFD070018); + unsigned int pll_retry = 10; + unsigned int pll_locked = 0; + + while ((pll_retry > 0) && (!pll_locked)) { + Xil_Out32(0xFD080004, 0x00040010); + Xil_Out32(0xFD080004, 0x00040011); + + while ((Xil_In32(0xFD080030) & 0x1) != 1) + ; + pll_locked = (Xil_In32(0xFD080030) & 0x80000000) + >> 31; + pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000) + >> 16; + pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000) >> 16; + pll_retry--; } + Xil_Out32(0xFD0800C4, Xil_In32(0xFD0800C4) | (pll_retry << 16)); + if (!pll_locked) + return 0; - if (lane0_protocol == 3) - Xil_Out32(0xFD401914, 0xF3); - if (lane0_protocol == 3) - Xil_Out32(0xFD401940, 0xF3); - if (lane0_protocol == 3) - Xil_Out32(0xFD401990, 0x20); - if (lane0_protocol == 3) - Xil_Out32(0xFD401924, 0x37); + Xil_Out32(0xFD080004U, 0x00040063U); + Xil_Out32(0xFD0800C0U, 0x00000001U); + + while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) + ; + prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); - if (lane1_protocol == 3) - Xil_Out32(0xFD405914, 0xF3); - if (lane1_protocol == 3) - Xil_Out32(0xFD405940, 0xF3); - if (lane1_protocol == 3) - Xil_Out32(0xFD405990, 0x20); - if (lane1_protocol == 3) - Xil_Out32(0xFD405924, 0x37); + while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) + ; + Xil_Out32(0xFD070010U, 0x80000018U); + Xil_Out32(0xFD0701B0U, 0x00000005U); + regval = Xil_In32(0xFD070018); + while ((regval & 0x1) != 0x0) + regval = Xil_In32(0xFD070018); - if (lane2_protocol == 3) - Xil_Out32(0xFD409914, 0xF3); - if (lane2_protocol == 3) - Xil_Out32(0xFD409940, 0xF3); - if (lane2_protocol == 3) - Xil_Out32(0xFD409990, 0x20); - if (lane2_protocol == 3) - Xil_Out32(0xFD409924, 0x37); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + Xil_Out32(0xFD070014U, 0x00000331U); + Xil_Out32(0xFD070010U, 0x80000018U); + regval = Xil_In32(0xFD070018); + while ((regval & 0x1) != 0x0) + regval = Xil_In32(0xFD070018); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D914, 0xF3); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D940, 0xF3); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D990, 0x20); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D924, 0x37); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + Xil_Out32(0xFD070014U, 0x00000B36U); + Xil_Out32(0xFD070010U, 0x80000018U); + regval = Xil_In32(0xFD070018); + while ((regval & 0x1) != 0x0) + regval = Xil_In32(0xFD070018); - return 1; -} + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + Xil_Out32(0xFD070014U, 0x00000C56U); + Xil_Out32(0xFD070010U, 0x80000018U); + regval = Xil_In32(0xFD070018); + while ((regval & 0x1) != 0x0) + regval = Xil_In32(0xFD070018); -static void dpll_prog(int div2, int ddr_pll_fbdiv, int d_lock_dly, - int d_lock_cnt, int d_lfhf, int d_cp, int d_res) -{ - unsigned int pll_ctrl_regval; - unsigned int pll_status_regval; + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + Xil_Out32(0xFD070014U, 0x00000E19U); + Xil_Out32(0xFD070010U, 0x80000018U); + regval = Xil_In32(0xFD070018); + while ((regval & 0x1) != 0x0) + regval = Xil_In32(0xFD070018); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); - pll_ctrl_regval = pll_ctrl_regval & (~0x00010000U); - pll_ctrl_regval = pll_ctrl_regval | (div2 << 16); - Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + regval = Xil_In32(0xFD070018); + Xil_Out32(0xFD070014U, 0x00001616U); + Xil_Out32(0xFD070010U, 0x80000018U); + Xil_Out32(0xFD070010U, 0x80000010U); + Xil_Out32(0xFD0701B0U, 0x00000005U); + Xil_Out32(0xFD070320U, 0x00000001U); + while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) + ; + prog_reg(0xFD0701B0U, 0x00000001U, 0x00000000U, 0x00000000U); + prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); + prog_reg(0xFD080028U, 0x00000001U, 0x00000000U, 0x00000001U); + prog_reg(0xFD080004U, 0x20000000U, 0x0000001DU, 0x00000001U); + prog_reg(0xFD08016CU, 0x00000004U, 0x00000002U, 0x00000001U); + prog_reg(0xFD080168U, 0x000000F0U, 0x00000004U, 0x00000007U); + prog_reg(0xFD080168U, 0x00000F00U, 0x00000008U, 0x00000002U); + prog_reg(0xFD080168U, 0x0000000FU, 0x00000000U, 0x00000001U); + for (int tp = 0; tp < 20; tp++) + regval = Xil_In32(0xFD070018); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); - pll_ctrl_regval = pll_ctrl_regval & (~0xFE000000U); - pll_ctrl_regval = pll_ctrl_regval | (d_lock_dly << 25); - Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + Xil_Out32(0xFD080068, cur_PLLCR0); + Xil_Out32(0xFD081404, cur_DX8SL0PLLCR0); + Xil_Out32(0xFD081444, cur_DX8SL1PLLCR0); + Xil_Out32(0xFD081484, cur_DX8SL2PLLCR0); + Xil_Out32(0xFD0814C4, cur_DX8SL3PLLCR0); + Xil_Out32(0xFD081504, cur_DX8SL4PLLCR0); + Xil_Out32(0xFD0817C4, cur_DX8SLBPLLCR0); + for (int tp = 0; tp < 20; tp++) + regval = Xil_In32(0xFD070018); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); - pll_ctrl_regval = pll_ctrl_regval & (~0x007FE000U); - pll_ctrl_regval = pll_ctrl_regval | (d_lock_cnt << 13); - Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + dpll_prog(cur_div2, cur_fbdiv, 63, 625, 3, 3, 2); + for (int tp = 0; tp < 2000; tp++) + regval = Xil_In32(0xFD070018); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); - pll_ctrl_regval = pll_ctrl_regval & (~0x00000C00U); - pll_ctrl_regval = pll_ctrl_regval | (d_lfhf << 10); - Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + prog_reg(0xFD080004U, 0x20000000U, 0x0000001DU, 0x00000000U); + prog_reg(0xFD080004U, 0x00040000U, 0x00000012U, 0x00000001U); + prog_reg(0xFD080004U, 0x00000040U, 0x00000006U, 0x00000001U); + prog_reg(0xFD080004U, 0x00000020U, 0x00000005U, 0x00000001U); + prog_reg(0xFD080004U, 0x00000010U, 0x00000004U, 0x00000001U); + prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); - pll_ctrl_regval = pll_ctrl_regval & (~0x000001E0U); - pll_ctrl_regval = pll_ctrl_regval | (d_cp << 5); - Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) + ; + prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x00000030)); - pll_ctrl_regval = pll_ctrl_regval & (~0x0000000FU); - pll_ctrl_regval = pll_ctrl_regval | (d_res << 0); - Xil_Out32(((0xFD1A0000U) + 0x00000030), pll_ctrl_regval); + while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) + ; + for (int tp = 0; tp < 2000; tp++) + regval = Xil_In32(0xFD070018); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); - pll_ctrl_regval = pll_ctrl_regval & (~0x00007F00U); - pll_ctrl_regval = pll_ctrl_regval | (ddr_pll_fbdiv << 8); - Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + prog_reg(0xFD080028U, 0x00000001U, 0x00000000U, 0x00000000U); + prog_reg(0xFD08016CU, 0x00000004U, 0x00000002U, 0x00000001U); + prog_reg(0xFD080168U, 0x000000F0U, 0x00000004U, 0x00000007U); + prog_reg(0xFD080168U, 0x00000F00U, 0x00000008U, 0x00000003U); + prog_reg(0xFD080168U, 0x0000000FU, 0x00000000U, 0x00000001U); + for (int tp = 0; tp < 2000; tp++) + regval = Xil_In32(0xFD070018); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); - pll_ctrl_regval = pll_ctrl_regval & (~0x00000008U); - pll_ctrl_regval = pll_ctrl_regval | (1 << 3); - Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); + Xil_Out32(0xFD080004, 0x0014FE01); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); - pll_ctrl_regval = pll_ctrl_regval & (~0x00000001U); - pll_ctrl_regval = pll_ctrl_regval | (1 << 0); - Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + regval = Xil_In32(0xFD080030); + while (regval != 0x8000007E) + regval = Xil_In32(0xFD080030); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); - pll_ctrl_regval = pll_ctrl_regval & (~0x00000001U); - pll_ctrl_regval = pll_ctrl_regval | (0 << 0); - Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + Xil_Out32(0xFD080200U, 0x000091C7U); + regval = Xil_In32(0xFD080030); + while (regval != 0x80008FFF) + regval = Xil_In32(0xFD080030); - pll_status_regval = 0x00000000; - while ((pll_status_regval & 0x00000002U) != 0x00000002U) - pll_status_regval = Xil_In32(((0xFD1A0000U) + 0x00000044)); + Xil_Out32(0xFD080200U, 0x800091C7U); + regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); + if (regval != 0) + return 0; + prog_reg(0xFD070320U, 0x00000001U, 0x00000000U, 0x00000000U); + prog_reg(0xFD0701B0U, 0x00000001U, 0x00000000U, 0x00000001U); + prog_reg(0xFD0701A0U, 0x80000000U, 0x0000001FU, 0x00000000U); + prog_reg(0xFD070320U, 0x00000001U, 0x00000000U, 0x00000001U); + Xil_Out32(0xFD070180U, 0x02160010U); + Xil_Out32(0xFD070060U, 0x00000000U); + prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U); + for (int tp = 0; tp < 4000; tp++) + regval = Xil_In32(0xFD070018); - pll_ctrl_regval = Xil_In32(((0xFD1A0000U) + 0x0000002C)); - pll_ctrl_regval = pll_ctrl_regval & (~0x00000008U); - pll_ctrl_regval = pll_ctrl_regval | (0 << 3); - Xil_Out32(((0xFD1A0000U) + 0x0000002C), pll_ctrl_regval); + prog_reg(0xFD080090U, 0x00000FC0U, 0x00000006U, 0x00000007U); + prog_reg(0xFD080090U, 0x00000004U, 0x00000002U, 0x00000001U); + prog_reg(0xFD08070CU, 0x02000000U, 0x00000019U, 0x00000000U); + prog_reg(0xFD08080CU, 0x02000000U, 0x00000019U, 0x00000000U); + prog_reg(0xFD08090CU, 0x02000000U, 0x00000019U, 0x00000000U); + prog_reg(0xFD080A0CU, 0x02000000U, 0x00000019U, 0x00000000U); + prog_reg(0xFD080F0CU, 0x02000000U, 0x00000019U, 0x00000000U); + prog_reg(0xFD080200U, 0x00000010U, 0x00000004U, 0x00000001U); + prog_reg(0xFD080250U, 0x00000002U, 0x00000001U, 0x00000000U); + prog_reg(0xFD080250U, 0x0000000CU, 0x00000002U, 0x00000001U); + prog_reg(0xFD080250U, 0x000000F0U, 0x00000004U, 0x00000000U); + prog_reg(0xFD080250U, 0x00300000U, 0x00000014U, 0x00000001U); + prog_reg(0xFD080250U, 0xF0000000U, 0x0000001CU, 0x00000002U); + prog_reg(0xFD08070CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD08080CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD08090CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD080A0CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD080B0CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD080C0CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD080D0CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD080E0CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD080F0CU, 0x08000000U, 0x0000001BU, 0x00000000U); + prog_reg(0xFD080254U, 0x000000FFU, 0x00000000U, 0x00000001U); + prog_reg(0xFD080254U, 0x000F0000U, 0x00000010U, 0x0000000AU); + prog_reg(0xFD080250U, 0x00000001U, 0x00000000U, 0x00000001U); + + return 1; } static int serdes_enb_coarse_saturation(void) diff --git a/board/xilinx/zynqmp/zynqmp-zcu208-revA/psu_init_gpl.c b/board/xilinx/zynqmp/zynqmp-zcu208-revA/psu_init_gpl.c index 2adcad04d8..f98ad8af82 100644 --- a/board/xilinx/zynqmp/zynqmp-zcu208-revA/psu_init_gpl.c +++ b/board/xilinx/zynqmp/zynqmp-zcu208-revA/psu_init_gpl.c @@ -6,1692 +6,1687 @@ #include #include -static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate); - -static unsigned long psu_pll_init_data(void) +static int serdes_rst_seq(u32 lane3_protocol, u32 lane3_rate, + u32 lane2_protocol, u32 lane2_rate, + u32 lane1_protocol, u32 lane1_rate, + u32 lane0_protocol, u32 lane0_rate) { - psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E4B0C82U); - psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00015A00U); - psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); - mask_poll(0xFF5E0040, 0x00000002U); - psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U); - psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012300U); - psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E4B0C82U); - psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00015A00U); - psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U); - mask_poll(0xFF5E0040, 0x00000001U); - psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U); - psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U); - psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014800U); - psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000001U); - psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U); - psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00013F00U); - psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000002U); - psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000200U); - psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C82U); - psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00015A00U); - psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000004U); - psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000300U); + Xil_Out32(0xFD410098, 0x00000000); + Xil_Out32(0xFD401010, 0x00000040); + Xil_Out32(0xFD405010, 0x00000040); + Xil_Out32(0xFD409010, 0x00000040); + Xil_Out32(0xFD40D010, 0x00000040); + Xil_Out32(0xFD402084, 0x00000080); + Xil_Out32(0xFD406084, 0x00000080); + Xil_Out32(0xFD40A084, 0x00000080); + Xil_Out32(0xFD40E084, 0x00000080); + Xil_Out32(0xFD410098, 0x00000004); + mask_delay(50); + if (lane0_rate == 1) + Xil_Out32(0xFD410098, 0x0000000E); + Xil_Out32(0xFD410098, 0x00000006); + if (lane0_rate == 1) { + Xil_Out32(0xFD40000C, 0x00000004); + Xil_Out32(0xFD40400C, 0x00000004); + Xil_Out32(0xFD40800C, 0x00000004); + Xil_Out32(0xFD40C00C, 0x00000004); + Xil_Out32(0xFD410098, 0x00000007); + mask_delay(400); + Xil_Out32(0xFD40000C, 0x0000000C); + Xil_Out32(0xFD40400C, 0x0000000C); + Xil_Out32(0xFD40800C, 0x0000000C); + Xil_Out32(0xFD40C00C, 0x0000000C); + mask_delay(15); + Xil_Out32(0xFD410098, 0x0000000F); + mask_delay(100); + } + if (lane0_protocol != 0) + mask_poll(0xFD4023E4, 0x00000010U); + if (lane1_protocol != 0) + mask_poll(0xFD4063E4, 0x00000010U); + if (lane2_protocol != 0) + mask_poll(0xFD40A3E4, 0x00000010U); + if (lane3_protocol != 0) + mask_poll(0xFD40E3E4, 0x00000010U); + mask_delay(50); + Xil_Out32(0xFD401010, 0x000000C0); + Xil_Out32(0xFD405010, 0x000000C0); + Xil_Out32(0xFD409010, 0x000000C0); + Xil_Out32(0xFD40D010, 0x000000C0); + Xil_Out32(0xFD401010, 0x00000080); + Xil_Out32(0xFD405010, 0x00000080); + Xil_Out32(0xFD409010, 0x00000080); + Xil_Out32(0xFD40D010, 0x00000080); + Xil_Out32(0xFD402084, 0x000000C0); + Xil_Out32(0xFD406084, 0x000000C0); + Xil_Out32(0xFD40A084, 0x000000C0); + Xil_Out32(0xFD40E084, 0x000000C0); + mask_delay(50); + Xil_Out32(0xFD402084, 0x00000080); + Xil_Out32(0xFD406084, 0x00000080); + Xil_Out32(0xFD40A084, 0x00000080); + Xil_Out32(0xFD40E084, 0x00000080); + mask_delay(50); + Xil_Out32(0xFD401010, 0x00000000); + Xil_Out32(0xFD405010, 0x00000000); + Xil_Out32(0xFD409010, 0x00000000); + Xil_Out32(0xFD40D010, 0x00000000); + Xil_Out32(0xFD402084, 0x00000000); + Xil_Out32(0xFD406084, 0x00000000); + Xil_Out32(0xFD40A084, 0x00000000); + Xil_Out32(0xFD40E084, 0x00000000); + mask_delay(500); return 1; } -static unsigned long psu_clock_init_data(void) +static int serdes_bist_static_settings(u32 lane_active) { - psu_mask_write(0xFF5E005C, 0x063F3F07U, 0x06010C00U); - psu_mask_write(0xFF5E0100, 0x013F3F07U, 0x01010600U); - psu_mask_write(0xFF5E0060, 0x023F3F07U, 0x02010600U); - psu_mask_write(0xFF5E004C, 0x023F3F07U, 0x02031900U); - psu_mask_write(0xFF5E0068, 0x013F3F07U, 0x01010C00U); - psu_mask_write(0xFF5E0070, 0x013F3F07U, 0x01010800U); - psu_mask_write(0xFF18030C, 0x00020000U, 0x00000000U); - psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0120, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0124, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000602U); - psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000800U); - psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U); - psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U); - psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011E02U); - psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U); - psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000F00U); - psu_mask_write(0xFD1A00A0, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U); - psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000200U); - psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000203U); - psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U); - psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U); - psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U); + if (lane_active == 0) { + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); + Xil_Out32(0xFD403068, 0x1); + Xil_Out32(0xFD40306C, 0x1); + Xil_Out32(0xFD4010AC, 0x0020); + Xil_Out32(0xFD403008, 0x0); + Xil_Out32(0xFD40300C, 0xF4); + Xil_Out32(0xFD403010, 0x0); + Xil_Out32(0xFD403014, 0x0); + Xil_Out32(0xFD403018, 0x00); + Xil_Out32(0xFD40301C, 0xFB); + Xil_Out32(0xFD403020, 0xFF); + Xil_Out32(0xFD403024, 0x0); + Xil_Out32(0xFD403028, 0x00); + Xil_Out32(0xFD40302C, 0x00); + Xil_Out32(0xFD403030, 0x4A); + Xil_Out32(0xFD403034, 0x4A); + Xil_Out32(0xFD403038, 0x4A); + Xil_Out32(0xFD40303C, 0x4A); + Xil_Out32(0xFD403040, 0x0); + Xil_Out32(0xFD403044, 0x14); + Xil_Out32(0xFD403048, 0x02); + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); + } + if (lane_active == 1) { + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); + Xil_Out32(0xFD407068, 0x1); + Xil_Out32(0xFD40706C, 0x1); + Xil_Out32(0xFD4050AC, 0x0020); + Xil_Out32(0xFD407008, 0x0); + Xil_Out32(0xFD40700C, 0xF4); + Xil_Out32(0xFD407010, 0x0); + Xil_Out32(0xFD407014, 0x0); + Xil_Out32(0xFD407018, 0x00); + Xil_Out32(0xFD40701C, 0xFB); + Xil_Out32(0xFD407020, 0xFF); + Xil_Out32(0xFD407024, 0x0); + Xil_Out32(0xFD407028, 0x00); + Xil_Out32(0xFD40702C, 0x00); + Xil_Out32(0xFD407030, 0x4A); + Xil_Out32(0xFD407034, 0x4A); + Xil_Out32(0xFD407038, 0x4A); + Xil_Out32(0xFD40703C, 0x4A); + Xil_Out32(0xFD407040, 0x0); + Xil_Out32(0xFD407044, 0x14); + Xil_Out32(0xFD407048, 0x02); + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); + } + + if (lane_active == 2) { + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); + Xil_Out32(0xFD40B068, 0x1); + Xil_Out32(0xFD40B06C, 0x1); + Xil_Out32(0xFD4090AC, 0x0020); + Xil_Out32(0xFD40B008, 0x0); + Xil_Out32(0xFD40B00C, 0xF4); + Xil_Out32(0xFD40B010, 0x0); + Xil_Out32(0xFD40B014, 0x0); + Xil_Out32(0xFD40B018, 0x00); + Xil_Out32(0xFD40B01C, 0xFB); + Xil_Out32(0xFD40B020, 0xFF); + Xil_Out32(0xFD40B024, 0x0); + Xil_Out32(0xFD40B028, 0x00); + Xil_Out32(0xFD40B02C, 0x00); + Xil_Out32(0xFD40B030, 0x4A); + Xil_Out32(0xFD40B034, 0x4A); + Xil_Out32(0xFD40B038, 0x4A); + Xil_Out32(0xFD40B03C, 0x4A); + Xil_Out32(0xFD40B040, 0x0); + Xil_Out32(0xFD40B044, 0x14); + Xil_Out32(0xFD40B048, 0x02); + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); + } + if (lane_active == 3) { + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); + Xil_Out32(0xFD40F068, 0x1); + Xil_Out32(0xFD40F06C, 0x1); + Xil_Out32(0xFD40D0AC, 0x0020); + Xil_Out32(0xFD40F008, 0x0); + Xil_Out32(0xFD40F00C, 0xF4); + Xil_Out32(0xFD40F010, 0x0); + Xil_Out32(0xFD40F014, 0x0); + Xil_Out32(0xFD40F018, 0x00); + Xil_Out32(0xFD40F01C, 0xFB); + Xil_Out32(0xFD40F020, 0xFF); + Xil_Out32(0xFD40F024, 0x0); + Xil_Out32(0xFD40F028, 0x00); + Xil_Out32(0xFD40F02C, 0x00); + Xil_Out32(0xFD40F030, 0x4A); + Xil_Out32(0xFD40F034, 0x4A); + Xil_Out32(0xFD40F038, 0x4A); + Xil_Out32(0xFD40F03C, 0x4A); + Xil_Out32(0xFD40F040, 0x0); + Xil_Out32(0xFD40F044, 0x14); + Xil_Out32(0xFD40F048, 0x02); + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); + } return 1; } -static unsigned long psu_ddr_init_data(void) +static int serdes_bist_run(u32 lane_active) { - psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD070000, 0xE30FBE3DU, 0x81040010U); - psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U); - psu_mask_write(0xFD070020, 0x000003F3U, 0x00000200U); - psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00800000U); - psu_mask_write(0xFD070030, 0x0000007FU, 0x00000000U); - psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00408210U); - psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U); - psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U); - psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U); - psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x007F80B8U); - psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U); - psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U); - psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0040051FU); - psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00020102U); - psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x00020000U); - psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00002205U); - psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x07300301U); - psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00100200U); - psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00210004U); - psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x000006C0U); - psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x08190000U); - psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U); - psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000066FU); - psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x0F102311U); - psu_mask_write(0xFD070104, 0x001F1F7FU, 0x00040419U); - psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x0608070CU); - psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x0050400CU); - psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x08030409U); - psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x06060403U); - psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010004U); - psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000606U); - psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x04040D07U); - psu_mask_write(0xFD070124, 0x40070F3FU, 0x00020309U); - psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x1207010EU); - psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U); - psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x81000040U); - psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x0201908AU); - psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x048B8208U); - psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00030304U); - psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U); - psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U); - psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x00400003U); - psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x00C800FFU); - psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000000U); - psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x00000906U); - psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000001U); - psu_mask_write(0xFD070200, 0x0000001FU, 0x0000001FU); - psu_mask_write(0xFD070204, 0x001F1F1FU, 0x001F0909U); - psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x01010100U); - psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x01010101U); - psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU); - psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x070F0707U); - psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x07070707U); - psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F0FU); - psu_mask_write(0xFD070220, 0x00001F1FU, 0x00001F01U); - psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x07070707U); - psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x07070707U); - psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000007U); - psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x0600060CU); - psu_mask_write(0xFD070244, 0x00003333U, 0x00000001U); - psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U); - psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U); - psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U); - psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U); - psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070300, 0x00000011U, 0x00000000U); - psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U); - psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U); - psu_mask_write(0xFD070400, 0x00000111U, 0x00000001U); - psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU); - psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U); - psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U); - psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U); - psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U); - psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU); - psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U); - psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x07001E00U); - psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F0FC00U); - psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U); - psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U); - psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x41A20D10U); - psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0xCD141275U); - psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04161U); - psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD0800C4, 0xFFFFFFFFU, 0x000000E3U); - psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0800040CU); - psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x07220F08U); - psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x28200008U); - psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x000F0300U); - psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x83000800U); - psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x01702B07U); - psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x00310F08U); - psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000B0FU); - psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U); - psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U); - psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000200U); - psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000630U); - psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000301U); - psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000010U); - psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000200U); - psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x000006C0U); - psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000819U); - psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x0000004DU); - psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U); - psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x0000004DU); - psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x800091C7U); - psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00010236U); - psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U); - psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U); - psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12341000U); - psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x00000005U); - psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U); - psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x0A000000U); - psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000009U); - psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x0A000000U); - psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300B0CEU); - psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF9032019U); - psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U); - psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x008A8A58U); - psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x000079DDU); - psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U); - psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U); - psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x00087BDBU); - psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080704, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08070C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00B03CU); - psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080804, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08080C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00B03CU); - psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08090C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00B004U); - psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080A0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00B004U); - psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080B08, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080B0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0E00B004U); - psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080C08, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080C0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0E00B03CU); - psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080D08, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080D0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0E00B004U); - psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080E08, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080E0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0E00B03CU); - psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x80803660U); - psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x55556000U); - psu_mask_write(0xFD080F08, 0xFFFFFFFFU, 0xAAAAAAAAU); - psu_mask_write(0xFD080F0C, 0xFFFFFFFFU, 0x0029A4A4U); - psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0C00B000U); - psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x70800000U); - psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x70800000U); - psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70800000U); - psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70800000U); - psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x15019FFEU); - psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x21100000U); - psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01266300U); - psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70400000U); - psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U); - - return 1; -} - -static unsigned long psu_ddr_qos_init_data(void) -{ - psu_mask_write(0xFD360008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD36001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD370008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD37001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD380008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD38001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD390008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD39001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3A0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3A001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3B0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3B001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFF9B0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFF9B001C, 0x0000000FU, 0x00000000U); - - return 1; -} - -static unsigned long psu_mio_init_data(void) -{ - psu_mask_write(0xFF180000, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180004, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180008, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18000C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180010, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180014, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180018, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18001C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180020, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180024, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180028, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18002C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180030, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180034, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180038, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF18003C, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180040, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180044, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180048, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF18004C, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF180050, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180054, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180058, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18005C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180060, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180064, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180068, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18006C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180070, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180074, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180078, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180080, 0x000000FEU, 0x00000008U); - psu_mask_write(0xFF180084, 0x000000FEU, 0x00000008U); - psu_mask_write(0xFF180098, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18009C, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800A0, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800A4, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800A8, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800AC, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800B0, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800B4, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800B8, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800BC, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C0, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C4, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C8, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800CC, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800D0, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800D4, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800D8, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800DC, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800E0, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800E4, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800E8, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800EC, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800F0, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800F4, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800F8, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800FC, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF180100, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180104, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180108, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18010C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180110, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180114, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180118, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18011C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180120, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180124, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180128, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18012C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180130, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF180134, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF180204, 0xFFFFFFFFU, 0x00040000U); - psu_mask_write(0xFF180208, 0xFFFFFFFFU, 0x00B02000U); - psu_mask_write(0xFF18020C, 0x00003FFFU, 0x00000FC0U); - psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U); - - return 1; -} - -static unsigned long psu_peripherals_pre_init_data(void) -{ - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012302U); - psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000001U); - - return 1; -} - -static unsigned long psu_peripherals_init_data(void) -{ - psu_mask_write(0xFD1A0100, 0x00008046U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U); - psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U); - psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF180390, 0x00000004U, 0x00000004U); - psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000040U, 0x00000000U); - psu_mask_write(0xFF180310, 0x00008000U, 0x00000000U); - psu_mask_write(0xFF180320, 0x33840000U, 0x02840000U); - psu_mask_write(0xFF18031C, 0x7FFE0000U, 0x64500000U); - psu_mask_write(0xFF180358, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF180324, 0x03C00000U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000600U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00008000U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00007800U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U); - psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U); - psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U); - psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U); - psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x05F5DD18U); - psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U); - - mask_delay(1); - psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000002U); - - mask_delay(5); - psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U); - - return 1; -} - -static unsigned long psu_serdes_init_data(void) -{ - psu_mask_write(0xFD410008, 0x0000001FU, 0x00000008U); - psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000FU); - psu_mask_write(0xFD402868, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD40286C, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD40A094, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40A368, 0x000000FFU, 0x00000038U); - psu_mask_write(0xFD40A36C, 0x00000007U, 0x00000003U); - psu_mask_write(0xFD40E368, 0x000000FFU, 0x000000E0U); - psu_mask_write(0xFD40E36C, 0x00000007U, 0x00000003U); - psu_mask_write(0xFD40A370, 0x000000FFU, 0x000000F4U); - psu_mask_write(0xFD40A374, 0x000000FFU, 0x00000031U); - psu_mask_write(0xFD40A378, 0x000000FFU, 0x00000002U); - psu_mask_write(0xFD40A37C, 0x00000033U, 0x00000030U); - psu_mask_write(0xFD40E370, 0x000000FFU, 0x000000C9U); - psu_mask_write(0xFD40E374, 0x000000FFU, 0x000000D2U); - psu_mask_write(0xFD40E378, 0x000000FFU, 0x00000001U); - psu_mask_write(0xFD40E37C, 0x000000B3U, 0x000000B0U); - psu_mask_write(0xFD40906C, 0x00000003U, 0x00000003U); - psu_mask_write(0xFD4080F4, 0x00000003U, 0x00000003U); - psu_mask_write(0xFD40E360, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40D06C, 0x0000000FU, 0x0000000FU); - psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x0000000BU); - psu_mask_write(0xFD4090CC, 0x00000020U, 0x00000020U); - psu_mask_write(0xFD401074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD405074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD409074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40D074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD401994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD405994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD40989C, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD4098F8, 0x000000FFU, 0x0000001AU); - psu_mask_write(0xFD4098FC, 0x000000FFU, 0x0000001AU); - psu_mask_write(0xFD409990, 0x000000FFU, 0x00000010U); - psu_mask_write(0xFD409924, 0x000000FFU, 0x000000FEU); - psu_mask_write(0xFD409928, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD409900, 0x000000FFU, 0x0000001AU); - psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD409980, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD409914, 0x000000FFU, 0x000000F7U); - psu_mask_write(0xFD409918, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD409940, 0x000000FFU, 0x000000F7U); - psu_mask_write(0xFD409944, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD409994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD40D89C, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD40D8F8, 0x000000FFU, 0x0000007DU); - psu_mask_write(0xFD40D8FC, 0x000000FFU, 0x0000007DU); - psu_mask_write(0xFD40D990, 0x000000FFU, 0x00000001U); - psu_mask_write(0xFD40D924, 0x000000FFU, 0x0000009CU); - psu_mask_write(0xFD40D928, 0x000000FFU, 0x00000039U); - psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40D900, 0x000000FFU, 0x0000007DU); - psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000064U); - psu_mask_write(0xFD40D980, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD40D914, 0x000000FFU, 0x000000F7U); - psu_mask_write(0xFD40D918, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD40D940, 0x000000FFU, 0x000000F7U); - psu_mask_write(0xFD40D944, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD40D994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD40107C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40507C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40907C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40D07C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD4019A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD401038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40102C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4059A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD405038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40502C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4099A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD409038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40902C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40D9A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD40D038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40D02C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4019AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD4059AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD4099AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD40D9AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD401978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD405978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD409978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40D978, 0x00000010U, 0x00000010U); - - serdes_illcalib(2, 3, 3, 0, 0, 0, 0, 0); - psu_mask_write(0xFD410014, 0x00000077U, 0x00000023U); - psu_mask_write(0xFD40C1D8, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD40DC14, 0x000000FFU, 0x000000E6U); - psu_mask_write(0xFD40DC40, 0x0000001FU, 0x0000000CU); - psu_mask_write(0xFD40D94C, 0x00000020U, 0x00000020U); - psu_mask_write(0xFD40D950, 0x00000007U, 0x00000006U); - psu_mask_write(0xFD40C048, 0x000000FFU, 0x00000001U); - - return 1; -} - -static unsigned long psu_resetout_init_data(void) -{ - psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U); - psu_mask_write(0xFF9D0080, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF9D007C, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF5E023C, 0x00000140U, 0x00000000U); - psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD3D0100, 0x00000003U, 0x00000003U); - psu_mask_write(0xFD1A0100, 0x00000002U, 0x00000000U); - psu_mask_write(0xFE20C200, 0x00023FFFU, 0x00022457U); - psu_mask_write(0xFE20C630, 0x003FFF00U, 0x00000000U); - psu_mask_write(0xFE20C11C, 0x00000600U, 0x00000600U); - psu_mask_write(0xFE20C12C, 0x00004000U, 0x00004000U); - psu_mask_write(0xFD480064, 0x00000200U, 0x00000200U); - mask_poll(0xFD40A3E4, 0x00000010U); - mask_poll(0xFD40E3E4, 0x00000010U); - psu_mask_write(0xFD0C00AC, 0xFFFFFFFFU, 0x28184018U); - psu_mask_write(0xFD0C00B0, 0xFFFFFFFFU, 0x0E081406U); - psu_mask_write(0xFD0C00B4, 0xFFFFFFFFU, 0x064A0813U); - psu_mask_write(0xFD0C00B8, 0xFFFFFFFFU, 0x3FFC96A4U); - - return 1; -} - -static unsigned long psu_resetin_init_data(void) -{ - psu_mask_write(0xFF5E023C, 0x00000540U, 0x00000540U); - psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A0100, 0x00000002U, 0x00000002U); - - return 1; -} - -static unsigned long psu_afi_config(void) -{ - psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U); - psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U); - psu_mask_write(0xFD615000, 0x00000300U, 0x00000200U); - psu_mask_write(0xFD360000, 0x00000003U, 0x00000002U); - psu_mask_write(0xFD370000, 0x00000003U, 0x00000002U); - psu_mask_write(0xFD360014, 0x00000003U, 0x00000002U); - psu_mask_write(0xFD370014, 0x00000003U, 0x00000002U); - - return 1; -} - -static unsigned long psu_ddr_phybringup_data(void) -{ - unsigned int regval = 0; - unsigned int pll_retry = 10; - unsigned int pll_locked = 0; - int cur_R006_tREFPRD; - - while ((pll_retry > 0) && (!pll_locked)) { - Xil_Out32(0xFD080004, 0x00040010); - Xil_Out32(0xFD080004, 0x00040011); - - while ((Xil_In32(0xFD080030) & 0x1) != 1) - ; - pll_locked = (Xil_In32(0xFD080030) & 0x80000000) - >> 31; - pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000) - >> 16; - pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000) >> 16; - pll_locked &= (Xil_In32(0xFD080BE0) & 0x10000) - >> 16; - pll_locked &= (Xil_In32(0xFD080DE0) & 0x10000) - >> 16; - pll_retry--; + if (lane_active == 0) { + psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD410038, 0x00000007U, 0x00000001U); + Xil_Out32(0xFD4010AC, 0x0020); + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) | 0x1)); } - Xil_Out32(0xFD0800C4, Xil_In32(0xFD0800C4) | (pll_retry << 16)); - if (!pll_locked) - return 0; - - Xil_Out32(0xFD080004U, 0x00040063U); - - while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) - ; - prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); - - while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) - ; - Xil_Out32(0xFD0701B0U, 0x00000001U); - Xil_Out32(0xFD070320U, 0x00000001U); - while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) - ; - prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); - Xil_Out32(0xFD080004, 0x0004FE01); - regval = Xil_In32(0xFD080030); - while (regval != 0x80000FFF) - regval = Xil_In32(0xFD080030); - regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); - if (regval != 0) - return 0; - - Xil_Out32(0xFD080200U, 0x100091C7U); - - cur_R006_tREFPRD = (Xil_In32(0xFD080018U) & 0x0003FFFFU) >> 0x00000000U; - prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD); - - prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000003U); - prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000003U); - prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000003U); - prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000003U); - prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000003U); - prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000003U); - - Xil_Out32(0xFD080004, 0x00060001); - regval = Xil_In32(0xFD080030); - while ((regval & 0x80004001) != 0x80004001) - regval = Xil_In32(0xFD080030); - - regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); - if (regval != 0) - return 0; - - prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000000U); - prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000000U); - prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000000U); - prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000000U); - prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000000U); - prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000000U); - - Xil_Out32(0xFD080200U, 0x800091C7U); - prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD); - - Xil_Out32(0xFD080004, 0x0000C001); - regval = Xil_In32(0xFD080030); - while ((regval & 0x80000C01) != 0x80000C01) - regval = Xil_In32(0xFD080030); + if (lane_active == 1) { + psu_mask_write(0xFD410044, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD410040, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD410038, 0x00000070U, 0x00000010U); + Xil_Out32(0xFD4050AC, 0x0020); + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) | 0x1)); + } + if (lane_active == 2) { + psu_mask_write(0xFD410044, 0x00000030U, 0x00000000U); + psu_mask_write(0xFD410040, 0x00000030U, 0x00000000U); + psu_mask_write(0xFD41003C, 0x00000007U, 0x00000001U); + Xil_Out32(0xFD4090AC, 0x0020); + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) | 0x1)); + } + if (lane_active == 3) { + psu_mask_write(0xFD410040, 0x000000C0U, 0x00000000U); + psu_mask_write(0xFD410044, 0x000000C0U, 0x00000000U); + psu_mask_write(0xFD41003C, 0x00000070U, 0x00000010U); + Xil_Out32(0xFD40D0AC, 0x0020); + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) | 0x1)); + } + mask_delay(100); + return 1; +} - Xil_Out32(0xFD070180U, 0x01000040U); - Xil_Out32(0xFD070060U, 0x00000000U); - prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U); +static int serdes_bist_result(u32 lane_active) +{ + u32 pkt_cnt_l0, pkt_cnt_h0, err_cnt_l0, err_cnt_h0; + if (lane_active == 0) { + pkt_cnt_l0 = Xil_In32(0xFD40304C); + pkt_cnt_h0 = Xil_In32(0xFD403050); + err_cnt_l0 = Xil_In32(0xFD403054); + err_cnt_h0 = Xil_In32(0xFD403058); + } + if (lane_active == 1) { + pkt_cnt_l0 = Xil_In32(0xFD40704C); + pkt_cnt_h0 = Xil_In32(0xFD407050); + err_cnt_l0 = Xil_In32(0xFD407054); + err_cnt_h0 = Xil_In32(0xFD407058); + } + if (lane_active == 2) { + pkt_cnt_l0 = Xil_In32(0xFD40B04C); + pkt_cnt_h0 = Xil_In32(0xFD40B050); + err_cnt_l0 = Xil_In32(0xFD40B054); + err_cnt_h0 = Xil_In32(0xFD40B058); + } + if (lane_active == 3) { + pkt_cnt_l0 = Xil_In32(0xFD40F04C); + pkt_cnt_h0 = Xil_In32(0xFD40F050); + err_cnt_l0 = Xil_In32(0xFD40F054); + err_cnt_h0 = Xil_In32(0xFD40F058); + } + if (lane_active == 0) + Xil_Out32(0xFD403004, 0x0); + if (lane_active == 1) + Xil_Out32(0xFD407004, 0x0); + if (lane_active == 2) + Xil_Out32(0xFD40B004, 0x0); + if (lane_active == 3) + Xil_Out32(0xFD40F004, 0x0); + if (err_cnt_l0 > 0 || err_cnt_h0 > 0 || + (pkt_cnt_l0 == 0 && pkt_cnt_h0 == 0)) + return 0; return 1; } -static int serdes_rst_seq(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate) +static int serdes_illcalib_pcie_gen1(u32 lane3_protocol, u32 lane3_rate, + u32 lane2_protocol, u32 lane2_rate, + u32 lane1_protocol, u32 lane1_rate, + u32 lane0_protocol, u32 lane0_rate, + u32 gen2_calib) { - Xil_Out32(0xFD410098, 0x00000000); - Xil_Out32(0xFD401010, 0x00000040); - Xil_Out32(0xFD405010, 0x00000040); - Xil_Out32(0xFD409010, 0x00000040); - Xil_Out32(0xFD40D010, 0x00000040); - Xil_Out32(0xFD402084, 0x00000080); - Xil_Out32(0xFD406084, 0x00000080); - Xil_Out32(0xFD40A084, 0x00000080); - Xil_Out32(0xFD40E084, 0x00000080); - Xil_Out32(0xFD410098, 0x00000004); - mask_delay(50); - if (lane0_rate == 1) - Xil_Out32(0xFD410098, 0x0000000E); - Xil_Out32(0xFD410098, 0x00000006); - if (lane0_rate == 1) { - Xil_Out32(0xFD40000C, 0x00000004); - Xil_Out32(0xFD40400C, 0x00000004); - Xil_Out32(0xFD40800C, 0x00000004); - Xil_Out32(0xFD40C00C, 0x00000004); - Xil_Out32(0xFD410098, 0x00000007); - mask_delay(400); - Xil_Out32(0xFD40000C, 0x0000000C); - Xil_Out32(0xFD40400C, 0x0000000C); - Xil_Out32(0xFD40800C, 0x0000000C); - Xil_Out32(0xFD40C00C, 0x0000000C); - mask_delay(15); - Xil_Out32(0xFD410098, 0x0000000F); - mask_delay(100); + u64 tempbistresult; + u32 currbistresult[4]; + u32 prevbistresult[4]; + u32 itercount = 0; + u32 ill12_val[4], ill1_val[4]; + u32 loop = 0; + u32 iterresult[8]; + u32 meancount[4]; + u32 bistpasscount[4]; + u32 meancountalt[4]; + u32 meancountalt_bistpasscount[4]; + u32 lane0_active; + u32 lane1_active; + u32 lane2_active; + u32 lane3_active; + + lane0_active = (lane0_protocol == 1); + lane1_active = (lane1_protocol == 1); + lane2_active = (lane2_protocol == 1); + lane3_active = (lane3_protocol == 1); + for (loop = 0; loop <= 3; loop++) { + iterresult[loop] = 0; + iterresult[loop + 4] = 0; + meancountalt[loop] = 0; + meancountalt_bistpasscount[loop] = 0; + meancount[loop] = 0; + prevbistresult[loop] = 0; + bistpasscount[loop] = 0; } - if (lane0_protocol != 0) - mask_poll(0xFD4023E4, 0x00000010U); - if (lane1_protocol != 0) - mask_poll(0xFD4063E4, 0x00000010U); - if (lane2_protocol != 0) - mask_poll(0xFD40A3E4, 0x00000010U); - if (lane3_protocol != 0) - mask_poll(0xFD40E3E4, 0x00000010U); - mask_delay(50); - Xil_Out32(0xFD401010, 0x000000C0); - Xil_Out32(0xFD405010, 0x000000C0); - Xil_Out32(0xFD409010, 0x000000C0); - Xil_Out32(0xFD40D010, 0x000000C0); - Xil_Out32(0xFD401010, 0x00000080); - Xil_Out32(0xFD405010, 0x00000080); - Xil_Out32(0xFD409010, 0x00000080); - Xil_Out32(0xFD40D010, 0x00000080); + itercount = 0; + if (lane0_active) + serdes_bist_static_settings(0); + if (lane1_active) + serdes_bist_static_settings(1); + if (lane2_active) + serdes_bist_static_settings(2); + if (lane3_active) + serdes_bist_static_settings(3); + do { + if (gen2_calib != 1) { + if (lane0_active == 1) + ill1_val[0] = ((0x04 + itercount * 8) % 0x100); + if (lane0_active == 1) + ill12_val[0] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane1_active == 1) + ill1_val[1] = ((0x04 + itercount * 8) % 0x100); + if (lane1_active == 1) + ill12_val[1] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane2_active == 1) + ill1_val[2] = ((0x04 + itercount * 8) % 0x100); + if (lane2_active == 1) + ill12_val[2] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane3_active == 1) + ill1_val[3] = ((0x04 + itercount * 8) % 0x100); + if (lane3_active == 1) + ill12_val[3] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + + if (lane0_active == 1) + Xil_Out32(0xFD401924, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x000000F0U, + ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405924, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x000000F0U, + ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409924, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x000000F0U, + ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D924, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x000000F0U, + ill12_val[3]); + } + if (gen2_calib == 1) { + if (lane0_active == 1) + ill1_val[0] = ((0x104 + itercount * 8) % 0x100); + if (lane0_active == 1) + ill12_val[0] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane1_active == 1) + ill1_val[1] = ((0x104 + itercount * 8) % 0x100); + if (lane1_active == 1) + ill12_val[1] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane2_active == 1) + ill1_val[2] = ((0x104 + itercount * 8) % 0x100); + if (lane2_active == 1) + ill12_val[2] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane3_active == 1) + ill1_val[3] = ((0x104 + itercount * 8) % 0x100); + if (lane3_active == 1) + ill12_val[3] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + + if (lane0_active == 1) + Xil_Out32(0xFD401928, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x0000000FU, + ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405928, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x0000000FU, + ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409928, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x0000000FU, + ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D928, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x0000000FU, + ill12_val[3]); + } + + if (lane0_active == 1) + psu_mask_write(0xFD401018, 0x00000030U, 0x00000010U); + if (lane1_active == 1) + psu_mask_write(0xFD405018, 0x00000030U, 0x00000010U); + if (lane2_active == 1) + psu_mask_write(0xFD409018, 0x00000030U, 0x00000010U); + if (lane3_active == 1) + psu_mask_write(0xFD40D018, 0x00000030U, 0x00000010U); + if (lane0_active == 1) + currbistresult[0] = 0; + if (lane1_active == 1) + currbistresult[1] = 0; + if (lane2_active == 1) + currbistresult[2] = 0; + if (lane3_active == 1) + currbistresult[3] = 0; + serdes_rst_seq(lane3_protocol, lane3_rate, lane2_protocol, + lane2_rate, lane1_protocol, lane1_rate, + lane0_protocol, lane0_rate); + if (lane3_active == 1) + serdes_bist_run(3); + if (lane2_active == 1) + serdes_bist_run(2); + if (lane1_active == 1) + serdes_bist_run(1); + if (lane0_active == 1) + serdes_bist_run(0); + tempbistresult = 0; + if (lane3_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(3); + tempbistresult = tempbistresult << 1; + if (lane2_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(2); + tempbistresult = tempbistresult << 1; + if (lane1_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(1); + tempbistresult = tempbistresult << 1; + if (lane0_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(0); + Xil_Out32(0xFD410098, 0x0); + Xil_Out32(0xFD410098, 0x2); - Xil_Out32(0xFD402084, 0x000000C0); - Xil_Out32(0xFD406084, 0x000000C0); - Xil_Out32(0xFD40A084, 0x000000C0); - Xil_Out32(0xFD40E084, 0x000000C0); - mask_delay(50); - Xil_Out32(0xFD402084, 0x00000080); - Xil_Out32(0xFD406084, 0x00000080); - Xil_Out32(0xFD40A084, 0x00000080); - Xil_Out32(0xFD40E084, 0x00000080); - mask_delay(50); - Xil_Out32(0xFD401010, 0x00000000); - Xil_Out32(0xFD405010, 0x00000000); - Xil_Out32(0xFD409010, 0x00000000); - Xil_Out32(0xFD40D010, 0x00000000); - Xil_Out32(0xFD402084, 0x00000000); - Xil_Out32(0xFD406084, 0x00000000); - Xil_Out32(0xFD40A084, 0x00000000); - Xil_Out32(0xFD40E084, 0x00000000); - mask_delay(500); - return 1; -} + if (itercount < 32) { + iterresult[0] = + ((iterresult[0] << 1) | + ((tempbistresult & 0x1) == 0x1)); + iterresult[1] = + ((iterresult[1] << 1) | + ((tempbistresult & 0x2) == 0x2)); + iterresult[2] = + ((iterresult[2] << 1) | + ((tempbistresult & 0x4) == 0x4)); + iterresult[3] = + ((iterresult[3] << 1) | + ((tempbistresult & 0x8) == 0x8)); + } else { + iterresult[4] = + ((iterresult[4] << 1) | + ((tempbistresult & 0x1) == 0x1)); + iterresult[5] = + ((iterresult[5] << 1) | + ((tempbistresult & 0x2) == 0x2)); + iterresult[6] = + ((iterresult[6] << 1) | + ((tempbistresult & 0x4) == 0x4)); + iterresult[7] = + ((iterresult[7] << 1) | + ((tempbistresult & 0x8) == 0x8)); + } + currbistresult[0] = + currbistresult[0] | ((tempbistresult & 0x1) == 1); + currbistresult[1] = + currbistresult[1] | ((tempbistresult & 0x2) == 0x2); + currbistresult[2] = + currbistresult[2] | ((tempbistresult & 0x4) == 0x4); + currbistresult[3] = + currbistresult[3] | ((tempbistresult & 0x8) == 0x8); -static int serdes_bist_static_settings(u32 lane_active) -{ - if (lane_active == 0) { - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); - Xil_Out32(0xFD403068, 0x1); - Xil_Out32(0xFD40306C, 0x1); - Xil_Out32(0xFD4010AC, 0x0020); - Xil_Out32(0xFD403008, 0x0); - Xil_Out32(0xFD40300C, 0xF4); - Xil_Out32(0xFD403010, 0x0); - Xil_Out32(0xFD403014, 0x0); - Xil_Out32(0xFD403018, 0x00); - Xil_Out32(0xFD40301C, 0xFB); - Xil_Out32(0xFD403020, 0xFF); - Xil_Out32(0xFD403024, 0x0); - Xil_Out32(0xFD403028, 0x00); - Xil_Out32(0xFD40302C, 0x00); - Xil_Out32(0xFD403030, 0x4A); - Xil_Out32(0xFD403034, 0x4A); - Xil_Out32(0xFD403038, 0x4A); - Xil_Out32(0xFD40303C, 0x4A); - Xil_Out32(0xFD403040, 0x0); - Xil_Out32(0xFD403044, 0x14); - Xil_Out32(0xFD403048, 0x02); - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); - } - if (lane_active == 1) { - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); - Xil_Out32(0xFD407068, 0x1); - Xil_Out32(0xFD40706C, 0x1); - Xil_Out32(0xFD4050AC, 0x0020); - Xil_Out32(0xFD407008, 0x0); - Xil_Out32(0xFD40700C, 0xF4); - Xil_Out32(0xFD407010, 0x0); - Xil_Out32(0xFD407014, 0x0); - Xil_Out32(0xFD407018, 0x00); - Xil_Out32(0xFD40701C, 0xFB); - Xil_Out32(0xFD407020, 0xFF); - Xil_Out32(0xFD407024, 0x0); - Xil_Out32(0xFD407028, 0x00); - Xil_Out32(0xFD40702C, 0x00); - Xil_Out32(0xFD407030, 0x4A); - Xil_Out32(0xFD407034, 0x4A); - Xil_Out32(0xFD407038, 0x4A); - Xil_Out32(0xFD40703C, 0x4A); - Xil_Out32(0xFD407040, 0x0); - Xil_Out32(0xFD407044, 0x14); - Xil_Out32(0xFD407048, 0x02); - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); - } + for (loop = 0; loop <= 3; loop++) { + if (currbistresult[loop] == 1 && prevbistresult[loop] == 1) + bistpasscount[loop] = bistpasscount[loop] + 1; + if (bistpasscount[loop] < 4 && + currbistresult[loop] == 0 && itercount > 2) { + if (meancountalt_bistpasscount[loop] < + bistpasscount[loop]) { + meancountalt_bistpasscount[loop] = + bistpasscount[loop]; + meancountalt[loop] = + ((itercount - 1) - + ((bistpasscount[loop] + 1) / 2)); + } + bistpasscount[loop] = 0; + } + if (meancount[loop] == 0 && bistpasscount[loop] >= 4 && + (currbistresult[loop] == 0 || itercount == 63) && + prevbistresult[loop] == 1) + meancount[loop] = + (itercount - 1) - + ((bistpasscount[loop] + 1) / 2); + prevbistresult[loop] = currbistresult[loop]; + } + } while (++itercount < 64); - if (lane_active == 2) { - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); - Xil_Out32(0xFD40B068, 0x1); - Xil_Out32(0xFD40B06C, 0x1); - Xil_Out32(0xFD4090AC, 0x0020); - Xil_Out32(0xFD40B008, 0x0); - Xil_Out32(0xFD40B00C, 0xF4); - Xil_Out32(0xFD40B010, 0x0); - Xil_Out32(0xFD40B014, 0x0); - Xil_Out32(0xFD40B018, 0x00); - Xil_Out32(0xFD40B01C, 0xFB); - Xil_Out32(0xFD40B020, 0xFF); - Xil_Out32(0xFD40B024, 0x0); - Xil_Out32(0xFD40B028, 0x00); - Xil_Out32(0xFD40B02C, 0x00); - Xil_Out32(0xFD40B030, 0x4A); - Xil_Out32(0xFD40B034, 0x4A); - Xil_Out32(0xFD40B038, 0x4A); - Xil_Out32(0xFD40B03C, 0x4A); - Xil_Out32(0xFD40B040, 0x0); - Xil_Out32(0xFD40B044, 0x14); - Xil_Out32(0xFD40B048, 0x02); - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); - } + for (loop = 0; loop <= 3; loop++) { + if (lane0_active == 0 && loop == 0) + continue; + if (lane1_active == 0 && loop == 1) + continue; + if (lane2_active == 0 && loop == 2) + continue; + if (lane3_active == 0 && loop == 3) + continue; - if (lane_active == 3) { - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); - Xil_Out32(0xFD40F068, 0x1); - Xil_Out32(0xFD40F06C, 0x1); - Xil_Out32(0xFD40D0AC, 0x0020); - Xil_Out32(0xFD40F008, 0x0); - Xil_Out32(0xFD40F00C, 0xF4); - Xil_Out32(0xFD40F010, 0x0); - Xil_Out32(0xFD40F014, 0x0); - Xil_Out32(0xFD40F018, 0x00); - Xil_Out32(0xFD40F01C, 0xFB); - Xil_Out32(0xFD40F020, 0xFF); - Xil_Out32(0xFD40F024, 0x0); - Xil_Out32(0xFD40F028, 0x00); - Xil_Out32(0xFD40F02C, 0x00); - Xil_Out32(0xFD40F030, 0x4A); - Xil_Out32(0xFD40F034, 0x4A); - Xil_Out32(0xFD40F038, 0x4A); - Xil_Out32(0xFD40F03C, 0x4A); - Xil_Out32(0xFD40F040, 0x0); - Xil_Out32(0xFD40F044, 0x14); - Xil_Out32(0xFD40F048, 0x02); - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); - } - return 1; -} + if (meancount[loop] == 0) + meancount[loop] = meancountalt[loop]; -static int serdes_bist_run(u32 lane_active) -{ - if (lane_active == 0) { - psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD410038, 0x00000007U, 0x00000001U); - Xil_Out32(0xFD4010AC, 0x0020); - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) | 0x1)); - } - if (lane_active == 1) { - psu_mask_write(0xFD410044, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD410040, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD410038, 0x00000070U, 0x00000010U); - Xil_Out32(0xFD4050AC, 0x0020); - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) | 0x1)); - } - if (lane_active == 2) { - psu_mask_write(0xFD410044, 0x00000030U, 0x00000000U); - psu_mask_write(0xFD410040, 0x00000030U, 0x00000000U); - psu_mask_write(0xFD41003C, 0x00000007U, 0x00000001U); - Xil_Out32(0xFD4090AC, 0x0020); - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) | 0x1)); + if (gen2_calib != 1) { + ill1_val[loop] = ((0x04 + meancount[loop] * 8) % 0x100); + ill12_val[loop] = + ((0x04 + meancount[loop] * 8) >= + 0x100) ? 0x10 : 0x00; + Xil_Out32(0xFFFE0000 + loop * 4, iterresult[loop]); + Xil_Out32(0xFFFE0010 + loop * 4, iterresult[loop + 4]); + Xil_Out32(0xFFFE0020 + loop * 4, bistpasscount[loop]); + Xil_Out32(0xFFFE0030 + loop * 4, meancount[loop]); + } + if (gen2_calib == 1) { + ill1_val[loop] = + ((0x104 + meancount[loop] * 8) % 0x100); + ill12_val[loop] = + ((0x104 + meancount[loop] * 8) >= + 0x200) ? 0x02 : 0x01; + Xil_Out32(0xFFFE0040 + loop * 4, iterresult[loop]); + Xil_Out32(0xFFFE0050 + loop * 4, iterresult[loop + 4]); + Xil_Out32(0xFFFE0060 + loop * 4, bistpasscount[loop]); + Xil_Out32(0xFFFE0070 + loop * 4, meancount[loop]); + } } - if (lane_active == 3) { - psu_mask_write(0xFD410040, 0x000000C0U, 0x00000000U); - psu_mask_write(0xFD410044, 0x000000C0U, 0x00000000U); - psu_mask_write(0xFD41003C, 0x00000070U, 0x00000010U); - Xil_Out32(0xFD40D0AC, 0x0020); - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) | 0x1)); + if (gen2_calib != 1) { + if (lane0_active == 1) + Xil_Out32(0xFD401924, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x000000F0U, ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405924, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x000000F0U, ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409924, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x000000F0U, ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D924, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x000000F0U, ill12_val[3]); + } + if (gen2_calib == 1) { + if (lane0_active == 1) + Xil_Out32(0xFD401928, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x0000000FU, ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405928, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x0000000FU, ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409928, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x0000000FU, ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D928, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x0000000FU, ill12_val[3]); } - mask_delay(100); - return 1; -} -static int serdes_bist_result(u32 lane_active) -{ - u32 pkt_cnt_l0, pkt_cnt_h0, err_cnt_l0, err_cnt_h0; + if (lane0_active == 1) + psu_mask_write(0xFD401018, 0x00000030U, 0x00000000U); + if (lane1_active == 1) + psu_mask_write(0xFD405018, 0x00000030U, 0x00000000U); + if (lane2_active == 1) + psu_mask_write(0xFD409018, 0x00000030U, 0x00000000U); + if (lane3_active == 1) + psu_mask_write(0xFD40D018, 0x00000030U, 0x00000000U); - if (lane_active == 0) { - pkt_cnt_l0 = Xil_In32(0xFD40304C); - pkt_cnt_h0 = Xil_In32(0xFD403050); - err_cnt_l0 = Xil_In32(0xFD403054); - err_cnt_h0 = Xil_In32(0xFD403058); - } - if (lane_active == 1) { - pkt_cnt_l0 = Xil_In32(0xFD40704C); - pkt_cnt_h0 = Xil_In32(0xFD407050); - err_cnt_l0 = Xil_In32(0xFD407054); - err_cnt_h0 = Xil_In32(0xFD407058); - } - if (lane_active == 2) { - pkt_cnt_l0 = Xil_In32(0xFD40B04C); - pkt_cnt_h0 = Xil_In32(0xFD40B050); - err_cnt_l0 = Xil_In32(0xFD40B054); - err_cnt_h0 = Xil_In32(0xFD40B058); + Xil_Out32(0xFD410098, 0); + if (lane0_active == 1) { + Xil_Out32(0xFD403004, 0); + Xil_Out32(0xFD403008, 0); + Xil_Out32(0xFD40300C, 0); + Xil_Out32(0xFD403010, 0); + Xil_Out32(0xFD403014, 0); + Xil_Out32(0xFD403018, 0); + Xil_Out32(0xFD40301C, 0); + Xil_Out32(0xFD403020, 0); + Xil_Out32(0xFD403024, 0); + Xil_Out32(0xFD403028, 0); + Xil_Out32(0xFD40302C, 0); + Xil_Out32(0xFD403030, 0); + Xil_Out32(0xFD403034, 0); + Xil_Out32(0xFD403038, 0); + Xil_Out32(0xFD40303C, 0); + Xil_Out32(0xFD403040, 0); + Xil_Out32(0xFD403044, 0); + Xil_Out32(0xFD403048, 0); + Xil_Out32(0xFD40304C, 0); + Xil_Out32(0xFD403050, 0); + Xil_Out32(0xFD403054, 0); + Xil_Out32(0xFD403058, 0); + Xil_Out32(0xFD403068, 1); + Xil_Out32(0xFD40306C, 0); + Xil_Out32(0xFD4010AC, 0); + psu_mask_write(0xFD410044, 0x00000003U, 0x00000001U); + psu_mask_write(0xFD410040, 0x00000003U, 0x00000001U); + psu_mask_write(0xFD410038, 0x00000007U, 0x00000000U); } - if (lane_active == 3) { - pkt_cnt_l0 = Xil_In32(0xFD40F04C); - pkt_cnt_h0 = Xil_In32(0xFD40F050); - err_cnt_l0 = Xil_In32(0xFD40F054); - err_cnt_h0 = Xil_In32(0xFD40F058); + if (lane1_active == 1) { + Xil_Out32(0xFD407004, 0); + Xil_Out32(0xFD407008, 0); + Xil_Out32(0xFD40700C, 0); + Xil_Out32(0xFD407010, 0); + Xil_Out32(0xFD407014, 0); + Xil_Out32(0xFD407018, 0); + Xil_Out32(0xFD40701C, 0); + Xil_Out32(0xFD407020, 0); + Xil_Out32(0xFD407024, 0); + Xil_Out32(0xFD407028, 0); + Xil_Out32(0xFD40702C, 0); + Xil_Out32(0xFD407030, 0); + Xil_Out32(0xFD407034, 0); + Xil_Out32(0xFD407038, 0); + Xil_Out32(0xFD40703C, 0); + Xil_Out32(0xFD407040, 0); + Xil_Out32(0xFD407044, 0); + Xil_Out32(0xFD407048, 0); + Xil_Out32(0xFD40704C, 0); + Xil_Out32(0xFD407050, 0); + Xil_Out32(0xFD407054, 0); + Xil_Out32(0xFD407058, 0); + Xil_Out32(0xFD407068, 1); + Xil_Out32(0xFD40706C, 0); + Xil_Out32(0xFD4050AC, 0); + psu_mask_write(0xFD410044, 0x0000000CU, 0x00000004U); + psu_mask_write(0xFD410040, 0x0000000CU, 0x00000004U); + psu_mask_write(0xFD410038, 0x00000070U, 0x00000000U); } - if (lane_active == 0) - Xil_Out32(0xFD403004, 0x0); - if (lane_active == 1) - Xil_Out32(0xFD407004, 0x0); - if (lane_active == 2) - Xil_Out32(0xFD40B004, 0x0); - if (lane_active == 3) - Xil_Out32(0xFD40F004, 0x0); - if (err_cnt_l0 > 0 || err_cnt_h0 > 0 || - (pkt_cnt_l0 == 0 && pkt_cnt_h0 == 0)) - return 0; - return 1; -} - -static int serdes_illcalib_pcie_gen1(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate, - u32 gen2_calib) -{ - u64 tempbistresult; - u32 currbistresult[4]; - u32 prevbistresult[4]; - u32 itercount = 0; - u32 ill12_val[4], ill1_val[4]; - u32 loop = 0; - u32 iterresult[8]; - u32 meancount[4]; - u32 bistpasscount[4]; - u32 meancountalt[4]; - u32 meancountalt_bistpasscount[4]; - u32 lane0_active; - u32 lane1_active; - u32 lane2_active; - u32 lane3_active; - - lane0_active = (lane0_protocol == 1); - lane1_active = (lane1_protocol == 1); - lane2_active = (lane2_protocol == 1); - lane3_active = (lane3_protocol == 1); - for (loop = 0; loop <= 3; loop++) { - iterresult[loop] = 0; - iterresult[loop + 4] = 0; - meancountalt[loop] = 0; - meancountalt_bistpasscount[loop] = 0; - meancount[loop] = 0; - prevbistresult[loop] = 0; - bistpasscount[loop] = 0; + if (lane2_active == 1) { + Xil_Out32(0xFD40B004, 0); + Xil_Out32(0xFD40B008, 0); + Xil_Out32(0xFD40B00C, 0); + Xil_Out32(0xFD40B010, 0); + Xil_Out32(0xFD40B014, 0); + Xil_Out32(0xFD40B018, 0); + Xil_Out32(0xFD40B01C, 0); + Xil_Out32(0xFD40B020, 0); + Xil_Out32(0xFD40B024, 0); + Xil_Out32(0xFD40B028, 0); + Xil_Out32(0xFD40B02C, 0); + Xil_Out32(0xFD40B030, 0); + Xil_Out32(0xFD40B034, 0); + Xil_Out32(0xFD40B038, 0); + Xil_Out32(0xFD40B03C, 0); + Xil_Out32(0xFD40B040, 0); + Xil_Out32(0xFD40B044, 0); + Xil_Out32(0xFD40B048, 0); + Xil_Out32(0xFD40B04C, 0); + Xil_Out32(0xFD40B050, 0); + Xil_Out32(0xFD40B054, 0); + Xil_Out32(0xFD40B058, 0); + Xil_Out32(0xFD40B068, 1); + Xil_Out32(0xFD40B06C, 0); + Xil_Out32(0xFD4090AC, 0); + psu_mask_write(0xFD410044, 0x00000030U, 0x00000010U); + psu_mask_write(0xFD410040, 0x00000030U, 0x00000010U); + psu_mask_write(0xFD41003C, 0x00000007U, 0x00000000U); } - itercount = 0; - if (lane0_active) - serdes_bist_static_settings(0); - if (lane1_active) - serdes_bist_static_settings(1); - if (lane2_active) - serdes_bist_static_settings(2); - if (lane3_active) - serdes_bist_static_settings(3); - do { - if (gen2_calib != 1) { - if (lane0_active == 1) - ill1_val[0] = ((0x04 + itercount * 8) % 0x100); - if (lane0_active == 1) - ill12_val[0] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane1_active == 1) - ill1_val[1] = ((0x04 + itercount * 8) % 0x100); - if (lane1_active == 1) - ill12_val[1] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane2_active == 1) - ill1_val[2] = ((0x04 + itercount * 8) % 0x100); - if (lane2_active == 1) - ill12_val[2] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane3_active == 1) - ill1_val[3] = ((0x04 + itercount * 8) % 0x100); - if (lane3_active == 1) - ill12_val[3] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; + if (lane3_active == 1) { + Xil_Out32(0xFD40F004, 0); + Xil_Out32(0xFD40F008, 0); + Xil_Out32(0xFD40F00C, 0); + Xil_Out32(0xFD40F010, 0); + Xil_Out32(0xFD40F014, 0); + Xil_Out32(0xFD40F018, 0); + Xil_Out32(0xFD40F01C, 0); + Xil_Out32(0xFD40F020, 0); + Xil_Out32(0xFD40F024, 0); + Xil_Out32(0xFD40F028, 0); + Xil_Out32(0xFD40F02C, 0); + Xil_Out32(0xFD40F030, 0); + Xil_Out32(0xFD40F034, 0); + Xil_Out32(0xFD40F038, 0); + Xil_Out32(0xFD40F03C, 0); + Xil_Out32(0xFD40F040, 0); + Xil_Out32(0xFD40F044, 0); + Xil_Out32(0xFD40F048, 0); + Xil_Out32(0xFD40F04C, 0); + Xil_Out32(0xFD40F050, 0); + Xil_Out32(0xFD40F054, 0); + Xil_Out32(0xFD40F058, 0); + Xil_Out32(0xFD40F068, 1); + Xil_Out32(0xFD40F06C, 0); + Xil_Out32(0xFD40D0AC, 0); + psu_mask_write(0xFD410044, 0x000000C0U, 0x00000040U); + psu_mask_write(0xFD410040, 0x000000C0U, 0x00000040U); + psu_mask_write(0xFD41003C, 0x00000070U, 0x00000000U); + } + return 1; +} - if (lane0_active == 1) - Xil_Out32(0xFD401924, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x000000F0U, - ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405924, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x000000F0U, - ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409924, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x000000F0U, - ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D924, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x000000F0U, - ill12_val[3]); - } - if (gen2_calib == 1) { - if (lane0_active == 1) - ill1_val[0] = ((0x104 + itercount * 8) % 0x100); - if (lane0_active == 1) - ill12_val[0] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane1_active == 1) - ill1_val[1] = ((0x104 + itercount * 8) % 0x100); - if (lane1_active == 1) - ill12_val[1] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane2_active == 1) - ill1_val[2] = ((0x104 + itercount * 8) % 0x100); - if (lane2_active == 1) - ill12_val[2] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane3_active == 1) - ill1_val[3] = ((0x104 + itercount * 8) % 0x100); - if (lane3_active == 1) - ill12_val[3] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; +static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, + u32 lane2_protocol, u32 lane2_rate, + u32 lane1_protocol, u32 lane1_rate, + u32 lane0_protocol, u32 lane0_rate) +{ + unsigned int rdata = 0; + unsigned int sata_gen2 = 1; + unsigned int temp_ill12 = 0; + unsigned int temp_PLL_REF_SEL_OFFSET; + unsigned int temp_TM_IQ_ILL1; + unsigned int temp_TM_E_ILL1; + unsigned int temp_tx_dig_tm_61; + unsigned int temp_tm_dig_6; + unsigned int temp_pll_fbdiv_frac_3_msb_offset; - if (lane0_active == 1) - Xil_Out32(0xFD401928, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x0000000FU, - ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405928, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x0000000FU, - ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409928, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x0000000FU, - ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D928, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x0000000FU, - ill12_val[3]); - } + if (lane0_protocol == 2 || lane0_protocol == 1) { + Xil_Out32(0xFD401910, 0xF3); + Xil_Out32(0xFD40193C, 0xF3); + Xil_Out32(0xFD401914, 0xF3); + Xil_Out32(0xFD401940, 0xF3); + } + if (lane1_protocol == 2 || lane1_protocol == 1) { + Xil_Out32(0xFD405910, 0xF3); + Xil_Out32(0xFD40593C, 0xF3); + Xil_Out32(0xFD405914, 0xF3); + Xil_Out32(0xFD405940, 0xF3); + } + if (lane2_protocol == 2 || lane2_protocol == 1) { + Xil_Out32(0xFD409910, 0xF3); + Xil_Out32(0xFD40993C, 0xF3); + Xil_Out32(0xFD409914, 0xF3); + Xil_Out32(0xFD409940, 0xF3); + } + if (lane3_protocol == 2 || lane3_protocol == 1) { + Xil_Out32(0xFD40D910, 0xF3); + Xil_Out32(0xFD40D93C, 0xF3); + Xil_Out32(0xFD40D914, 0xF3); + Xil_Out32(0xFD40D940, 0xF3); + } - if (lane0_active == 1) - psu_mask_write(0xFD401018, 0x00000030U, 0x00000010U); - if (lane1_active == 1) - psu_mask_write(0xFD405018, 0x00000030U, 0x00000010U); - if (lane2_active == 1) - psu_mask_write(0xFD409018, 0x00000030U, 0x00000010U); - if (lane3_active == 1) - psu_mask_write(0xFD40D018, 0x00000030U, 0x00000010U); - if (lane0_active == 1) - currbistresult[0] = 0; - if (lane1_active == 1) - currbistresult[1] = 0; - if (lane2_active == 1) - currbistresult[2] = 0; - if (lane3_active == 1) - currbistresult[3] = 0; - serdes_rst_seq(lane3_protocol, lane3_rate, lane2_protocol, - lane2_rate, lane1_protocol, lane1_rate, - lane0_protocol, lane0_rate); - if (lane3_active == 1) - serdes_bist_run(3); - if (lane2_active == 1) - serdes_bist_run(2); - if (lane1_active == 1) - serdes_bist_run(1); - if (lane0_active == 1) - serdes_bist_run(0); - tempbistresult = 0; - if (lane3_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(3); - tempbistresult = tempbistresult << 1; - if (lane2_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(2); - tempbistresult = tempbistresult << 1; - if (lane1_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(1); - tempbistresult = tempbistresult << 1; - if (lane0_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(0); - Xil_Out32(0xFD410098, 0x0); - Xil_Out32(0xFD410098, 0x2); + if (sata_gen2 == 1) { + if (lane0_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD402360); + Xil_Out32(0xFD402360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410000); + psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4018F8); + temp_TM_E_ILL1 = Xil_In32(0xFD401924); + Xil_Out32(0xFD4018F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4000F4); + temp_tm_dig_6 = Xil_In32(0xFD40106C); + psu_mask_write(0xFD4000F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40106C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD401990) & 0xF0; - if (itercount < 32) { - iterresult[0] = - ((iterresult[0] << 1) | - ((tempbistresult & 0x1) == 0x1)); - iterresult[1] = - ((iterresult[1] << 1) | - ((tempbistresult & 0x2) == 0x2)); - iterresult[2] = - ((iterresult[2] << 1) | - ((tempbistresult & 0x4) == 0x4)); - iterresult[3] = - ((iterresult[3] << 1) | - ((tempbistresult & 0x8) == 0x8)); - } else { - iterresult[4] = - ((iterresult[4] << 1) | - ((tempbistresult & 0x1) == 0x1)); - iterresult[5] = - ((iterresult[5] << 1) | - ((tempbistresult & 0x2) == 0x2)); - iterresult[6] = - ((iterresult[6] << 1) | - ((tempbistresult & 0x4) == 0x4)); - iterresult[7] = - ((iterresult[7] << 1) | - ((tempbistresult & 0x8) == 0x8)); - } - currbistresult[0] = - currbistresult[0] | ((tempbistresult & 0x1) == 1); - currbistresult[1] = - currbistresult[1] | ((tempbistresult & 0x2) == 0x2); - currbistresult[2] = - currbistresult[2] | ((tempbistresult & 0x4) == 0x4); - currbistresult[3] = - currbistresult[3] | ((tempbistresult & 0x8) == 0x8); + serdes_illcalib_pcie_gen1(0, 0, 0, 0, 0, 0, 1, 0, 0); - for (loop = 0; loop <= 3; loop++) { - if (currbistresult[loop] == 1 && prevbistresult[loop] == 1) - bistpasscount[loop] = bistpasscount[loop] + 1; - if (bistpasscount[loop] < 4 && - currbistresult[loop] == 0 && itercount > 2) { - if (meancountalt_bistpasscount[loop] < - bistpasscount[loop]) { - meancountalt_bistpasscount[loop] = - bistpasscount[loop]; - meancountalt[loop] = - ((itercount - 1) - - ((bistpasscount[loop] + 1) / 2)); - } - bistpasscount[loop] = 0; - } - if (meancount[loop] == 0 && bistpasscount[loop] >= 4 && - (currbistresult[loop] == 0 || itercount == 63) && - prevbistresult[loop] == 1) - meancount[loop] = - (itercount - 1) - - ((bistpasscount[loop] + 1) / 2); - prevbistresult[loop] = currbistresult[loop]; + Xil_Out32(0xFD402360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4018F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4000F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40106C, temp_tm_dig_6); + Xil_Out32(0xFD401928, Xil_In32(0xFD401924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD401990) >> 4 & 0xF); + Xil_Out32(0xFD401990, temp_ill12); + Xil_Out32(0xFD401924, temp_TM_E_ILL1); } - } while (++itercount < 64); + if (lane1_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD406360); + Xil_Out32(0xFD406360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410004); + psu_mask_write(0xFD410004, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4058F8); + temp_TM_E_ILL1 = Xil_In32(0xFD405924); + Xil_Out32(0xFD4058F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4040F4); + temp_tm_dig_6 = Xil_In32(0xFD40506C); + psu_mask_write(0xFD4040F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40506C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD405990) & 0xF0; - for (loop = 0; loop <= 3; loop++) { - if (lane0_active == 0 && loop == 0) - continue; - if (lane1_active == 0 && loop == 1) - continue; - if (lane2_active == 0 && loop == 2) - continue; - if (lane3_active == 0 && loop == 3) - continue; + serdes_illcalib_pcie_gen1(0, 0, 0, 0, 1, 0, 0, 0, 0); - if (meancount[loop] == 0) - meancount[loop] = meancountalt[loop]; + Xil_Out32(0xFD406360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4058F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4040F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40506C, temp_tm_dig_6); + Xil_Out32(0xFD405928, Xil_In32(0xFD405924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD405990) >> 4 & 0xF); + Xil_Out32(0xFD405990, temp_ill12); + Xil_Out32(0xFD405924, temp_TM_E_ILL1); + } + if (lane2_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40A360); + Xil_Out32(0xFD40A360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410008); + psu_mask_write(0xFD410008, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4098F8); + temp_TM_E_ILL1 = Xil_In32(0xFD409924); + Xil_Out32(0xFD4098F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4080F4); + temp_tm_dig_6 = Xil_In32(0xFD40906C); + psu_mask_write(0xFD4080F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40906C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD409990) & 0xF0; - if (gen2_calib != 1) { - ill1_val[loop] = ((0x04 + meancount[loop] * 8) % 0x100); - ill12_val[loop] = - ((0x04 + meancount[loop] * 8) >= - 0x100) ? 0x10 : 0x00; - Xil_Out32(0xFFFE0000 + loop * 4, iterresult[loop]); - Xil_Out32(0xFFFE0010 + loop * 4, iterresult[loop + 4]); - Xil_Out32(0xFFFE0020 + loop * 4, bistpasscount[loop]); - Xil_Out32(0xFFFE0030 + loop * 4, meancount[loop]); + serdes_illcalib_pcie_gen1(0, 0, 1, 0, 0, 0, 0, 0, 0); + + Xil_Out32(0xFD40A360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4098F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4080F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40906C, temp_tm_dig_6); + Xil_Out32(0xFD409928, Xil_In32(0xFD409924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD409990) >> 4 & 0xF); + Xil_Out32(0xFD409990, temp_ill12); + Xil_Out32(0xFD409924, temp_TM_E_ILL1); } - if (gen2_calib == 1) { - ill1_val[loop] = - ((0x104 + meancount[loop] * 8) % 0x100); - ill12_val[loop] = - ((0x104 + meancount[loop] * 8) >= - 0x200) ? 0x02 : 0x01; - Xil_Out32(0xFFFE0040 + loop * 4, iterresult[loop]); - Xil_Out32(0xFFFE0050 + loop * 4, iterresult[loop + 4]); - Xil_Out32(0xFFFE0060 + loop * 4, bistpasscount[loop]); - Xil_Out32(0xFFFE0070 + loop * 4, meancount[loop]); + if (lane3_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40E360); + Xil_Out32(0xFD40E360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD41000C); + psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD40D8F8); + temp_TM_E_ILL1 = Xil_In32(0xFD40D924); + Xil_Out32(0xFD40D8F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD40C0F4); + temp_tm_dig_6 = Xil_In32(0xFD40D06C); + psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40D06C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD40D990) & 0xF0; + + serdes_illcalib_pcie_gen1(1, 0, 0, 0, 0, 0, 0, 0, 0); + + Xil_Out32(0xFD40E360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD40D8F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD40C0F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40D06C, temp_tm_dig_6); + Xil_Out32(0xFD40D928, Xil_In32(0xFD40D924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD40D990) >> 4 & 0xF); + Xil_Out32(0xFD40D990, temp_ill12); + Xil_Out32(0xFD40D924, temp_TM_E_ILL1); } + rdata = Xil_In32(0xFD410098); + rdata = (rdata & 0xDF); + Xil_Out32(0xFD410098, rdata); } - if (gen2_calib != 1) { - if (lane0_active == 1) - Xil_Out32(0xFD401924, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x000000F0U, ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405924, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x000000F0U, ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409924, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x000000F0U, ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D924, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x000000F0U, ill12_val[3]); + + if (lane0_protocol == 2 && lane0_rate == 3) { + psu_mask_write(0xFD40198C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000094U); } - if (gen2_calib == 1) { - if (lane0_active == 1) - Xil_Out32(0xFD401928, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x0000000FU, ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405928, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x0000000FU, ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409928, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x0000000FU, ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D928, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x0000000FU, ill12_val[3]); + if (lane1_protocol == 2 && lane1_rate == 3) { + psu_mask_write(0xFD40598C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40592C, 0x000000FFU, 0x00000094U); + } + if (lane2_protocol == 2 && lane2_rate == 3) { + psu_mask_write(0xFD40998C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000094U); + } + if (lane3_protocol == 2 && lane3_rate == 3) { + psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000094U); + } + + if (lane0_protocol == 1) { + if (lane0_rate == 0) { + serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, 0, 0); + } else { + serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, 0, 0); + serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, lane0_rate, + 1); + } } - if (lane0_active == 1) - psu_mask_write(0xFD401018, 0x00000030U, 0x00000000U); - if (lane1_active == 1) - psu_mask_write(0xFD405018, 0x00000030U, 0x00000000U); - if (lane2_active == 1) - psu_mask_write(0xFD409018, 0x00000030U, 0x00000000U); - if (lane3_active == 1) - psu_mask_write(0xFD40D018, 0x00000030U, 0x00000000U); + if (lane0_protocol == 3) + Xil_Out32(0xFD401914, 0xF3); + if (lane0_protocol == 3) + Xil_Out32(0xFD401940, 0xF3); + if (lane0_protocol == 3) + Xil_Out32(0xFD401990, 0x20); + if (lane0_protocol == 3) + Xil_Out32(0xFD401924, 0x37); + + if (lane1_protocol == 3) + Xil_Out32(0xFD405914, 0xF3); + if (lane1_protocol == 3) + Xil_Out32(0xFD405940, 0xF3); + if (lane1_protocol == 3) + Xil_Out32(0xFD405990, 0x20); + if (lane1_protocol == 3) + Xil_Out32(0xFD405924, 0x37); + + if (lane2_protocol == 3) + Xil_Out32(0xFD409914, 0xF3); + if (lane2_protocol == 3) + Xil_Out32(0xFD409940, 0xF3); + if (lane2_protocol == 3) + Xil_Out32(0xFD409990, 0x20); + if (lane2_protocol == 3) + Xil_Out32(0xFD409924, 0x37); + + if (lane3_protocol == 3) + Xil_Out32(0xFD40D914, 0xF3); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D940, 0xF3); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D990, 0x20); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D924, 0x37); + + return 1; +} + +static unsigned long psu_pll_init_data(void) +{ + psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E4B0C82U); + psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00015A00U); + psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); + mask_poll(0xFF5E0040, 0x00000002U); + psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U); + psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012300U); + psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E4B0C82U); + psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00015A00U); + psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U); + mask_poll(0xFF5E0040, 0x00000001U); + psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U); + psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U); + psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014800U); + psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000001U); + psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U); + psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00013F00U); + psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000002U); + psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000200U); + psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C82U); + psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00015A00U); + psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000004U); + psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000300U); + + return 1; +} + +static unsigned long psu_clock_init_data(void) +{ + psu_mask_write(0xFF5E005C, 0x063F3F07U, 0x06010C00U); + psu_mask_write(0xFF5E0100, 0x013F3F07U, 0x01010600U); + psu_mask_write(0xFF5E0060, 0x023F3F07U, 0x02010600U); + psu_mask_write(0xFF5E004C, 0x023F3F07U, 0x02031900U); + psu_mask_write(0xFF5E0068, 0x013F3F07U, 0x01010C00U); + psu_mask_write(0xFF5E0070, 0x013F3F07U, 0x01010800U); + psu_mask_write(0xFF18030C, 0x00020000U, 0x00000000U); + psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0120, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0124, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000602U); + psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000800U); + psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U); + psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U); + psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011E02U); + psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U); + psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000F00U); + psu_mask_write(0xFD1A00A0, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U); + psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000200U); + psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000203U); + psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U); + psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U); + psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U); + + return 1; +} + +static unsigned long psu_ddr_init_data(void) +{ + psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD070000, 0xE30FBE3DU, 0x81040010U); + psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U); + psu_mask_write(0xFD070020, 0x000003F3U, 0x00000200U); + psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00800000U); + psu_mask_write(0xFD070030, 0x0000007FU, 0x00000000U); + psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00408210U); + psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U); + psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U); + psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U); + psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x007F80B8U); + psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U); + psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U); + psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0040051FU); + psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00020102U); + psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x00020000U); + psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00002205U); + psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x07300301U); + psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00100200U); + psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00210004U); + psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x000006C0U); + psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x08190000U); + psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U); + psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000066FU); + psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x0F102311U); + psu_mask_write(0xFD070104, 0x001F1F7FU, 0x00040419U); + psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x0608070CU); + psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x0050400CU); + psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x08030409U); + psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x06060403U); + psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010004U); + psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000606U); + psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x04040D07U); + psu_mask_write(0xFD070124, 0x40070F3FU, 0x00020309U); + psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x1207010EU); + psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U); + psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x81000040U); + psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x0201908AU); + psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x048B8208U); + psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00030304U); + psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U); + psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U); + psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x00400003U); + psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x00C800FFU); + psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000000U); + psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x00000906U); + psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000001U); + psu_mask_write(0xFD070200, 0x0000001FU, 0x0000001FU); + psu_mask_write(0xFD070204, 0x001F1F1FU, 0x001F0909U); + psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x01010100U); + psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x01010101U); + psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU); + psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x070F0707U); + psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x07070707U); + psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F0FU); + psu_mask_write(0xFD070220, 0x00001F1FU, 0x00001F01U); + psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x07070707U); + psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x07070707U); + psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000007U); + psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x0600060CU); + psu_mask_write(0xFD070244, 0x00003333U, 0x00000001U); + psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U); + psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U); + psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U); + psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U); + psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070300, 0x00000011U, 0x00000000U); + psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U); + psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U); + psu_mask_write(0xFD070400, 0x00000111U, 0x00000001U); + psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU); + psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U); + psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U); + psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U); + psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U); + psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU); + psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U); + psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x07001E00U); + psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F0FC00U); + psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U); + psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U); + psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x41A20D10U); + psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0xCD141275U); + psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04161U); + psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD0800C4, 0xFFFFFFFFU, 0x000000E3U); + psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0800040CU); + psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x07220F08U); + psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x28200008U); + psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x000F0300U); + psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x83000800U); + psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x01702B07U); + psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x00310F08U); + psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000B0FU); + psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U); + psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U); + psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000200U); + psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000630U); + psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000301U); + psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000010U); + psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000200U); + psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x000006C0U); + psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000819U); + psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x0000004DU); + psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U); + psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x0000004DU); + psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x800091C7U); + psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00010236U); + psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U); + psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U); + psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12341000U); + psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x00000005U); + psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U); + psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x0A000000U); + psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000009U); + psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x0A000000U); + psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300B0CEU); + psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF9032019U); + psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U); + psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x008A8A58U); + psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x000079DDU); + psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U); + psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U); + psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x00087BDBU); + psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080704, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08070C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00B03CU); + psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080804, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08080C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00B03CU); + psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08090C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00B004U); + psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080A0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00B004U); + psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080B08, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080B0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0E00B004U); + psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080C08, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080C0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0E00B03CU); + psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080D08, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080D0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0E00B004U); + psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080E08, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080E0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0E00B03CU); + psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x80803660U); + psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x55556000U); + psu_mask_write(0xFD080F08, 0xFFFFFFFFU, 0xAAAAAAAAU); + psu_mask_write(0xFD080F0C, 0xFFFFFFFFU, 0x0029A4A4U); + psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0C00B000U); + psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x70800000U); + psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x70800000U); + psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70800000U); + psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70800000U); + psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x15019FFEU); + psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x21100000U); + psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01266300U); + psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70400000U); + psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U); + + return 1; +} + +static unsigned long psu_ddr_qos_init_data(void) +{ + psu_mask_write(0xFD360008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD36001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD370008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD37001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD380008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD38001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD390008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD39001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3A0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3A001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3B0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3B001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFF9B0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFF9B001C, 0x0000000FU, 0x00000000U); + + return 1; +} + +static unsigned long psu_mio_init_data(void) +{ + psu_mask_write(0xFF180000, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180004, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180008, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18000C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180010, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180014, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180018, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18001C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180020, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180024, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180028, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18002C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180030, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180034, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180038, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF18003C, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180040, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180044, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180048, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF18004C, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF180050, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180054, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180058, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18005C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180060, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180064, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180068, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18006C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180070, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180074, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180078, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180080, 0x000000FEU, 0x00000008U); + psu_mask_write(0xFF180084, 0x000000FEU, 0x00000008U); + psu_mask_write(0xFF180098, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18009C, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800A0, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800A4, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800A8, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800AC, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800B0, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800B4, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800B8, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800BC, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C0, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C4, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C8, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800CC, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800D0, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800D4, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800D8, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800DC, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800E0, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800E4, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800E8, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800EC, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800F0, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800F4, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800F8, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800FC, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF180100, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180104, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180108, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18010C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180110, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180114, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180118, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18011C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180120, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180124, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180128, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18012C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180130, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF180134, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF180204, 0xFFFFFFFFU, 0x00040000U); + psu_mask_write(0xFF180208, 0xFFFFFFFFU, 0x00B02000U); + psu_mask_write(0xFF18020C, 0x00003FFFU, 0x00000FC0U); + psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U); - Xil_Out32(0xFD410098, 0); - if (lane0_active == 1) { - Xil_Out32(0xFD403004, 0); - Xil_Out32(0xFD403008, 0); - Xil_Out32(0xFD40300C, 0); - Xil_Out32(0xFD403010, 0); - Xil_Out32(0xFD403014, 0); - Xil_Out32(0xFD403018, 0); - Xil_Out32(0xFD40301C, 0); - Xil_Out32(0xFD403020, 0); - Xil_Out32(0xFD403024, 0); - Xil_Out32(0xFD403028, 0); - Xil_Out32(0xFD40302C, 0); - Xil_Out32(0xFD403030, 0); - Xil_Out32(0xFD403034, 0); - Xil_Out32(0xFD403038, 0); - Xil_Out32(0xFD40303C, 0); - Xil_Out32(0xFD403040, 0); - Xil_Out32(0xFD403044, 0); - Xil_Out32(0xFD403048, 0); - Xil_Out32(0xFD40304C, 0); - Xil_Out32(0xFD403050, 0); - Xil_Out32(0xFD403054, 0); - Xil_Out32(0xFD403058, 0); - Xil_Out32(0xFD403068, 1); - Xil_Out32(0xFD40306C, 0); - Xil_Out32(0xFD4010AC, 0); - psu_mask_write(0xFD410044, 0x00000003U, 0x00000001U); - psu_mask_write(0xFD410040, 0x00000003U, 0x00000001U); - psu_mask_write(0xFD410038, 0x00000007U, 0x00000000U); - } - if (lane1_active == 1) { - Xil_Out32(0xFD407004, 0); - Xil_Out32(0xFD407008, 0); - Xil_Out32(0xFD40700C, 0); - Xil_Out32(0xFD407010, 0); - Xil_Out32(0xFD407014, 0); - Xil_Out32(0xFD407018, 0); - Xil_Out32(0xFD40701C, 0); - Xil_Out32(0xFD407020, 0); - Xil_Out32(0xFD407024, 0); - Xil_Out32(0xFD407028, 0); - Xil_Out32(0xFD40702C, 0); - Xil_Out32(0xFD407030, 0); - Xil_Out32(0xFD407034, 0); - Xil_Out32(0xFD407038, 0); - Xil_Out32(0xFD40703C, 0); - Xil_Out32(0xFD407040, 0); - Xil_Out32(0xFD407044, 0); - Xil_Out32(0xFD407048, 0); - Xil_Out32(0xFD40704C, 0); - Xil_Out32(0xFD407050, 0); - Xil_Out32(0xFD407054, 0); - Xil_Out32(0xFD407058, 0); - Xil_Out32(0xFD407068, 1); - Xil_Out32(0xFD40706C, 0); - Xil_Out32(0xFD4050AC, 0); - psu_mask_write(0xFD410044, 0x0000000CU, 0x00000004U); - psu_mask_write(0xFD410040, 0x0000000CU, 0x00000004U); - psu_mask_write(0xFD410038, 0x00000070U, 0x00000000U); - } - if (lane2_active == 1) { - Xil_Out32(0xFD40B004, 0); - Xil_Out32(0xFD40B008, 0); - Xil_Out32(0xFD40B00C, 0); - Xil_Out32(0xFD40B010, 0); - Xil_Out32(0xFD40B014, 0); - Xil_Out32(0xFD40B018, 0); - Xil_Out32(0xFD40B01C, 0); - Xil_Out32(0xFD40B020, 0); - Xil_Out32(0xFD40B024, 0); - Xil_Out32(0xFD40B028, 0); - Xil_Out32(0xFD40B02C, 0); - Xil_Out32(0xFD40B030, 0); - Xil_Out32(0xFD40B034, 0); - Xil_Out32(0xFD40B038, 0); - Xil_Out32(0xFD40B03C, 0); - Xil_Out32(0xFD40B040, 0); - Xil_Out32(0xFD40B044, 0); - Xil_Out32(0xFD40B048, 0); - Xil_Out32(0xFD40B04C, 0); - Xil_Out32(0xFD40B050, 0); - Xil_Out32(0xFD40B054, 0); - Xil_Out32(0xFD40B058, 0); - Xil_Out32(0xFD40B068, 1); - Xil_Out32(0xFD40B06C, 0); - Xil_Out32(0xFD4090AC, 0); - psu_mask_write(0xFD410044, 0x00000030U, 0x00000010U); - psu_mask_write(0xFD410040, 0x00000030U, 0x00000010U); - psu_mask_write(0xFD41003C, 0x00000007U, 0x00000000U); - } - if (lane3_active == 1) { - Xil_Out32(0xFD40F004, 0); - Xil_Out32(0xFD40F008, 0); - Xil_Out32(0xFD40F00C, 0); - Xil_Out32(0xFD40F010, 0); - Xil_Out32(0xFD40F014, 0); - Xil_Out32(0xFD40F018, 0); - Xil_Out32(0xFD40F01C, 0); - Xil_Out32(0xFD40F020, 0); - Xil_Out32(0xFD40F024, 0); - Xil_Out32(0xFD40F028, 0); - Xil_Out32(0xFD40F02C, 0); - Xil_Out32(0xFD40F030, 0); - Xil_Out32(0xFD40F034, 0); - Xil_Out32(0xFD40F038, 0); - Xil_Out32(0xFD40F03C, 0); - Xil_Out32(0xFD40F040, 0); - Xil_Out32(0xFD40F044, 0); - Xil_Out32(0xFD40F048, 0); - Xil_Out32(0xFD40F04C, 0); - Xil_Out32(0xFD40F050, 0); - Xil_Out32(0xFD40F054, 0); - Xil_Out32(0xFD40F058, 0); - Xil_Out32(0xFD40F068, 1); - Xil_Out32(0xFD40F06C, 0); - Xil_Out32(0xFD40D0AC, 0); - psu_mask_write(0xFD410044, 0x000000C0U, 0x00000040U); - psu_mask_write(0xFD410040, 0x000000C0U, 0x00000040U); - psu_mask_write(0xFD41003C, 0x00000070U, 0x00000000U); - } return 1; } -static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate) +static unsigned long psu_peripherals_pre_init_data(void) { - unsigned int rdata = 0; - unsigned int sata_gen2 = 1; - unsigned int temp_ill12 = 0; - unsigned int temp_PLL_REF_SEL_OFFSET; - unsigned int temp_TM_IQ_ILL1; - unsigned int temp_TM_E_ILL1; - unsigned int temp_tx_dig_tm_61; - unsigned int temp_tm_dig_6; - unsigned int temp_pll_fbdiv_frac_3_msb_offset; + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012302U); + psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000001U); - if (lane0_protocol == 2 || lane0_protocol == 1) { - Xil_Out32(0xFD401910, 0xF3); - Xil_Out32(0xFD40193C, 0xF3); - Xil_Out32(0xFD401914, 0xF3); - Xil_Out32(0xFD401940, 0xF3); - } - if (lane1_protocol == 2 || lane1_protocol == 1) { - Xil_Out32(0xFD405910, 0xF3); - Xil_Out32(0xFD40593C, 0xF3); - Xil_Out32(0xFD405914, 0xF3); - Xil_Out32(0xFD405940, 0xF3); - } - if (lane2_protocol == 2 || lane2_protocol == 1) { - Xil_Out32(0xFD409910, 0xF3); - Xil_Out32(0xFD40993C, 0xF3); - Xil_Out32(0xFD409914, 0xF3); - Xil_Out32(0xFD409940, 0xF3); - } - if (lane3_protocol == 2 || lane3_protocol == 1) { - Xil_Out32(0xFD40D910, 0xF3); - Xil_Out32(0xFD40D93C, 0xF3); - Xil_Out32(0xFD40D914, 0xF3); - Xil_Out32(0xFD40D940, 0xF3); - } + return 1; +} - if (sata_gen2 == 1) { - if (lane0_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD402360); - Xil_Out32(0xFD402360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410000); - psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4018F8); - temp_TM_E_ILL1 = Xil_In32(0xFD401924); - Xil_Out32(0xFD4018F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4000F4); - temp_tm_dig_6 = Xil_In32(0xFD40106C); - psu_mask_write(0xFD4000F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40106C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD401990) & 0xF0; +static unsigned long psu_peripherals_init_data(void) +{ + psu_mask_write(0xFD1A0100, 0x00008046U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U); + psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U); + psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF180390, 0x00000004U, 0x00000004U); + psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000040U, 0x00000000U); + psu_mask_write(0xFF180310, 0x00008000U, 0x00000000U); + psu_mask_write(0xFF180320, 0x33840000U, 0x02840000U); + psu_mask_write(0xFF18031C, 0x7FFE0000U, 0x64500000U); + psu_mask_write(0xFF180358, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF180324, 0x03C00000U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000600U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00008000U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00007800U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U); + psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U); + psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U); + psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U); + psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x05F5DD18U); + psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U); + + mask_delay(1); + psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000002U); + + mask_delay(5); + psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U); + + return 1; +} + +static unsigned long psu_serdes_init_data(void) +{ + psu_mask_write(0xFD410008, 0x0000001FU, 0x00000008U); + psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000FU); + psu_mask_write(0xFD402868, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD40286C, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD40A094, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40A368, 0x000000FFU, 0x00000038U); + psu_mask_write(0xFD40A36C, 0x00000007U, 0x00000003U); + psu_mask_write(0xFD40E368, 0x000000FFU, 0x000000E0U); + psu_mask_write(0xFD40E36C, 0x00000007U, 0x00000003U); + psu_mask_write(0xFD40A370, 0x000000FFU, 0x000000F4U); + psu_mask_write(0xFD40A374, 0x000000FFU, 0x00000031U); + psu_mask_write(0xFD40A378, 0x000000FFU, 0x00000002U); + psu_mask_write(0xFD40A37C, 0x00000033U, 0x00000030U); + psu_mask_write(0xFD40E370, 0x000000FFU, 0x000000C9U); + psu_mask_write(0xFD40E374, 0x000000FFU, 0x000000D2U); + psu_mask_write(0xFD40E378, 0x000000FFU, 0x00000001U); + psu_mask_write(0xFD40E37C, 0x000000B3U, 0x000000B0U); + psu_mask_write(0xFD40906C, 0x00000003U, 0x00000003U); + psu_mask_write(0xFD4080F4, 0x00000003U, 0x00000003U); + psu_mask_write(0xFD40E360, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40D06C, 0x0000000FU, 0x0000000FU); + psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x0000000BU); + psu_mask_write(0xFD4090CC, 0x00000020U, 0x00000020U); + psu_mask_write(0xFD401074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD405074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD409074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40D074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD401994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD405994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD40989C, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD4098F8, 0x000000FFU, 0x0000001AU); + psu_mask_write(0xFD4098FC, 0x000000FFU, 0x0000001AU); + psu_mask_write(0xFD409990, 0x000000FFU, 0x00000010U); + psu_mask_write(0xFD409924, 0x000000FFU, 0x000000FEU); + psu_mask_write(0xFD409928, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD409900, 0x000000FFU, 0x0000001AU); + psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD409980, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD409914, 0x000000FFU, 0x000000F7U); + psu_mask_write(0xFD409918, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD409940, 0x000000FFU, 0x000000F7U); + psu_mask_write(0xFD409944, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD409994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD40D89C, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD40D8F8, 0x000000FFU, 0x0000007DU); + psu_mask_write(0xFD40D8FC, 0x000000FFU, 0x0000007DU); + psu_mask_write(0xFD40D990, 0x000000FFU, 0x00000001U); + psu_mask_write(0xFD40D924, 0x000000FFU, 0x0000009CU); + psu_mask_write(0xFD40D928, 0x000000FFU, 0x00000039U); + psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40D900, 0x000000FFU, 0x0000007DU); + psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000064U); + psu_mask_write(0xFD40D980, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD40D914, 0x000000FFU, 0x000000F7U); + psu_mask_write(0xFD40D918, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD40D940, 0x000000FFU, 0x000000F7U); + psu_mask_write(0xFD40D944, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD40D994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD40107C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40507C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40907C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40D07C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD4019A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD401038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40102C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4059A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD405038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40502C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4099A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD409038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40902C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40D9A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD40D038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40D02C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4019AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD4059AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD4099AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD40D9AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD401978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD405978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD409978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40D978, 0x00000010U, 0x00000010U); + + serdes_illcalib(2, 3, 3, 0, 0, 0, 0, 0); + psu_mask_write(0xFD410014, 0x00000077U, 0x00000023U); + psu_mask_write(0xFD40C1D8, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD40DC14, 0x000000FFU, 0x000000E6U); + psu_mask_write(0xFD40DC40, 0x0000001FU, 0x0000000CU); + psu_mask_write(0xFD40D94C, 0x00000020U, 0x00000020U); + psu_mask_write(0xFD40D950, 0x00000007U, 0x00000006U); + psu_mask_write(0xFD40C048, 0x000000FFU, 0x00000001U); + + return 1; +} + +static unsigned long psu_resetout_init_data(void) +{ + psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U); + psu_mask_write(0xFF9D0080, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF9D007C, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF5E023C, 0x00000140U, 0x00000000U); + psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD3D0100, 0x00000003U, 0x00000003U); + psu_mask_write(0xFD1A0100, 0x00000002U, 0x00000000U); + psu_mask_write(0xFE20C200, 0x00023FFFU, 0x00022457U); + psu_mask_write(0xFE20C630, 0x003FFF00U, 0x00000000U); + psu_mask_write(0xFE20C11C, 0x00000600U, 0x00000600U); + psu_mask_write(0xFE20C12C, 0x00004000U, 0x00004000U); + psu_mask_write(0xFD480064, 0x00000200U, 0x00000200U); + mask_poll(0xFD40A3E4, 0x00000010U); + mask_poll(0xFD40E3E4, 0x00000010U); + psu_mask_write(0xFD0C00AC, 0xFFFFFFFFU, 0x28184018U); + psu_mask_write(0xFD0C00B0, 0xFFFFFFFFU, 0x0E081406U); + psu_mask_write(0xFD0C00B4, 0xFFFFFFFFU, 0x064A0813U); + psu_mask_write(0xFD0C00B8, 0xFFFFFFFFU, 0x3FFC96A4U); - serdes_illcalib_pcie_gen1(0, 0, 0, 0, 0, 0, 1, 0, 0); + return 1; +} - Xil_Out32(0xFD402360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4018F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4000F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40106C, temp_tm_dig_6); - Xil_Out32(0xFD401928, Xil_In32(0xFD401924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD401990) >> 4 & 0xF); - Xil_Out32(0xFD401990, temp_ill12); - Xil_Out32(0xFD401924, temp_TM_E_ILL1); - } - if (lane1_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD406360); - Xil_Out32(0xFD406360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410004); - psu_mask_write(0xFD410004, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4058F8); - temp_TM_E_ILL1 = Xil_In32(0xFD405924); - Xil_Out32(0xFD4058F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4040F4); - temp_tm_dig_6 = Xil_In32(0xFD40506C); - psu_mask_write(0xFD4040F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40506C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD405990) & 0xF0; +static unsigned long psu_resetin_init_data(void) +{ + psu_mask_write(0xFF5E023C, 0x00000540U, 0x00000540U); + psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A0100, 0x00000002U, 0x00000002U); - serdes_illcalib_pcie_gen1(0, 0, 0, 0, 1, 0, 0, 0, 0); + return 1; +} - Xil_Out32(0xFD406360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4058F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4040F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40506C, temp_tm_dig_6); - Xil_Out32(0xFD405928, Xil_In32(0xFD405924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD405990) >> 4 & 0xF); - Xil_Out32(0xFD405990, temp_ill12); - Xil_Out32(0xFD405924, temp_TM_E_ILL1); - } - if (lane2_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40A360); - Xil_Out32(0xFD40A360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410008); - psu_mask_write(0xFD410008, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4098F8); - temp_TM_E_ILL1 = Xil_In32(0xFD409924); - Xil_Out32(0xFD4098F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4080F4); - temp_tm_dig_6 = Xil_In32(0xFD40906C); - psu_mask_write(0xFD4080F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40906C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD409990) & 0xF0; +static unsigned long psu_afi_config(void) +{ + psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U); + psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U); + psu_mask_write(0xFD615000, 0x00000300U, 0x00000200U); + psu_mask_write(0xFD360000, 0x00000003U, 0x00000002U); + psu_mask_write(0xFD370000, 0x00000003U, 0x00000002U); + psu_mask_write(0xFD360014, 0x00000003U, 0x00000002U); + psu_mask_write(0xFD370014, 0x00000003U, 0x00000002U); - serdes_illcalib_pcie_gen1(0, 0, 1, 0, 0, 0, 0, 0, 0); + return 1; +} - Xil_Out32(0xFD40A360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4098F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4080F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40906C, temp_tm_dig_6); - Xil_Out32(0xFD409928, Xil_In32(0xFD409924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD409990) >> 4 & 0xF); - Xil_Out32(0xFD409990, temp_ill12); - Xil_Out32(0xFD409924, temp_TM_E_ILL1); - } - if (lane3_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40E360); - Xil_Out32(0xFD40E360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD41000C); - psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD40D8F8); - temp_TM_E_ILL1 = Xil_In32(0xFD40D924); - Xil_Out32(0xFD40D8F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD40C0F4); - temp_tm_dig_6 = Xil_In32(0xFD40D06C); - psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40D06C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD40D990) & 0xF0; +static unsigned long psu_ddr_phybringup_data(void) +{ + unsigned int regval = 0; + unsigned int pll_retry = 10; + unsigned int pll_locked = 0; + int cur_R006_tREFPRD; - serdes_illcalib_pcie_gen1(1, 0, 0, 0, 0, 0, 0, 0, 0); + while ((pll_retry > 0) && (!pll_locked)) { + Xil_Out32(0xFD080004, 0x00040010); + Xil_Out32(0xFD080004, 0x00040011); - Xil_Out32(0xFD40E360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD40D8F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD40C0F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40D06C, temp_tm_dig_6); - Xil_Out32(0xFD40D928, Xil_In32(0xFD40D924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD40D990) >> 4 & 0xF); - Xil_Out32(0xFD40D990, temp_ill12); - Xil_Out32(0xFD40D924, temp_TM_E_ILL1); - } - rdata = Xil_In32(0xFD410098); - rdata = (rdata & 0xDF); - Xil_Out32(0xFD410098, rdata); + while ((Xil_In32(0xFD080030) & 0x1) != 1) + ; + pll_locked = (Xil_In32(0xFD080030) & 0x80000000) + >> 31; + pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000) + >> 16; + pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000) >> 16; + pll_locked &= (Xil_In32(0xFD080BE0) & 0x10000) + >> 16; + pll_locked &= (Xil_In32(0xFD080DE0) & 0x10000) + >> 16; + pll_retry--; } + Xil_Out32(0xFD0800C4, Xil_In32(0xFD0800C4) | (pll_retry << 16)); + if (!pll_locked) + return 0; - if (lane0_protocol == 2 && lane0_rate == 3) { - psu_mask_write(0xFD40198C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000094U); - } - if (lane1_protocol == 2 && lane1_rate == 3) { - psu_mask_write(0xFD40598C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40592C, 0x000000FFU, 0x00000094U); - } - if (lane2_protocol == 2 && lane2_rate == 3) { - psu_mask_write(0xFD40998C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000094U); - } - if (lane3_protocol == 2 && lane3_rate == 3) { - psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000094U); - } + Xil_Out32(0xFD080004U, 0x00040063U); - if (lane0_protocol == 1) { - if (lane0_rate == 0) { - serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, 0, 0); - } else { - serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, 0, 0); - serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, lane0_rate, - 1); - } - } + while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) + ; + prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); - if (lane0_protocol == 3) - Xil_Out32(0xFD401914, 0xF3); - if (lane0_protocol == 3) - Xil_Out32(0xFD401940, 0xF3); - if (lane0_protocol == 3) - Xil_Out32(0xFD401990, 0x20); - if (lane0_protocol == 3) - Xil_Out32(0xFD401924, 0x37); + while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) + ; + Xil_Out32(0xFD0701B0U, 0x00000001U); + Xil_Out32(0xFD070320U, 0x00000001U); + while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) + ; + prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); + Xil_Out32(0xFD080004, 0x0004FE01); + regval = Xil_In32(0xFD080030); + while (regval != 0x80000FFF) + regval = Xil_In32(0xFD080030); + regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); + if (regval != 0) + return 0; - if (lane1_protocol == 3) - Xil_Out32(0xFD405914, 0xF3); - if (lane1_protocol == 3) - Xil_Out32(0xFD405940, 0xF3); - if (lane1_protocol == 3) - Xil_Out32(0xFD405990, 0x20); - if (lane1_protocol == 3) - Xil_Out32(0xFD405924, 0x37); + Xil_Out32(0xFD080200U, 0x100091C7U); - if (lane2_protocol == 3) - Xil_Out32(0xFD409914, 0xF3); - if (lane2_protocol == 3) - Xil_Out32(0xFD409940, 0xF3); - if (lane2_protocol == 3) - Xil_Out32(0xFD409990, 0x20); - if (lane2_protocol == 3) - Xil_Out32(0xFD409924, 0x37); + cur_R006_tREFPRD = (Xil_In32(0xFD080018U) & 0x0003FFFFU) >> 0x00000000U; + prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D914, 0xF3); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D940, 0xF3); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D990, 0x20); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D924, 0x37); + prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000003U); + prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000003U); + prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000003U); + prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000003U); + prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000003U); + prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000003U); + + Xil_Out32(0xFD080004, 0x00060001); + regval = Xil_In32(0xFD080030); + while ((regval & 0x80004001) != 0x80004001) + regval = Xil_In32(0xFD080030); + + regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); + if (regval != 0) + return 0; + + prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000000U); + prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000000U); + prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000000U); + prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000000U); + prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000000U); + prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000000U); + + Xil_Out32(0xFD080200U, 0x800091C7U); + prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD); + + Xil_Out32(0xFD080004, 0x0000C001); + regval = Xil_In32(0xFD080030); + while ((regval & 0x80000C01) != 0x80000C01) + regval = Xil_In32(0xFD080030); + + Xil_Out32(0xFD070180U, 0x01000040U); + Xil_Out32(0xFD070060U, 0x00000000U); + prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U); return 1; } diff --git a/board/xilinx/zynqmp/zynqmp-zcu216-revA/psu_init_gpl.c b/board/xilinx/zynqmp/zynqmp-zcu216-revA/psu_init_gpl.c index bd316872eb..5d47cd1abc 100644 --- a/board/xilinx/zynqmp/zynqmp-zcu216-revA/psu_init_gpl.c +++ b/board/xilinx/zynqmp/zynqmp-zcu216-revA/psu_init_gpl.c @@ -6,1692 +6,1687 @@ #include #include -static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate); - -static unsigned long psu_pll_init_data(void) +static int serdes_rst_seq(u32 lane3_protocol, u32 lane3_rate, + u32 lane2_protocol, u32 lane2_rate, + u32 lane1_protocol, u32 lane1_rate, + u32 lane0_protocol, u32 lane0_rate) { - psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E4B0C82U); - psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00015A00U); - psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); - mask_poll(0xFF5E0040, 0x00000002U); - psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U); - psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012300U); - psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E4B0C82U); - psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00015A00U); - psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U); - mask_poll(0xFF5E0040, 0x00000001U); - psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U); - psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U); - psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014800U); - psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000001U); - psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U); - psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U); - psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00013F00U); - psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000002U); - psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000200U); - psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C82U); - psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00015A00U); - psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U); - mask_poll(0xFD1A0044, 0x00000004U); - psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000300U); + Xil_Out32(0xFD410098, 0x00000000); + Xil_Out32(0xFD401010, 0x00000040); + Xil_Out32(0xFD405010, 0x00000040); + Xil_Out32(0xFD409010, 0x00000040); + Xil_Out32(0xFD40D010, 0x00000040); + Xil_Out32(0xFD402084, 0x00000080); + Xil_Out32(0xFD406084, 0x00000080); + Xil_Out32(0xFD40A084, 0x00000080); + Xil_Out32(0xFD40E084, 0x00000080); + Xil_Out32(0xFD410098, 0x00000004); + mask_delay(50); + if (lane0_rate == 1) + Xil_Out32(0xFD410098, 0x0000000E); + Xil_Out32(0xFD410098, 0x00000006); + if (lane0_rate == 1) { + Xil_Out32(0xFD40000C, 0x00000004); + Xil_Out32(0xFD40400C, 0x00000004); + Xil_Out32(0xFD40800C, 0x00000004); + Xil_Out32(0xFD40C00C, 0x00000004); + Xil_Out32(0xFD410098, 0x00000007); + mask_delay(400); + Xil_Out32(0xFD40000C, 0x0000000C); + Xil_Out32(0xFD40400C, 0x0000000C); + Xil_Out32(0xFD40800C, 0x0000000C); + Xil_Out32(0xFD40C00C, 0x0000000C); + mask_delay(15); + Xil_Out32(0xFD410098, 0x0000000F); + mask_delay(100); + } + if (lane0_protocol != 0) + mask_poll(0xFD4023E4, 0x00000010U); + if (lane1_protocol != 0) + mask_poll(0xFD4063E4, 0x00000010U); + if (lane2_protocol != 0) + mask_poll(0xFD40A3E4, 0x00000010U); + if (lane3_protocol != 0) + mask_poll(0xFD40E3E4, 0x00000010U); + mask_delay(50); + Xil_Out32(0xFD401010, 0x000000C0); + Xil_Out32(0xFD405010, 0x000000C0); + Xil_Out32(0xFD409010, 0x000000C0); + Xil_Out32(0xFD40D010, 0x000000C0); + Xil_Out32(0xFD401010, 0x00000080); + Xil_Out32(0xFD405010, 0x00000080); + Xil_Out32(0xFD409010, 0x00000080); + Xil_Out32(0xFD40D010, 0x00000080); + Xil_Out32(0xFD402084, 0x000000C0); + Xil_Out32(0xFD406084, 0x000000C0); + Xil_Out32(0xFD40A084, 0x000000C0); + Xil_Out32(0xFD40E084, 0x000000C0); + mask_delay(50); + Xil_Out32(0xFD402084, 0x00000080); + Xil_Out32(0xFD406084, 0x00000080); + Xil_Out32(0xFD40A084, 0x00000080); + Xil_Out32(0xFD40E084, 0x00000080); + mask_delay(50); + Xil_Out32(0xFD401010, 0x00000000); + Xil_Out32(0xFD405010, 0x00000000); + Xil_Out32(0xFD409010, 0x00000000); + Xil_Out32(0xFD40D010, 0x00000000); + Xil_Out32(0xFD402084, 0x00000000); + Xil_Out32(0xFD406084, 0x00000000); + Xil_Out32(0xFD40A084, 0x00000000); + Xil_Out32(0xFD40E084, 0x00000000); + mask_delay(500); return 1; } -static unsigned long psu_clock_init_data(void) +static int serdes_bist_static_settings(u32 lane_active) { - psu_mask_write(0xFF5E005C, 0x063F3F07U, 0x06010C00U); - psu_mask_write(0xFF5E0100, 0x013F3F07U, 0x01010600U); - psu_mask_write(0xFF5E0060, 0x023F3F07U, 0x02010600U); - psu_mask_write(0xFF5E004C, 0x023F3F07U, 0x02031900U); - psu_mask_write(0xFF5E0068, 0x013F3F07U, 0x01010C00U); - psu_mask_write(0xFF5E0070, 0x013F3F07U, 0x01010800U); - psu_mask_write(0xFF18030C, 0x00020000U, 0x00000000U); - psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0120, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0124, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000602U); - psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000800U); - psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U); - psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U); - psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000302U); - psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010F00U); - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011E02U); - psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U); - psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000F00U); - psu_mask_write(0xFD1A00A0, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U); - psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000200U); - psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000200U); - psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000203U); - psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U); - psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U); - psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U); + if (lane_active == 0) { + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); + Xil_Out32(0xFD403068, 0x1); + Xil_Out32(0xFD40306C, 0x1); + Xil_Out32(0xFD4010AC, 0x0020); + Xil_Out32(0xFD403008, 0x0); + Xil_Out32(0xFD40300C, 0xF4); + Xil_Out32(0xFD403010, 0x0); + Xil_Out32(0xFD403014, 0x0); + Xil_Out32(0xFD403018, 0x00); + Xil_Out32(0xFD40301C, 0xFB); + Xil_Out32(0xFD403020, 0xFF); + Xil_Out32(0xFD403024, 0x0); + Xil_Out32(0xFD403028, 0x00); + Xil_Out32(0xFD40302C, 0x00); + Xil_Out32(0xFD403030, 0x4A); + Xil_Out32(0xFD403034, 0x4A); + Xil_Out32(0xFD403038, 0x4A); + Xil_Out32(0xFD40303C, 0x4A); + Xil_Out32(0xFD403040, 0x0); + Xil_Out32(0xFD403044, 0x14); + Xil_Out32(0xFD403048, 0x02); + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); + } + if (lane_active == 1) { + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); + Xil_Out32(0xFD407068, 0x1); + Xil_Out32(0xFD40706C, 0x1); + Xil_Out32(0xFD4050AC, 0x0020); + Xil_Out32(0xFD407008, 0x0); + Xil_Out32(0xFD40700C, 0xF4); + Xil_Out32(0xFD407010, 0x0); + Xil_Out32(0xFD407014, 0x0); + Xil_Out32(0xFD407018, 0x00); + Xil_Out32(0xFD40701C, 0xFB); + Xil_Out32(0xFD407020, 0xFF); + Xil_Out32(0xFD407024, 0x0); + Xil_Out32(0xFD407028, 0x00); + Xil_Out32(0xFD40702C, 0x00); + Xil_Out32(0xFD407030, 0x4A); + Xil_Out32(0xFD407034, 0x4A); + Xil_Out32(0xFD407038, 0x4A); + Xil_Out32(0xFD40703C, 0x4A); + Xil_Out32(0xFD407040, 0x0); + Xil_Out32(0xFD407044, 0x14); + Xil_Out32(0xFD407048, 0x02); + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); + } + + if (lane_active == 2) { + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); + Xil_Out32(0xFD40B068, 0x1); + Xil_Out32(0xFD40B06C, 0x1); + Xil_Out32(0xFD4090AC, 0x0020); + Xil_Out32(0xFD40B008, 0x0); + Xil_Out32(0xFD40B00C, 0xF4); + Xil_Out32(0xFD40B010, 0x0); + Xil_Out32(0xFD40B014, 0x0); + Xil_Out32(0xFD40B018, 0x00); + Xil_Out32(0xFD40B01C, 0xFB); + Xil_Out32(0xFD40B020, 0xFF); + Xil_Out32(0xFD40B024, 0x0); + Xil_Out32(0xFD40B028, 0x00); + Xil_Out32(0xFD40B02C, 0x00); + Xil_Out32(0xFD40B030, 0x4A); + Xil_Out32(0xFD40B034, 0x4A); + Xil_Out32(0xFD40B038, 0x4A); + Xil_Out32(0xFD40B03C, 0x4A); + Xil_Out32(0xFD40B040, 0x0); + Xil_Out32(0xFD40B044, 0x14); + Xil_Out32(0xFD40B048, 0x02); + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); + } + if (lane_active == 3) { + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); + Xil_Out32(0xFD40F068, 0x1); + Xil_Out32(0xFD40F06C, 0x1); + Xil_Out32(0xFD40D0AC, 0x0020); + Xil_Out32(0xFD40F008, 0x0); + Xil_Out32(0xFD40F00C, 0xF4); + Xil_Out32(0xFD40F010, 0x0); + Xil_Out32(0xFD40F014, 0x0); + Xil_Out32(0xFD40F018, 0x00); + Xil_Out32(0xFD40F01C, 0xFB); + Xil_Out32(0xFD40F020, 0xFF); + Xil_Out32(0xFD40F024, 0x0); + Xil_Out32(0xFD40F028, 0x00); + Xil_Out32(0xFD40F02C, 0x00); + Xil_Out32(0xFD40F030, 0x4A); + Xil_Out32(0xFD40F034, 0x4A); + Xil_Out32(0xFD40F038, 0x4A); + Xil_Out32(0xFD40F03C, 0x4A); + Xil_Out32(0xFD40F040, 0x0); + Xil_Out32(0xFD40F044, 0x14); + Xil_Out32(0xFD40F048, 0x02); + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); + } return 1; } -static unsigned long psu_ddr_init_data(void) +static int serdes_bist_run(u32 lane_active) { - psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD070000, 0xE30FBE3DU, 0x81040010U); - psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U); - psu_mask_write(0xFD070020, 0x000003F3U, 0x00000200U); - psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00800000U); - psu_mask_write(0xFD070030, 0x0000007FU, 0x00000000U); - psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00408210U); - psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U); - psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U); - psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U); - psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x007F80B8U); - psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U); - psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U); - psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0040051FU); - psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00020102U); - psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x00020000U); - psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00002205U); - psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x07300301U); - psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00100200U); - psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00210004U); - psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x000006C0U); - psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x08190000U); - psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U); - psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000066FU); - psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x0F102311U); - psu_mask_write(0xFD070104, 0x001F1F7FU, 0x00040419U); - psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x0608070CU); - psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x0050400CU); - psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x08030409U); - psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x06060403U); - psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010004U); - psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000606U); - psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x04040D07U); - psu_mask_write(0xFD070124, 0x40070F3FU, 0x00020309U); - psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x1207010EU); - psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U); - psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x81000040U); - psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x0201908AU); - psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x048B8208U); - psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00030304U); - psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U); - psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U); - psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x00400003U); - psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x00C800FFU); - psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000000U); - psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x00000906U); - psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000001U); - psu_mask_write(0xFD070200, 0x0000001FU, 0x0000001FU); - psu_mask_write(0xFD070204, 0x001F1F1FU, 0x001F0909U); - psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x01010100U); - psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x01010101U); - psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU); - psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x070F0707U); - psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x07070707U); - psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F0FU); - psu_mask_write(0xFD070220, 0x00001F1FU, 0x00001F01U); - psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x07070707U); - psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x07070707U); - psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000007U); - psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x0600060CU); - psu_mask_write(0xFD070244, 0x00003333U, 0x00000001U); - psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U); - psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U); - psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U); - psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U); - psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070300, 0x00000011U, 0x00000000U); - psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U); - psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U); - psu_mask_write(0xFD070400, 0x00000111U, 0x00000001U); - psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU); - psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U); - psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U); - psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U); - psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU); - psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU); - psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U); - psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU); - psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U); - psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U); - psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU); - psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U); - psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x07001E00U); - psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F0FC00U); - psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U); - psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U); - psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x41A20D10U); - psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0xCD141275U); - psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04161U); - psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD0800C4, 0xFFFFFFFFU, 0x000000E3U); - psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0800040CU); - psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x07220F08U); - psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x28200008U); - psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x000F0300U); - psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x83000800U); - psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x01702B07U); - psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x00310F08U); - psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000B0FU); - psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U); - psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U); - psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000200U); - psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000630U); - psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000301U); - psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000010U); - psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000200U); - psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x000006C0U); - psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000819U); - psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x0000004DU); - psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U); - psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x0000004DU); - psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x800091C7U); - psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00010236U); - psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U); - psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U); - psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12341000U); - psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x00000005U); - psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U); - psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x0A000000U); - psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000009U); - psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x0A000000U); - psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300B0CEU); - psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF9032019U); - psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U); - psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x008A8A58U); - psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x000079DDU); - psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U); - psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U); - psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x00087BDBU); - psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080704, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08070C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00B03CU); - psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080804, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08080C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00B03CU); - psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD08090C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00B004U); - psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080A0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00B004U); - psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080B08, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080B0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0E00B004U); - psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080C08, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080C0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0E00B03CU); - psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080D08, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080D0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0E00B004U); - psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x40800604U); - psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x00007FFFU); - psu_mask_write(0xFD080E08, 0xFFFFFFFFU, 0x00000000U); - psu_mask_write(0xFD080E0C, 0xFFFFFFFFU, 0x3F000008U); - psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0E00B03CU); - psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x80803660U); - psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x55556000U); - psu_mask_write(0xFD080F08, 0xFFFFFFFFU, 0xAAAAAAAAU); - psu_mask_write(0xFD080F0C, 0xFFFFFFFFU, 0x0029A4A4U); - psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0C00B000U); - psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09095555U); - psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU); - psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x70800000U); - psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x70800000U); - psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70800000U); - psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x2A019FFEU); - psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x01100000U); - psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01264300U); - psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70800000U); - psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x15019FFEU); - psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x21100000U); - psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01266300U); - psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x00041800U); - psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70400000U); - psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U); - - return 1; -} - -static unsigned long psu_ddr_qos_init_data(void) -{ - psu_mask_write(0xFD360008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD36001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD370008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD37001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD380008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD38001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD390008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD39001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3A0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3A001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3B0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFD3B001C, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFF9B0008, 0x0000000FU, 0x00000000U); - psu_mask_write(0xFF9B001C, 0x0000000FU, 0x00000000U); - - return 1; -} - -static unsigned long psu_mio_init_data(void) -{ - psu_mask_write(0xFF180000, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180004, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180008, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18000C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180010, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180014, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180018, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18001C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180020, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180024, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180028, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18002C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180030, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180034, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180038, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF18003C, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180040, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180044, 0x000000FEU, 0x00000040U); - psu_mask_write(0xFF180048, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF18004C, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF180050, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180054, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180058, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18005C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180060, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180064, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180068, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18006C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180070, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180074, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180078, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF180080, 0x000000FEU, 0x00000008U); - psu_mask_write(0xFF180084, 0x000000FEU, 0x00000008U); - psu_mask_write(0xFF180098, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF18009C, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800A0, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800A4, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800A8, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800AC, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800B0, 0x000000FEU, 0x00000000U); - psu_mask_write(0xFF1800B4, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800B8, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800BC, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C0, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C4, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800C8, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800CC, 0x000000FEU, 0x00000010U); - psu_mask_write(0xFF1800D0, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800D4, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800D8, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800DC, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800E0, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800E4, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800E8, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800EC, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800F0, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800F4, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800F8, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF1800FC, 0x000000FEU, 0x00000004U); - psu_mask_write(0xFF180100, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180104, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180108, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18010C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180110, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180114, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180118, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18011C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180120, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180124, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180128, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF18012C, 0x000000FEU, 0x00000002U); - psu_mask_write(0xFF180130, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF180134, 0x000000FEU, 0x000000C0U); - psu_mask_write(0xFF180204, 0xFFFFFFFFU, 0x00040000U); - psu_mask_write(0xFF180208, 0xFFFFFFFFU, 0x00B02000U); - psu_mask_write(0xFF18020C, 0x00003FFFU, 0x00000FC0U); - psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU); - psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x00000000U); - psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U); - - return 1; -} - -static unsigned long psu_peripherals_pre_init_data(void) -{ - psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012302U); - psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000001U); - - return 1; -} - -static unsigned long psu_peripherals_init_data(void) -{ - psu_mask_write(0xFD1A0100, 0x00008046U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U); - psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U); - psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF180390, 0x00000004U, 0x00000004U); - psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000040U, 0x00000000U); - psu_mask_write(0xFF180310, 0x00008000U, 0x00000000U); - psu_mask_write(0xFF180320, 0x33840000U, 0x02840000U); - psu_mask_write(0xFF18031C, 0x7FFE0000U, 0x64500000U); - psu_mask_write(0xFF180358, 0x00000008U, 0x00000008U); - psu_mask_write(0xFF180324, 0x03C00000U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000600U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00008000U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00007800U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U); - psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U); - psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U); - psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U); - psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U); - psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x05F5DD18U); - psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U); - - mask_delay(1); - psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000002U); - - mask_delay(5); - psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U); - - return 1; -} - -static unsigned long psu_serdes_init_data(void) -{ - psu_mask_write(0xFD410008, 0x0000001FU, 0x00000008U); - psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000FU); - psu_mask_write(0xFD402868, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD40286C, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD40A094, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40A368, 0x000000FFU, 0x00000038U); - psu_mask_write(0xFD40A36C, 0x00000007U, 0x00000003U); - psu_mask_write(0xFD40E368, 0x000000FFU, 0x000000E0U); - psu_mask_write(0xFD40E36C, 0x00000007U, 0x00000003U); - psu_mask_write(0xFD40A370, 0x000000FFU, 0x000000F4U); - psu_mask_write(0xFD40A374, 0x000000FFU, 0x00000031U); - psu_mask_write(0xFD40A378, 0x000000FFU, 0x00000002U); - psu_mask_write(0xFD40A37C, 0x00000033U, 0x00000030U); - psu_mask_write(0xFD40E370, 0x000000FFU, 0x000000C9U); - psu_mask_write(0xFD40E374, 0x000000FFU, 0x000000D2U); - psu_mask_write(0xFD40E378, 0x000000FFU, 0x00000001U); - psu_mask_write(0xFD40E37C, 0x000000B3U, 0x000000B0U); - psu_mask_write(0xFD40906C, 0x00000003U, 0x00000003U); - psu_mask_write(0xFD4080F4, 0x00000003U, 0x00000003U); - psu_mask_write(0xFD40E360, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40D06C, 0x0000000FU, 0x0000000FU); - psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x0000000BU); - psu_mask_write(0xFD4090CC, 0x00000020U, 0x00000020U); - psu_mask_write(0xFD401074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD405074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD409074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40D074, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD401994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD405994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD40989C, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD4098F8, 0x000000FFU, 0x0000001AU); - psu_mask_write(0xFD4098FC, 0x000000FFU, 0x0000001AU); - psu_mask_write(0xFD409990, 0x000000FFU, 0x00000010U); - psu_mask_write(0xFD409924, 0x000000FFU, 0x000000FEU); - psu_mask_write(0xFD409928, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD409900, 0x000000FFU, 0x0000001AU); - psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000000U); - psu_mask_write(0xFD409980, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD409914, 0x000000FFU, 0x000000F7U); - psu_mask_write(0xFD409918, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD409940, 0x000000FFU, 0x000000F7U); - psu_mask_write(0xFD409944, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD409994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD40D89C, 0x00000080U, 0x00000080U); - psu_mask_write(0xFD40D8F8, 0x000000FFU, 0x0000007DU); - psu_mask_write(0xFD40D8FC, 0x000000FFU, 0x0000007DU); - psu_mask_write(0xFD40D990, 0x000000FFU, 0x00000001U); - psu_mask_write(0xFD40D924, 0x000000FFU, 0x0000009CU); - psu_mask_write(0xFD40D928, 0x000000FFU, 0x00000039U); - psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40D900, 0x000000FFU, 0x0000007DU); - psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000064U); - psu_mask_write(0xFD40D980, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD40D914, 0x000000FFU, 0x000000F7U); - psu_mask_write(0xFD40D918, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD40D940, 0x000000FFU, 0x000000F7U); - psu_mask_write(0xFD40D944, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD40D994, 0x00000007U, 0x00000007U); - psu_mask_write(0xFD40107C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40507C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40907C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD40D07C, 0x0000000FU, 0x00000001U); - psu_mask_write(0xFD4019A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD401038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40102C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4059A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD405038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40502C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4099A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD409038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40902C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40D9A4, 0x000000FFU, 0x000000FFU); - psu_mask_write(0xFD40D038, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD40D02C, 0x00000040U, 0x00000040U); - psu_mask_write(0xFD4019AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD4059AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD4099AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD40D9AC, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD401978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD405978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD409978, 0x00000010U, 0x00000010U); - psu_mask_write(0xFD40D978, 0x00000010U, 0x00000010U); - - serdes_illcalib(2, 3, 3, 0, 0, 0, 0, 0); - psu_mask_write(0xFD410014, 0x00000077U, 0x00000023U); - psu_mask_write(0xFD40C1D8, 0x00000001U, 0x00000001U); - psu_mask_write(0xFD40DC14, 0x000000FFU, 0x000000E6U); - psu_mask_write(0xFD40DC40, 0x0000001FU, 0x0000000CU); - psu_mask_write(0xFD40D94C, 0x00000020U, 0x00000020U); - psu_mask_write(0xFD40D950, 0x00000007U, 0x00000006U); - psu_mask_write(0xFD40C048, 0x000000FFU, 0x00000001U); - - return 1; -} - -static unsigned long psu_resetout_init_data(void) -{ - psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U); - psu_mask_write(0xFF9D0080, 0x00000001U, 0x00000001U); - psu_mask_write(0xFF9D007C, 0x00000001U, 0x00000000U); - psu_mask_write(0xFF5E023C, 0x00000140U, 0x00000000U); - psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000000U); - psu_mask_write(0xFD3D0100, 0x00000003U, 0x00000003U); - psu_mask_write(0xFD1A0100, 0x00000002U, 0x00000000U); - psu_mask_write(0xFE20C200, 0x00023FFFU, 0x00022457U); - psu_mask_write(0xFE20C630, 0x003FFF00U, 0x00000000U); - psu_mask_write(0xFE20C11C, 0x00000600U, 0x00000600U); - psu_mask_write(0xFE20C12C, 0x00004000U, 0x00004000U); - psu_mask_write(0xFD480064, 0x00000200U, 0x00000200U); - mask_poll(0xFD40A3E4, 0x00000010U); - mask_poll(0xFD40E3E4, 0x00000010U); - psu_mask_write(0xFD0C00AC, 0xFFFFFFFFU, 0x28184018U); - psu_mask_write(0xFD0C00B0, 0xFFFFFFFFU, 0x0E081406U); - psu_mask_write(0xFD0C00B4, 0xFFFFFFFFU, 0x064A0813U); - psu_mask_write(0xFD0C00B8, 0xFFFFFFFFU, 0x3FFC96A4U); - - return 1; -} - -static unsigned long psu_resetin_init_data(void) -{ - psu_mask_write(0xFF5E023C, 0x00000540U, 0x00000540U); - psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000008U); - psu_mask_write(0xFD1A0100, 0x00000002U, 0x00000002U); - - return 1; -} - -static unsigned long psu_afi_config(void) -{ - psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U); - psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U); - psu_mask_write(0xFD615000, 0x00000300U, 0x00000200U); - psu_mask_write(0xFD360000, 0x00000003U, 0x00000002U); - psu_mask_write(0xFD370000, 0x00000003U, 0x00000002U); - psu_mask_write(0xFD360014, 0x00000003U, 0x00000002U); - psu_mask_write(0xFD370014, 0x00000003U, 0x00000002U); - - return 1; -} - -static unsigned long psu_ddr_phybringup_data(void) -{ - unsigned int regval = 0; - unsigned int pll_retry = 10; - unsigned int pll_locked = 0; - int cur_R006_tREFPRD; - - while ((pll_retry > 0) && (!pll_locked)) { - Xil_Out32(0xFD080004, 0x00040010); - Xil_Out32(0xFD080004, 0x00040011); - - while ((Xil_In32(0xFD080030) & 0x1) != 1) - ; - pll_locked = (Xil_In32(0xFD080030) & 0x80000000) - >> 31; - pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000) - >> 16; - pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000) >> 16; - pll_locked &= (Xil_In32(0xFD080BE0) & 0x10000) - >> 16; - pll_locked &= (Xil_In32(0xFD080DE0) & 0x10000) - >> 16; - pll_retry--; + if (lane_active == 0) { + psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD410038, 0x00000007U, 0x00000001U); + Xil_Out32(0xFD4010AC, 0x0020); + Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) | 0x1)); } - Xil_Out32(0xFD0800C4, Xil_In32(0xFD0800C4) | (pll_retry << 16)); - if (!pll_locked) - return 0; - - Xil_Out32(0xFD080004U, 0x00040063U); - - while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) - ; - prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); - - while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) - ; - Xil_Out32(0xFD0701B0U, 0x00000001U); - Xil_Out32(0xFD070320U, 0x00000001U); - while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) - ; - prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); - Xil_Out32(0xFD080004, 0x0004FE01); - regval = Xil_In32(0xFD080030); - while (regval != 0x80000FFF) - regval = Xil_In32(0xFD080030); - regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); - if (regval != 0) - return 0; - - Xil_Out32(0xFD080200U, 0x100091C7U); - - cur_R006_tREFPRD = (Xil_In32(0xFD080018U) & 0x0003FFFFU) >> 0x00000000U; - prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD); - - prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000003U); - prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000003U); - prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000003U); - prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000003U); - prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000003U); - prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000003U); - - Xil_Out32(0xFD080004, 0x00060001); - regval = Xil_In32(0xFD080030); - while ((regval & 0x80004001) != 0x80004001) - regval = Xil_In32(0xFD080030); - - regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); - if (regval != 0) - return 0; - - prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000000U); - prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000000U); - prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000000U); - prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000000U); - prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000000U); - prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000000U); - - Xil_Out32(0xFD080200U, 0x800091C7U); - prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD); - - Xil_Out32(0xFD080004, 0x0000C001); - regval = Xil_In32(0xFD080030); - while ((regval & 0x80000C01) != 0x80000C01) - regval = Xil_In32(0xFD080030); + if (lane_active == 1) { + psu_mask_write(0xFD410044, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD410040, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD410038, 0x00000070U, 0x00000010U); + Xil_Out32(0xFD4050AC, 0x0020); + Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) | 0x1)); + } + if (lane_active == 2) { + psu_mask_write(0xFD410044, 0x00000030U, 0x00000000U); + psu_mask_write(0xFD410040, 0x00000030U, 0x00000000U); + psu_mask_write(0xFD41003C, 0x00000007U, 0x00000001U); + Xil_Out32(0xFD4090AC, 0x0020); + Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) | 0x1)); + } + if (lane_active == 3) { + psu_mask_write(0xFD410040, 0x000000C0U, 0x00000000U); + psu_mask_write(0xFD410044, 0x000000C0U, 0x00000000U); + psu_mask_write(0xFD41003C, 0x00000070U, 0x00000010U); + Xil_Out32(0xFD40D0AC, 0x0020); + Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) | 0x1)); + } + mask_delay(100); + return 1; +} - Xil_Out32(0xFD070180U, 0x01000040U); - Xil_Out32(0xFD070060U, 0x00000000U); - prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U); +static int serdes_bist_result(u32 lane_active) +{ + u32 pkt_cnt_l0, pkt_cnt_h0, err_cnt_l0, err_cnt_h0; + if (lane_active == 0) { + pkt_cnt_l0 = Xil_In32(0xFD40304C); + pkt_cnt_h0 = Xil_In32(0xFD403050); + err_cnt_l0 = Xil_In32(0xFD403054); + err_cnt_h0 = Xil_In32(0xFD403058); + } + if (lane_active == 1) { + pkt_cnt_l0 = Xil_In32(0xFD40704C); + pkt_cnt_h0 = Xil_In32(0xFD407050); + err_cnt_l0 = Xil_In32(0xFD407054); + err_cnt_h0 = Xil_In32(0xFD407058); + } + if (lane_active == 2) { + pkt_cnt_l0 = Xil_In32(0xFD40B04C); + pkt_cnt_h0 = Xil_In32(0xFD40B050); + err_cnt_l0 = Xil_In32(0xFD40B054); + err_cnt_h0 = Xil_In32(0xFD40B058); + } + if (lane_active == 3) { + pkt_cnt_l0 = Xil_In32(0xFD40F04C); + pkt_cnt_h0 = Xil_In32(0xFD40F050); + err_cnt_l0 = Xil_In32(0xFD40F054); + err_cnt_h0 = Xil_In32(0xFD40F058); + } + if (lane_active == 0) + Xil_Out32(0xFD403004, 0x0); + if (lane_active == 1) + Xil_Out32(0xFD407004, 0x0); + if (lane_active == 2) + Xil_Out32(0xFD40B004, 0x0); + if (lane_active == 3) + Xil_Out32(0xFD40F004, 0x0); + if (err_cnt_l0 > 0 || err_cnt_h0 > 0 || + (pkt_cnt_l0 == 0 && pkt_cnt_h0 == 0)) + return 0; return 1; } -static int serdes_rst_seq(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate) +static int serdes_illcalib_pcie_gen1(u32 lane3_protocol, u32 lane3_rate, + u32 lane2_protocol, u32 lane2_rate, + u32 lane1_protocol, u32 lane1_rate, + u32 lane0_protocol, u32 lane0_rate, + u32 gen2_calib) { - Xil_Out32(0xFD410098, 0x00000000); - Xil_Out32(0xFD401010, 0x00000040); - Xil_Out32(0xFD405010, 0x00000040); - Xil_Out32(0xFD409010, 0x00000040); - Xil_Out32(0xFD40D010, 0x00000040); - Xil_Out32(0xFD402084, 0x00000080); - Xil_Out32(0xFD406084, 0x00000080); - Xil_Out32(0xFD40A084, 0x00000080); - Xil_Out32(0xFD40E084, 0x00000080); - Xil_Out32(0xFD410098, 0x00000004); - mask_delay(50); - if (lane0_rate == 1) - Xil_Out32(0xFD410098, 0x0000000E); - Xil_Out32(0xFD410098, 0x00000006); - if (lane0_rate == 1) { - Xil_Out32(0xFD40000C, 0x00000004); - Xil_Out32(0xFD40400C, 0x00000004); - Xil_Out32(0xFD40800C, 0x00000004); - Xil_Out32(0xFD40C00C, 0x00000004); - Xil_Out32(0xFD410098, 0x00000007); - mask_delay(400); - Xil_Out32(0xFD40000C, 0x0000000C); - Xil_Out32(0xFD40400C, 0x0000000C); - Xil_Out32(0xFD40800C, 0x0000000C); - Xil_Out32(0xFD40C00C, 0x0000000C); - mask_delay(15); - Xil_Out32(0xFD410098, 0x0000000F); - mask_delay(100); + u64 tempbistresult; + u32 currbistresult[4]; + u32 prevbistresult[4]; + u32 itercount = 0; + u32 ill12_val[4], ill1_val[4]; + u32 loop = 0; + u32 iterresult[8]; + u32 meancount[4]; + u32 bistpasscount[4]; + u32 meancountalt[4]; + u32 meancountalt_bistpasscount[4]; + u32 lane0_active; + u32 lane1_active; + u32 lane2_active; + u32 lane3_active; + + lane0_active = (lane0_protocol == 1); + lane1_active = (lane1_protocol == 1); + lane2_active = (lane2_protocol == 1); + lane3_active = (lane3_protocol == 1); + for (loop = 0; loop <= 3; loop++) { + iterresult[loop] = 0; + iterresult[loop + 4] = 0; + meancountalt[loop] = 0; + meancountalt_bistpasscount[loop] = 0; + meancount[loop] = 0; + prevbistresult[loop] = 0; + bistpasscount[loop] = 0; } - if (lane0_protocol != 0) - mask_poll(0xFD4023E4, 0x00000010U); - if (lane1_protocol != 0) - mask_poll(0xFD4063E4, 0x00000010U); - if (lane2_protocol != 0) - mask_poll(0xFD40A3E4, 0x00000010U); - if (lane3_protocol != 0) - mask_poll(0xFD40E3E4, 0x00000010U); - mask_delay(50); - Xil_Out32(0xFD401010, 0x000000C0); - Xil_Out32(0xFD405010, 0x000000C0); - Xil_Out32(0xFD409010, 0x000000C0); - Xil_Out32(0xFD40D010, 0x000000C0); - Xil_Out32(0xFD401010, 0x00000080); - Xil_Out32(0xFD405010, 0x00000080); - Xil_Out32(0xFD409010, 0x00000080); - Xil_Out32(0xFD40D010, 0x00000080); + itercount = 0; + if (lane0_active) + serdes_bist_static_settings(0); + if (lane1_active) + serdes_bist_static_settings(1); + if (lane2_active) + serdes_bist_static_settings(2); + if (lane3_active) + serdes_bist_static_settings(3); + do { + if (gen2_calib != 1) { + if (lane0_active == 1) + ill1_val[0] = ((0x04 + itercount * 8) % 0x100); + if (lane0_active == 1) + ill12_val[0] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane1_active == 1) + ill1_val[1] = ((0x04 + itercount * 8) % 0x100); + if (lane1_active == 1) + ill12_val[1] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane2_active == 1) + ill1_val[2] = ((0x04 + itercount * 8) % 0x100); + if (lane2_active == 1) + ill12_val[2] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + if (lane3_active == 1) + ill1_val[3] = ((0x04 + itercount * 8) % 0x100); + if (lane3_active == 1) + ill12_val[3] = + ((0x04 + itercount * 8) >= + 0x100) ? 0x10 : 0x00; + + if (lane0_active == 1) + Xil_Out32(0xFD401924, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x000000F0U, + ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405924, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x000000F0U, + ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409924, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x000000F0U, + ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D924, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x000000F0U, + ill12_val[3]); + } + if (gen2_calib == 1) { + if (lane0_active == 1) + ill1_val[0] = ((0x104 + itercount * 8) % 0x100); + if (lane0_active == 1) + ill12_val[0] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane1_active == 1) + ill1_val[1] = ((0x104 + itercount * 8) % 0x100); + if (lane1_active == 1) + ill12_val[1] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane2_active == 1) + ill1_val[2] = ((0x104 + itercount * 8) % 0x100); + if (lane2_active == 1) + ill12_val[2] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + if (lane3_active == 1) + ill1_val[3] = ((0x104 + itercount * 8) % 0x100); + if (lane3_active == 1) + ill12_val[3] = + ((0x104 + itercount * 8) >= + 0x200) ? 0x02 : 0x01; + + if (lane0_active == 1) + Xil_Out32(0xFD401928, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x0000000FU, + ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405928, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x0000000FU, + ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409928, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x0000000FU, + ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D928, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x0000000FU, + ill12_val[3]); + } + + if (lane0_active == 1) + psu_mask_write(0xFD401018, 0x00000030U, 0x00000010U); + if (lane1_active == 1) + psu_mask_write(0xFD405018, 0x00000030U, 0x00000010U); + if (lane2_active == 1) + psu_mask_write(0xFD409018, 0x00000030U, 0x00000010U); + if (lane3_active == 1) + psu_mask_write(0xFD40D018, 0x00000030U, 0x00000010U); + if (lane0_active == 1) + currbistresult[0] = 0; + if (lane1_active == 1) + currbistresult[1] = 0; + if (lane2_active == 1) + currbistresult[2] = 0; + if (lane3_active == 1) + currbistresult[3] = 0; + serdes_rst_seq(lane3_protocol, lane3_rate, lane2_protocol, + lane2_rate, lane1_protocol, lane1_rate, + lane0_protocol, lane0_rate); + if (lane3_active == 1) + serdes_bist_run(3); + if (lane2_active == 1) + serdes_bist_run(2); + if (lane1_active == 1) + serdes_bist_run(1); + if (lane0_active == 1) + serdes_bist_run(0); + tempbistresult = 0; + if (lane3_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(3); + tempbistresult = tempbistresult << 1; + if (lane2_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(2); + tempbistresult = tempbistresult << 1; + if (lane1_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(1); + tempbistresult = tempbistresult << 1; + if (lane0_active == 1) + tempbistresult = tempbistresult | serdes_bist_result(0); + Xil_Out32(0xFD410098, 0x0); + Xil_Out32(0xFD410098, 0x2); - Xil_Out32(0xFD402084, 0x000000C0); - Xil_Out32(0xFD406084, 0x000000C0); - Xil_Out32(0xFD40A084, 0x000000C0); - Xil_Out32(0xFD40E084, 0x000000C0); - mask_delay(50); - Xil_Out32(0xFD402084, 0x00000080); - Xil_Out32(0xFD406084, 0x00000080); - Xil_Out32(0xFD40A084, 0x00000080); - Xil_Out32(0xFD40E084, 0x00000080); - mask_delay(50); - Xil_Out32(0xFD401010, 0x00000000); - Xil_Out32(0xFD405010, 0x00000000); - Xil_Out32(0xFD409010, 0x00000000); - Xil_Out32(0xFD40D010, 0x00000000); - Xil_Out32(0xFD402084, 0x00000000); - Xil_Out32(0xFD406084, 0x00000000); - Xil_Out32(0xFD40A084, 0x00000000); - Xil_Out32(0xFD40E084, 0x00000000); - mask_delay(500); - return 1; -} + if (itercount < 32) { + iterresult[0] = + ((iterresult[0] << 1) | + ((tempbistresult & 0x1) == 0x1)); + iterresult[1] = + ((iterresult[1] << 1) | + ((tempbistresult & 0x2) == 0x2)); + iterresult[2] = + ((iterresult[2] << 1) | + ((tempbistresult & 0x4) == 0x4)); + iterresult[3] = + ((iterresult[3] << 1) | + ((tempbistresult & 0x8) == 0x8)); + } else { + iterresult[4] = + ((iterresult[4] << 1) | + ((tempbistresult & 0x1) == 0x1)); + iterresult[5] = + ((iterresult[5] << 1) | + ((tempbistresult & 0x2) == 0x2)); + iterresult[6] = + ((iterresult[6] << 1) | + ((tempbistresult & 0x4) == 0x4)); + iterresult[7] = + ((iterresult[7] << 1) | + ((tempbistresult & 0x8) == 0x8)); + } + currbistresult[0] = + currbistresult[0] | ((tempbistresult & 0x1) == 1); + currbistresult[1] = + currbistresult[1] | ((tempbistresult & 0x2) == 0x2); + currbistresult[2] = + currbistresult[2] | ((tempbistresult & 0x4) == 0x4); + currbistresult[3] = + currbistresult[3] | ((tempbistresult & 0x8) == 0x8); -static int serdes_bist_static_settings(u32 lane_active) -{ - if (lane_active == 0) { - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); - Xil_Out32(0xFD403068, 0x1); - Xil_Out32(0xFD40306C, 0x1); - Xil_Out32(0xFD4010AC, 0x0020); - Xil_Out32(0xFD403008, 0x0); - Xil_Out32(0xFD40300C, 0xF4); - Xil_Out32(0xFD403010, 0x0); - Xil_Out32(0xFD403014, 0x0); - Xil_Out32(0xFD403018, 0x00); - Xil_Out32(0xFD40301C, 0xFB); - Xil_Out32(0xFD403020, 0xFF); - Xil_Out32(0xFD403024, 0x0); - Xil_Out32(0xFD403028, 0x00); - Xil_Out32(0xFD40302C, 0x00); - Xil_Out32(0xFD403030, 0x4A); - Xil_Out32(0xFD403034, 0x4A); - Xil_Out32(0xFD403038, 0x4A); - Xil_Out32(0xFD40303C, 0x4A); - Xil_Out32(0xFD403040, 0x0); - Xil_Out32(0xFD403044, 0x14); - Xil_Out32(0xFD403048, 0x02); - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) & 0xFFFFFF1F)); - } - if (lane_active == 1) { - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); - Xil_Out32(0xFD407068, 0x1); - Xil_Out32(0xFD40706C, 0x1); - Xil_Out32(0xFD4050AC, 0x0020); - Xil_Out32(0xFD407008, 0x0); - Xil_Out32(0xFD40700C, 0xF4); - Xil_Out32(0xFD407010, 0x0); - Xil_Out32(0xFD407014, 0x0); - Xil_Out32(0xFD407018, 0x00); - Xil_Out32(0xFD40701C, 0xFB); - Xil_Out32(0xFD407020, 0xFF); - Xil_Out32(0xFD407024, 0x0); - Xil_Out32(0xFD407028, 0x00); - Xil_Out32(0xFD40702C, 0x00); - Xil_Out32(0xFD407030, 0x4A); - Xil_Out32(0xFD407034, 0x4A); - Xil_Out32(0xFD407038, 0x4A); - Xil_Out32(0xFD40703C, 0x4A); - Xil_Out32(0xFD407040, 0x0); - Xil_Out32(0xFD407044, 0x14); - Xil_Out32(0xFD407048, 0x02); - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) & 0xFFFFFF1F)); - } + for (loop = 0; loop <= 3; loop++) { + if (currbistresult[loop] == 1 && prevbistresult[loop] == 1) + bistpasscount[loop] = bistpasscount[loop] + 1; + if (bistpasscount[loop] < 4 && currbistresult[loop] == 0 && + itercount > 2) { + if (meancountalt_bistpasscount[loop] < + bistpasscount[loop]) { + meancountalt_bistpasscount[loop] = + bistpasscount[loop]; + meancountalt[loop] = + ((itercount - 1) - + ((bistpasscount[loop] + 1) / 2)); + } + bistpasscount[loop] = 0; + } + if (meancount[loop] == 0 && bistpasscount[loop] >= 4 && + (currbistresult[loop] == 0 || itercount == 63) && + prevbistresult[loop] == 1) + meancount[loop] = + (itercount - 1) - + ((bistpasscount[loop] + 1) / 2); + prevbistresult[loop] = currbistresult[loop]; + } + } while (++itercount < 64); - if (lane_active == 2) { - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); - Xil_Out32(0xFD40B068, 0x1); - Xil_Out32(0xFD40B06C, 0x1); - Xil_Out32(0xFD4090AC, 0x0020); - Xil_Out32(0xFD40B008, 0x0); - Xil_Out32(0xFD40B00C, 0xF4); - Xil_Out32(0xFD40B010, 0x0); - Xil_Out32(0xFD40B014, 0x0); - Xil_Out32(0xFD40B018, 0x00); - Xil_Out32(0xFD40B01C, 0xFB); - Xil_Out32(0xFD40B020, 0xFF); - Xil_Out32(0xFD40B024, 0x0); - Xil_Out32(0xFD40B028, 0x00); - Xil_Out32(0xFD40B02C, 0x00); - Xil_Out32(0xFD40B030, 0x4A); - Xil_Out32(0xFD40B034, 0x4A); - Xil_Out32(0xFD40B038, 0x4A); - Xil_Out32(0xFD40B03C, 0x4A); - Xil_Out32(0xFD40B040, 0x0); - Xil_Out32(0xFD40B044, 0x14); - Xil_Out32(0xFD40B048, 0x02); - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) & 0xFFFFFF1F)); - } + for (loop = 0; loop <= 3; loop++) { + if (lane0_active == 0 && loop == 0) + continue; + if (lane1_active == 0 && loop == 1) + continue; + if (lane2_active == 0 && loop == 2) + continue; + if (lane3_active == 0 && loop == 3) + continue; - if (lane_active == 3) { - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); - Xil_Out32(0xFD40F068, 0x1); - Xil_Out32(0xFD40F06C, 0x1); - Xil_Out32(0xFD40D0AC, 0x0020); - Xil_Out32(0xFD40F008, 0x0); - Xil_Out32(0xFD40F00C, 0xF4); - Xil_Out32(0xFD40F010, 0x0); - Xil_Out32(0xFD40F014, 0x0); - Xil_Out32(0xFD40F018, 0x00); - Xil_Out32(0xFD40F01C, 0xFB); - Xil_Out32(0xFD40F020, 0xFF); - Xil_Out32(0xFD40F024, 0x0); - Xil_Out32(0xFD40F028, 0x00); - Xil_Out32(0xFD40F02C, 0x00); - Xil_Out32(0xFD40F030, 0x4A); - Xil_Out32(0xFD40F034, 0x4A); - Xil_Out32(0xFD40F038, 0x4A); - Xil_Out32(0xFD40F03C, 0x4A); - Xil_Out32(0xFD40F040, 0x0); - Xil_Out32(0xFD40F044, 0x14); - Xil_Out32(0xFD40F048, 0x02); - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) & 0xFFFFFF1F)); - } - return 1; -} + if (meancount[loop] == 0) + meancount[loop] = meancountalt[loop]; -static int serdes_bist_run(u32 lane_active) -{ - if (lane_active == 0) { - psu_mask_write(0xFD410044, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD410040, 0x00000003U, 0x00000000U); - psu_mask_write(0xFD410038, 0x00000007U, 0x00000001U); - Xil_Out32(0xFD4010AC, 0x0020); - Xil_Out32(0xFD403004, (Xil_In32(0xFD403004) | 0x1)); - } - if (lane_active == 1) { - psu_mask_write(0xFD410044, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD410040, 0x0000000CU, 0x00000000U); - psu_mask_write(0xFD410038, 0x00000070U, 0x00000010U); - Xil_Out32(0xFD4050AC, 0x0020); - Xil_Out32(0xFD407004, (Xil_In32(0xFD407004) | 0x1)); - } - if (lane_active == 2) { - psu_mask_write(0xFD410044, 0x00000030U, 0x00000000U); - psu_mask_write(0xFD410040, 0x00000030U, 0x00000000U); - psu_mask_write(0xFD41003C, 0x00000007U, 0x00000001U); - Xil_Out32(0xFD4090AC, 0x0020); - Xil_Out32(0xFD40B004, (Xil_In32(0xFD40B004) | 0x1)); + if (gen2_calib != 1) { + ill1_val[loop] = ((0x04 + meancount[loop] * 8) % 0x100); + ill12_val[loop] = + ((0x04 + meancount[loop] * 8) >= + 0x100) ? 0x10 : 0x00; + Xil_Out32(0xFFFE0000 + loop * 4, iterresult[loop]); + Xil_Out32(0xFFFE0010 + loop * 4, iterresult[loop + 4]); + Xil_Out32(0xFFFE0020 + loop * 4, bistpasscount[loop]); + Xil_Out32(0xFFFE0030 + loop * 4, meancount[loop]); + } + if (gen2_calib == 1) { + ill1_val[loop] = + ((0x104 + meancount[loop] * 8) % 0x100); + ill12_val[loop] = + ((0x104 + meancount[loop] * 8) >= + 0x200) ? 0x02 : 0x01; + Xil_Out32(0xFFFE0040 + loop * 4, iterresult[loop]); + Xil_Out32(0xFFFE0050 + loop * 4, iterresult[loop + 4]); + Xil_Out32(0xFFFE0060 + loop * 4, bistpasscount[loop]); + Xil_Out32(0xFFFE0070 + loop * 4, meancount[loop]); + } } - if (lane_active == 3) { - psu_mask_write(0xFD410040, 0x000000C0U, 0x00000000U); - psu_mask_write(0xFD410044, 0x000000C0U, 0x00000000U); - psu_mask_write(0xFD41003C, 0x00000070U, 0x00000010U); - Xil_Out32(0xFD40D0AC, 0x0020); - Xil_Out32(0xFD40F004, (Xil_In32(0xFD40F004) | 0x1)); + if (gen2_calib != 1) { + if (lane0_active == 1) + Xil_Out32(0xFD401924, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x000000F0U, ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405924, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x000000F0U, ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409924, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x000000F0U, ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D924, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x000000F0U, ill12_val[3]); + } + if (gen2_calib == 1) { + if (lane0_active == 1) + Xil_Out32(0xFD401928, ill1_val[0]); + if (lane0_active == 1) + psu_mask_write(0xFD401990, 0x0000000FU, ill12_val[0]); + if (lane1_active == 1) + Xil_Out32(0xFD405928, ill1_val[1]); + if (lane1_active == 1) + psu_mask_write(0xFD405990, 0x0000000FU, ill12_val[1]); + if (lane2_active == 1) + Xil_Out32(0xFD409928, ill1_val[2]); + if (lane2_active == 1) + psu_mask_write(0xFD409990, 0x0000000FU, ill12_val[2]); + if (lane3_active == 1) + Xil_Out32(0xFD40D928, ill1_val[3]); + if (lane3_active == 1) + psu_mask_write(0xFD40D990, 0x0000000FU, ill12_val[3]); } - mask_delay(100); - return 1; -} -static int serdes_bist_result(u32 lane_active) -{ - u32 pkt_cnt_l0, pkt_cnt_h0, err_cnt_l0, err_cnt_h0; + if (lane0_active == 1) + psu_mask_write(0xFD401018, 0x00000030U, 0x00000000U); + if (lane1_active == 1) + psu_mask_write(0xFD405018, 0x00000030U, 0x00000000U); + if (lane2_active == 1) + psu_mask_write(0xFD409018, 0x00000030U, 0x00000000U); + if (lane3_active == 1) + psu_mask_write(0xFD40D018, 0x00000030U, 0x00000000U); - if (lane_active == 0) { - pkt_cnt_l0 = Xil_In32(0xFD40304C); - pkt_cnt_h0 = Xil_In32(0xFD403050); - err_cnt_l0 = Xil_In32(0xFD403054); - err_cnt_h0 = Xil_In32(0xFD403058); - } - if (lane_active == 1) { - pkt_cnt_l0 = Xil_In32(0xFD40704C); - pkt_cnt_h0 = Xil_In32(0xFD407050); - err_cnt_l0 = Xil_In32(0xFD407054); - err_cnt_h0 = Xil_In32(0xFD407058); - } - if (lane_active == 2) { - pkt_cnt_l0 = Xil_In32(0xFD40B04C); - pkt_cnt_h0 = Xil_In32(0xFD40B050); - err_cnt_l0 = Xil_In32(0xFD40B054); - err_cnt_h0 = Xil_In32(0xFD40B058); + Xil_Out32(0xFD410098, 0); + if (lane0_active == 1) { + Xil_Out32(0xFD403004, 0); + Xil_Out32(0xFD403008, 0); + Xil_Out32(0xFD40300C, 0); + Xil_Out32(0xFD403010, 0); + Xil_Out32(0xFD403014, 0); + Xil_Out32(0xFD403018, 0); + Xil_Out32(0xFD40301C, 0); + Xil_Out32(0xFD403020, 0); + Xil_Out32(0xFD403024, 0); + Xil_Out32(0xFD403028, 0); + Xil_Out32(0xFD40302C, 0); + Xil_Out32(0xFD403030, 0); + Xil_Out32(0xFD403034, 0); + Xil_Out32(0xFD403038, 0); + Xil_Out32(0xFD40303C, 0); + Xil_Out32(0xFD403040, 0); + Xil_Out32(0xFD403044, 0); + Xil_Out32(0xFD403048, 0); + Xil_Out32(0xFD40304C, 0); + Xil_Out32(0xFD403050, 0); + Xil_Out32(0xFD403054, 0); + Xil_Out32(0xFD403058, 0); + Xil_Out32(0xFD403068, 1); + Xil_Out32(0xFD40306C, 0); + Xil_Out32(0xFD4010AC, 0); + psu_mask_write(0xFD410044, 0x00000003U, 0x00000001U); + psu_mask_write(0xFD410040, 0x00000003U, 0x00000001U); + psu_mask_write(0xFD410038, 0x00000007U, 0x00000000U); } - if (lane_active == 3) { - pkt_cnt_l0 = Xil_In32(0xFD40F04C); - pkt_cnt_h0 = Xil_In32(0xFD40F050); - err_cnt_l0 = Xil_In32(0xFD40F054); - err_cnt_h0 = Xil_In32(0xFD40F058); + if (lane1_active == 1) { + Xil_Out32(0xFD407004, 0); + Xil_Out32(0xFD407008, 0); + Xil_Out32(0xFD40700C, 0); + Xil_Out32(0xFD407010, 0); + Xil_Out32(0xFD407014, 0); + Xil_Out32(0xFD407018, 0); + Xil_Out32(0xFD40701C, 0); + Xil_Out32(0xFD407020, 0); + Xil_Out32(0xFD407024, 0); + Xil_Out32(0xFD407028, 0); + Xil_Out32(0xFD40702C, 0); + Xil_Out32(0xFD407030, 0); + Xil_Out32(0xFD407034, 0); + Xil_Out32(0xFD407038, 0); + Xil_Out32(0xFD40703C, 0); + Xil_Out32(0xFD407040, 0); + Xil_Out32(0xFD407044, 0); + Xil_Out32(0xFD407048, 0); + Xil_Out32(0xFD40704C, 0); + Xil_Out32(0xFD407050, 0); + Xil_Out32(0xFD407054, 0); + Xil_Out32(0xFD407058, 0); + Xil_Out32(0xFD407068, 1); + Xil_Out32(0xFD40706C, 0); + Xil_Out32(0xFD4050AC, 0); + psu_mask_write(0xFD410044, 0x0000000CU, 0x00000004U); + psu_mask_write(0xFD410040, 0x0000000CU, 0x00000004U); + psu_mask_write(0xFD410038, 0x00000070U, 0x00000000U); } - if (lane_active == 0) - Xil_Out32(0xFD403004, 0x0); - if (lane_active == 1) - Xil_Out32(0xFD407004, 0x0); - if (lane_active == 2) - Xil_Out32(0xFD40B004, 0x0); - if (lane_active == 3) - Xil_Out32(0xFD40F004, 0x0); - if (err_cnt_l0 > 0 || err_cnt_h0 > 0 || - (pkt_cnt_l0 == 0 && pkt_cnt_h0 == 0)) - return 0; - return 1; -} - -static int serdes_illcalib_pcie_gen1(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate, - u32 gen2_calib) -{ - u64 tempbistresult; - u32 currbistresult[4]; - u32 prevbistresult[4]; - u32 itercount = 0; - u32 ill12_val[4], ill1_val[4]; - u32 loop = 0; - u32 iterresult[8]; - u32 meancount[4]; - u32 bistpasscount[4]; - u32 meancountalt[4]; - u32 meancountalt_bistpasscount[4]; - u32 lane0_active; - u32 lane1_active; - u32 lane2_active; - u32 lane3_active; - - lane0_active = (lane0_protocol == 1); - lane1_active = (lane1_protocol == 1); - lane2_active = (lane2_protocol == 1); - lane3_active = (lane3_protocol == 1); - for (loop = 0; loop <= 3; loop++) { - iterresult[loop] = 0; - iterresult[loop + 4] = 0; - meancountalt[loop] = 0; - meancountalt_bistpasscount[loop] = 0; - meancount[loop] = 0; - prevbistresult[loop] = 0; - bistpasscount[loop] = 0; + if (lane2_active == 1) { + Xil_Out32(0xFD40B004, 0); + Xil_Out32(0xFD40B008, 0); + Xil_Out32(0xFD40B00C, 0); + Xil_Out32(0xFD40B010, 0); + Xil_Out32(0xFD40B014, 0); + Xil_Out32(0xFD40B018, 0); + Xil_Out32(0xFD40B01C, 0); + Xil_Out32(0xFD40B020, 0); + Xil_Out32(0xFD40B024, 0); + Xil_Out32(0xFD40B028, 0); + Xil_Out32(0xFD40B02C, 0); + Xil_Out32(0xFD40B030, 0); + Xil_Out32(0xFD40B034, 0); + Xil_Out32(0xFD40B038, 0); + Xil_Out32(0xFD40B03C, 0); + Xil_Out32(0xFD40B040, 0); + Xil_Out32(0xFD40B044, 0); + Xil_Out32(0xFD40B048, 0); + Xil_Out32(0xFD40B04C, 0); + Xil_Out32(0xFD40B050, 0); + Xil_Out32(0xFD40B054, 0); + Xil_Out32(0xFD40B058, 0); + Xil_Out32(0xFD40B068, 1); + Xil_Out32(0xFD40B06C, 0); + Xil_Out32(0xFD4090AC, 0); + psu_mask_write(0xFD410044, 0x00000030U, 0x00000010U); + psu_mask_write(0xFD410040, 0x00000030U, 0x00000010U); + psu_mask_write(0xFD41003C, 0x00000007U, 0x00000000U); } - itercount = 0; - if (lane0_active) - serdes_bist_static_settings(0); - if (lane1_active) - serdes_bist_static_settings(1); - if (lane2_active) - serdes_bist_static_settings(2); - if (lane3_active) - serdes_bist_static_settings(3); - do { - if (gen2_calib != 1) { - if (lane0_active == 1) - ill1_val[0] = ((0x04 + itercount * 8) % 0x100); - if (lane0_active == 1) - ill12_val[0] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane1_active == 1) - ill1_val[1] = ((0x04 + itercount * 8) % 0x100); - if (lane1_active == 1) - ill12_val[1] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane2_active == 1) - ill1_val[2] = ((0x04 + itercount * 8) % 0x100); - if (lane2_active == 1) - ill12_val[2] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; - if (lane3_active == 1) - ill1_val[3] = ((0x04 + itercount * 8) % 0x100); - if (lane3_active == 1) - ill12_val[3] = - ((0x04 + itercount * 8) >= - 0x100) ? 0x10 : 0x00; + if (lane3_active == 1) { + Xil_Out32(0xFD40F004, 0); + Xil_Out32(0xFD40F008, 0); + Xil_Out32(0xFD40F00C, 0); + Xil_Out32(0xFD40F010, 0); + Xil_Out32(0xFD40F014, 0); + Xil_Out32(0xFD40F018, 0); + Xil_Out32(0xFD40F01C, 0); + Xil_Out32(0xFD40F020, 0); + Xil_Out32(0xFD40F024, 0); + Xil_Out32(0xFD40F028, 0); + Xil_Out32(0xFD40F02C, 0); + Xil_Out32(0xFD40F030, 0); + Xil_Out32(0xFD40F034, 0); + Xil_Out32(0xFD40F038, 0); + Xil_Out32(0xFD40F03C, 0); + Xil_Out32(0xFD40F040, 0); + Xil_Out32(0xFD40F044, 0); + Xil_Out32(0xFD40F048, 0); + Xil_Out32(0xFD40F04C, 0); + Xil_Out32(0xFD40F050, 0); + Xil_Out32(0xFD40F054, 0); + Xil_Out32(0xFD40F058, 0); + Xil_Out32(0xFD40F068, 1); + Xil_Out32(0xFD40F06C, 0); + Xil_Out32(0xFD40D0AC, 0); + psu_mask_write(0xFD410044, 0x000000C0U, 0x00000040U); + psu_mask_write(0xFD410040, 0x000000C0U, 0x00000040U); + psu_mask_write(0xFD41003C, 0x00000070U, 0x00000000U); + } + return 1; +} - if (lane0_active == 1) - Xil_Out32(0xFD401924, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x000000F0U, - ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405924, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x000000F0U, - ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409924, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x000000F0U, - ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D924, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x000000F0U, - ill12_val[3]); - } - if (gen2_calib == 1) { - if (lane0_active == 1) - ill1_val[0] = ((0x104 + itercount * 8) % 0x100); - if (lane0_active == 1) - ill12_val[0] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane1_active == 1) - ill1_val[1] = ((0x104 + itercount * 8) % 0x100); - if (lane1_active == 1) - ill12_val[1] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane2_active == 1) - ill1_val[2] = ((0x104 + itercount * 8) % 0x100); - if (lane2_active == 1) - ill12_val[2] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; - if (lane3_active == 1) - ill1_val[3] = ((0x104 + itercount * 8) % 0x100); - if (lane3_active == 1) - ill12_val[3] = - ((0x104 + itercount * 8) >= - 0x200) ? 0x02 : 0x01; +static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, + u32 lane2_protocol, u32 lane2_rate, + u32 lane1_protocol, u32 lane1_rate, + u32 lane0_protocol, u32 lane0_rate) +{ + unsigned int rdata = 0; + unsigned int sata_gen2 = 1; + unsigned int temp_ill12 = 0; + unsigned int temp_PLL_REF_SEL_OFFSET; + unsigned int temp_TM_IQ_ILL1; + unsigned int temp_TM_E_ILL1; + unsigned int temp_tx_dig_tm_61; + unsigned int temp_tm_dig_6; + unsigned int temp_pll_fbdiv_frac_3_msb_offset; - if (lane0_active == 1) - Xil_Out32(0xFD401928, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x0000000FU, - ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405928, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x0000000FU, - ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409928, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x0000000FU, - ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D928, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x0000000FU, - ill12_val[3]); - } + if (lane0_protocol == 2 || lane0_protocol == 1) { + Xil_Out32(0xFD401910, 0xF3); + Xil_Out32(0xFD40193C, 0xF3); + Xil_Out32(0xFD401914, 0xF3); + Xil_Out32(0xFD401940, 0xF3); + } + if (lane1_protocol == 2 || lane1_protocol == 1) { + Xil_Out32(0xFD405910, 0xF3); + Xil_Out32(0xFD40593C, 0xF3); + Xil_Out32(0xFD405914, 0xF3); + Xil_Out32(0xFD405940, 0xF3); + } + if (lane2_protocol == 2 || lane2_protocol == 1) { + Xil_Out32(0xFD409910, 0xF3); + Xil_Out32(0xFD40993C, 0xF3); + Xil_Out32(0xFD409914, 0xF3); + Xil_Out32(0xFD409940, 0xF3); + } + if (lane3_protocol == 2 || lane3_protocol == 1) { + Xil_Out32(0xFD40D910, 0xF3); + Xil_Out32(0xFD40D93C, 0xF3); + Xil_Out32(0xFD40D914, 0xF3); + Xil_Out32(0xFD40D940, 0xF3); + } - if (lane0_active == 1) - psu_mask_write(0xFD401018, 0x00000030U, 0x00000010U); - if (lane1_active == 1) - psu_mask_write(0xFD405018, 0x00000030U, 0x00000010U); - if (lane2_active == 1) - psu_mask_write(0xFD409018, 0x00000030U, 0x00000010U); - if (lane3_active == 1) - psu_mask_write(0xFD40D018, 0x00000030U, 0x00000010U); - if (lane0_active == 1) - currbistresult[0] = 0; - if (lane1_active == 1) - currbistresult[1] = 0; - if (lane2_active == 1) - currbistresult[2] = 0; - if (lane3_active == 1) - currbistresult[3] = 0; - serdes_rst_seq(lane3_protocol, lane3_rate, lane2_protocol, - lane2_rate, lane1_protocol, lane1_rate, - lane0_protocol, lane0_rate); - if (lane3_active == 1) - serdes_bist_run(3); - if (lane2_active == 1) - serdes_bist_run(2); - if (lane1_active == 1) - serdes_bist_run(1); - if (lane0_active == 1) - serdes_bist_run(0); - tempbistresult = 0; - if (lane3_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(3); - tempbistresult = tempbistresult << 1; - if (lane2_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(2); - tempbistresult = tempbistresult << 1; - if (lane1_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(1); - tempbistresult = tempbistresult << 1; - if (lane0_active == 1) - tempbistresult = tempbistresult | serdes_bist_result(0); - Xil_Out32(0xFD410098, 0x0); - Xil_Out32(0xFD410098, 0x2); + if (sata_gen2 == 1) { + if (lane0_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD402360); + Xil_Out32(0xFD402360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410000); + psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4018F8); + temp_TM_E_ILL1 = Xil_In32(0xFD401924); + Xil_Out32(0xFD4018F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4000F4); + temp_tm_dig_6 = Xil_In32(0xFD40106C); + psu_mask_write(0xFD4000F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40106C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD401990) & 0xF0; - if (itercount < 32) { - iterresult[0] = - ((iterresult[0] << 1) | - ((tempbistresult & 0x1) == 0x1)); - iterresult[1] = - ((iterresult[1] << 1) | - ((tempbistresult & 0x2) == 0x2)); - iterresult[2] = - ((iterresult[2] << 1) | - ((tempbistresult & 0x4) == 0x4)); - iterresult[3] = - ((iterresult[3] << 1) | - ((tempbistresult & 0x8) == 0x8)); - } else { - iterresult[4] = - ((iterresult[4] << 1) | - ((tempbistresult & 0x1) == 0x1)); - iterresult[5] = - ((iterresult[5] << 1) | - ((tempbistresult & 0x2) == 0x2)); - iterresult[6] = - ((iterresult[6] << 1) | - ((tempbistresult & 0x4) == 0x4)); - iterresult[7] = - ((iterresult[7] << 1) | - ((tempbistresult & 0x8) == 0x8)); - } - currbistresult[0] = - currbistresult[0] | ((tempbistresult & 0x1) == 1); - currbistresult[1] = - currbistresult[1] | ((tempbistresult & 0x2) == 0x2); - currbistresult[2] = - currbistresult[2] | ((tempbistresult & 0x4) == 0x4); - currbistresult[3] = - currbistresult[3] | ((tempbistresult & 0x8) == 0x8); + serdes_illcalib_pcie_gen1(0, 0, 0, 0, 0, 0, 1, 0, 0); - for (loop = 0; loop <= 3; loop++) { - if (currbistresult[loop] == 1 && prevbistresult[loop] == 1) - bistpasscount[loop] = bistpasscount[loop] + 1; - if (bistpasscount[loop] < 4 && currbistresult[loop] == 0 && - itercount > 2) { - if (meancountalt_bistpasscount[loop] < - bistpasscount[loop]) { - meancountalt_bistpasscount[loop] = - bistpasscount[loop]; - meancountalt[loop] = - ((itercount - 1) - - ((bistpasscount[loop] + 1) / 2)); - } - bistpasscount[loop] = 0; - } - if (meancount[loop] == 0 && bistpasscount[loop] >= 4 && - (currbistresult[loop] == 0 || itercount == 63) && - prevbistresult[loop] == 1) - meancount[loop] = - (itercount - 1) - - ((bistpasscount[loop] + 1) / 2); - prevbistresult[loop] = currbistresult[loop]; + Xil_Out32(0xFD402360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4018F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4000F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40106C, temp_tm_dig_6); + Xil_Out32(0xFD401928, Xil_In32(0xFD401924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD401990) >> 4 & 0xF); + Xil_Out32(0xFD401990, temp_ill12); + Xil_Out32(0xFD401924, temp_TM_E_ILL1); } - } while (++itercount < 64); + if (lane1_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD406360); + Xil_Out32(0xFD406360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410004); + psu_mask_write(0xFD410004, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4058F8); + temp_TM_E_ILL1 = Xil_In32(0xFD405924); + Xil_Out32(0xFD4058F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4040F4); + temp_tm_dig_6 = Xil_In32(0xFD40506C); + psu_mask_write(0xFD4040F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40506C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD405990) & 0xF0; - for (loop = 0; loop <= 3; loop++) { - if (lane0_active == 0 && loop == 0) - continue; - if (lane1_active == 0 && loop == 1) - continue; - if (lane2_active == 0 && loop == 2) - continue; - if (lane3_active == 0 && loop == 3) - continue; + serdes_illcalib_pcie_gen1(0, 0, 0, 0, 1, 0, 0, 0, 0); - if (meancount[loop] == 0) - meancount[loop] = meancountalt[loop]; + Xil_Out32(0xFD406360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4058F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4040F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40506C, temp_tm_dig_6); + Xil_Out32(0xFD405928, Xil_In32(0xFD405924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD405990) >> 4 & 0xF); + Xil_Out32(0xFD405990, temp_ill12); + Xil_Out32(0xFD405924, temp_TM_E_ILL1); + } + if (lane2_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40A360); + Xil_Out32(0xFD40A360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410008); + psu_mask_write(0xFD410008, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD4098F8); + temp_TM_E_ILL1 = Xil_In32(0xFD409924); + Xil_Out32(0xFD4098F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD4080F4); + temp_tm_dig_6 = Xil_In32(0xFD40906C); + psu_mask_write(0xFD4080F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40906C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD409990) & 0xF0; - if (gen2_calib != 1) { - ill1_val[loop] = ((0x04 + meancount[loop] * 8) % 0x100); - ill12_val[loop] = - ((0x04 + meancount[loop] * 8) >= - 0x100) ? 0x10 : 0x00; - Xil_Out32(0xFFFE0000 + loop * 4, iterresult[loop]); - Xil_Out32(0xFFFE0010 + loop * 4, iterresult[loop + 4]); - Xil_Out32(0xFFFE0020 + loop * 4, bistpasscount[loop]); - Xil_Out32(0xFFFE0030 + loop * 4, meancount[loop]); + serdes_illcalib_pcie_gen1(0, 0, 1, 0, 0, 0, 0, 0, 0); + + Xil_Out32(0xFD40A360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD4098F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD4080F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40906C, temp_tm_dig_6); + Xil_Out32(0xFD409928, Xil_In32(0xFD409924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD409990) >> 4 & 0xF); + Xil_Out32(0xFD409990, temp_ill12); + Xil_Out32(0xFD409924, temp_TM_E_ILL1); } - if (gen2_calib == 1) { - ill1_val[loop] = - ((0x104 + meancount[loop] * 8) % 0x100); - ill12_val[loop] = - ((0x104 + meancount[loop] * 8) >= - 0x200) ? 0x02 : 0x01; - Xil_Out32(0xFFFE0040 + loop * 4, iterresult[loop]); - Xil_Out32(0xFFFE0050 + loop * 4, iterresult[loop + 4]); - Xil_Out32(0xFFFE0060 + loop * 4, bistpasscount[loop]); - Xil_Out32(0xFFFE0070 + loop * 4, meancount[loop]); + if (lane3_protocol == 2) { + temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40E360); + Xil_Out32(0xFD40E360, 0x0); + temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD41000C); + psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000DU); + temp_TM_IQ_ILL1 = Xil_In32(0xFD40D8F8); + temp_TM_E_ILL1 = Xil_In32(0xFD40D924); + Xil_Out32(0xFD40D8F8, 0x78); + temp_tx_dig_tm_61 = Xil_In32(0xFD40C0F4); + temp_tm_dig_6 = Xil_In32(0xFD40D06C); + psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x00000000U); + psu_mask_write(0xFD40D06C, 0x0000000FU, 0x00000000U); + temp_ill12 = Xil_In32(0xFD40D990) & 0xF0; + + serdes_illcalib_pcie_gen1(1, 0, 0, 0, 0, 0, 0, 0, 0); + + Xil_Out32(0xFD40E360, temp_pll_fbdiv_frac_3_msb_offset); + Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); + Xil_Out32(0xFD40D8F8, temp_TM_IQ_ILL1); + Xil_Out32(0xFD40C0F4, temp_tx_dig_tm_61); + Xil_Out32(0xFD40D06C, temp_tm_dig_6); + Xil_Out32(0xFD40D928, Xil_In32(0xFD40D924)); + temp_ill12 = + temp_ill12 | (Xil_In32(0xFD40D990) >> 4 & 0xF); + Xil_Out32(0xFD40D990, temp_ill12); + Xil_Out32(0xFD40D924, temp_TM_E_ILL1); } + rdata = Xil_In32(0xFD410098); + rdata = (rdata & 0xDF); + Xil_Out32(0xFD410098, rdata); } - if (gen2_calib != 1) { - if (lane0_active == 1) - Xil_Out32(0xFD401924, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x000000F0U, ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405924, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x000000F0U, ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409924, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x000000F0U, ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D924, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x000000F0U, ill12_val[3]); + + if (lane0_protocol == 2 && lane0_rate == 3) { + psu_mask_write(0xFD40198C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000094U); } - if (gen2_calib == 1) { - if (lane0_active == 1) - Xil_Out32(0xFD401928, ill1_val[0]); - if (lane0_active == 1) - psu_mask_write(0xFD401990, 0x0000000FU, ill12_val[0]); - if (lane1_active == 1) - Xil_Out32(0xFD405928, ill1_val[1]); - if (lane1_active == 1) - psu_mask_write(0xFD405990, 0x0000000FU, ill12_val[1]); - if (lane2_active == 1) - Xil_Out32(0xFD409928, ill1_val[2]); - if (lane2_active == 1) - psu_mask_write(0xFD409990, 0x0000000FU, ill12_val[2]); - if (lane3_active == 1) - Xil_Out32(0xFD40D928, ill1_val[3]); - if (lane3_active == 1) - psu_mask_write(0xFD40D990, 0x0000000FU, ill12_val[3]); + if (lane1_protocol == 2 && lane1_rate == 3) { + psu_mask_write(0xFD40598C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40592C, 0x000000FFU, 0x00000094U); + } + if (lane2_protocol == 2 && lane2_rate == 3) { + psu_mask_write(0xFD40998C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000094U); + } + if (lane3_protocol == 2 && lane3_rate == 3) { + psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000094U); + } + + if (lane0_protocol == 1) { + if (lane0_rate == 0) { + serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, 0, 0); + } else { + serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, 0, 0); + serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, + lane2_protocol, lane2_rate, + lane1_protocol, lane1_rate, + lane0_protocol, lane0_rate, + 1); + } } - if (lane0_active == 1) - psu_mask_write(0xFD401018, 0x00000030U, 0x00000000U); - if (lane1_active == 1) - psu_mask_write(0xFD405018, 0x00000030U, 0x00000000U); - if (lane2_active == 1) - psu_mask_write(0xFD409018, 0x00000030U, 0x00000000U); - if (lane3_active == 1) - psu_mask_write(0xFD40D018, 0x00000030U, 0x00000000U); + if (lane0_protocol == 3) + Xil_Out32(0xFD401914, 0xF3); + if (lane0_protocol == 3) + Xil_Out32(0xFD401940, 0xF3); + if (lane0_protocol == 3) + Xil_Out32(0xFD401990, 0x20); + if (lane0_protocol == 3) + Xil_Out32(0xFD401924, 0x37); + + if (lane1_protocol == 3) + Xil_Out32(0xFD405914, 0xF3); + if (lane1_protocol == 3) + Xil_Out32(0xFD405940, 0xF3); + if (lane1_protocol == 3) + Xil_Out32(0xFD405990, 0x20); + if (lane1_protocol == 3) + Xil_Out32(0xFD405924, 0x37); + + if (lane2_protocol == 3) + Xil_Out32(0xFD409914, 0xF3); + if (lane2_protocol == 3) + Xil_Out32(0xFD409940, 0xF3); + if (lane2_protocol == 3) + Xil_Out32(0xFD409990, 0x20); + if (lane2_protocol == 3) + Xil_Out32(0xFD409924, 0x37); + + if (lane3_protocol == 3) + Xil_Out32(0xFD40D914, 0xF3); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D940, 0xF3); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D990, 0x20); + if (lane3_protocol == 3) + Xil_Out32(0xFD40D924, 0x37); + + return 1; +} + +static unsigned long psu_pll_init_data(void) +{ + psu_mask_write(0xFF5E0034, 0xFE7FEDEFU, 0x7E4B0C82U); + psu_mask_write(0xFF5E0030, 0x00717F00U, 0x00015A00U); + psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0030, 0x00000001U, 0x00000000U); + mask_poll(0xFF5E0040, 0x00000002U); + psu_mask_write(0xFF5E0030, 0x00000008U, 0x00000000U); + psu_mask_write(0xFF5E0048, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012300U); + psu_mask_write(0xFF5E0024, 0xFE7FEDEFU, 0x7E4B0C82U); + psu_mask_write(0xFF5E0020, 0x00717F00U, 0x00015A00U); + psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0020, 0x00000001U, 0x00000000U); + mask_poll(0xFF5E0040, 0x00000001U); + psu_mask_write(0xFF5E0020, 0x00000008U, 0x00000000U); + psu_mask_write(0xFF5E0044, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFD1A0024, 0xFE7FEDEFU, 0x7E4B0C62U); + psu_mask_write(0xFD1A0020, 0x00717F00U, 0x00014800U); + psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A0020, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000001U); + psu_mask_write(0xFD1A0020, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A0048, 0x00003F00U, 0x00000300U); + psu_mask_write(0xFD1A0030, 0xFE7FEDEFU, 0x7E4B0C62U); + psu_mask_write(0xFD1A002C, 0x00717F00U, 0x00013F00U); + psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A002C, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000002U); + psu_mask_write(0xFD1A002C, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A004C, 0x00003F00U, 0x00000200U); + psu_mask_write(0xFD1A003C, 0xFE7FEDEFU, 0x7E4B0C82U); + psu_mask_write(0xFD1A0038, 0x00717F00U, 0x00015A00U); + psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD1A0038, 0x00000001U, 0x00000000U); + mask_poll(0xFD1A0044, 0x00000004U); + psu_mask_write(0xFD1A0038, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD1A0050, 0x00003F00U, 0x00000300U); + + return 1; +} + +static unsigned long psu_clock_init_data(void) +{ + psu_mask_write(0xFF5E005C, 0x063F3F07U, 0x06010C00U); + psu_mask_write(0xFF5E0100, 0x013F3F07U, 0x01010600U); + psu_mask_write(0xFF5E0060, 0x023F3F07U, 0x02010600U); + psu_mask_write(0xFF5E004C, 0x023F3F07U, 0x02031900U); + psu_mask_write(0xFF5E0068, 0x013F3F07U, 0x01010C00U); + psu_mask_write(0xFF5E0070, 0x013F3F07U, 0x01010800U); + psu_mask_write(0xFF18030C, 0x00020000U, 0x00000000U); + psu_mask_write(0xFF5E0074, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0120, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0124, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0090, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E009C, 0x01003F07U, 0x01000602U); + psu_mask_write(0xFF5E00A4, 0x01003F07U, 0x01000800U); + psu_mask_write(0xFF5E00A8, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E00AC, 0x01003F07U, 0x01000F02U); + psu_mask_write(0xFF5E00B0, 0x01003F07U, 0x01000602U); + psu_mask_write(0xFF5E00B8, 0x01003F07U, 0x01000302U); + psu_mask_write(0xFF5E00C0, 0x013F3F07U, 0x01010F00U); + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01011E02U); + psu_mask_write(0xFF5E0104, 0x00000007U, 0x00000000U); + psu_mask_write(0xFF5E0128, 0x01003F07U, 0x01000F00U); + psu_mask_write(0xFD1A00A0, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A0060, 0x03003F07U, 0x03000100U); + psu_mask_write(0xFD1A0068, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A0080, 0x00003F07U, 0x00000200U); + psu_mask_write(0xFD1A00B8, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A00BC, 0x01003F07U, 0x01000200U); + psu_mask_write(0xFD1A00C0, 0x01003F07U, 0x01000203U); + psu_mask_write(0xFD1A00C4, 0x01003F07U, 0x01000502U); + psu_mask_write(0xFD1A00F8, 0x00003F07U, 0x00000200U); + psu_mask_write(0xFF180380, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD610100, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF180300, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF410050, 0x00000001U, 0x00000000U); + + return 1; +} + +static unsigned long psu_ddr_init_data(void) +{ + psu_mask_write(0xFD1A0108, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD070000, 0xE30FBE3DU, 0x81040010U); + psu_mask_write(0xFD070010, 0x8000F03FU, 0x00000030U); + psu_mask_write(0xFD070020, 0x000003F3U, 0x00000200U); + psu_mask_write(0xFD070024, 0xFFFFFFFFU, 0x00800000U); + psu_mask_write(0xFD070030, 0x0000007FU, 0x00000000U); + psu_mask_write(0xFD070034, 0x00FFFF1FU, 0x00408210U); + psu_mask_write(0xFD070050, 0x00F1F1F4U, 0x00210000U); + psu_mask_write(0xFD070054, 0x0FFF0FFFU, 0x00000000U); + psu_mask_write(0xFD070060, 0x00000073U, 0x00000001U); + psu_mask_write(0xFD070064, 0x0FFF83FFU, 0x007F80B8U); + psu_mask_write(0xFD070070, 0x00000017U, 0x00000010U); + psu_mask_write(0xFD070074, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD0700C4, 0x3F000391U, 0x10000200U); + psu_mask_write(0xFD0700C8, 0x01FF1F3FU, 0x0040051FU); + psu_mask_write(0xFD0700D0, 0xC3FF0FFFU, 0x00020102U); + psu_mask_write(0xFD0700D4, 0x01FF7F0FU, 0x00020000U); + psu_mask_write(0xFD0700D8, 0x0000FF0FU, 0x00002205U); + psu_mask_write(0xFD0700DC, 0xFFFFFFFFU, 0x07300301U); + psu_mask_write(0xFD0700E0, 0xFFFFFFFFU, 0x00100200U); + psu_mask_write(0xFD0700E4, 0x00FF03FFU, 0x00210004U); + psu_mask_write(0xFD0700E8, 0xFFFFFFFFU, 0x000006C0U); + psu_mask_write(0xFD0700EC, 0xFFFF0000U, 0x08190000U); + psu_mask_write(0xFD0700F0, 0x0000003FU, 0x00000010U); + psu_mask_write(0xFD0700F4, 0x00000FFFU, 0x0000066FU); + psu_mask_write(0xFD070100, 0x7F3F7F3FU, 0x0F102311U); + psu_mask_write(0xFD070104, 0x001F1F7FU, 0x00040419U); + psu_mask_write(0xFD070108, 0x3F3F3F3FU, 0x0608070CU); + psu_mask_write(0xFD07010C, 0x3FF3F3FFU, 0x0050400CU); + psu_mask_write(0xFD070110, 0x1F0F0F1FU, 0x08030409U); + psu_mask_write(0xFD070114, 0x0F0F3F1FU, 0x06060403U); + psu_mask_write(0xFD070118, 0x0F0F000FU, 0x01010004U); + psu_mask_write(0xFD07011C, 0x00000F0FU, 0x00000606U); + psu_mask_write(0xFD070120, 0x7F7F7F7FU, 0x04040D07U); + psu_mask_write(0xFD070124, 0x40070F3FU, 0x00020309U); + psu_mask_write(0xFD07012C, 0x7F1F031FU, 0x1207010EU); + psu_mask_write(0xFD070130, 0x00030F1FU, 0x00020608U); + psu_mask_write(0xFD070180, 0xF7FF03FFU, 0x81000040U); + psu_mask_write(0xFD070184, 0x3FFFFFFFU, 0x0201908AU); + psu_mask_write(0xFD070190, 0x1FBFBF3FU, 0x048B8208U); + psu_mask_write(0xFD070194, 0xF31F0F0FU, 0x00030304U); + psu_mask_write(0xFD070198, 0x0FF1F1F1U, 0x07000101U); + psu_mask_write(0xFD07019C, 0x000000F1U, 0x00000021U); + psu_mask_write(0xFD0701A0, 0xC3FF03FFU, 0x00400003U); + psu_mask_write(0xFD0701A4, 0x00FF00FFU, 0x00C800FFU); + psu_mask_write(0xFD0701B0, 0x00000007U, 0x00000000U); + psu_mask_write(0xFD0701B4, 0x00003F3FU, 0x00000906U); + psu_mask_write(0xFD0701C0, 0x00000007U, 0x00000001U); + psu_mask_write(0xFD070200, 0x0000001FU, 0x0000001FU); + psu_mask_write(0xFD070204, 0x001F1F1FU, 0x001F0909U); + psu_mask_write(0xFD070208, 0x0F0F0F0FU, 0x01010100U); + psu_mask_write(0xFD07020C, 0x0F0F0F0FU, 0x01010101U); + psu_mask_write(0xFD070210, 0x00000F0FU, 0x00000F0FU); + psu_mask_write(0xFD070214, 0x0F0F0F0FU, 0x070F0707U); + psu_mask_write(0xFD070218, 0x8F0F0F0FU, 0x07070707U); + psu_mask_write(0xFD07021C, 0x00000F0FU, 0x00000F0FU); + psu_mask_write(0xFD070220, 0x00001F1FU, 0x00001F01U); + psu_mask_write(0xFD070224, 0x0F0F0F0FU, 0x07070707U); + psu_mask_write(0xFD070228, 0x0F0F0F0FU, 0x07070707U); + psu_mask_write(0xFD07022C, 0x0000000FU, 0x00000007U); + psu_mask_write(0xFD070240, 0x0F1F0F7CU, 0x0600060CU); + psu_mask_write(0xFD070244, 0x00003333U, 0x00000001U); + psu_mask_write(0xFD070250, 0x7FFF3F07U, 0x01002001U); + psu_mask_write(0xFD070264, 0xFF00FFFFU, 0x08000040U); + psu_mask_write(0xFD07026C, 0xFF00FFFFU, 0x08000040U); + psu_mask_write(0xFD070280, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070284, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070288, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD07028C, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD070290, 0x0000FFFFU, 0x00000000U); + psu_mask_write(0xFD070294, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070300, 0x00000011U, 0x00000000U); + psu_mask_write(0xFD07030C, 0x80000033U, 0x00000000U); + psu_mask_write(0xFD070320, 0x00000001U, 0x00000000U); + psu_mask_write(0xFD070400, 0x00000111U, 0x00000001U); + psu_mask_write(0xFD070404, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070408, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070490, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070494, 0x0033000FU, 0x0020000BU); + psu_mask_write(0xFD070498, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD0704B4, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0704B8, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070540, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070544, 0x03330F0FU, 0x02000B03U); + psu_mask_write(0xFD070548, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD070564, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070568, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0705F0, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD0705F4, 0x03330F0FU, 0x02000B03U); + psu_mask_write(0xFD0705F8, 0x07FF07FFU, 0x00000000U); + psu_mask_write(0xFD070614, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070618, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0706A0, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD0706A4, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD0706A8, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD0706AC, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD0706B0, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD0706C4, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD0706C8, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070750, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070754, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070758, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD07075C, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070760, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD070774, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070778, 0x000073FFU, 0x0000200FU); + psu_mask_write(0xFD070800, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD070804, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070808, 0x07FF07FFU, 0x0000004FU); + psu_mask_write(0xFD07080C, 0x0033000FU, 0x00100003U); + psu_mask_write(0xFD070810, 0x000007FFU, 0x0000004FU); + psu_mask_write(0xFD070F04, 0x000001FFU, 0x00000000U); + psu_mask_write(0xFD070F08, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD070F0C, 0x000001FFU, 0x00000010U); + psu_mask_write(0xFD070F10, 0x000000FFU, 0x0000000FU); + psu_mask_write(0xFD072190, 0x1FBFBF3FU, 0x07828002U); + psu_mask_write(0xFD1A0108, 0x0000000CU, 0x00000000U); + psu_mask_write(0xFD080010, 0xFFFFFFFFU, 0x07001E00U); + psu_mask_write(0xFD080018, 0xFFFFFFFFU, 0x00F0FC00U); + psu_mask_write(0xFD08001C, 0xFFFFFFFFU, 0x55AA5480U); + psu_mask_write(0xFD080024, 0xFFFFFFFFU, 0x010100F4U); + psu_mask_write(0xFD080040, 0xFFFFFFFFU, 0x41A20D10U); + psu_mask_write(0xFD080044, 0xFFFFFFFFU, 0xCD141275U); + psu_mask_write(0xFD080068, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD080090, 0xFFFFFFFFU, 0x02A04161U); + psu_mask_write(0xFD0800C0, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD0800C4, 0xFFFFFFFFU, 0x000000E3U); + psu_mask_write(0xFD080100, 0xFFFFFFFFU, 0x0800040CU); + psu_mask_write(0xFD080110, 0xFFFFFFFFU, 0x07220F08U); + psu_mask_write(0xFD080114, 0xFFFFFFFFU, 0x28200008U); + psu_mask_write(0xFD080118, 0xFFFFFFFFU, 0x000F0300U); + psu_mask_write(0xFD08011C, 0xFFFFFFFFU, 0x83000800U); + psu_mask_write(0xFD080120, 0xFFFFFFFFU, 0x01702B07U); + psu_mask_write(0xFD080124, 0xFFFFFFFFU, 0x00310F08U); + psu_mask_write(0xFD080128, 0xFFFFFFFFU, 0x00000B0FU); + psu_mask_write(0xFD080140, 0xFFFFFFFFU, 0x08400020U); + psu_mask_write(0xFD080144, 0xFFFFFFFFU, 0x00000C80U); + psu_mask_write(0xFD080150, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080154, 0xFFFFFFFFU, 0x00000200U); + psu_mask_write(0xFD080180, 0xFFFFFFFFU, 0x00000630U); + psu_mask_write(0xFD080184, 0xFFFFFFFFU, 0x00000301U); + psu_mask_write(0xFD080188, 0xFFFFFFFFU, 0x00000010U); + psu_mask_write(0xFD08018C, 0xFFFFFFFFU, 0x00000200U); + psu_mask_write(0xFD080190, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080194, 0xFFFFFFFFU, 0x000006C0U); + psu_mask_write(0xFD080198, 0xFFFFFFFFU, 0x00000819U); + psu_mask_write(0xFD0801AC, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD0801B0, 0xFFFFFFFFU, 0x0000004DU); + psu_mask_write(0xFD0801B4, 0xFFFFFFFFU, 0x00000008U); + psu_mask_write(0xFD0801B8, 0xFFFFFFFFU, 0x0000004DU); + psu_mask_write(0xFD0801D8, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080200, 0xFFFFFFFFU, 0x800091C7U); + psu_mask_write(0xFD080204, 0xFFFFFFFFU, 0x00010236U); + psu_mask_write(0xFD080240, 0xFFFFFFFFU, 0x00141054U); + psu_mask_write(0xFD080250, 0xFFFFFFFFU, 0x00088000U); + psu_mask_write(0xFD080414, 0xFFFFFFFFU, 0x12341000U); + psu_mask_write(0xFD0804F4, 0xFFFFFFFFU, 0x00000005U); + psu_mask_write(0xFD080500, 0xFFFFFFFFU, 0x30000028U); + psu_mask_write(0xFD080508, 0xFFFFFFFFU, 0x0A000000U); + psu_mask_write(0xFD08050C, 0xFFFFFFFFU, 0x00000009U); + psu_mask_write(0xFD080510, 0xFFFFFFFFU, 0x0A000000U); + psu_mask_write(0xFD080520, 0xFFFFFFFFU, 0x0300B0CEU); + psu_mask_write(0xFD080528, 0xFFFFFFFFU, 0xF9032019U); + psu_mask_write(0xFD08052C, 0xFFFFFFFFU, 0x07F001E3U); + psu_mask_write(0xFD080544, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080548, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080558, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD08055C, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080560, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080564, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080680, 0xFFFFFFFFU, 0x008A8A58U); + psu_mask_write(0xFD080684, 0xFFFFFFFFU, 0x000079DDU); + psu_mask_write(0xFD080694, 0xFFFFFFFFU, 0x01E10210U); + psu_mask_write(0xFD080698, 0xFFFFFFFFU, 0x01E10000U); + psu_mask_write(0xFD0806A4, 0xFFFFFFFFU, 0x00087BDBU); + psu_mask_write(0xFD080700, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080704, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08070C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080710, 0xFFFFFFFFU, 0x0E00B03CU); + psu_mask_write(0xFD080714, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080718, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080800, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080804, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08080C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080810, 0xFFFFFFFFU, 0x0E00B03CU); + psu_mask_write(0xFD080814, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080818, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080900, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080904, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD08090C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080910, 0xFFFFFFFFU, 0x0E00B004U); + psu_mask_write(0xFD080914, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080918, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080A00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080A04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080A0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080A10, 0xFFFFFFFFU, 0x0E00B004U); + psu_mask_write(0xFD080A14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080A18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080B00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080B04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080B08, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080B0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080B10, 0xFFFFFFFFU, 0x0E00B004U); + psu_mask_write(0xFD080B14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080B18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080C00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080C04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080C08, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080C0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080C10, 0xFFFFFFFFU, 0x0E00B03CU); + psu_mask_write(0xFD080C14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080C18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080D00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080D04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080D08, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080D0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080D10, 0xFFFFFFFFU, 0x0E00B004U); + psu_mask_write(0xFD080D14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080D18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080E00, 0xFFFFFFFFU, 0x40800604U); + psu_mask_write(0xFD080E04, 0xFFFFFFFFU, 0x00007FFFU); + psu_mask_write(0xFD080E08, 0xFFFFFFFFU, 0x00000000U); + psu_mask_write(0xFD080E0C, 0xFFFFFFFFU, 0x3F000008U); + psu_mask_write(0xFD080E10, 0xFFFFFFFFU, 0x0E00B03CU); + psu_mask_write(0xFD080E14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080E18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD080F00, 0xFFFFFFFFU, 0x80803660U); + psu_mask_write(0xFD080F04, 0xFFFFFFFFU, 0x55556000U); + psu_mask_write(0xFD080F08, 0xFFFFFFFFU, 0xAAAAAAAAU); + psu_mask_write(0xFD080F0C, 0xFFFFFFFFU, 0x0029A4A4U); + psu_mask_write(0xFD080F10, 0xFFFFFFFFU, 0x0C00B000U); + psu_mask_write(0xFD080F14, 0xFFFFFFFFU, 0x09095555U); + psu_mask_write(0xFD080F18, 0xFFFFFFFFU, 0x09092B2BU); + psu_mask_write(0xFD081400, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD081404, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD08141C, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD08142C, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD081430, 0xFFFFFFFFU, 0x70800000U); + psu_mask_write(0xFD081440, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD081444, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD08145C, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD08146C, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD081470, 0xFFFFFFFFU, 0x70800000U); + psu_mask_write(0xFD081480, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD081484, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD08149C, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD0814AC, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD0814B0, 0xFFFFFFFFU, 0x70800000U); + psu_mask_write(0xFD0814C0, 0xFFFFFFFFU, 0x2A019FFEU); + psu_mask_write(0xFD0814C4, 0xFFFFFFFFU, 0x01100000U); + psu_mask_write(0xFD0814DC, 0xFFFFFFFFU, 0x01264300U); + psu_mask_write(0xFD0814EC, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD0814F0, 0xFFFFFFFFU, 0x70800000U); + psu_mask_write(0xFD081500, 0xFFFFFFFFU, 0x15019FFEU); + psu_mask_write(0xFD081504, 0xFFFFFFFFU, 0x21100000U); + psu_mask_write(0xFD08151C, 0xFFFFFFFFU, 0x01266300U); + psu_mask_write(0xFD08152C, 0xFFFFFFFFU, 0x00041800U); + psu_mask_write(0xFD081530, 0xFFFFFFFFU, 0x70400000U); + psu_mask_write(0xFD0817DC, 0xFFFFFFFFU, 0x012643C4U); + + return 1; +} + +static unsigned long psu_ddr_qos_init_data(void) +{ + psu_mask_write(0xFD360008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD36001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD370008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD37001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD380008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD38001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD390008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD39001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3A0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3A001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3B0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFD3B001C, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFF9B0008, 0x0000000FU, 0x00000000U); + psu_mask_write(0xFF9B001C, 0x0000000FU, 0x00000000U); + + return 1; +} + +static unsigned long psu_mio_init_data(void) +{ + psu_mask_write(0xFF180000, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180004, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180008, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18000C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180010, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180014, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180018, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18001C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180020, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180024, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180028, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18002C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180030, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180034, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180038, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF18003C, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180040, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180044, 0x000000FEU, 0x00000040U); + psu_mask_write(0xFF180048, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF18004C, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF180050, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180054, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180058, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18005C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180060, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180064, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180068, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18006C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180070, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180074, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180078, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18007C, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF180080, 0x000000FEU, 0x00000008U); + psu_mask_write(0xFF180084, 0x000000FEU, 0x00000008U); + psu_mask_write(0xFF180098, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF18009C, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800A0, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800A4, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800A8, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800AC, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800B0, 0x000000FEU, 0x00000000U); + psu_mask_write(0xFF1800B4, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800B8, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800BC, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C0, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C4, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800C8, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800CC, 0x000000FEU, 0x00000010U); + psu_mask_write(0xFF1800D0, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800D4, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800D8, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800DC, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800E0, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800E4, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800E8, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800EC, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800F0, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800F4, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800F8, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF1800FC, 0x000000FEU, 0x00000004U); + psu_mask_write(0xFF180100, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180104, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180108, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18010C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180110, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180114, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180118, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18011C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180120, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180124, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180128, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF18012C, 0x000000FEU, 0x00000002U); + psu_mask_write(0xFF180130, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF180134, 0x000000FEU, 0x000000C0U); + psu_mask_write(0xFF180204, 0xFFFFFFFFU, 0x00040000U); + psu_mask_write(0xFF180208, 0xFFFFFFFFU, 0x00B02000U); + psu_mask_write(0xFF18020C, 0x00003FFFU, 0x00000FC0U); + psu_mask_write(0xFF180138, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18013C, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180140, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180144, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180148, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18014C, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180154, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180158, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF18015C, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180160, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180164, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180168, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180170, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180174, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180178, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF18017C, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180180, 0x03FFFFFFU, 0x03FFFFFFU); + psu_mask_write(0xFF180184, 0x03FFFFFFU, 0x00000000U); + psu_mask_write(0xFF180200, 0x0000000FU, 0x00000000U); - Xil_Out32(0xFD410098, 0); - if (lane0_active == 1) { - Xil_Out32(0xFD403004, 0); - Xil_Out32(0xFD403008, 0); - Xil_Out32(0xFD40300C, 0); - Xil_Out32(0xFD403010, 0); - Xil_Out32(0xFD403014, 0); - Xil_Out32(0xFD403018, 0); - Xil_Out32(0xFD40301C, 0); - Xil_Out32(0xFD403020, 0); - Xil_Out32(0xFD403024, 0); - Xil_Out32(0xFD403028, 0); - Xil_Out32(0xFD40302C, 0); - Xil_Out32(0xFD403030, 0); - Xil_Out32(0xFD403034, 0); - Xil_Out32(0xFD403038, 0); - Xil_Out32(0xFD40303C, 0); - Xil_Out32(0xFD403040, 0); - Xil_Out32(0xFD403044, 0); - Xil_Out32(0xFD403048, 0); - Xil_Out32(0xFD40304C, 0); - Xil_Out32(0xFD403050, 0); - Xil_Out32(0xFD403054, 0); - Xil_Out32(0xFD403058, 0); - Xil_Out32(0xFD403068, 1); - Xil_Out32(0xFD40306C, 0); - Xil_Out32(0xFD4010AC, 0); - psu_mask_write(0xFD410044, 0x00000003U, 0x00000001U); - psu_mask_write(0xFD410040, 0x00000003U, 0x00000001U); - psu_mask_write(0xFD410038, 0x00000007U, 0x00000000U); - } - if (lane1_active == 1) { - Xil_Out32(0xFD407004, 0); - Xil_Out32(0xFD407008, 0); - Xil_Out32(0xFD40700C, 0); - Xil_Out32(0xFD407010, 0); - Xil_Out32(0xFD407014, 0); - Xil_Out32(0xFD407018, 0); - Xil_Out32(0xFD40701C, 0); - Xil_Out32(0xFD407020, 0); - Xil_Out32(0xFD407024, 0); - Xil_Out32(0xFD407028, 0); - Xil_Out32(0xFD40702C, 0); - Xil_Out32(0xFD407030, 0); - Xil_Out32(0xFD407034, 0); - Xil_Out32(0xFD407038, 0); - Xil_Out32(0xFD40703C, 0); - Xil_Out32(0xFD407040, 0); - Xil_Out32(0xFD407044, 0); - Xil_Out32(0xFD407048, 0); - Xil_Out32(0xFD40704C, 0); - Xil_Out32(0xFD407050, 0); - Xil_Out32(0xFD407054, 0); - Xil_Out32(0xFD407058, 0); - Xil_Out32(0xFD407068, 1); - Xil_Out32(0xFD40706C, 0); - Xil_Out32(0xFD4050AC, 0); - psu_mask_write(0xFD410044, 0x0000000CU, 0x00000004U); - psu_mask_write(0xFD410040, 0x0000000CU, 0x00000004U); - psu_mask_write(0xFD410038, 0x00000070U, 0x00000000U); - } - if (lane2_active == 1) { - Xil_Out32(0xFD40B004, 0); - Xil_Out32(0xFD40B008, 0); - Xil_Out32(0xFD40B00C, 0); - Xil_Out32(0xFD40B010, 0); - Xil_Out32(0xFD40B014, 0); - Xil_Out32(0xFD40B018, 0); - Xil_Out32(0xFD40B01C, 0); - Xil_Out32(0xFD40B020, 0); - Xil_Out32(0xFD40B024, 0); - Xil_Out32(0xFD40B028, 0); - Xil_Out32(0xFD40B02C, 0); - Xil_Out32(0xFD40B030, 0); - Xil_Out32(0xFD40B034, 0); - Xil_Out32(0xFD40B038, 0); - Xil_Out32(0xFD40B03C, 0); - Xil_Out32(0xFD40B040, 0); - Xil_Out32(0xFD40B044, 0); - Xil_Out32(0xFD40B048, 0); - Xil_Out32(0xFD40B04C, 0); - Xil_Out32(0xFD40B050, 0); - Xil_Out32(0xFD40B054, 0); - Xil_Out32(0xFD40B058, 0); - Xil_Out32(0xFD40B068, 1); - Xil_Out32(0xFD40B06C, 0); - Xil_Out32(0xFD4090AC, 0); - psu_mask_write(0xFD410044, 0x00000030U, 0x00000010U); - psu_mask_write(0xFD410040, 0x00000030U, 0x00000010U); - psu_mask_write(0xFD41003C, 0x00000007U, 0x00000000U); - } - if (lane3_active == 1) { - Xil_Out32(0xFD40F004, 0); - Xil_Out32(0xFD40F008, 0); - Xil_Out32(0xFD40F00C, 0); - Xil_Out32(0xFD40F010, 0); - Xil_Out32(0xFD40F014, 0); - Xil_Out32(0xFD40F018, 0); - Xil_Out32(0xFD40F01C, 0); - Xil_Out32(0xFD40F020, 0); - Xil_Out32(0xFD40F024, 0); - Xil_Out32(0xFD40F028, 0); - Xil_Out32(0xFD40F02C, 0); - Xil_Out32(0xFD40F030, 0); - Xil_Out32(0xFD40F034, 0); - Xil_Out32(0xFD40F038, 0); - Xil_Out32(0xFD40F03C, 0); - Xil_Out32(0xFD40F040, 0); - Xil_Out32(0xFD40F044, 0); - Xil_Out32(0xFD40F048, 0); - Xil_Out32(0xFD40F04C, 0); - Xil_Out32(0xFD40F050, 0); - Xil_Out32(0xFD40F054, 0); - Xil_Out32(0xFD40F058, 0); - Xil_Out32(0xFD40F068, 1); - Xil_Out32(0xFD40F06C, 0); - Xil_Out32(0xFD40D0AC, 0); - psu_mask_write(0xFD410044, 0x000000C0U, 0x00000040U); - psu_mask_write(0xFD410040, 0x000000C0U, 0x00000040U); - psu_mask_write(0xFD41003C, 0x00000070U, 0x00000000U); - } return 1; } -static int serdes_illcalib(u32 lane3_protocol, u32 lane3_rate, - u32 lane2_protocol, u32 lane2_rate, - u32 lane1_protocol, u32 lane1_rate, - u32 lane0_protocol, u32 lane0_rate) +static unsigned long psu_peripherals_pre_init_data(void) { - unsigned int rdata = 0; - unsigned int sata_gen2 = 1; - unsigned int temp_ill12 = 0; - unsigned int temp_PLL_REF_SEL_OFFSET; - unsigned int temp_TM_IQ_ILL1; - unsigned int temp_TM_E_ILL1; - unsigned int temp_tx_dig_tm_61; - unsigned int temp_tm_dig_6; - unsigned int temp_pll_fbdiv_frac_3_msb_offset; + psu_mask_write(0xFF5E0108, 0x013F3F07U, 0x01012302U); + psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000001U); - if (lane0_protocol == 2 || lane0_protocol == 1) { - Xil_Out32(0xFD401910, 0xF3); - Xil_Out32(0xFD40193C, 0xF3); - Xil_Out32(0xFD401914, 0xF3); - Xil_Out32(0xFD401940, 0xF3); - } - if (lane1_protocol == 2 || lane1_protocol == 1) { - Xil_Out32(0xFD405910, 0xF3); - Xil_Out32(0xFD40593C, 0xF3); - Xil_Out32(0xFD405914, 0xF3); - Xil_Out32(0xFD405940, 0xF3); - } - if (lane2_protocol == 2 || lane2_protocol == 1) { - Xil_Out32(0xFD409910, 0xF3); - Xil_Out32(0xFD40993C, 0xF3); - Xil_Out32(0xFD409914, 0xF3); - Xil_Out32(0xFD409940, 0xF3); - } - if (lane3_protocol == 2 || lane3_protocol == 1) { - Xil_Out32(0xFD40D910, 0xF3); - Xil_Out32(0xFD40D93C, 0xF3); - Xil_Out32(0xFD40D914, 0xF3); - Xil_Out32(0xFD40D940, 0xF3); - } + return 1; +} - if (sata_gen2 == 1) { - if (lane0_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD402360); - Xil_Out32(0xFD402360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410000); - psu_mask_write(0xFD410000, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4018F8); - temp_TM_E_ILL1 = Xil_In32(0xFD401924); - Xil_Out32(0xFD4018F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4000F4); - temp_tm_dig_6 = Xil_In32(0xFD40106C); - psu_mask_write(0xFD4000F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40106C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD401990) & 0xF0; +static unsigned long psu_peripherals_init_data(void) +{ + psu_mask_write(0xFD1A0100, 0x00008046U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x001A0000U, 0x00000000U); + psu_mask_write(0xFF5E023C, 0x0093C018U, 0x00000000U); + psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF180390, 0x00000004U, 0x00000004U); + psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000040U, 0x00000000U); + psu_mask_write(0xFF180310, 0x00008000U, 0x00000000U); + psu_mask_write(0xFF180320, 0x33840000U, 0x02840000U); + psu_mask_write(0xFF18031C, 0x7FFE0000U, 0x64500000U); + psu_mask_write(0xFF180358, 0x00000008U, 0x00000008U); + psu_mask_write(0xFF180324, 0x03C00000U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000600U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00008000U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00007800U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00000002U, 0x00000000U); + psu_mask_write(0xFF5E0238, 0x00040000U, 0x00000000U); + psu_mask_write(0xFF4B0024, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFFCA5000, 0x00001FFFU, 0x00000000U); + psu_mask_write(0xFD5C0060, 0x000F000FU, 0x00000000U); + psu_mask_write(0xFFA60040, 0x80000000U, 0x80000000U); + psu_mask_write(0xFF260020, 0xFFFFFFFFU, 0x05F5DD18U); + psu_mask_write(0xFF260000, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U); + + mask_delay(1); + psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000002U); + + mask_delay(5); + psu_mask_write(0xFF5E0250, 0x00000F0FU, 0x00000202U); + + return 1; +} + +static unsigned long psu_serdes_init_data(void) +{ + psu_mask_write(0xFD410008, 0x0000001FU, 0x00000008U); + psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000FU); + psu_mask_write(0xFD402868, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD40286C, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD40A094, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40A368, 0x000000FFU, 0x00000038U); + psu_mask_write(0xFD40A36C, 0x00000007U, 0x00000003U); + psu_mask_write(0xFD40E368, 0x000000FFU, 0x000000E0U); + psu_mask_write(0xFD40E36C, 0x00000007U, 0x00000003U); + psu_mask_write(0xFD40A370, 0x000000FFU, 0x000000F4U); + psu_mask_write(0xFD40A374, 0x000000FFU, 0x00000031U); + psu_mask_write(0xFD40A378, 0x000000FFU, 0x00000002U); + psu_mask_write(0xFD40A37C, 0x00000033U, 0x00000030U); + psu_mask_write(0xFD40E370, 0x000000FFU, 0x000000C9U); + psu_mask_write(0xFD40E374, 0x000000FFU, 0x000000D2U); + psu_mask_write(0xFD40E378, 0x000000FFU, 0x00000001U); + psu_mask_write(0xFD40E37C, 0x000000B3U, 0x000000B0U); + psu_mask_write(0xFD40906C, 0x00000003U, 0x00000003U); + psu_mask_write(0xFD4080F4, 0x00000003U, 0x00000003U); + psu_mask_write(0xFD40E360, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40D06C, 0x0000000FU, 0x0000000FU); + psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x0000000BU); + psu_mask_write(0xFD4090CC, 0x00000020U, 0x00000020U); + psu_mask_write(0xFD401074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD405074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD409074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40D074, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD401994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD405994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD40989C, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD4098F8, 0x000000FFU, 0x0000001AU); + psu_mask_write(0xFD4098FC, 0x000000FFU, 0x0000001AU); + psu_mask_write(0xFD409990, 0x000000FFU, 0x00000010U); + psu_mask_write(0xFD409924, 0x000000FFU, 0x000000FEU); + psu_mask_write(0xFD409928, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD409900, 0x000000FFU, 0x0000001AU); + psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000000U); + psu_mask_write(0xFD409980, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD409914, 0x000000FFU, 0x000000F7U); + psu_mask_write(0xFD409918, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD409940, 0x000000FFU, 0x000000F7U); + psu_mask_write(0xFD409944, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD409994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD40D89C, 0x00000080U, 0x00000080U); + psu_mask_write(0xFD40D8F8, 0x000000FFU, 0x0000007DU); + psu_mask_write(0xFD40D8FC, 0x000000FFU, 0x0000007DU); + psu_mask_write(0xFD40D990, 0x000000FFU, 0x00000001U); + psu_mask_write(0xFD40D924, 0x000000FFU, 0x0000009CU); + psu_mask_write(0xFD40D928, 0x000000FFU, 0x00000039U); + psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); + psu_mask_write(0xFD40D900, 0x000000FFU, 0x0000007DU); + psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000064U); + psu_mask_write(0xFD40D980, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD40D914, 0x000000FFU, 0x000000F7U); + psu_mask_write(0xFD40D918, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD40D940, 0x000000FFU, 0x000000F7U); + psu_mask_write(0xFD40D944, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD40D994, 0x00000007U, 0x00000007U); + psu_mask_write(0xFD40107C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40507C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40907C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD40D07C, 0x0000000FU, 0x00000001U); + psu_mask_write(0xFD4019A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD401038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40102C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4059A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD405038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40502C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4099A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD409038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40902C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40D9A4, 0x000000FFU, 0x000000FFU); + psu_mask_write(0xFD40D038, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD40D02C, 0x00000040U, 0x00000040U); + psu_mask_write(0xFD4019AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD4059AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD4099AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD40D9AC, 0x00000003U, 0x00000000U); + psu_mask_write(0xFD401978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD405978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD409978, 0x00000010U, 0x00000010U); + psu_mask_write(0xFD40D978, 0x00000010U, 0x00000010U); + + serdes_illcalib(2, 3, 3, 0, 0, 0, 0, 0); + psu_mask_write(0xFD410014, 0x00000077U, 0x00000023U); + psu_mask_write(0xFD40C1D8, 0x00000001U, 0x00000001U); + psu_mask_write(0xFD40DC14, 0x000000FFU, 0x000000E6U); + psu_mask_write(0xFD40DC40, 0x0000001FU, 0x0000000CU); + psu_mask_write(0xFD40D94C, 0x00000020U, 0x00000020U); + psu_mask_write(0xFD40D950, 0x00000007U, 0x00000006U); + psu_mask_write(0xFD40C048, 0x000000FFU, 0x00000001U); + + return 1; +} + +static unsigned long psu_resetout_init_data(void) +{ + psu_mask_write(0xFF5E023C, 0x00000400U, 0x00000000U); + psu_mask_write(0xFF9D0080, 0x00000001U, 0x00000001U); + psu_mask_write(0xFF9D007C, 0x00000001U, 0x00000000U); + psu_mask_write(0xFF5E023C, 0x00000140U, 0x00000000U); + psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000000U); + psu_mask_write(0xFD3D0100, 0x00000003U, 0x00000003U); + psu_mask_write(0xFD1A0100, 0x00000002U, 0x00000000U); + psu_mask_write(0xFE20C200, 0x00023FFFU, 0x00022457U); + psu_mask_write(0xFE20C630, 0x003FFF00U, 0x00000000U); + psu_mask_write(0xFE20C11C, 0x00000600U, 0x00000600U); + psu_mask_write(0xFE20C12C, 0x00004000U, 0x00004000U); + psu_mask_write(0xFD480064, 0x00000200U, 0x00000200U); + mask_poll(0xFD40A3E4, 0x00000010U); + mask_poll(0xFD40E3E4, 0x00000010U); + psu_mask_write(0xFD0C00AC, 0xFFFFFFFFU, 0x28184018U); + psu_mask_write(0xFD0C00B0, 0xFFFFFFFFU, 0x0E081406U); + psu_mask_write(0xFD0C00B4, 0xFFFFFFFFU, 0x064A0813U); + psu_mask_write(0xFD0C00B8, 0xFFFFFFFFU, 0x3FFC96A4U); - serdes_illcalib_pcie_gen1(0, 0, 0, 0, 0, 0, 1, 0, 0); + return 1; +} - Xil_Out32(0xFD402360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4018F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4000F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40106C, temp_tm_dig_6); - Xil_Out32(0xFD401928, Xil_In32(0xFD401924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD401990) >> 4 & 0xF); - Xil_Out32(0xFD401990, temp_ill12); - Xil_Out32(0xFD401924, temp_TM_E_ILL1); - } - if (lane1_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD406360); - Xil_Out32(0xFD406360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410004); - psu_mask_write(0xFD410004, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4058F8); - temp_TM_E_ILL1 = Xil_In32(0xFD405924); - Xil_Out32(0xFD4058F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4040F4); - temp_tm_dig_6 = Xil_In32(0xFD40506C); - psu_mask_write(0xFD4040F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40506C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD405990) & 0xF0; +static unsigned long psu_resetin_init_data(void) +{ + psu_mask_write(0xFF5E023C, 0x00000540U, 0x00000540U); + psu_mask_write(0xFF5E0230, 0x00000008U, 0x00000008U); + psu_mask_write(0xFD1A0100, 0x00000002U, 0x00000002U); - serdes_illcalib_pcie_gen1(0, 0, 0, 0, 1, 0, 0, 0, 0); + return 1; +} - Xil_Out32(0xFD406360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4058F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4040F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40506C, temp_tm_dig_6); - Xil_Out32(0xFD405928, Xil_In32(0xFD405924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD405990) >> 4 & 0xF); - Xil_Out32(0xFD405990, temp_ill12); - Xil_Out32(0xFD405924, temp_TM_E_ILL1); - } - if (lane2_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40A360); - Xil_Out32(0xFD40A360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD410008); - psu_mask_write(0xFD410008, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD4098F8); - temp_TM_E_ILL1 = Xil_In32(0xFD409924); - Xil_Out32(0xFD4098F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD4080F4); - temp_tm_dig_6 = Xil_In32(0xFD40906C); - psu_mask_write(0xFD4080F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40906C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD409990) & 0xF0; +static unsigned long psu_afi_config(void) +{ + psu_mask_write(0xFD1A0100, 0x00001F80U, 0x00000000U); + psu_mask_write(0xFF5E023C, 0x00080000U, 0x00000000U); + psu_mask_write(0xFD615000, 0x00000300U, 0x00000200U); + psu_mask_write(0xFD360000, 0x00000003U, 0x00000002U); + psu_mask_write(0xFD370000, 0x00000003U, 0x00000002U); + psu_mask_write(0xFD360014, 0x00000003U, 0x00000002U); + psu_mask_write(0xFD370014, 0x00000003U, 0x00000002U); - serdes_illcalib_pcie_gen1(0, 0, 1, 0, 0, 0, 0, 0, 0); + return 1; +} - Xil_Out32(0xFD40A360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD4098F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD4080F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40906C, temp_tm_dig_6); - Xil_Out32(0xFD409928, Xil_In32(0xFD409924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD409990) >> 4 & 0xF); - Xil_Out32(0xFD409990, temp_ill12); - Xil_Out32(0xFD409924, temp_TM_E_ILL1); - } - if (lane3_protocol == 2) { - temp_pll_fbdiv_frac_3_msb_offset = Xil_In32(0xFD40E360); - Xil_Out32(0xFD40E360, 0x0); - temp_PLL_REF_SEL_OFFSET = Xil_In32(0xFD41000C); - psu_mask_write(0xFD41000C, 0x0000001FU, 0x0000000DU); - temp_TM_IQ_ILL1 = Xil_In32(0xFD40D8F8); - temp_TM_E_ILL1 = Xil_In32(0xFD40D924); - Xil_Out32(0xFD40D8F8, 0x78); - temp_tx_dig_tm_61 = Xil_In32(0xFD40C0F4); - temp_tm_dig_6 = Xil_In32(0xFD40D06C); - psu_mask_write(0xFD40C0F4, 0x0000000BU, 0x00000000U); - psu_mask_write(0xFD40D06C, 0x0000000FU, 0x00000000U); - temp_ill12 = Xil_In32(0xFD40D990) & 0xF0; +static unsigned long psu_ddr_phybringup_data(void) +{ + unsigned int regval = 0; + unsigned int pll_retry = 10; + unsigned int pll_locked = 0; + int cur_R006_tREFPRD; - serdes_illcalib_pcie_gen1(1, 0, 0, 0, 0, 0, 0, 0, 0); + while ((pll_retry > 0) && (!pll_locked)) { + Xil_Out32(0xFD080004, 0x00040010); + Xil_Out32(0xFD080004, 0x00040011); - Xil_Out32(0xFD40E360, temp_pll_fbdiv_frac_3_msb_offset); - Xil_Out32(0xFD41000C, temp_PLL_REF_SEL_OFFSET); - Xil_Out32(0xFD40D8F8, temp_TM_IQ_ILL1); - Xil_Out32(0xFD40C0F4, temp_tx_dig_tm_61); - Xil_Out32(0xFD40D06C, temp_tm_dig_6); - Xil_Out32(0xFD40D928, Xil_In32(0xFD40D924)); - temp_ill12 = - temp_ill12 | (Xil_In32(0xFD40D990) >> 4 & 0xF); - Xil_Out32(0xFD40D990, temp_ill12); - Xil_Out32(0xFD40D924, temp_TM_E_ILL1); - } - rdata = Xil_In32(0xFD410098); - rdata = (rdata & 0xDF); - Xil_Out32(0xFD410098, rdata); + while ((Xil_In32(0xFD080030) & 0x1) != 1) + ; + pll_locked = (Xil_In32(0xFD080030) & 0x80000000) + >> 31; + pll_locked &= (Xil_In32(0xFD0807E0) & 0x10000) + >> 16; + pll_locked &= (Xil_In32(0xFD0809E0) & 0x10000) >> 16; + pll_locked &= (Xil_In32(0xFD080BE0) & 0x10000) + >> 16; + pll_locked &= (Xil_In32(0xFD080DE0) & 0x10000) + >> 16; + pll_retry--; } + Xil_Out32(0xFD0800C4, Xil_In32(0xFD0800C4) | (pll_retry << 16)); + if (!pll_locked) + return 0; - if (lane0_protocol == 2 && lane0_rate == 3) { - psu_mask_write(0xFD40198C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40192C, 0x000000FFU, 0x00000094U); - } - if (lane1_protocol == 2 && lane1_rate == 3) { - psu_mask_write(0xFD40598C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40592C, 0x000000FFU, 0x00000094U); - } - if (lane2_protocol == 2 && lane2_rate == 3) { - psu_mask_write(0xFD40998C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40992C, 0x000000FFU, 0x00000094U); - } - if (lane3_protocol == 2 && lane3_rate == 3) { - psu_mask_write(0xFD40D98C, 0x000000F0U, 0x00000020U); - psu_mask_write(0xFD40D92C, 0x000000FFU, 0x00000094U); - } + Xil_Out32(0xFD080004U, 0x00040063U); - if (lane0_protocol == 1) { - if (lane0_rate == 0) { - serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, 0, 0); - } else { - serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, 0, 0); - serdes_illcalib_pcie_gen1(lane3_protocol, lane3_rate, - lane2_protocol, lane2_rate, - lane1_protocol, lane1_rate, - lane0_protocol, lane0_rate, - 1); - } - } + while ((Xil_In32(0xFD080030U) & 0x0000000FU) != 0x0000000FU) + ; + prog_reg(0xFD080004U, 0x00000001U, 0x00000000U, 0x00000001U); - if (lane0_protocol == 3) - Xil_Out32(0xFD401914, 0xF3); - if (lane0_protocol == 3) - Xil_Out32(0xFD401940, 0xF3); - if (lane0_protocol == 3) - Xil_Out32(0xFD401990, 0x20); - if (lane0_protocol == 3) - Xil_Out32(0xFD401924, 0x37); + while ((Xil_In32(0xFD080030U) & 0x000000FFU) != 0x0000001FU) + ; + Xil_Out32(0xFD0701B0U, 0x00000001U); + Xil_Out32(0xFD070320U, 0x00000001U); + while ((Xil_In32(0xFD070004U) & 0x0000000FU) != 0x00000001U) + ; + prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000001U); + Xil_Out32(0xFD080004, 0x0004FE01); + regval = Xil_In32(0xFD080030); + while (regval != 0x80000FFF) + regval = Xil_In32(0xFD080030); + regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); + if (regval != 0) + return 0; - if (lane1_protocol == 3) - Xil_Out32(0xFD405914, 0xF3); - if (lane1_protocol == 3) - Xil_Out32(0xFD405940, 0xF3); - if (lane1_protocol == 3) - Xil_Out32(0xFD405990, 0x20); - if (lane1_protocol == 3) - Xil_Out32(0xFD405924, 0x37); + Xil_Out32(0xFD080200U, 0x100091C7U); - if (lane2_protocol == 3) - Xil_Out32(0xFD409914, 0xF3); - if (lane2_protocol == 3) - Xil_Out32(0xFD409940, 0xF3); - if (lane2_protocol == 3) - Xil_Out32(0xFD409990, 0x20); - if (lane2_protocol == 3) - Xil_Out32(0xFD409924, 0x37); + cur_R006_tREFPRD = (Xil_In32(0xFD080018U) & 0x0003FFFFU) >> 0x00000000U; + prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D914, 0xF3); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D940, 0xF3); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D990, 0x20); - if (lane3_protocol == 3) - Xil_Out32(0xFD40D924, 0x37); + prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000003U); + prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000003U); + prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000003U); + prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000003U); + prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000003U); + prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000003U); + + Xil_Out32(0xFD080004, 0x00060001); + regval = Xil_In32(0xFD080030); + while ((regval & 0x80004001) != 0x80004001) + regval = Xil_In32(0xFD080030); + + regval = ((Xil_In32(0xFD080030) & 0x1FFF0000) >> 18); + if (regval != 0) + return 0; + + prog_reg(0xFD08001CU, 0x00000018U, 0x00000003U, 0x00000000U); + prog_reg(0xFD08142CU, 0x00000030U, 0x00000004U, 0x00000000U); + prog_reg(0xFD08146CU, 0x00000030U, 0x00000004U, 0x00000000U); + prog_reg(0xFD0814ACU, 0x00000030U, 0x00000004U, 0x00000000U); + prog_reg(0xFD0814ECU, 0x00000030U, 0x00000004U, 0x00000000U); + prog_reg(0xFD08152CU, 0x00000030U, 0x00000004U, 0x00000000U); + + Xil_Out32(0xFD080200U, 0x800091C7U); + prog_reg(0xFD080018, 0x3FFFF, 0x0, cur_R006_tREFPRD); + + Xil_Out32(0xFD080004, 0x0000C001); + regval = Xil_In32(0xFD080030); + while ((regval & 0x80000C01) != 0x80000C01) + regval = Xil_In32(0xFD080030); + + Xil_Out32(0xFD070180U, 0x01000040U); + Xil_Out32(0xFD070060U, 0x00000000U); + prog_reg(0xFD080014U, 0x00000040U, 0x00000006U, 0x00000000U); return 1; }