From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.34.63; helo=nam01-by2-obe.outbound.protection.outlook.com; envelope-from=vabhav.sharma@nxp.com; receiver=edk2-devel@lists.01.org Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0063.outbound.protection.outlook.com [104.47.34.63]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5511622183C8A for ; Fri, 1 Dec 2017 08:07:27 -0800 (PST) Received: from CY4PR03CA0105.namprd03.prod.outlook.com (10.171.242.174) by BN3PR03MB2353.namprd03.prod.outlook.com (10.166.74.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.5; Fri, 1 Dec 2017 16:11:52 +0000 Received: from BY2FFO11OLC011.protection.gbl (2a01:111:f400:7c0c::194) by CY4PR03CA0105.outlook.office365.com (2603:10b6:910:4d::46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.282.5 via Frontend Transport; Fri, 1 Dec 2017 16:11:52 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BY2FFO11OLC011.mail.protection.outlook.com (10.1.15.22) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.239.4 via Frontend Transport; Fri, 1 Dec 2017 16:11:51 +0000 Received: from uefi-OptiPlex-790.ap.freescale.net ([10.232.132.56]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id vB1GBiui003880; Fri, 1 Dec 2017 09:11:48 -0700 From: Vabhav To: , , , Date: Fri, 1 Dec 2017 09:40:03 +0530 Message-ID: <1512101406-11567-2-git-send-email-vabhav.sharma@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1512101406-11567-1-git-send-email-vabhav.sharma@nxp.com> References: <1512101406-11567-1-git-send-email-vabhav.sharma@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131566183122290854; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39860400002)(376002)(39380400002)(346002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(8936002)(2950100002)(5660300001)(33646002)(97736004)(6666003)(2906002)(106466001)(50226002)(8656006)(50466002)(189998001)(85426001)(51416003)(48376002)(76176011)(77096006)(86362001)(575784001)(2201001)(305945005)(104016004)(53936002)(53376002)(36756003)(966005)(81166006)(81156014)(8676002)(498600001)(15188155005)(47776003)(4326008)(16799955002)(105606002)(110136005)(54906003)(68736007)(316002)(16586007)(356003)(6306002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR03MB2353; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC011; 1:/PgLJjuvkiItUSbiRnjpGvv89TMgxfkD2oXZoFGN/EGneAL89+w6cDMloXk7VeWaapNB5Mk2tRB6bU4j8i7jPEntGN5BsQkJP0gr29txt9BKY8361xaOHrf88lL5zEMi MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 475853f7-a99c-44fe-3dc6-08d538d63bd9 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4628075)(201703131517081)(5600026)(4604075)(2017052603286); SRVR:BN3PR03MB2353; X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2353; 3:51QOYw5g7XudSvzRqvlnRS7N8ir2NZgIDWn3qxda3rr0ZvoMxwmFAJo14WswGFGJvRDTnH3EMe1KEB19pXh5FX1JksWRcNOpPEKSeaWNUhLYzVH5ejXS++l71Js91yTVYhYyCKA0fV19OSlYk5bEJCTyrYF1WfDX8k29x2+ATmUh7nQAvQZcSY6pWR4UKn/am+PVkgCH5XErd8lfJ45y+WKJfSYoa8ARffFlGS7+T1JAyH3Ci5d3lV7G2d4f4uyS31hbxfjMNRxJkn8nhxLaTnOOrEY8zCrmo1uV+v3+gevB0etn03gVIOEXjsFNPzzXveq2I11VwUIfQirv/pnHvSWM6cngy68BW3U/Fuph0Yo=; 25:p2kRivUpnHWdCqigmxo28hLonqAgeW6bbQCc/HHCBtRYQsgPLr3ZUiWek0gr/UZ0MMyV119T1YErvGAmG1TzY4v92vhM7w3d3fBlH0t+dJ8ysRnyZNDvpES7wYFOFP/yUyUTgjtQ1bVqm9FLtntePp5xaGPCFvy/mO+JnBKkdCBTUZSnMgoij7R3fNvUJLZhR5d2vvGUhLEI7cJxtwfz36IvuXSl55hsyxLDPPwrtiZWzNEbVayO8GWUbEvU76AWr8QOpEQLFJPQKeHPdRWP/PBs4ZGiJMWsQKky0wMer/vLQxh4l3JKv9dznupMjASFiI2h9HbGZNXeOJ83HcrRLA== X-MS-TrafficTypeDiagnostic: BN3PR03MB2353: X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2353; 31:3mz7v7Avr+OQRasdrZJUrISQhjwCi2QQyqy8dGBu1aV0tJE/7Lu3xHJQogmjYYFCadnTcygn2WnrOzAWDAIWWRbvxf0uXhWKbX0+1miO5a+S1bBWTr51PqjbrbHDAkX3iygLbgtZYvt1HSxzbxkPFVj5utkiKUthRBmvX/DBWaZJuTBbftG4hUgzBRGdBPomAjeqnWOg58nWDM6ZGkdvijoauZayy8SRU3+VwniIpt8=; 4:/+RHzG2fiuCPfcSklW7SlymLS3ud20OMPZFZUek0v1UMOTA1sLOLJeuYp+m3edwbdA53HnQBDgtcS3BB2rvm+fDkZA4xNKKIxMU5vrgp+Qgi8pYiLLkrg8SYRnPL2Tnpt2ePCe05rk/wmEROV0X9h2R/ERnRizl8+MHkqU3wBKeUaa2JJ+u7E5J+rTedpP/9KEw1xtnSv7H8bOh1jKW6REMqPplk5EVCZ8qcOaa7zb2YRlakvAkOeds1adEWfZNyb7q0ukS55uDrEg3b/1/zCib3C3BFSZNiuvKOUeF7zzgNEJqDE10kIMXpSLhJsKeN X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(3231022)(6055026)(6096035)(20161123565025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123559100)(20161123563025)(20161123561025)(20161123556025)(201708071742011); SRVR:BN3PR03MB2353; BCL:0; PCL:0; RULEID:(100000803101)(100110400095)(400006); SRVR:BN3PR03MB2353; X-Forefront-PRVS: 05087F0C24 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR03MB2353; 23:ezONYdYn2ZdIQiR8C2cLPzfG46bd3iu8vN2GaD7t2?= =?us-ascii?Q?HWxpuDixJZ7owqpj2DQQv+0f4cWo6V7fCJxU3LtHICoISxjhL03B/v7rdUwL?= =?us-ascii?Q?lZn9wER1ZDBW7+f1G8f00HhBHFLFZnzWrRjsOsw9ge7Mdltpcu0iVA7jqNx7?= =?us-ascii?Q?BFUGnmQWoY9ofMbnnLDNVFE0O6sA8kBrig2+Ivd7TgY9w8t3OdFmE9CqL+RM?= =?us-ascii?Q?huFI3L7ZhtYM4tXgFNx9VcHvufxWKI7ikB5PZcSEpQ7gPaFA8pJXQ8UIQBAY?= =?us-ascii?Q?7lCWjA278D3rb72/eFm1vazraQvF8J1gUG6feuMuOSXQGRQlEyUtHg68ZeYX?= =?us-ascii?Q?3Cqj/YBA3f1QShfkKuE4BHz9xJg7UKNl5HiAsWVmJ6G0HlYH2if7RJKnbt4F?= =?us-ascii?Q?kKMcwJlE1Lr7HCLASb5+0crGq8WGoJUk0cDQX7mHqua5bxbqoWgrrBvsGDT+?= =?us-ascii?Q?eixix/zemVftVyP1Qn0oEswfqj2sHAwJocklrgplwTKC8buvww17LeWGfW9g?= =?us-ascii?Q?KzTPJzkr7EySfXCRxOAkypoUpEezFi8IEYAJDUpuyREJ+S1DOmt3SCs3M+0z?= =?us-ascii?Q?yjLpXJ364k18t2kx6ia+cB7AwJoMcC7AhNeDoOCsBscfIWRIm+sA9Ei56ETo?= =?us-ascii?Q?dqdKq9nHHlH8IbzPMsE53kEnpwceAb8NEdFEHzwAzRdnCM4chmdk1SsiXIMH?= =?us-ascii?Q?iGIbaSakVB7Y2ol5rxceFKGVOCePW2/PAuOVZOV6uc6CJl0ChfIBe0uehlKq?= =?us-ascii?Q?9s71bR6AKuvFHG2MhKyIOue/VvnMV3YDJvellY2mratxXFhM35LlI8rWtC8J?= =?us-ascii?Q?Oc15BAHOQK751BbwnhKkw2jVFMKgTVKphKpIttSy0D+1NynJ3645uZ7NmxGT?= =?us-ascii?Q?FUK6R6G6R+r7kMlw+pyT8AUIB0aqjMd8QQdbPeSzPkNen4AFGTK4ISCgLCrB?= =?us-ascii?Q?a+wGNNCTt8hkPDNgFmF5TtE9zZmQ7R8ulg7cjdZZo8Bji278JVJC3DbeKAty?= =?us-ascii?Q?CEsKHc1aTn1V9HaYKlCCrGZ14pmEffaiCbYyn5DC+RY3gLwmrlyx+6yO01re?= =?us-ascii?Q?zYQqtyUbZBkIXTeMK9ftEcS2IfpU2o4sTFfKrZqpVkhSR2LUlUiI8mruBVPQ?= =?us-ascii?Q?TouT0qxd62vQj0MXZL9ICRL9oSCHLyHToRLcH+VZi8WE4pSl161BLNe9ypa3?= =?us-ascii?Q?G3odMfda0v8fXE+aWuy5UOe1MBrbaw0L1SE44tIp2l0vqqzeK2Utn9zJtAc5?= =?us-ascii?Q?JAU8djhs+/3eq3nG345iYlsw35H8fMkuv7Xo+Gb?= X-Microsoft-Exchange-Diagnostics: 1; BN3PR03MB2353; 6:bticK+spocyxSDjSJGQYzenK38UNzk90WX2ztANXTH5BG2kXcbzWwMJd6t84XXpmVnHsFu5X/EiRlxWtZ/6frTYDZjIF28BL+lHFEwiPN/ZN5G1aOKcUq2g6jh62cyNcHXijvt+7AxHmrT8mwOMvfwY/C+Sc1C15uvTsEdRx6brHPqgHCVGNscFoGyQ6sCVXoAw42DvWxTo4uEBte9H36scnXLaDrK/NcX5dc/elAwrGV2BhTNibkkPXlgNsNH+MyxVoANIbuIo+UXHWj7rd/zhfPuybwFxjv+viy61kZUzoA1mhbD4jUn1gIpEEzybplYRkAPcqhwxaDPoJeHTLA6b/qzW8iQ1CA5xL63eSkSY=; 5:hCPOHgyIvDrcZ9p2xBSd6y6lHp3a+tfH0d2tjIo3rOi98lrRBVv/pRQOrqe7+UlEl0Lr1HBPsi++QoxUet1QPOpV8ssMJQlvIqag+G6ed3WSGIXkEusvDlCfQjb8sYPISaptPy5Gz5G765+4ljVBfHCT/bEKrMco6ctKxOWyEks=; 24:LXDrnH8jiNYuegGEYrIIELXGpW3259o+LDL8reIlywNzrioU/AGf2Y4717jDG3z3KvzNIX5CMsxTGjftiUPpQLIpkIVXUPIfoKNxqGaaVV0=; 7:BCKDPxvIqTnHSW3cvWaxJQzvJOjsiC5bXM76DeDbJbhVCxiEk17MgB5PTGA3yddmsBFDz9MuAXd9G1cCL9FMHTVnsWUA/DWc7KTQkjx+GyBtEIU3XB90aEtYuLqdbv7iezHMnTyppi0MQZ4T/KQizuRfqgzJOBnCrV+1w8FdbrWLRnkRSjKPJJOZXto23xjPjRN1bi3OQkkMrIN6X3IWOmDdPWVGprqm8C5zlwEMRRLAt/Nuew82DOHQYP8mYs3v SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Dec 2017 16:11:51.9170 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 475853f7-a99c-44fe-3dc6-08d538d63bd9 X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR03MB2353 Subject: [PATCH 1/4] Platform/NXP : Add Integrated flash controller library support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Dec 2017 16:07:28 -0000 Content-Type: text/plain On NXP Layerscape SoCs,NOR Flash device interfacing is via IFC and IfcFlashLib provides helper functions to be used by NXP NOR flash library Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Vabhav --- Platform/NXP/Include/Library/Ifc.h | 147 +++++++++++++++++++++ Platform/NXP/Include/Library/IfcBase.h | 139 +++++++++++++++++++ .../Include/Library/IfcBoardSpecificLib.h | 51 +++++++ Platform/NXP/Library/IfcFlashLib/IfcFlashLib.c | 65 +++++++++ Platform/NXP/Library/IfcFlashLib/IfcFlashLib.inf | 30 +++++ 5 files changed, 432 insertions(+) create mode 100755 Platform/NXP/Include/Library/Ifc.h create mode 100644 Platform/NXP/Include/Library/IfcBase.h create mode 100755 Platform/NXP/LS1043aRdbPkg/Include/Library/IfcBoardSpecificLib.h create mode 100644 Platform/NXP/Library/IfcFlashLib/IfcFlashLib.c create mode 100644 Platform/NXP/Library/IfcFlashLib/IfcFlashLib.inf diff --git a/Platform/NXP/Include/Library/Ifc.h b/Platform/NXP/Include/Library/Ifc.h new file mode 100755 index 0000000..8cc13f6 --- /dev/null +++ b/Platform/NXP/Include/Library/Ifc.h @@ -0,0 +1,147 @@ +/** @Ifc.h + + Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+ Copyright 2017 NXP + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef __IFC_H__ +#define __IFC_H__ + +#include +#include +#include +#include +#include +#include +#include + +#define IFC_BANK_COUNT 4 + +#define IFC_CSPR_REG_LEN 148 +#define IFC_AMASK_REG_LEN 144 +#define IFC_CSOR_REG_LEN 144 +#define IFC_FTIM_REG_LEN 576 + +#define IFC_CSPR_USED_LEN sizeof(IFC_CSPR) * \ + IFC_BANK_COUNT + +#define IFC_AMASK_USED_LEN sizeof(IFC_AMASK) * \ + IFC_BANK_COUNT + +#define IFC_CSOR_USED_LEN sizeof(IFC_CSOR) * \ + IFC_BANK_COUNT + +#define IFC_FTIM_USED_LEN sizeof(IFC_FTIM) * \ + IFC_BANK_COUNT + +typedef enum { + IFC_CS0 = 0, + IFC_CS1, + IFC_CS2, + IFC_CS3, + IFC_CS4, + IFC_CS5, + IFC_CS6, + IFC_CS7, +} IFC_CHIP_SEL; + +typedef enum { + IFC_FTIM0 = 0, + IFC_FTIM1, + IFC_FTIM2, + IFC_FTIM3, +} IFC_FTIMS; + +typedef struct { + UINT32 CsprExt; + UINT32 Cspr; + UINT32 Res; +} IFC_CSPR; + +typedef struct { + UINT32 Amask; + UINT32 Res[0x2]; +} IFC_AMASK; + +typedef struct { + UINT32 Csor; + UINT32 CsorExt; + UINT32 Res; +} IFC_CSOR; + +typedef struct { + UINT32 Ftim[4]; + UINT32 Res[0x8]; +}IFC_FTIM ; + +/* + * IFC controller NOR Machine registers + */ +typedef struct { + UINT32 NorEvterStat; + UINT32 Res1[0x2]; + UINT32 NorEvterEn; + UINT32 Res2[0x2]; + UINT32 NorEvterIntrEn; + UINT32 Res3[0x2]; + UINT32 NorErattr0; + UINT32 NorErattr1; + UINT32 NorErattr2; + UINT32 Res4[0x4]; + UINT32 NorCr; + UINT32 Res5[0xEF]; +} IFC_NOR; + +/* + * IFC Controller Registers + */ +typedef struct { + UINT32 IfcRev; + UINT32 Res1[0x2]; + IFC_CSPR CsprCs[IFC_BANK_COUNT]; + UINT8 Res2[IFC_CSPR_REG_LEN - IFC_CSPR_USED_LEN]; + IFC_AMASK AmaskCs[IFC_BANK_COUNT]; + UINT8 Res3[IFC_AMASK_REG_LEN - IFC_AMASK_USED_LEN]; + IFC_CSOR CsorCs[IFC_BANK_COUNT]; + UINT8 Res4[IFC_CSOR_REG_LEN - IFC_CSOR_USED_LEN]; + IFC_FTIM FtimCs[IFC_BANK_COUNT]; + UINT8 Res5[IFC_FTIM_REG_LEN - IFC_FTIM_USED_LEN]; + UINT32 RbStat; + UINT32 RbMap; + UINT32 WpMap; + UINT32 IfcGcr; + UINT32 Res7[0x2]; + UINT32 CmEvter_stat; + UINT32 Res8[0x2]; + UINT32 CmEvterEn; + UINT32 Res9[0x2]; + UINT32 CmEvterIntrEn; + UINT32 Res10[0x2]; + UINT32 CmErattr0; + UINT32 CmErattr1; + UINT32 Res11[0x2]; + UINT32 IfcCcr; + UINT32 IfcCsr; + UINT32 DdrCcrLow; + UINT32 Res12[0x2EA]; + IFC_NOR IfcNor; +} IFC_REGS; + +typedef struct { + UINT32 Ftim[IFC_BANK_COUNT]; + UINT32 CsprExt; + UINT32 Cspr; + UINT32 Csor; + UINT32 Amask; +} IfcTimings; + +#endif //__IFC_H__ diff --git a/Platform/NXP/Include/Library/IfcBase.h b/Platform/NXP/Include/Library/IfcBase.h new file mode 100644 index 0000000..7020a29 --- /dev/null +++ b/Platform/NXP/Include/Library/IfcBase.h @@ -0,0 +1,139 @@ +/** @IfcLib.h + + Copyright 2017 NXP + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef __IFC_COMMON_H__ +#define __IFC_COMMON_H__ + +#define NOR_FLASH_DEVICE_COUNT 1 + +#define MAX_RETRY_COUNT 150000 + +/* + * CSPR - Chip Select Property Register + */ + +#define IFC_CSPR_BA 0xFFFF0000 +#define IFC_CSPR_BA_SHIFT 16 +#define IFC_CSPR_PORT_SIZE 0x00000180 +#define IFC_CSPR_PORT_SIZE_SHIFT 7 + +// Port Size 8 bit +#define IFC_CSPR_PORT_SIZE_8 0x00000080 + +// Port Size 16 bit +#define IFC_CSPR_PORT_SIZE_16 0x00000100 + +// Port Size 32 bit +#define IFC_CSPR_PORT_SIZE_32 0x00000180 + +// Write Protect +#define IFC_CSPR_WP 0x00000040 +#define IFC_CSPR_WP_SHIFT 6 + +// Machine Select +#define IFC_CSPR_MSEL 0x00000006 +#define IFC_CSPR_MSEL_SHIFT 1 + +// NOR +#define IFC_CSPR_MSEL_NOR 0x00000000 + +// Bank Valid +#define IFC_CSPR_V 0x00000001 +#define IFC_CSPR_V_SHIFT 0 + +/* + * Chip Select Option Register - NOR Flash Mode + */ + +// Enable Address shift Mode +#define IFC_CSOR_NOR_ADM_SHFT_MODE_EN 0x80000000 + +// Page Read Enable from NOR device +#define IFC_CSOR_NOR_PGRD_EN 0x10000000 + +// AVD Toggle Enable during Burst Program +#define IFC_CSOR_NOR_AVD_TGL_PGM_EN 0x01000000 + +// Address Data Multiplexing Shift +#define IFC_CSOR_NOR_ADM_MASK 0x0003E000 +#define IFC_CSOR_NOR_ADM_SHIFT_SHIFT 13 +#define IFC_CSOR_NOR_ADM_SHIFT(n) ((n) << IFC_CSOR_NOR_ADM_SHIFT_SHIFT) + +// Type of the NOR device hooked +#define IFC_CSOR_NOR_NOR_MODE_AYSNC_NOR 0x00000000 +#define IFC_CSOR_NOR_NOR_MODE_AVD_NOR 0x00000020 + +// Time for Read Enable High to Output High Impedance +#define IFC_CSOR_NOR_TRHZ_MASK 0x0000001C +#define IFC_CSOR_NOR_TRHZ_SHIFT 2 +#define IFC_CSOR_NOR_TRHZ_20 0x00000000 +#define IFC_CSOR_NOR_TRHZ_40 0x00000004 +#define IFC_CSOR_NOR_TRHZ_60 0x00000008 +#define IFC_CSOR_NOR_TRHZ_80 0x0000000C +#define IFC_CSOR_NOR_TRHZ_100 0x00000010 + +// Buffer control disable +#define IFC_CSOR_NOR_BCTLD 0x00000001 + +/* + * FTIM0 - NOR Flash Mode + */ +#define IFC_FTIM0_NOR 0xF03F3F3F +#define IFC_FTIM0_NOR_TACSE_SHIFT 28 +#define IFC_FTIM0_NOR_TACSE(n) ((n) << IFC_FTIM0_NOR_TACSE_SHIFT) +#define IFC_FTIM0_NOR_TEADC_SHIFT 16 +#define IFC_FTIM0_NOR_TEADC(n) ((n) << IFC_FTIM0_NOR_TEADC_SHIFT) +#define IFC_FTIM0_NOR_TAVDS_SHIFT 8 +#define IFC_FTIM0_NOR_TAVDS(n) ((n) << IFC_FTIM0_NOR_TAVDS_SHIFT) +#define IFC_FTIM0_NOR_TEAHC_SHIFT 0 +#define IFC_FTIM0_NOR_TEAHC(n) ((n) << IFC_FTIM0_NOR_TEAHC_SHIFT) + +/* + * FTIM1 - NOR Flash Mode + */ +#define IFC_FTIM1_NOR 0xFF003F3F +#define IFC_FTIM1_NOR_TACO_SHIFT 24 +#define IFC_FTIM1_NOR_TACO(n) ((n) << IFC_FTIM1_NOR_TACO_SHIFT) +#define IFC_FTIM1_NOR_TRAD_NOR_SHIFT 8 +#define IFC_FTIM1_NOR_TRAD_NOR(n) ((n) << IFC_FTIM1_NOR_TRAD_NOR_SHIFT) +#define IFC_FTIM1_NOR_TSEQRAD_NOR_SHIFT 0 +#define IFC_FTIM1_NOR_TSEQRAD_NOR(n) ((n) << IFC_FTIM1_NOR_TSEQRAD_NOR_SHIFT) + +/* + * FTIM2 - NOR Flash Mode + */ +#define IFC_FTIM2_NOR 0x0F3CFCFF +#define IFC_FTIM2_NOR_TCS_SHIFT 24 +#define IFC_FTIM2_NOR_TCS(n) ((n) << IFC_FTIM2_NOR_TCS_SHIFT) +#define IFC_FTIM2_NOR_TCH_SHIFT 18 +#define IFC_FTIM2_NOR_TCH(n) ((n) << IFC_FTIM2_NOR_TCH_SHIFT) +#define IFC_FTIM2_NOR_TWPH_SHIFT 10 +#define IFC_FTIM2_NOR_TWPH(n) ((n) << IFC_FTIM2_NOR_TWPH_SHIFT) +#define IFC_FTIM2_NOR_TWP_SHIFT 0 +#define IFC_FTIM2_NOR_TWP(n) ((n) << IFC_FTIM2_NOR_TWP_SHIFT) + +/* Convert an address into the right format for the CSPR Registers */ +#define IFC_CSPR_PHYS_ADDR(x) (((UINTN)x) & 0xffff0000) + +/* + * Address Mask Register + */ +#define IFC_AMASK_MASK 0xFFFF0000 +#define IFC_AMASK_SHIFT 16 +#define IFC_AMASK(n) (IFC_AMASK_MASK << \ + (HighBitSet32(n) - IFC_AMASK_SHIFT)) + +VOID IfcNorInit(VOID); + +#endif //__IFC_COMMON_H__ diff --git a/Platform/NXP/LS1043aRdbPkg/Include/Library/IfcBoardSpecificLib.h b/Platform/NXP/LS1043aRdbPkg/Include/Library/IfcBoardSpecificLib.h new file mode 100755 index 0000000..d3c3c7c --- /dev/null +++ b/Platform/NXP/LS1043aRdbPkg/Include/Library/IfcBoardSpecificLib.h @@ -0,0 +1,51 @@ +/** IfcBoardSpecificLib.h + IFC Flash Board Specific library + + Copyright 2017 NXP + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +#ifndef __IFC__BOARD_SPECIFIC_LIB_H__ +#define __IFC__BOARD_SPECIFIC_LIB_H__ + +// On board flash support,endianness +#define NOR_SUPPORT +#define SYS_IFC_NOR_BE +#define IFC_REG_BASE 0x1530000 +#define IFC_NOR_BUF_BASE 0x60000000 + +// On board Inegrated flash Controller chip select configuration +#define IFC_NOR_CS IFC_CS0 + +// board-specific NOR flash timing +#define NOR_FTIM0 (IFC_FTIM0_NOR_TACSE(0x1) | \ + IFC_FTIM0_NOR_TEADC(0x1) | \ + IFC_FTIM0_NOR_TAVDS(0x0) | \ + IFC_FTIM0_NOR_TEAHC(0xc)) +#define NOR_FTIM1 (IFC_FTIM1_NOR_TACO(0x1c) | \ + IFC_FTIM1_NOR_TRAD_NOR(0xb) |\ + IFC_FTIM1_NOR_TSEQRAD_NOR(0x9)) +#define NOR_FTIM2 (IFC_FTIM2_NOR_TCS(0x1) | \ + IFC_FTIM2_NOR_TCH(0x4) | \ + IFC_FTIM2_NOR_TWPH(0x8) | \ + IFC_FTIM2_NOR_TWP(0x10)) +#define NOR_FTIM3 0x0 + +#define NOR_CSPR (IFC_CSPR_PHYS_ADDR(IFC_NOR_BUF_BASE) \ + | IFC_CSPR_PORT_SIZE_16 \ + | IFC_CSPR_MSEL_NOR \ + | IFC_CSPR_V) + +#define NOR_CSPR_EXT 0x0 +#define NOR_AMASK IFC_AMASK(128*1024*1024) +#define NOR_CSOR (IFC_CSOR_NOR_ADM_SHIFT(4) | \ + IFC_CSOR_NOR_TRHZ_80) + +#endif //__IFC__BOARD_SPECIFIC_LIB_H__ diff --git a/Platform/NXP/Library/IfcFlashLib/IfcFlashLib.c b/Platform/NXP/Library/IfcFlashLib/IfcFlashLib.c new file mode 100644 index 0000000..7748972 --- /dev/null +++ b/Platform/NXP/Library/IfcFlashLib/IfcFlashLib.c @@ -0,0 +1,65 @@ +/** @IfcFlashLib.c + + Copyright 2017 NXP + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include +// Include board specific file for Flash timing +#include + +#ifdef NOR_SUPPORT +VOID +GetIfcNorFlashInfo ( + IN NorFlashInfo *NorFlashInfo + ) +{ + NorFlashInfo->IfcRegs = (IFC_REGS*) IFC_REG_BASE; + NorFlashInfo->ChipSelect = IFC_NOR_CS; + return ; +} + +VOID +GetIfcNorFlashTimings ( + IN IfcTimings * NorIfcTimings + ) +{ + NorIfcTimings->Ftim[0] = NOR_FTIM0; + NorIfcTimings->Ftim[1] = NOR_FTIM1; + NorIfcTimings->Ftim[2] = NOR_FTIM2; + NorIfcTimings->Ftim[3] = NOR_FTIM3; + NorIfcTimings->Cspr = NOR_CSPR; + NorIfcTimings->CsprExt = NOR_CSPR_EXT; + NorIfcTimings->Amask = NOR_AMASK; + NorIfcTimings->Csor = NOR_CSOR; + return ; +} + +VOID IfcNorWrite32 (VOID *a, UINT32 v) { +#ifdef SYS_IFC_NOR_BE + MmioWriteBe32((UINTN)a, v); +#else + MmioWrite32((UINTN)a, v); +#endif +} + +FLASH_DATA +IfcNorFlashData ( + FLASH_DATA Value + ) +{ +#ifdef SYS_IFC_NOR_BE + return SwapBytes16(Value); +#else + return Value; +#endif +} +#endif //NOR_SUPPORT diff --git a/Platform/NXP/Library/IfcFlashLib/IfcFlashLib.inf b/Platform/NXP/Library/IfcFlashLib/IfcFlashLib.inf new file mode 100644 index 0000000..bd92474 --- /dev/null +++ b/Platform/NXP/Library/IfcFlashLib/IfcFlashLib.inf @@ -0,0 +1,30 @@ +#/** IfcFlashLib.inf +# +# Component description file for IFC FLASH Library +# +# Copyright 2017 NXP +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +#**/ + +[Defines] + INF_VERSION = 0x0001001A + BASE_NAME = IfcFlashLib + FILE_GUID = 8ecefc8f-a2c4-4091-b80f-92da7c4ab37f + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = IfcFlashLib + +[Sources.common] + IfcFlashLib.c + +[Packages] + MdePkg/MdePkg.dec + Platform/NXP/NxpQoriqLs.dec -- 1.9.1