From patchwork Fri Apr 28 04:08:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 1774736 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.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=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-NXP1-onmicrosoft-com header.b=HIshfGq1; dkim-atps=neutral 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 ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q6yf31Gxbz23s0 for ; Fri, 28 Apr 2023 13:24:59 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A33B28640C; Fri, 28 Apr 2023 05:20:33 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=oss.nxp.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=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="HIshfGq1"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 15964863E1; Fri, 28 Apr 2023 05:19:29 +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=-0.9 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 EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20601.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e1b::601]) (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 740B785FBD for ; Fri, 28 Apr 2023 05:19:22 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=oss.nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=peng.fan@oss.nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PtO23tUthVsgNJMfcTtzn8nTnsQlwWD4EwxlXjMrHUX+oXnvQvB+cYq9tnckR/kCZTtHSL40ECsD3wjdUN9X590iUTwo75/VZxgil2JBKBNhWzxMDwvog3aPQp0aNW2IKSnS+gF9osHfkIrAB5zbuIrgPZyle23aHYwomrW8B+HT0tVO9cFDjanHd2sRgT6pFGTMsfV58ApAOAThWrPsA+rm+84q4zdjEVfNLhDFtNddb9qTU0wSSv6poe9+GfioqNPyWJOVD8ial9PfDkdnxwv34YItFaUh/L9yPYfrUZyY0tVvC36ME4wLWADoU7ULQHi8W6itrbgJs9dfDIjRMw== 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=oIDcWBWrlrDGswIpUpaDYbMxUR8kzLyJPll0oZLfSqY=; b=kiKPIYeKqUhgXOqaEAWRoygE6YRb8sXIPXFyaAtymU9keD4jWenJZ7EyVmPgtzTSvUoWyo6q4nYZWKG+tqzSHB96U1VPS9m4mtoagqhTYroi95VvMg4xK+I3t7LdYDluBg7WcStE31XOSd0yLP3dLkZmUr7b1ZWbHMUt323IDUDwmV9CGOFHttDfUNtkxYaO34VDCpIDzkiXgIQUCJlQiQNMqBeiv1ff9CsTVsnXcjZJty6k/82COWATLCa+xfFJhkx/YG+vUDbCRI3wIDZ+f8njSlj6REQDr3VH0rdkq8Fawdn75BCjplbtQbjuTzGDN4LUz0ruoqGgi1ICei7ikQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oIDcWBWrlrDGswIpUpaDYbMxUR8kzLyJPll0oZLfSqY=; b=HIshfGq1ABQ3hejxumg3i9R7n6SBPIkthp6JNV6laNzccwQ0A28LhX7wQ88aPFxpu6ygrfLuZ6AjJxbAJ+2Dczv5dVpDz6ZQm+Ps7PYWslmLGlN87NhtknkCy9eIQw9Pi14P52TM5IPrzzOn3NLFKD49GvRuwIr50Vj9BET1l3g= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) by PAXPR04MB8317.eurprd04.prod.outlook.com (2603:10a6:102:1ce::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.22; Fri, 28 Apr 2023 03:19:20 +0000 Received: from DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::b999:f2c6:a8cc:7b4]) by DU0PR04MB9417.eurprd04.prod.outlook.com ([fe80::b999:f2c6:a8cc:7b4%5]) with mapi id 15.20.6340.022; Fri, 28 Apr 2023 03:19:20 +0000 From: "Peng Fan (OSS)" To: sbabic@denx.de, festevam@gmail.com, "NXP i.MX U-Boot Team" Cc: u-boot@lists.denx.de, Ye Li , Peng Fan Subject: [PATCH 34/42] ddr: imx9: Add workaround for DDRPHY rank-to-rank errata Date: Fri, 28 Apr 2023 12:08:39 +0800 Message-Id: <20230428040847.10841-35-peng.fan@oss.nxp.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428040847.10841-1-peng.fan@oss.nxp.com> References: <20230428040847.10841-1-peng.fan@oss.nxp.com> X-ClientProxiedBy: SI1PR02CA0033.apcprd02.prod.outlook.com (2603:1096:4:1f6::14) To DU0PR04MB9417.eurprd04.prod.outlook.com (2603:10a6:10:358::11) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR04MB9417:EE_|PAXPR04MB8317:EE_ X-MS-Office365-Filtering-Correlation-Id: 1cd3ed2b-3780-466e-82cb-08db47975b84 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: c/IhhJTrvQ+EVbYU9nPs3r2t+NOVGTodTgLC+fJyU7ES1yWqJfvnHf8bHlmAwwVPa4/+M4ijkPZxZWbIqK5NFRo5lYB9XLyxXnsC7L2G9PBWyT3Mj5yc0bJStCXRsO9lycqBnaR4rGLnlFPMEqcGK2a6jOWdJJ2VNO+x5KI16tMeYwC4BduQBXDtdCM+pEUJawUBbEQ/HKZxQ5WCAZiNhtbolVH+oZJfqATFJ6patyTTGjBZieOOuuYfJaWFu+DqU4JMW5q9uauW9tNuNpu4kL+UG2beoZXmESiW3EPUNmx58SgrpVyP7ynvNlJ0NRDKUpypUXWRjLhFeHe+3VFi8sSP3dJKvfjOodS7bS8B4sG+3uvWC2aS0EgJrXq5Sa+gs/uJsfRcXXscqfLgUtBshEw3YMgFzVcLSAugwEF8K8cs0CFa6x1x0iVrpJgBH5xPtLYyP+Ybceouu83CFjkP88qEGKyw6n8ASMW/U+HK5E4AUucgaPAbm0s7yk42bB5sStDZ43FqdsaXL1QupCKysPhBU8JrV/b75sfUvGQPF0l/x/61NxfwsUv1XXZqmTcm4pwL+I3kYhXAJniwzl4h8HZKAYy0mA7V1WLCd0825nMzbBzWiKgvv6OWRJwszdjJ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR04MB9417.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(136003)(396003)(366004)(39860400002)(346002)(376002)(451199021)(54906003)(2616005)(83380400001)(8936002)(1076003)(6506007)(8676002)(6512007)(26005)(186003)(478600001)(6666004)(6486002)(2906002)(52116002)(6862004)(86362001)(38100700002)(38350700002)(66946007)(66556008)(66476007)(41300700001)(4326008)(316002)(5660300002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mx7EqRAUPK0pQVMcP8jjO0DNKnJRlZIbAqj1LimenJmkAuDB3fWYFlhe79cVMMzjtR9koUnG9JkmOQoH7JtjAtRu9+1aFvbi1EuiMvkErve6q4aAA+oyvjaIeVHttKCUKRkGGktzmnC0lHBbYsOpY3LsFSIemGiMduRBvtGiRmj1oy2Gg1O2fI3JCCfNH+4KwBaXZ+I3bn0zXDdKSUtqsi2qMXZe7NjLxAaAx44lVzQD0iRKgmvpIKuI3xoCeJAirnF0UZG8juC6uTv42sU3O+PPCgceYeCbFWg+KnWn+q4ma5JjmmY6aAnk1eYoT653OtklWHWHX00MwEW/DAtrEte4OaqsFZU700Xi/OGUWSkoW+7+iVm13IJpFKiKEi7ttjPdXW+cBO9I71jHhIJnXO7vuzj9DF0kFi6jEzPxW91as4k0uNSFEitBdXZ7+M6/U5PZVB6aW3Ea8KBJSvxZ9ld/PqsYWcnalMhwkqIe8flGRcSZTjCLXvlLUfm9A+jT1Qu5UDandusFFVZxYMVNxW9j+gO79QfRnxAlnk8OYOAMeM3K7vhUD6frCV63XoYv64pio6M5XTP+h7zgHG0HHQ7YxqrbrgH5uXy2PGNAiFX2ZC4kCJUur1zBOy3mKmQ51y1XJ7POrLVkiAwTAzIKnFygaTGKMVzuEURENowUcIcp1T+K/T/pTts18zoBydE82L6RSaBl4xmv8ZcGUS+T/hfyTDLJkEP5X/0ci9FVfIP01d0AmsE5/GlxbeuCetiigg8dDJMOEqN68KhnRrnjPu3T+lH07ZtuO/4fN/Y4B5APcHbn/Ssgig/d/PkAOrcWSpYMEqzjt4HGAWaS3AzsWkM4OLkXQsWPRmvoN81L5nQe+n85T7AAsoZek6lDVWJ75Vl8LDdGVbzDaAsFDcaMWn/XOP1aScD2GLqyfcdihcBVuvDsGVqCf1a6ylUPSgfQX0X1gNiDHYpeYlA32Jo/631LA8cLE4b9o/giuQEGKFOmvB7c7Eeo1TXLgw06fxPfwnVE/JmkVAyVYEerRI8DnSLg8kWSBlqYhrA01WJpj7jLRjsY8ROKcfv7CrOlTENbUPNdDtQqJnTwO/69zglDOmJYQsPW0oTjiJu1nTGgYOrGTP+XyK9csZtnaBN/VDJmUKJVRF7M+O1Icv3gMiak8RWYnVTy4xfr+7QZZW3IXv0LId5BsmAEMwXrr0PHdB2BRGdmxPnL28ZvWvcQA3WT8yL8aJ/2l2t5g5Xc4/Vdw69gJs6PdWiY/oyYqxiAYWamDY7DrA1LBB7VlBI6framV9y6Emxt0VN1cq5PScpqtKtPpdBcEVvV24HQVO9z4uSpNGAD9EhjvSvbgFw4QEw8DYo/rLnjlP1YfD1iN8jRIfELlmZ8XAIx6uX+tVfJHQCiWrsAwFeAH0BWwO87cX3vtRNGD5KF1bNhrzVc6l0dNfAyGkeSQtstXfk65cUijXKtAaFYKkPdctzJe4EMVhGqi3aki3dC1uCSPfu5L+RXD/SiJkJUMXM0EwrMJvjJeHkg//HgmxVuPNsdyGX3PsgM+LaLQv24+vp/rEIdoEq28igEUzD53sVTUamNob1WX/Uf X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1cd3ed2b-3780-466e-82cb-08db47975b84 X-MS-Exchange-CrossTenant-AuthSource: DU0PR04MB9417.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2023 03:19:20.6245 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2Oi4j8IqHqfeZJdZKKQkDaeTkFrO8u6j4InetlytGn1w0MrgDL+S4ifIu6uxNbDFN8KgYs/IS57XpXkQ2/YKNA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8317 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.8 at phobos.denx.de X-Virus-Status: Clean From: Ye Li According to DDRPHY errata, the Rank-to-Rank Spacing and tphy_rdcsgap specification does not include the Critical Delay Difference (CDD) to properly define the required rank-to-rank read command spacing after executing PHY training firmware. Following the errata workaround, at the end of data training, we get all CDD values through the MessageBlock, then re-configure the DDRC timing of WWT/WRT/RRT/RWT with comparing MAX CDD values. Signed-off-by: Ye Li Acked-by: Peng Fan --- arch/arm/include/asm/arch-imx9/ddr.h | 2 + drivers/ddr/imx/imx9/ddr_init.c | 122 +++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) diff --git a/arch/arm/include/asm/arch-imx9/ddr.h b/arch/arm/include/asm/arch-imx9/ddr.h index 62e6f7dda53..8e4f946e5b0 100644 --- a/arch/arm/include/asm/arch-imx9/ddr.h +++ b/arch/arm/include/asm/arch-imx9/ddr.h @@ -14,7 +14,9 @@ #define DDRMIX_BLK_CTRL_BASE 0x4E010000 #define REG_DDRDSR_2 (DDR_CTL_BASE + 0xB24) +#define REG_DDR_TIMING_CFG_0 (DDR_CTL_BASE + 0x104) #define REG_DDR_SDRAM_CFG (DDR_CTL_BASE + 0x110) +#define REG_DDR_TIMING_CFG_4 (DDR_CTL_BASE + 0x160) #define REG_DDR_DEBUG_19 (DDR_CTL_BASE + 0xF48) #define SRC_BASE_ADDR (0x44460000) diff --git a/drivers/ddr/imx/imx9/ddr_init.c b/drivers/ddr/imx/imx9/ddr_init.c index 8b8ec7f8de3..a1d953026f3 100644 --- a/drivers/ddr/imx/imx9/ddr_init.c +++ b/drivers/ddr/imx/imx9/ddr_init.c @@ -12,6 +12,13 @@ #include #include +static unsigned int g_cdd_rr_max[4]; +static unsigned int g_cdd_rw_max[4]; +static unsigned int g_cdd_wr_max[4]; +static unsigned int g_cdd_ww_max[4]; + +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) + void ddrphy_coldreset(void) { /* dramphy_apb_n default 1 , assert -> 0, de_assert -> 1 */ @@ -74,8 +81,121 @@ void ddrc_config(struct dram_cfg_param *ddrc_config, int num) } } +static unsigned int look_for_max(unsigned int data[], unsigned int addr_start, + unsigned int addr_end) +{ + unsigned int i, imax = 0; + + for (i = addr_start; i <= addr_end; i++) { + if (((data[i] >> 7) == 0) && data[i] > imax) + imax = data[i]; + } + + return imax; +} + void get_trained_CDD(u32 fsp) { + unsigned int i, tmp; + unsigned int cdd_cha[12], cdd_chb[12]; + unsigned int cdd_cha_rr_max, cdd_cha_rw_max, cdd_cha_wr_max, cdd_cha_ww_max; + unsigned int cdd_chb_rr_max, cdd_chb_rw_max, cdd_chb_wr_max, cdd_chb_ww_max; + + for (i = 0; i < 6; i++) { + tmp = dwc_ddrphy_apb_rd(0x54013 + i); + cdd_cha[i * 2] = tmp & 0xff; + cdd_cha[i * 2 + 1] = (tmp >> 8) & 0xff; + } + + for (i = 0; i < 7; i++) { + tmp = dwc_ddrphy_apb_rd(0x5402c + i); + + if (i == 0) { + cdd_chb[0] = (tmp >> 8) & 0xff; + } else if (i == 6) { + cdd_chb[11] = tmp & 0xff; + } else { + cdd_chb[i * 2 - 1] = tmp & 0xff; + cdd_chb[i * 2] = (tmp >> 8) & 0xff; + } + } + + cdd_cha_rr_max = look_for_max(cdd_cha, 0, 1); + cdd_cha_rw_max = look_for_max(cdd_cha, 2, 5); + cdd_cha_wr_max = look_for_max(cdd_cha, 6, 9); + cdd_cha_ww_max = look_for_max(cdd_cha, 10, 11); + cdd_chb_rr_max = look_for_max(cdd_chb, 0, 1); + cdd_chb_rw_max = look_for_max(cdd_chb, 2, 5); + cdd_chb_wr_max = look_for_max(cdd_chb, 6, 9); + cdd_chb_ww_max = look_for_max(cdd_chb, 10, 11); + g_cdd_rr_max[fsp] = cdd_cha_rr_max > cdd_chb_rr_max ? cdd_cha_rr_max : cdd_chb_rr_max; + g_cdd_rw_max[fsp] = cdd_cha_rw_max > cdd_chb_rw_max ? cdd_cha_rw_max : cdd_chb_rw_max; + g_cdd_wr_max[fsp] = cdd_cha_wr_max > cdd_chb_wr_max ? cdd_cha_wr_max : cdd_chb_wr_max; + g_cdd_ww_max[fsp] = cdd_cha_ww_max > cdd_chb_ww_max ? cdd_cha_ww_max : cdd_chb_ww_max; +} + +void update_umctl2_rank_space_setting(unsigned int pstat_num) +{ + u32 tmp, tmp_t; + + int wwt, rrt, wrt, rwt; + int ext_wwt, ext_rrt, ext_wrt, ext_rwt; + int max_wwt, max_rrt, max_wrt, max_rwt; + + /* read wwt, rrt, wrt, rwt fields from timing_cfg_0 */ + tmp = readl(REG_DDR_TIMING_CFG_0); + wwt = (tmp >> 24) & 0x3; + rrt = (tmp >> 26) & 0x3; + wrt = (tmp >> 28) & 0x3; + rwt = (tmp >> 30) & 0x3; + + /* read rxt_wwt, ext_rrt, ext_wrt, ext_rwt fields from timing_cfg_4 */ + tmp_t = readl(REG_DDR_TIMING_CFG_4); + ext_wwt = (tmp >> 8) & 0x1; + ext_rrt = (tmp >> 10) & 0x1; + ext_wrt = (tmp >> 12) & 0x1; + ext_rwt = (tmp >> 14) & 0x3; + + wwt = (ext_wwt << 2) | wwt; + rrt = (ext_rrt << 2) | wwt; + wrt = (ext_wrt << 2) | wrt; + rwt = (ext_rwt << 2) | rwt; + + /* calculate the maximum between controller and cdd values */ + max_wwt = MAX(g_cdd_ww_max[0], wwt); + max_rrt = MAX(g_cdd_rr_max[0], rrt); + max_wrt = MAX(g_cdd_wr_max[0], wrt); + max_rwt = MAX(g_cdd_rw_max[0], rwt); + + /* verify values to see if are bigger then 7 or 15 (3 bits or 4 bits) */ + if (max_wwt > 7) + max_wwt = 7; + if (max_rrt > 7) + max_rrt = 7; + if (max_wrt > 7) + max_wrt = 7; + if (max_rwt > 15) + max_rwt = 15; + + /* recalculate timings for controller registers */ + wwt = max_wwt & 0x3; + rrt = max_rrt & 0x3; + wrt = max_wrt & 0x3; + rwt = max_rwt & 0x3; + + ext_wwt = (max_wwt & 0x4) >> 2; + ext_rrt = (max_rrt & 0x4) >> 2; + ext_wrt = (max_wrt & 0x4) >> 2; + ext_rwt = (max_rwt & 0xC) >> 2; + + /* update timing_cfg_0 and timing_cfg_4 */ + tmp = (tmp & 0x00ffffff) | (rwt << 30) | (wrt << 28) | + (rrt << 26) | (wwt << 24); + writel(tmp, REG_DDR_TIMING_CFG_0); + + tmp_t = (tmp_t & 0xFFFF2AFF) | (ext_rwt << 14) | + (ext_wrt << 12) | (ext_rrt << 10) | (ext_wwt << 8); + writel(tmp_t, REG_DDR_TIMING_CFG_4); } int ddr_init(struct dram_timing_info *dram_timing) @@ -112,6 +232,8 @@ int ddr_init(struct dram_timing_info *dram_timing) ddrc_config(dram_timing->ddrc_cfg, dram_timing->ddrc_cfg_num); debug("DDRINFO: ddrc config done\n"); + update_umctl2_rank_space_setting(dram_timing->fsp_msg_num - 1); + #ifdef CONFIG_IMX9_DRAM_PM_COUNTER writel(0x200000, REG_DDR_DEBUG_19); #endif