From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.0.80; helo=eur02-am5-obe.outbound.protection.outlook.com; envelope-from=meenakshi.aggarwal@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00080.outbound.protection.outlook.com [40.107.0.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id E8C65223230CE for ; Fri, 16 Feb 2018 00:47:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=mozbBCoFgm4tZdsBRtLLlY/3h1zF7vdTSPaL36G+gZ8=; b=x/dvOdv7bzenO2Lc8b2/gkRH0mXKA/MDH7XT1HftHIKZnPrg0yhqLO4UOdyfQeknk37tV8iN2X5yoOMaSMmWvqeJHBydnWc/yJ1cXIlrpLGaoi2JG92+CBpyqlUddPQTSlmXoGPezzHNaMx9i6K9uzSQugc/+9tl6+QUaPYWQTM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=meenakshi.aggarwal@nxp.com; Received: from idcbfarm.ap.freescale.net (192.88.169.1) by VI1PR04MB1008.eurprd04.prod.outlook.com (2a01:111:e400:5090::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Fri, 16 Feb 2018 08:53:06 +0000 From: Meenakshi To: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org, michael.d.kinney@intel.com, edk2-devel@lists.01.org Date: Fri, 16 Feb 2018 14:20:06 +0530 Message-Id: <1518771035-6733-11-git-send-email-meenakshi.aggarwal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1518771035-6733-1-git-send-email-meenakshi.aggarwal@nxp.com> References: <1518771035-6733-1-git-send-email-meenakshi.aggarwal@nxp.com> MIME-Version: 1.0 X-Originating-IP: [192.88.169.1] X-ClientProxiedBy: HK2PR02CA0172.apcprd02.prod.outlook.com (2603:1096:201:1f::32) To VI1PR04MB1008.eurprd04.prod.outlook.com (2a01:111:e400:5090::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e69759bf-0480-48f8-56b0-08d5751ab443 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR04MB1008; X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB1008; 3:JzotbEzAMokzdymyfxxCNtf43Zl/dXCEouvriMc42JhLsMsQiM/aacXSu1/pHBzKgCX/h+Ih+4hSlo/mTI4/PE9smyMIahF1eQAVQD8ftoqNqTmud9eUW0sCqIpWLSNQh0JJSlkOgeKQktBz1b7F8tsIgSUxgunB020r8i5HgC1e05g6XNyfQGW1sQcmdlSQvt1b9S3P32itTk1B4YH0GTzzo92iuHij+qBlyRR4VCpBokjWaY+Zozpr/HRCsG2v; 25:mCW1IpcNvEn2sw5nnjl77WA6oL8vg4S8H0C/bAd0cwoY0FGUAMikYEXbI+nmd6WdoWyg/RGFcEgkFCq7BPl8ZpAkUWJAqca108MThUCvivpiifZJBb8WfEvhDOaecbin2LWuppzz/8MkH1ABOMCz/gJfqYbaMX/E0fQyL55N3tJVMBbIvvxUPeggEVPwjVWsD7AydYLcgU1+RMCDKpNNcEjRq+eLk7h0mpd8s1LgYZZqFPPBLGhjvhil/Cl0x/nX7idUC4LGtcU5AlrgiNjT1WRt1mjmN1aglTUdKrKPVykbqsarcHPVKIiDJwgcDN0QQ/lc9EkzkD2YohFw0LXt0Q==; 31:vpAE5dbwJcisTzYQyWE0Df91DNQ1Ei5UyDbV4MxUvbXRUzVjgkqvToOjyEiHkMK+mKqBPnotVG62VJN8f/QNpaVh4bkSmWRn0NSDrO77m2rvJWAEQN2wCwOW3NEwXlenCIP/SOw8zEwjJlS8kMM5Qg7c1xv9/bmlM6zhs6vFhVk+alGy8h6K0eUw9IIrQs+Mbh5WSobXBR/hdEBkZVfKDkEDEcF6wefm+XZPupZc+1c= X-MS-TrafficTypeDiagnostic: VI1PR04MB1008: X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB1008; 20:XCWfZsatjQB0fCzfe7iXNQFWiNHG+QCNAYklNSEFReOCwEN/1qwnHtP5gCnq9sPU07KKRAkF1DyVptUEPwXQciBP9BbbK1hgyZBKNY0Y0zu9YiyQL9magbMMuTRQkE0Eyg4CA6dEJgLX+wwjYPrGfYKQyEiTWc7WkppvzMX0ApkSBARC+qK4kprd3BuRQndS0PoOt5+U11ZXSBnRA7OU2tiU+63i3UlRZ9RQzuP++WhMV2PTWLBETBOQrC4SH85JMqGA5TDpRG+KPFRh6aC6MeU2mj2ZtArxJeG2AMT/TNxgZPn67eOQVfgmjAoMiQWLrp+p/65V6dG2+QhBISiQ5dwLUuzs6avXmJfReFJjf2hRbsNJ4NK1bjKZ/qV+bDeoNU786BVrCUuPwVbUZfmCvfL+OnUGrIgzCbvqV8ZqF13t+5Z2p2LQJLnONd+1I7YQ/IalnCyMVmC1whwiRtFcxF2BhWQhWjbPq9+DjIO6KChekA8sRATh892LbKGYdgGS; 4:1rzQsBI5ccotP/W75tr0MA5V6t7iiu0hZnFv3lAHIR5i6rxX6zWHzbmba0DxlLw3bUH2UaIAk5uLZZFDxB/xXWntfTyOu7ALBfZsUcAN1PI4WUga04JeeFggkwOqCdNfbTug+j0VBYQpyisdfgr7EY1zhGRuiK7RpRTb9dl9jMprU5RSyD4QC4SlAc3DKGXqRNJv6uSlgjTktat5v+4ehdU5iJNORcKFTlf9q/Q3nLCDKfdQBfsRWspEJMlgMSxm3wCLrSAbbsoVs3oBl7Y5oPBUFCPe8pAS1kp7RUgbGrMYpEVvpAdoElj6+UKtdMTU X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(3231101)(944501161)(6055026)(6041288)(20161123558120)(20161123564045)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:VI1PR04MB1008; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB1008; X-Forefront-PRVS: 0585417D7B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(376002)(39380400002)(396003)(39860400002)(366004)(199004)(189003)(86362001)(575784001)(6486002)(8676002)(76176011)(36756003)(53376002)(966005)(4326008)(6116002)(15188155005)(16799955002)(7736002)(386003)(68736007)(186003)(26005)(53936002)(305945005)(16526019)(81156014)(3846002)(6506007)(478600001)(50226002)(16586007)(8936002)(2950100002)(316002)(2906002)(25786009)(97736004)(50466002)(48376002)(105586002)(52116002)(47776003)(81166006)(51416003)(5660300001)(106356001)(66066001)(6306002)(6512007); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB1008; H:idcbfarm.ap.freescale.net; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR04MB1008; 23:nSrGtE5XO+v2k6uMxuMhkhb3ip3cxpjV79jVYJxW3?= =?us-ascii?Q?bC/zjie4JGePXvV4Li2JRMt7BIpUU1mGppVh1qWvsXK94a52Tar1LgWgVRvj?= =?us-ascii?Q?gogTS+Fec++O1Oack/myjD+yyGS9te30U/dzQiY0iPe2GQF0gjL0GCBPg8X7?= =?us-ascii?Q?H8PxJ4DOOwm5mpfHNez5DIXpomLX2WIwLLlRNGZXxtlZoyzTlJ4w9OggSm9f?= =?us-ascii?Q?aQE4DRKBEFTXVzJKmqvGCcKJZqhX0nEG3Fj2vdTT03SvLBpeY9/hsXwU2QH2?= =?us-ascii?Q?3Ie7eytB53+nzlHW7LnGYCgzda8G2PUFuOargBrLKv8ZQQDXXRkFW+yuZBDa?= =?us-ascii?Q?FhdQl5mTk3Te6eijqaEFs6NaX+pXPtR85tQANAFZsSfQtqL6ocpegpKRfpua?= =?us-ascii?Q?SGPS+M7tQrV7UaeRQVpmPD4oGG7NuGqdol6TVe3mmKsk8rOXdnMQ3/Nxa9vz?= =?us-ascii?Q?pR3ELgFfGDcTr+R8RgHYn+S/WGGXNURsoWQyss1d5UqWHwS0dxKo4Is9wD3T?= =?us-ascii?Q?4SXTL7W0FGYendlyqqT+vllNtKcHsjqeQwziBOtUJpGHfnItNLncY0KA3ngm?= =?us-ascii?Q?XFlEaADrS07A1gX0Y6N39Z8LE2poEG0+tSRKW+LAR63qzZCQwjcKC9WgJJuS?= =?us-ascii?Q?YPcVUvutKJkVRFdsn6jd+5tHExCErN4j4+O1lYChTrBIJKGuXsShQyhvv9aJ?= =?us-ascii?Q?+QMhjhed6HnTI5nlRmYXB2xqBQbx7AYMnALg2KgVK57LueT1G+U4f6Tq5RJJ?= =?us-ascii?Q?w1CMnBO5jTQSYG1ry1jX+7pPRY3iLHkv4OI4xKeIBLmBMvrPfb9d9hGPHXij?= =?us-ascii?Q?dM1FRk5wAQIxDvEbFyQ3h4DybkaLOKGfjNEXOqybT/fTSQUK4rpcla4lxl7c?= =?us-ascii?Q?bp+Y5tR26CgzxcE6Kpc5VWJhpvZjPmjIBtjV0CiTMipWonrTR94ukJYl3rv9?= =?us-ascii?Q?hdOxaldMpf3ZG4J1VeRwspwuF23p9D6b3M5k+wL+JL5VpuXDgRmi2UsQ6T90?= =?us-ascii?Q?uldN+lQf6F/x8Xr/ZqezzuTDc7/FJB0AEo/33avnDkB8zM6wn/5WAA2JDMIV?= =?us-ascii?Q?bSISlONJr1LsDewe0vPFM2Yd/5Q8FzydYqtS7K1L9A6iy+gQpkSmf55UsGOj?= =?us-ascii?Q?W3DdL/7cxhpiZ86TsN44DjwTJWt0UITyE3lnZ7J+FwHc8gDGn8Wv2XygXGMT?= =?us-ascii?Q?uZllYA5N6vJMlCJ4fI3oJHLVCnCPflFSF+9?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR04MB1008; 6:G7iv2Nv4EDf/N4BsJkVusM/2qw+ewHNOhzFW0zUrJyrdxqxcqmOYMuYQ17Ez3735m4oG8dueyZMqJ/vcdyFHBTrtLyeLdklnSiU6fG+rc0cwuHVnUbjPzq5hhWU4MN9TpmnKfHTjoHKd/3N1JRYhzUyDksTRJ78GxPZnRH0f8PrLFSlsvcCdbF4U+qeDgpI0sMeP7EHALMsD5oDv7A8keiHz/CT1QMpRIIZlPfXqhFy/4yx+WCc+91Z5eCP3bknkz3ov5MC8CAVMcQAu9tlUYs5NkUxQU7WHzG63j6no7+0j1OMyivnuGkeKwf/eVlKI22fNeYufrYEpqADGLl6xK/Ahjf6MCYRIO1NSNKBwXRc=; 5:pJV4QvBQRbGG9E/FSnMyj2EFsGpreR8kprqZn7fwMKJjemmajMX093OvSDAp64yHwqQYW0Y81gnKlicMZcdXDznxEYn0NL4oPz7HNw+7ce2p2BV5tvyR8HxeYI0eBQ27wXMkKQruYVR/deB5+wQ/sydzszxKMsQDUkxuRy6JOSc=; 24:L5OBPWgWIkHRPTnXtvAvH+jduisRt8qM6snjM+NYsn8y+awGmEn1JzhWkiI5J5XBR/JfcV4uc8Wi5ZKZD/5jpvQqXZ8p5U8WGO+hHHL/2zU=; 7:WiBHkyvq8a6I7lervy78NimlRR8jEm1VNtsKyx9ZSOZSCf9dnBctWdg4piTsrvKsnYS/1wnYmdQxGV+W6nW0kvH0L4tOYmL0MbWjVdCqaj+6Jhff4WLINGQEhB+Vvu9Rox4TnUdBiKi1ghetSim3pYCgpZ7N0cEPQ/Y3F6J/YiDKQJDglkNJ6tvEpuRLiparDW8LtSMCO+0nJRHoXZCohJBzhipcPycHDLyQsXPokOtIn0E1s1x6QLjN0oeKpADT SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Feb 2018 08:53:06.6392 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e69759bf-0480-48f8-56b0-08d5751ab443 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB1008 Subject: [PATCH edk2-platforms 10/39] IFC : Add Header file for IFC controller X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Feb 2018 08:47:20 -0000 Content-Type: text/plain From: Meenakshi Aggarwal This header file contain IFC controller timing structure, chip select enum and other IFC macros. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Meenakshi Aggarwal --- Silicon/NXP/Include/Ifc.h | 420 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 420 insertions(+) create mode 100644 Silicon/NXP/Include/Ifc.h diff --git a/Silicon/NXP/Include/Ifc.h b/Silicon/NXP/Include/Ifc.h new file mode 100644 index 0000000..0bb7230 --- /dev/null +++ b/Silicon/NXP/Include/Ifc.h @@ -0,0 +1,420 @@ +/** @Ifc.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_H__ +#define __IFC_H__ + +#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 + +/* List of commands */ +#define IFC_NAND_CMD_RESET 0xFF +#define IFC_NAND_CMD_READID 0x90 +#define IFC_NAND_CMD_STATUS 0x70 +#define IFC_NAND_CMD_READ0 0x00 +#define IFC_NAND_CMD_READSTART 0x30 +#define IFC_NAND_CMD_ERASE1 0x60 +#define IFC_NAND_CMD_ERASE2 0xD0 +#define IFC_NAND_CMD_SEQIN 0x80 +#define IFC_NAND_CMD_PAGEPROG 0x10 +#define MAX_RETRY_COUNT 150000 + + +#define IFC_NAND_SEQ_STRT_FIR_STRT 0x80000000 + +/* + * NAND Event and Error Status Register (NAND_EVTER_STAT) + */ + +/* Operation Complete */ +#define IFC_NAND_EVTER_STAT_OPC 0x80000000 + +/* Flash Timeout Error */ +#define IFC_NAND_EVTER_STAT_FTOER 0x08000000 + +/* Write Protect Error */ +#define IFC_NAND_EVTER_STAT_WPER 0x04000000 + +/* ECC Error */ +#define IFC_NAND_EVTER_STAT_ECCER 0x02000000 + +/* + * NAND Flash Instruction Registers (NAND_FIR0/NAND_FIR1/NAND_FIR2) + */ + +/* NAND Machine specific opcodes OP0-OP14*/ +#define IFC_NAND_FIR0_OP0 0xFC000000 +#define IFC_NAND_FIR0_OP0_SHIFT 26 +#define IFC_NAND_FIR0_OP1 0x03F00000 +#define IFC_NAND_FIR0_OP1_SHIFT 20 +#define IFC_NAND_FIR0_OP2 0x000FC000 +#define IFC_NAND_FIR0_OP2_SHIFT 14 +#define IFC_NAND_FIR0_OP3 0x00003F00 +#define IFC_NAND_FIR0_OP3_SHIFT 8 +#define IFC_NAND_FIR0_OP4 0x000000FC +#define IFC_NAND_FIR0_OP4_SHIFT 2 +#define IFC_NAND_FIR1_OP5 0xFC000000 +#define IFC_NAND_FIR1_OP5_SHIFT 26 +#define IFC_NAND_FIR1_OP6 0x03F00000 +#define IFC_NAND_FIR1_OP6_SHIFT 20 +#define IFC_NAND_FIR1_OP7 0x000FC000 +#define IFC_NAND_FIR1_OP7_SHIFT 14 +#define IFC_NAND_FIR1_OP8 0x00003F00 +#define IFC_NAND_FIR1_OP8_SHIFT 8 +#define IFC_NAND_FIR1_OP9 0x000000FC +#define IFC_NAND_FIR1_OP9_SHIFT 2 +#define IFC_NAND_FIR2_OP10 0xFC000000 +#define IFC_NAND_FIR2_OP10_SHIFT 26 +#define IFC_NAND_FIR2_OP11 0x03F00000 +#define IFC_NAND_FIR2_OP11_SHIFT 20 +#define IFC_NAND_FIR2_OP12 0x000FC000 +#define IFC_NAND_FIR2_OP12_SHIFT 14 +#define IFC_NAND_FIR2_OP13 0x00003F00 +#define IFC_NAND_FIR2_OP13_SHIFT 8 +#define IFC_NAND_FIR2_OP14 0x000000FC +#define IFC_NAND_FIR2_OP14_SHIFT 2 + +/* + * NAND Flash Command Registers (NAND_FCR0/NAND_FCR1) + */ + +/* General purpose FCM flash command bytes CMD0-CMD7 */ +#define IFC_NAND_FCR0_CMD0 0xFF000000 +#define IFC_NAND_FCR0_CMD0_SHIFT 24 +#define IFC_NAND_FCR0_CMD1 0x00FF0000 +#define IFC_NAND_FCR0_CMD1_SHIFT 16 +#define IFC_NAND_FCR0_CMD2 0x0000FF00 +#define IFC_NAND_FCR0_CMD2_SHIFT 8 +#define IFC_NAND_FCR0_CMD3 0x000000FF +#define IFC_NAND_FCR0_CMD3_SHIFT 0 +#define IFC_NAND_FCR1_CMD4 0xFF000000 +#define IFC_NAND_FCR1_CMD4_SHIFT 24 +#define IFC_NAND_FCR1_CMD5 0x00FF0000 +#define IFC_NAND_FCR1_CMD5_SHIFT 16 +#define IFC_NAND_FCR1_CMD6 0x0000FF00 +#define IFC_NAND_FCR1_CMD6_SHIFT 8 +#define IFC_NAND_FCR1_CMD7 0x000000FF +#define IFC_NAND_FCR1_CMD7_SHIFT 0 + +/* Timing registers for NAND Flash */ + +#define IFC_FTIM0_NAND_TCCST_SHIFT 25 +#define IFC_FTIM0_NAND_TCCST(n) ((n) << IFC_FTIM0_NAND_TCCST_SHIFT) +#define IFC_FTIM0_NAND_TWP_SHIFT 16 +#define IFC_FTIM0_NAND_TWP(n) ((n) << IFC_FTIM0_NAND_TWP_SHIFT) +#define IFC_FTIM0_NAND_TWCHT_SHIFT 8 +#define IFC_FTIM0_NAND_TWCHT(n) ((n) << IFC_FTIM0_NAND_TWCHT_SHIFT) +#define IFC_FTIM0_NAND_TWH_SHIFT 0 +#define IFC_FTIM0_NAND_TWH(n) ((n) << IFC_FTIM0_NAND_TWH_SHIFT) +#define IFC_FTIM1_NAND_TADLE_SHIFT 24 +#define IFC_FTIM1_NAND_TADLE(n) ((n) << IFC_FTIM1_NAND_TADLE_SHIFT) +#define IFC_FTIM1_NAND_TWBE_SHIFT 16 +#define IFC_FTIM1_NAND_TWBE(n) ((n) << IFC_FTIM1_NAND_TWBE_SHIFT) +#define IFC_FTIM1_NAND_TRR_SHIFT 8 +#define IFC_FTIM1_NAND_TRR(n) ((n) << IFC_FTIM1_NAND_TRR_SHIFT) +#define IFC_FTIM1_NAND_TRP_SHIFT 0 +#define IFC_FTIM1_NAND_TRP(n) ((n) << IFC_FTIM1_NAND_TRP_SHIFT) +#define IFC_FTIM2_NAND_TRAD_SHIFT 21 +#define IFC_FTIM2_NAND_TRAD(n) ((n) << IFC_FTIM2_NAND_TRAD_SHIFT) +#define IFC_FTIM2_NAND_TREH_SHIFT 11 +#define IFC_FTIM2_NAND_TREH(n) ((n) << IFC_FTIM2_NAND_TREH_SHIFT) +#define IFC_FTIM2_NAND_TWHRE_SHIFT 0 +#define IFC_FTIM2_NAND_TWHRE(n) ((n) << IFC_FTIM2_NAND_TWHRE_SHIFT) +#define IFC_FTIM3_NAND_TWW_SHIFT 24 +#define IFC_FTIM3_NAND_TWW(n) ((n) << IFC_FTIM3_NAND_TWW_SHIFT) + +/* + * Flash ROW and COL Address Register (ROWn, COLn) + */ + +/* Main/spare region locator */ +#define IFC_NAND_COL_MS 0x80000000 + +/* Column Address */ +#define IFC_NAND_COL_CA_MASK 0x00000FFF + +#define NAND_STATUS_WP 0x80 + +/* + * NAND Event and Error Enable Register (NAND_EVTER_EN) + */ + +/* Operation complete event enable */ +#define IFC_NAND_EVTER_EN_OPC_EN 0x80000000 + +/* Page read complete event enable */ +#define IFC_NAND_EVTER_EN_PGRDCMPL_EN 0x20000000 + +/* Flash Timeout error enable */ +#define IFC_NAND_EVTER_EN_FTOER_EN 0x08000000 + +/* Write Protect error enable */ +#define IFC_NAND_EVTER_EN_WPER_EN 0x04000000 + +/* ECC error logging enable */ +#define IFC_NAND_EVTER_EN_ECCER_EN 0x02000000 + +/* + * 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 + +/* NAND */ +#define IFC_CSPR_MSEL_NAND 0x00000002 + +/* GPCM */ +#define IFC_CSPR_MSEL_GPCM 0x00000004 + +// 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 + +/* + * Chip Select Option Register IFC_NAND Machine + */ + +/* Enable ECC Encoder */ +#define IFC_CSOR_NAND_ECC_ENC_EN 0x80000000 +#define IFC_CSOR_NAND_ECC_MODE_MASK 0x30000000 + +/* 4 bit correction per 520 Byte sector */ +#define IFC_CSOR_NAND_ECC_MODE_4 0x00000000 + +/* 8 bit correction per 528 Byte sector */ +#define IFC_CSOR_NAND_ECC_MODE_8 0x10000000 + +/* Enable ECC Decoder */ +#define IFC_CSOR_NAND_ECC_DEC_EN 0x04000000 + +/* Row Address Length */ +#define IFC_CSOR_NAND_RAL_MASK 0x01800000 +#define IFC_CSOR_NAND_RAL_SHIFT 20 +#define IFC_CSOR_NAND_RAL_1 0x00000000 +#define IFC_CSOR_NAND_RAL_2 0x00800000 +#define IFC_CSOR_NAND_RAL_3 0x01000000 +#define IFC_CSOR_NAND_RAL_4 0x01800000 + +/* Page Size 512b, 2k, 4k */ +#define IFC_CSOR_NAND_PGS_MASK 0x00180000 +#define IFC_CSOR_NAND_PGS_SHIFT 16 +#define IFC_CSOR_NAND_PGS_512 0x00000000 +#define IFC_CSOR_NAND_PGS_2K 0x00080000 +#define IFC_CSOR_NAND_PGS_4K 0x00100000 +#define IFC_CSOR_NAND_PGS_8K 0x00180000 + +/* Spare region Size */ +#define IFC_CSOR_NAND_SPRZ_MASK 0x0000E000 +#define IFC_CSOR_NAND_SPRZ_SHIFT 13 +#define IFC_CSOR_NAND_SPRZ_16 0x00000000 +#define IFC_CSOR_NAND_SPRZ_64 0x00002000 +#define IFC_CSOR_NAND_SPRZ_128 0x00004000 +#define IFC_CSOR_NAND_SPRZ_210 0x00006000 +#define IFC_CSOR_NAND_SPRZ_218 0x00008000 +#define IFC_CSOR_NAND_SPRZ_224 0x0000A000 +#define IFC_CSOR_NAND_SPRZ_CSOR_EXT 0x0000C000 + +/* Pages Per Block */ +#define IFC_CSOR_NAND_PB_MASK 0x00000700 +#define IFC_CSOR_NAND_PB_SHIFT 8 +#define IFC_CSOR_NAND_PB(n) (n-5) << IFC_CSOR_NAND_PB_SHIFT + +/* Time for Read Enable High to Output High Impedance */ +#define IFC_CSOR_NAND_TRHZ_MASK 0x0000001C +#define IFC_CSOR_NAND_TRHZ_SHIFT 2 +#define IFC_CSOR_NAND_TRHZ_20 0x00000000 +#define IFC_CSOR_NAND_TRHZ_40 0x00000004 +#define IFC_CSOR_NAND_TRHZ_60 0x00000008 +#define IFC_CSOR_NAND_TRHZ_80 0x0000000C +#define IFC_CSOR_NAND_TRHZ_100 0x00000010 + +/* + * 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) + +/* + * FTIM0 - Normal GPCM Mode + */ +#define IFC_FTIM0_GPCM 0xF03F3F3F +#define IFC_FTIM0_GPCM_TACSE_SHIFT 28 +#define IFC_FTIM0_GPCM_TACSE(n) ((n) << IFC_FTIM0_GPCM_TACSE_SHIFT) +#define IFC_FTIM0_GPCM_TEADC_SHIFT 16 +#define IFC_FTIM0_GPCM_TEADC(n) ((n) << IFC_FTIM0_GPCM_TEADC_SHIFT) +#define IFC_FTIM0_GPCM_TAVDS_SHIFT 8 +#define IFC_FTIM0_GPCM_TAVDS(n) ((n) << IFC_FTIM0_GPCM_TAVDS_SHIFT) +#define IFC_FTIM0_GPCM_TEAHC_SHIFT 0 +#define IFC_FTIM0_GPCM_TEAHC(n) ((n) << IFC_FTIM0_GPCM_TEAHC_SHIFT) + +/* + * FTIM1 - Normal GPCM Mode + */ +#define IFC_FTIM1_GPCM 0xFF003F00 +#define IFC_FTIM1_GPCM_TACO_SHIFT 24 +#define IFC_FTIM1_GPCM_TACO(n) ((n) << IFC_FTIM1_GPCM_TACO_SHIFT) +#define IFC_FTIM1_GPCM_TRAD_SHIFT 8 +#define IFC_FTIM1_GPCM_TRAD(n) ((n) << IFC_FTIM1_GPCM_TRAD_SHIFT) + +/* + * FTIM2 - Normal GPCM Mode + */ +#define IFC_FTIM2_GPCM 0x0F3C00FF +#define IFC_FTIM2_GPCM_TCS_SHIFT 24 +#define IFC_FTIM2_GPCM_TCS(n) ((n) << IFC_FTIM2_GPCM_TCS_SHIFT) +#define IFC_FTIM2_GPCM_TCH_SHIFT 18 +#define IFC_FTIM2_GPCM_TCH(n) ((n) << IFC_FTIM2_GPCM_TCH_SHIFT) +#define IFC_FTIM2_GPCM_TWP_SHIFT 0 +#define IFC_FTIM2_GPCM_TWP(n) ((n) << IFC_FTIM2_GPCM_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)) + +typedef enum { + IFC_CS0 = 0, + IFC_CS1, + IFC_CS2, + IFC_CS3, + IFC_CS4, + IFC_CS5, + IFC_CS6, + IFC_CS7, + IFC_CS_MAX, +} IFC_CHIP_SEL; + +typedef struct { + UINT32 Ftim[IFC_BANK_COUNT]; + UINT32 CsprExt; + UINT32 Cspr; + UINT32 Csor; + UINT32 Amask; + UINT8 CS; +} IFC_TIMINGS; + +#endif //__IFC_H__ -- 1.9.1