From patchwork Fri Oct 12 14:44:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rajesh Bhagat X-Patchwork-Id: 983092 X-Patchwork-Delegate: yorksun@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="RtUySb8A"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42WrKj1ydzz9s2P for ; Sat, 13 Oct 2018 01:47:53 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id E70E8C21C57; Fri, 12 Oct 2018 14:47:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAD_ENC_HEADER, SPF_HELO_PASS, T_DKIM_INVALID, UPPERCASE_50_75 autolearn=no autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 277E7C21E2C; Fri, 12 Oct 2018 14:45:48 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id C3939C21DF8; Fri, 12 Oct 2018 14:45:43 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40084.outbound.protection.outlook.com [40.107.4.84]) by lists.denx.de (Postfix) with ESMTPS id 001E7C21D74 for ; Fri, 12 Oct 2018 14:45:36 +0000 (UTC) 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:X-MS-Exchange-SenderADCheck; bh=XrGkQZWk4QPkbc+AjtKnJDGJEd79RHFwYsjWbZyZagA=; b=RtUySb8Aw/qQeudI7Wx0QozXkkYyCjTfyWuC8cPOfn931AUbkY0G6S+kd7XTcfUpcVdJ/IAvCwuEDX56+GGVrE2rCYAmO8b9eYezvPh6+FgNLIcmA8mry+FMSunBtV+f8eqGIdhYIvMUGWb7G5S4MQwFIWIyzu8ynNV7fI8v13w= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=rajesh.bhagat@nxp.com; Received: from phoenix7.ap.freescale.net (14.143.30.134) by DB7PR04MB4858.eurprd04.prod.outlook.com (2603:10a6:10:18::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.21; Fri, 12 Oct 2018 14:45:34 +0000 From: Rajesh Bhagat To: u-boot@lists.denx.de Date: Fri, 12 Oct 2018 20:14:34 +0530 Message-Id: <20181012144454.3707-8-rajesh.bhagat@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181012144454.3707-1-rajesh.bhagat@nxp.com> References: <20181012144454.3707-1-rajesh.bhagat@nxp.com> MIME-Version: 1.0 X-Originating-IP: [14.143.30.134] X-ClientProxiedBy: PN1PR01CA0109.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c00::25) To DB7PR04MB4858.eurprd04.prod.outlook.com (2603:10a6:10:18::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3c6d040f-b542-4454-f279-08d630515ed1 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:DB7PR04MB4858; X-Microsoft-Exchange-Diagnostics: 1; DB7PR04MB4858; 3:8clvJQnJ8dt5ltJieyRggGgUt4cP3jkUEPUbS1UIUvvhMneloZHbQQp8ZvLBKWVj1C47caoGw7eeh+RNUMag2BNmdaeHN0J/zsCPNO5wJzylEHu/xKoEE49myMtyfgI0UOQVcuZZJckBgvYoK7Ih1vtHHM6GjwHu2AyE97WtGEpxWthTtwTYpS3bwhgkcmbvIWkZVsaia9M0kUa2PYXDEOKvcow8XM9keSudzfvDhFxyHmQH77iOQ0AFPhQ25K/6; 25:ad7nPz50XRfrPc3y8bqJqP5n1F4yKuphAIkl3rP3gYiUYoHIraUOvMAys65yCOu4PsCk5UNi59JjTw6q0MjH9bRZTkNDnaaBwobZVusEQBqCsof1fAyzm5agpVfTqTB3yXC6pwcsNz8wJsy6pOH0x4efXWprrj1opraTK7CnJlaeRL/CfB6yGx0XC6fCaZkSNHBCh+R6kK06gA90uSlpYhZCEHYG3stVaPRPXE+0/4oJdZhtMawjS+42YBG/we4sEEO+ZTeCXVy5hyTO0FsjnDCaU/9HaW7F2h3GLsnCIEcEZsx6RHN0ESrGL3QICmvkhwmLv6WprPNDQa0eO6/E3A==; 31:hE0Op6GgopyZuYAlGR/gWeXjwMGlTidshJtZHB7pzrDxObcpEDz7+byHNqzyn5Km5AisA50jHGMFeM1cge3TccCgIODkDeOqsF0fDytcmo2HLCVVtLf43rQ+ybOGBaWnXDAXxP4+CKIgWOyVZuLvLj+fRspbLwD2/14xO1FoN2Z9dsezha3BUpSMOTqjAxTgacYigoDEi2f+4qnUky+GTSQ6ACmZz9NMststvaqs9gY= X-MS-TrafficTypeDiagnostic: DB7PR04MB4858: X-Microsoft-Exchange-Diagnostics: 1; DB7PR04MB4858; 20:tZRvR42faL/2OibmDKNRXzbA/bbK9qOpsSg3JsmP3RcfChyxzbGzzPz/VUAUHaoBPN1NwTInBBqtho04jtOL2OG5pXoil/x3ADj3I1R5VBhj/3l52ujyx0prPxVTvsLNrB0RMvUeN/+XdHP7K/rz5RUto9BcFcciRXGnZH5qH8MN21DU53R784m5lOep5oaeMyMrwiwkZ27MEOx3NV9MlJ3Yl/yXqHDrQvWF3jh0CZNq3MI0I+iKXxBgqpToxyJDV1/0QeUvPB+AAsFrMq/2b8onbXRi78VAojp0PeU0A87ishmOlXS9ZoKyZ8zbEDqZ1yROK1EBuQgRear/ZN9beoK/7IAMYbyKTS//dp1qlDXoC4l5RZMyRa6opzRkY1hCorN4mTuonxqCuMkGJ8farA9hFkq6yXyImHmXwnwsnWdDwP8DIEwtN1/5cutSAouzjRkjah9xw2INhJk6/qMY26wh34nVcRFMmL76VerOrLHRWmC2teVlLmzkECh7ehvH; 4:1lv6lubCNHAxTydwnpGngHj5uGHjlWOQa/ZWm/dht/M4p9C2s+svbjAC3/Ik9mJpUEp/u+qLTI8CKbBNWL9aQujJvwvugEVqoJSOwTrd7FZvGvnODJAULUu+pUOKK3LGu66lxIbn8A0cHJYbJGcZRtD+4aTQGO/Si9sX1b3tcEFu9EfxcM53jPzEJ2rgIvj/xtR2Md/0E3MyCpf9NK7Zy5GHkHwsaKvZLZK6Hgdl3yBW2ANhIexRjTvUcIFzjMYexzdb0FCqiKsFYm1klC79utJfPqlNsF/dwmBaJK3k+msJrbM6WI3dq955QRQ2irbZ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231355)(944501410)(52105095)(10201501046)(93006095)(93001095)(6055026)(149066)(150057)(6041310)(20161123564045)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(201708071742011)(7699051); SRVR:DB7PR04MB4858; BCL:0; PCL:0; RULEID:; SRVR:DB7PR04MB4858; X-Forefront-PRVS: 0823A5777B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(396003)(376002)(346002)(366004)(199004)(189003)(11346002)(16586007)(50466002)(446003)(16526019)(186003)(305945005)(48376002)(7736002)(86362001)(50226002)(486006)(6506007)(386003)(1006002)(4744004)(55236004)(76176011)(51416003)(52116002)(1076002)(81166006)(6116002)(3846002)(8676002)(2351001)(105586002)(2361001)(8936002)(68736007)(316002)(81156014)(106356001)(25786009)(6486002)(97736004)(478600001)(26005)(2906002)(4326008)(66066001)(956004)(2616005)(476003)(44832011)(36756003)(6512007)(53936002)(6916009)(5660300001)(47776003)(110426005); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR04MB4858; H:phoenix7.ap.freescale.net; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB7PR04MB4858; 23:xHzJ+TVkuDMdqS+W/xQJ9/2BNwV24Nl/AxV8GZDTi?= /P/XSub8H+bSeKTi4jaK+4kMeGZVn7q5Ch8x3JXQKOCBGKBS1eIY7d6zyBkMEvWG09eYmlkXt/ZP+HTrk7xOC9/n9or6oH4uZJWYPYc84h5nmnt3H7xYP7BVxSjNW6hgngYIrsiUYw3Ran0lKYOWZAi+qddXTKCVhTQRJYQlrWtP3QIJVdXEsorCQF0yS6rkcdzJIImqJH9KyuxVo4sOhQYVjR8SG8YDSa+FVssIy/pGZs7CtrYAlUyz9vBU+xEPjF3bhN8wQUNVa7HObhqttK80NDkrfi/J8f+sZmh9rfdUxxCwXiDzyAqSRIngLV2K9jdiZDlr4hR8mhsoOkzIqHxVE7F5LlbnAwWF158uVtXPKd8AC9CF//grsuu//W7+2UFPAMFmfWBLBS/poahkO8aNkz0mUnraRAF5s7tQNfL4XQktZNC1UFAoc3ydE7dx0chZne/09twsN7iT2UH9eGEFhI2Fu5mkO1T8rBZzzA+jRP7LfqW8CPa8Hb9T7bYnaQpwkOKMaeKU+Si2llBauADsW+y+JFoqo6r1sll/CtrvxVjldN/OCNdMITBH/LX1nBMw/ZWho/mgYGWYEqoqExSe69uyrXd8v8y0QF3UvKC+2aUXTZYGAlytbnb5wM7eiVprwDIamnkMhSy3HUAeV+/Kil4MvQNNsuVMIhtF0X7QHEv8LruXf29yR6Td01/6OkQKUoFbO17AjM30HNOv56pfWt/I0+UAgNlX+mNFakrvxbldeiLTuK25gnJ8zmvQ/e2Wje91PnGgHsXac2crRoFWmLmvQ5NQRsXYD3UYrIXULkTqxRazCyInkuE/yLpsBSBKTgwTefIp2HDWTYmzNwcBEcJwlqw5MdTkEa7jFgFmP0PXSMuepk6R3TNS+PVjIzgaBAmWquCmUkpJkTOuKpyMLlg9AfgutOo/l/yCR+px733QjvBGLSZfzZOPHHgljZQzmIyQFzlbbS64CAJBQr6PfdEaYgWoo+wnd6/rjgHIXo3pbDu0iXs/NiT96sqmKcf0tLBL43NKekWXyMgn3DvdH/sPxbOw0QS530JEw/PuLs2w+FRNBIc+X6Ps700RJDpbn9V1AqOafZr6u3noOVmrxSl6qWsC0lQ3B0uPkxQrkcRi1ujSElzM09JqIC0amnC+l23031Plc4h2tOtzGWltwruHxMOYPi0eqEima+Fg1YByGDCW+4pot8c5JmjhXPe6FtBne99Zj3eRBNaNwj4zJpqUQ6sHYlK/CFCLSPK1E5x2+EdEiff0sjU2Rf1QBg= X-Microsoft-Antispam-Message-Info: zN+hMr0EKfyrEjoMDAgXVQwYn/MFKhlXlziWJCNBNHmiNHOkEYaSzQQEJwSELWA7oEdmJPup5HMM7S+EHLdQO3HbYSdwkswMw8tPr4KE9lxRljTTxxajVrEoGbEU+DXPcy2nlyzS5iqEz/hTOizmgN1JPkj3dMoIrLn1n/yQt7b8fj8QYdGAmp+LM55h3L8L6VlZBwuwrGBCuRRuRhTu+QbdQ2N6hPg6eFT2DNoOfmLYEvL+nYhAiaWGGLmAwEcvEDFCB6+Dxc3E6viCSjeR52nxiBr4ldFP1Iua3CroPbBtlCWk4MUc5E3aqZOhUHHzLYiHNUzkvdVysk4qay/BOtT9pqukLUKNd8HuDBM1i7U= X-Microsoft-Exchange-Diagnostics: 1; DB7PR04MB4858; 6:Yteies9Cyfdhnp64ZMHi+Daw7ZEQJPYHCwaxzaiGYi52vhZ1TTs/zlFkm1OtedtbRGkhL1AXK34P+u+YX+Pa96Cn+Uy5Y7l/7T/J3sC/jTyCsdWu3fcfpJZ58T7O15jVo5yjpIUPgKcE0MMfmAtw7k1hDcp6POB0goc801uRguCAXGVXnL6xzkWXfrMZYz8rK1vt4FT2rCqVBQQmncDPBOIpbxlw9aBiKuzCho1foX7uauawqR8QuqJcMTUm2wELwfQjk16fKYD+Hs8/RntMIxrfPWXXKg4q3an2VgzQ/aLXfUlBeoS3OXwZQKKJSO5vBIR9tL0QlMVF1cGtqGDsyZfsLcN4nTQ8N/91y61IDy+aTfTFDRh5AB6gPUe9Z0PC4eZyBxLe3P3CQvElONbPF5gTJcPVxNZcJpuPOiOkdpCX1LtBRBXOqp0awmVOy4UxBotUHB4+AhjezlN8e7K6Ww==; 5:B0Z16dszSWetdw45Bsu2Pg7s2HOKk9ah4pLGbxmzj4uRNMujMl7BlTxAu67tKmKL0Si2gLEYYUytCDCBv0d5hX1oVaz6c/EBMgjTJYyYzaGdPQPY5kCjb7oJeW89X5wNcHxWRmr3lTw464llRki7bZcY8UDxjM067MTuybb5fY4=; 7:2X7nL5TqKKx6z2E08sckaFkk6U06qO2ZkN1+RnjDYigMszB+YtymnKsIWizpg+rAsUruvUS4W+mR935GuMB+Dom3uNVJQwOKavEHI8VxzfPAERiSp5F3gB9p4+qZwA9pbIc7jRTnloax9dKFrF6YOBH9oWbz/e0mBuPR9kBk6VO8ZzB6QjSLko5NvFatfw+6xajYH4zt9iUnjjcOQfob2nhPfqWW6oTSzQIjuSbgUpzsMEiPHeD9CVVShERIJGCu SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2018 14:45:34.9867 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3c6d040f-b542-4454-f279-08d630515ed1 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB4858 Cc: Pankit Garg Subject: [U-Boot] [PATCH v4 07/27] drivers: ifc: dynamic chipselect mapping support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 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" From: Pankit Garg IFC driver changes to implement the chipselect mappings at run time. Defines init_early_memctl_regs and init_final_memctl_regs with chipselect dynamic mapping for nor and nand boot. Signed-off-by: Pankit Garg Signed-off-by: Rajesh Bhagat --- Change in v4: None Change in v3: None Change in v2: None drivers/misc/fsl_ifc.c | 488 +++++++++++++++++++++++++++++------------ include/fsl_ifc.h | 17 ++ 2 files changed, 369 insertions(+), 136 deletions(-) diff --git a/drivers/misc/fsl_ifc.c b/drivers/misc/fsl_ifc.c index 7d66c3cf76..2e3b43356e 100644 --- a/drivers/misc/fsl_ifc.c +++ b/drivers/misc/fsl_ifc.c @@ -7,185 +7,401 @@ #include #include -void print_ifc_regs(void) -{ - int i, j; - - printf("IFC Controller Registers\n"); - for (i = 0; i < CONFIG_SYS_FSL_IFC_BANK_COUNT; i++) { - printf("CSPR%d:0x%08X\tAMASK%d:0x%08X\tCSOR%d:0x%08X\n", - i, get_ifc_cspr(i), i, get_ifc_amask(i), - i, get_ifc_csor(i)); - for (j = 0; j < 4; j++) - printf("IFC_FTIM%d:0x%08X\n", j, get_ifc_ftim(i, j)); - } -} - -void init_early_memctl_regs(void) -{ +struct ifc_regs ifc_cfg_default_boot[CONFIG_SYS_FSL_IFC_BANK_COUNT] = { + { + "cs0", #if defined(CONFIG_SYS_CSPR0) && defined(CONFIG_SYS_CSOR0) - set_ifc_ftim(IFC_CS0, IFC_FTIM0, CONFIG_SYS_CS0_FTIM0); - set_ifc_ftim(IFC_CS0, IFC_FTIM1, CONFIG_SYS_CS0_FTIM1); - set_ifc_ftim(IFC_CS0, IFC_FTIM2, CONFIG_SYS_CS0_FTIM2); - set_ifc_ftim(IFC_CS0, IFC_FTIM3, CONFIG_SYS_CS0_FTIM3); - -#ifndef CONFIG_A003399_NOR_WORKAROUND + CONFIG_SYS_CSPR0, #ifdef CONFIG_SYS_CSPR0_EXT - set_ifc_cspr_ext(IFC_CS0, CONFIG_SYS_CSPR0_EXT); -#endif + CONFIG_SYS_CSPR0_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK0 + CONFIG_SYS_AMASK0, +#else + 0, +#endif + CONFIG_SYS_CSOR0, + { + CONFIG_SYS_CS0_FTIM0, + CONFIG_SYS_CS0_FTIM1, + CONFIG_SYS_CS0_FTIM2, + CONFIG_SYS_CS0_FTIM3, + }, #ifdef CONFIG_SYS_CSOR0_EXT - set_ifc_csor_ext(IFC_CS0, CONFIG_SYS_CSOR0_EXT); + CONFIG_SYS_CSOR0_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_CSPR0_FINAL + CONFIG_SYS_CSPR0_FINAL, +#else + 0, #endif - set_ifc_cspr(IFC_CS0, CONFIG_SYS_CSPR0); - set_ifc_amask(IFC_CS0, CONFIG_SYS_AMASK0); - set_ifc_csor(IFC_CS0, CONFIG_SYS_CSOR0); +#ifdef CONFIG_SYS_AMASK0_FINAL + CONFIG_SYS_AMASK0_FINAL, +#else + 0, #endif #endif + }, +#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 2 + { + "cs1", +#if defined(CONFIG_SYS_CSPR1) && defined(CONFIG_SYS_CSOR1) + CONFIG_SYS_CSPR1, #ifdef CONFIG_SYS_CSPR1_EXT - set_ifc_cspr_ext(IFC_CS1, CONFIG_SYS_CSPR1_EXT); -#endif + CONFIG_SYS_CSPR1_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK1 + CONFIG_SYS_AMASK1, +#else + 0, +#endif + CONFIG_SYS_CSOR1, + { + CONFIG_SYS_CS1_FTIM0, + CONFIG_SYS_CS1_FTIM1, + CONFIG_SYS_CS1_FTIM2, + CONFIG_SYS_CS1_FTIM3, + }, #ifdef CONFIG_SYS_CSOR1_EXT - set_ifc_csor_ext(IFC_CS1, CONFIG_SYS_CSOR1_EXT); + CONFIG_SYS_CSOR1_EXT, +#else + 0, #endif -#if defined(CONFIG_SYS_CSPR1) && defined(CONFIG_SYS_CSOR1) - set_ifc_ftim(IFC_CS1, IFC_FTIM0, CONFIG_SYS_CS1_FTIM0); - set_ifc_ftim(IFC_CS1, IFC_FTIM1, CONFIG_SYS_CS1_FTIM1); - set_ifc_ftim(IFC_CS1, IFC_FTIM2, CONFIG_SYS_CS1_FTIM2); - set_ifc_ftim(IFC_CS1, IFC_FTIM3, CONFIG_SYS_CS1_FTIM3); - - set_ifc_csor(IFC_CS1, CONFIG_SYS_CSOR1); - set_ifc_amask(IFC_CS1, CONFIG_SYS_AMASK1); - set_ifc_cspr(IFC_CS1, CONFIG_SYS_CSPR1); +#ifdef CONFIG_SYS_CSPR1_FINAL + CONFIG_SYS_CSPR1_FINAL, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK1_FINAL + CONFIG_SYS_AMASK1_FINAL, +#else + 0, +#endif +#endif + }, #endif +#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 3 + { + "cs2", +#if defined(CONFIG_SYS_CSPR2) && defined(CONFIG_SYS_CSOR2) + CONFIG_SYS_CSPR2, #ifdef CONFIG_SYS_CSPR2_EXT - set_ifc_cspr_ext(IFC_CS2, CONFIG_SYS_CSPR2_EXT); -#endif + CONFIG_SYS_CSPR2_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK2 + CONFIG_SYS_AMASK2, +#else + 0, +#endif + CONFIG_SYS_CSOR2, + { + CONFIG_SYS_CS2_FTIM0, + CONFIG_SYS_CS2_FTIM1, + CONFIG_SYS_CS2_FTIM2, + CONFIG_SYS_CS2_FTIM3, + }, #ifdef CONFIG_SYS_CSOR2_EXT - set_ifc_csor_ext(IFC_CS2, CONFIG_SYS_CSOR2_EXT); + CONFIG_SYS_CSOR2_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_CSPR2_FINAL + CONFIG_SYS_CSPR2_FINAL, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK2_FINAL + CONFIG_SYS_AMASK2_FINAL, +#else + 0, #endif -#if defined(CONFIG_SYS_CSPR2) && defined(CONFIG_SYS_CSOR2) - set_ifc_ftim(IFC_CS2, IFC_FTIM0, CONFIG_SYS_CS2_FTIM0); - set_ifc_ftim(IFC_CS2, IFC_FTIM1, CONFIG_SYS_CS2_FTIM1); - set_ifc_ftim(IFC_CS2, IFC_FTIM2, CONFIG_SYS_CS2_FTIM2); - set_ifc_ftim(IFC_CS2, IFC_FTIM3, CONFIG_SYS_CS2_FTIM3); - - set_ifc_csor(IFC_CS2, CONFIG_SYS_CSOR2); - set_ifc_amask(IFC_CS2, CONFIG_SYS_AMASK2); - set_ifc_cspr(IFC_CS2, CONFIG_SYS_CSPR2); +#endif + }, #endif +#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 4 + { + "cs3", +#if defined(CONFIG_SYS_CSPR3) && defined(CONFIG_SYS_CSOR3) + CONFIG_SYS_CSPR3, #ifdef CONFIG_SYS_CSPR3_EXT - set_ifc_cspr_ext(IFC_CS3, CONFIG_SYS_CSPR3_EXT); -#endif + CONFIG_SYS_CSPR3_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK3 + CONFIG_SYS_AMASK3, +#else + 0, +#endif + CONFIG_SYS_CSOR3, + { + CONFIG_SYS_CS3_FTIM0, + CONFIG_SYS_CS3_FTIM1, + CONFIG_SYS_CS3_FTIM2, + CONFIG_SYS_CS3_FTIM3, + }, #ifdef CONFIG_SYS_CSOR3_EXT - set_ifc_csor_ext(IFC_CS3, CONFIG_SYS_CSOR3_EXT); + CONFIG_SYS_CSOR3_EXT, +#else + 0, #endif -#if defined(CONFIG_SYS_CSPR3) && defined(CONFIG_SYS_CSOR3) - set_ifc_ftim(IFC_CS3, IFC_FTIM0, CONFIG_SYS_CS3_FTIM0); - set_ifc_ftim(IFC_CS3, IFC_FTIM1, CONFIG_SYS_CS3_FTIM1); - set_ifc_ftim(IFC_CS3, IFC_FTIM2, CONFIG_SYS_CS3_FTIM2); - set_ifc_ftim(IFC_CS3, IFC_FTIM3, CONFIG_SYS_CS3_FTIM3); - - set_ifc_cspr(IFC_CS3, CONFIG_SYS_CSPR3); - set_ifc_amask(IFC_CS3, CONFIG_SYS_AMASK3); - set_ifc_csor(IFC_CS3, CONFIG_SYS_CSOR3); +#ifdef CONFIG_SYS_CSPR3_FINAL + CONFIG_SYS_CSPR3_FINAL, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK3_FINAL + CONFIG_SYS_AMASK3_FINAL, +#else + 0, +#endif +#endif + }, #endif +#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 5 + { + "cs4", +#if defined(CONFIG_SYS_CSPR4) && defined(CONFIG_SYS_CSOR4) + CONFIG_SYS_CSPR4, #ifdef CONFIG_SYS_CSPR4_EXT - set_ifc_cspr_ext(IFC_CS4, CONFIG_SYS_CSPR4_EXT); -#endif + CONFIG_SYS_CSPR4_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK4 + CONFIG_SYS_AMASK4, +#else + 0, +#endif + CONFIG_SYS_CSOR4, + { + CONFIG_SYS_CS4_FTIM0, + CONFIG_SYS_CS4_FTIM1, + CONFIG_SYS_CS4_FTIM2, + CONFIG_SYS_CS4_FTIM3, + }, #ifdef CONFIG_SYS_CSOR4_EXT - set_ifc_csor_ext(IFC_CS4, CONFIG_SYS_CSOR4_EXT); + CONFIG_SYS_CSOR4_EXT, +#else + 0, #endif -#if defined(CONFIG_SYS_CSPR4) && defined(CONFIG_SYS_CSOR4) - set_ifc_ftim(IFC_CS4, IFC_FTIM0, CONFIG_SYS_CS4_FTIM0); - set_ifc_ftim(IFC_CS4, IFC_FTIM1, CONFIG_SYS_CS4_FTIM1); - set_ifc_ftim(IFC_CS4, IFC_FTIM2, CONFIG_SYS_CS4_FTIM2); - set_ifc_ftim(IFC_CS4, IFC_FTIM3, CONFIG_SYS_CS4_FTIM3); - - set_ifc_cspr(IFC_CS4, CONFIG_SYS_CSPR4); - set_ifc_amask(IFC_CS4, CONFIG_SYS_AMASK4); - set_ifc_csor(IFC_CS4, CONFIG_SYS_CSOR4); +#ifdef CONFIG_SYS_CSPR4_FINAL + CONFIG_SYS_CSPR4_FINAL, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK4_FINAL + CONFIG_SYS_AMASK4_FINAL, +#else + 0, +#endif +#endif + }, #endif +#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 6 + { + "cs5", +#if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5) + CONFIG_SYS_CSPR5, #ifdef CONFIG_SYS_CSPR5_EXT - set_ifc_cspr_ext(IFC_CS5, CONFIG_SYS_CSPR5_EXT); -#endif + CONFIG_SYS_CSPR5_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK5 + CONFIG_SYS_AMASK5, +#else + 0, +#endif + CONFIG_SYS_CSOR5, + { + CONFIG_SYS_CS5_FTIM0, + CONFIG_SYS_CS5_FTIM1, + CONFIG_SYS_CS5_FTIM2, + CONFIG_SYS_CS5_FTIM3, + }, #ifdef CONFIG_SYS_CSOR5_EXT - set_ifc_csor_ext(IFC_CS5, CONFIG_SYS_CSOR5_EXT); + CONFIG_SYS_CSOR5_EXT, +#else + 0, #endif -#if defined(CONFIG_SYS_CSPR5) && defined(CONFIG_SYS_CSOR5) - set_ifc_ftim(IFC_CS5, IFC_FTIM0, CONFIG_SYS_CS5_FTIM0); - set_ifc_ftim(IFC_CS5, IFC_FTIM1, CONFIG_SYS_CS5_FTIM1); - set_ifc_ftim(IFC_CS5, IFC_FTIM2, CONFIG_SYS_CS5_FTIM2); - set_ifc_ftim(IFC_CS5, IFC_FTIM3, CONFIG_SYS_CS5_FTIM3); - - set_ifc_cspr(IFC_CS5, CONFIG_SYS_CSPR5); - set_ifc_amask(IFC_CS5, CONFIG_SYS_AMASK5); - set_ifc_csor(IFC_CS5, CONFIG_SYS_CSOR5); +#ifdef CONFIG_SYS_CSPR5_FINAL + CONFIG_SYS_CSPR5_FINAL, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK5_FINAL + CONFIG_SYS_AMASK5_FINAL, +#else + 0, +#endif +#endif + }, #endif +#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 7 + { + "cs6", +#if defined(CONFIG_SYS_CSPR6) && defined(CONFIG_SYS_CSOR6) + CONFIG_SYS_CSPR6, #ifdef CONFIG_SYS_CSPR6_EXT - set_ifc_cspr_ext(IFC_CS6, CONFIG_SYS_CSPR6_EXT); -#endif + CONFIG_SYS_CSPR6_EXT, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK6 + CONFIG_SYS_AMASK6, +#else + 0, +#endif + CONFIG_SYS_CSOR6, + { + CONFIG_SYS_CS6_FTIM0, + CONFIG_SYS_CS6_FTIM1, + CONFIG_SYS_CS6_FTIM2, + CONFIG_SYS_CS6_FTIM3, + }, #ifdef CONFIG_SYS_CSOR6_EXT - set_ifc_csor_ext(IFC_CS6, CONFIG_SYS_CSOR6_EXT); + CONFIG_SYS_CSOR6_EXT, +#else + 0, #endif -#if defined(CONFIG_SYS_CSPR6) && defined(CONFIG_SYS_CSOR6) - set_ifc_ftim(IFC_CS6, IFC_FTIM0, CONFIG_SYS_CS6_FTIM0); - set_ifc_ftim(IFC_CS6, IFC_FTIM1, CONFIG_SYS_CS6_FTIM1); - set_ifc_ftim(IFC_CS6, IFC_FTIM2, CONFIG_SYS_CS6_FTIM2); - set_ifc_ftim(IFC_CS6, IFC_FTIM3, CONFIG_SYS_CS6_FTIM3); - - set_ifc_cspr(IFC_CS6, CONFIG_SYS_CSPR6); - set_ifc_amask(IFC_CS6, CONFIG_SYS_AMASK6); - set_ifc_csor(IFC_CS6, CONFIG_SYS_CSOR6); +#ifdef CONFIG_SYS_CSPR6_FINAL + CONFIG_SYS_CSPR6_FINAL, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK6_FINAL + CONFIG_SYS_AMASK6_FINAL, +#else + 0, +#endif +#endif + }, #endif +#if CONFIG_SYS_FSL_IFC_BANK_COUNT >= 8 + { + "cs7", +#if defined(CONFIG_SYS_CSPR7) && defined(CONFIG_SYS_CSOR7) + CONFIG_SYS_CSPR7, #ifdef CONFIG_SYS_CSPR7_EXT - set_ifc_cspr_ext(IFC_CS7, CONFIG_SYS_CSPR7_EXT); + CONFIG_SYS_CSPR7_EXT, +#else + 0, #endif -#ifdef CONFIG_SYS_CSOR7_EXT - set_ifc_csor_ext(IFC_CS7, CONFIG_SYS_CSOR7_EXT); +#ifdef CONFIG_SYS_AMASK7 + CONFIG_SYS_AMASK7, +#else + 0, #endif -#if defined(CONFIG_SYS_CSPR7) && defined(CONFIG_SYS_CSOR7) - set_ifc_ftim(IFC_CS7, IFC_FTIM0, CONFIG_SYS_CS7_FTIM0); - set_ifc_ftim(IFC_CS7, IFC_FTIM1, CONFIG_SYS_CS7_FTIM1); - set_ifc_ftim(IFC_CS7, IFC_FTIM2, CONFIG_SYS_CS7_FTIM2); - set_ifc_ftim(IFC_CS7, IFC_FTIM3, CONFIG_SYS_CS7_FTIM3); + CONFIG_SYS_CSOR7, +#ifdef CONFIG_SYS_CSOR7_EXT + CONFIG_SYS_CSOR7_EXT, +#else + 0, +#endif + { + CONFIG_SYS_CS7_FTIM0, + CONFIG_SYS_CS7_FTIM1, + CONFIG_SYS_CS7_FTIM2, + CONFIG_SYS_CS7_FTIM3, + }, +#ifdef CONFIG_SYS_CSPR7_FINAL + CONFIG_SYS_CSPR7_FINAL, +#else + 0, +#endif +#ifdef CONFIG_SYS_AMASK7_FINAL + CONFIG_SYS_AMASK7_FINAL, +#else + 0, +#endif +#endif + }, +#endif +}; - set_ifc_cspr(IFC_CS7, CONFIG_SYS_CSPR7); - set_ifc_amask(IFC_CS7, CONFIG_SYS_AMASK7); - set_ifc_csor(IFC_CS7, CONFIG_SYS_CSOR7); -#endif +__weak void ifc_cfg_boot_info(struct ifc_regs_info *regs_info) +{ + regs_info->regs = ifc_cfg_default_boot; + regs_info->cs_size = CONFIG_SYS_FSL_IFC_BANK_COUNT; +} + +void print_ifc_regs(void) +{ + int i, j; + + printf("IFC Controller Registers\n"); + for (i = 0; i < CONFIG_SYS_FSL_IFC_BANK_COUNT; i++) { + printf("CSPR%d:0x%08X\tAMASK%d:0x%08X\tCSOR%d:0x%08X\n", + i, get_ifc_cspr(i), i, get_ifc_amask(i), + i, get_ifc_csor(i)); + for (j = 0; j < 4; j++) + printf("IFC_FTIM%d:0x%08X\n", j, get_ifc_ftim(i, j)); + } +} + +void init_early_memctl_regs(void) +{ + int i, j; + struct ifc_regs *regs; + struct ifc_regs_info regs_info = {0}; + + ifc_cfg_boot_info(®s_info); + regs = regs_info.regs; + + for (i = 0 ; i < regs_info.cs_size; i++) { + if (regs[i].pr && (regs[i].pr & CSPR_V)) { + /* skip setting cspr/csor_ext in below condition */ + if (!(CONFIG_IS_ENABLED(A003399_NOR_WORKAROUND) && \ + i == 0 && \ + ((regs[0].pr & CSPR_MSEL) == CSPR_MSEL_NOR))) { + if (regs[i].pr_ext) + set_ifc_cspr_ext(i, regs[i].pr_ext); + if (regs[i].or_ext) + set_ifc_csor_ext(i, regs[i].or_ext); + } + + for (j = 0; j < ARRAY_SIZE(regs->ftim); j++) + set_ifc_ftim(i, j, regs[i].ftim[j]); + + set_ifc_csor(i, regs[i].or); + set_ifc_amask(i, regs[i].amask); + set_ifc_cspr(i, regs[i].pr); + } + } } void init_final_memctl_regs(void) { -#ifdef CONFIG_SYS_CSPR0_FINAL - set_ifc_cspr(IFC_CS0, CONFIG_SYS_CSPR0_FINAL); -#endif -#ifdef CONFIG_SYS_AMASK0_FINAL - set_ifc_amask(IFC_CS0, CONFIG_SYS_AMASK0); -#endif -#ifdef CONFIG_SYS_CSPR1_FINAL - set_ifc_cspr(IFC_CS1, CONFIG_SYS_CSPR1_FINAL); -#endif -#ifdef CONFIG_SYS_AMASK1_FINAL - set_ifc_amask(IFC_CS1, CONFIG_SYS_AMASK1_FINAL); -#endif -#ifdef CONFIG_SYS_CSPR2_FINAL - set_ifc_cspr(IFC_CS2, CONFIG_SYS_CSPR2_FINAL); -#endif -#ifdef CONFIG_SYS_AMASK2_FINAL - set_ifc_amask(IFC_CS2, CONFIG_SYS_AMASK2); -#endif -#ifdef CONFIG_SYS_CSPR3_FINAL - set_ifc_cspr(IFC_CS3, CONFIG_SYS_CSPR3_FINAL); -#endif -#ifdef CONFIG_SYS_AMASK3_FINAL - set_ifc_amask(IFC_CS3, CONFIG_SYS_AMASK3); -#endif + int i; + struct ifc_regs *regs; + struct ifc_regs_info regs_info; + + ifc_cfg_boot_info(®s_info); + regs = regs_info.regs; + + for (i = 0 ; i < regs_info.cs_size && i < ARRAY_SIZE(regs->ftim); i++) { + if (!(regs[i].pr_final & CSPR_V)) + continue; + if (regs[i].pr_final) + set_ifc_cspr(i, regs[i].pr_final); + if (regs[i].amask_final) + set_ifc_amask(i, (i == 1) ? regs[i].amask_final : + regs[i].amask); + } } diff --git a/include/fsl_ifc.h b/include/fsl_ifc.h index 17697c7341..c42affcf1f 100644 --- a/include/fsl_ifc.h +++ b/include/fsl_ifc.h @@ -1031,6 +1031,23 @@ struct fsl_ifc { struct fsl_ifc_runtime *rregs; }; +struct ifc_regs { + const char *name; + uint32_t pr; + uint32_t pr_ext; + uint32_t amask; + uint32_t or; + uint32_t ftim[4]; + uint32_t or_ext; + uint32_t pr_final; + uint32_t amask_final; +}; + +struct ifc_regs_info { + struct ifc_regs *regs; + uint32_t cs_size; +}; + #ifdef CONFIG_SYS_FSL_ERRATUM_IFC_A002769 #undef CSPR_MSEL_NOR #define CSPR_MSEL_NOR CSPR_MSEL_GPCM