From patchwork Wed Sep 20 19:56:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Serge Semin X-Patchwork-Id: 13393386 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 98DA9C04FF7 for ; Wed, 20 Sep 2023 19:57:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=ilH8Q7qa2MF7NMrkIFbvq1r2C7CChdGbS8wBzsoRvfA=; b=n9LsU93Uw/knwm 9U5AiCaqITCSgsnVbRLbQyzJosJnLv2paSWJOOq7RU2SGaWX294qypvMnlJkQgbGKM7hqMQcWfP9/ rRJSEOG0EaCTn/a90SRcmakPAb5Bnk6Z6sd7ehql24gpInNDc1Ly2TZu6Y7RSVysqxVmjs1000V7Z HWkoTafzmaSn975EfADEap76ik8MidjSwtD2SGJIloyYXE8SJITgkvChVYQeD/yeMrlaLvLHD4DI8 UvotZAWrkM24ccwrblrc0oy2lEtMy5XO0c+6EbKlL5zkN7H+GTcqnCDWkWkfI6gxdwhzd/X7Z4CV0 P2Utpbf+O3DEALYjdiUA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qj3KI-0044OL-06; Wed, 20 Sep 2023 19:57:34 +0000 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qj3KD-0044NE-0m for linux-arm-kernel@lists.infradead.org; Wed, 20 Sep 2023 19:57:32 +0000 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-50317080342so451112e87.2 for ; Wed, 20 Sep 2023 12:57:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695239847; x=1695844647; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=bKDIR6G5AYRbAL3MwUKTNni8G8jkvUYyxekLscAaADg=; b=g+Ng65C36RdOGx6Yj2ysuC24pLQx6nJRO4ofK4ApCvBImgL5Gd1HQNoEJ1YWA7X7DQ 4UGA2P/kuAT+Cg5u3RQsZVb7MFkGqaR1F9kKfu4fwo3zlMKGRva92yaVOQhS+kOS54Bw uy54IYfrz0Ki2DjBvZ14NPIkUlPTzbX3Ho5Ju1gyXBohMhEkpDuF6EHdLeRVW8bHCBSg UcQmXqmV13hOBRagd75JsQF0LufzxlQ6XunqFnrW2SSk8NF8/aIf9IAQrEiRHZcLmiUT A2OgKIYVysAsDbkFMZagirfVbqNORlXX5Lrf+M7el2WY+dyR/Hpg+XDFNyt1/CwfPiGM Rbjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695239847; x=1695844647; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bKDIR6G5AYRbAL3MwUKTNni8G8jkvUYyxekLscAaADg=; b=NwM798IKQGma1fLwZngiyeHRz4l1KVgWUvIOvONg56YSW449WBI+7STbHD34+BfjTf yzNrtWn96GdMK1CEPctgfls3h/B+3p3tfNRsa+QQ4a/zDsEXljjs612QJzvreV73/DZq W2y/g5ZqbBiQ3OgdzJrP+SdUz18RbtuvxRkz1ZyHrj8bLVzu2nqBJOQmJwTE8srLKWY7 b/NBvb7cSQs1t376y+1bG/gGvkkvYSPWLPo6okDH6m+8w2OO0Cor5DZ4FRBI533R9ONU WyAHCr/idBz7crRv/JEL7ZJ0nFPgVlm0wRffRGLEhLGL/4pnYh8FruG8deWd86RVvG70 de9w== X-Gm-Message-State: AOJu0Yw30MKZn2PL8WU679xEjCL4m/85M4QqkZdtnMYMrV7vDyIEDexD C9RT/CWqQ2PSy3dl3/hsfoo= X-Google-Smtp-Source: AGHT+IGhI+lDUY/uLLOp6V/114v+B9NN5IhbHDxcNJIb0D1yso3plt/Tt5Lcg0nfkuulD9FWd9fk6w== X-Received: by 2002:a05:6512:104f:b0:503:2924:f8dd with SMTP id c15-20020a056512104f00b005032924f8ddmr4186642lfb.47.1695239847098; Wed, 20 Sep 2023 12:57:27 -0700 (PDT) Received: from localhost ([85.26.234.143]) by smtp.gmail.com with ESMTPSA id l18-20020ac24312000000b004fa52552c7csm2788079lfh.151.2023.09.20.12.57.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Sep 2023 12:57:26 -0700 (PDT) From: Serge Semin To: Michal Simek , Alexander Stein , Borislav Petkov , Tony Luck , James Morse , Mauro Carvalho Chehab , Robert Richter , Rob Herring , Krzysztof Kozlowski Cc: Serge Semin , Punnaiah Choudary Kalluri , Dinh Nguyen , Arnd Bergmann , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 00/13] EDAC/synopsys: Add generic resources and Scrub support Date: Wed, 20 Sep 2023 22:56:31 +0300 Message-ID: <20230920195720.32047-1-fancer.lancer@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230920_125730_293255_E0FE1339 X-CRM114-Status: GOOD ( 27.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This patchset is a third one in the series created in the framework of my Synopsys DW uMCTL2 DDRC-related work: [1: In-progress v4] EDAC/mc/synopsys: Various fixes and cleanups Link: https://lore.kernel.org/linux-edac/20230920191059.28395-1-fancer.lancer@gmail.com [2: In-progress v4] EDAC/synopsys: Add generic DDRC info and address mapping Link: https://lore.kernel.org/linux-edac/20230920192806.29960-1-fancer.lancer@gmail.com [3: In-progress v4] EDAC/synopsys: Add generic resources and Scrub support Link: ---you are looking at it--- Note the patchsets above must be merged in the same order as they are placed in the list in order to prevent conflicts. Nothing prevents them from being reviewed synchronously though. Any tests are very welcome. Thanks in advance. This is a final patchset in the framework of my Synopsys DW uMCTL2 DDRC work, which completes the driver updates with the new functionality. The series starts from extending the Synopsys DW uMCTL2 DDRC DT-schema with the controller specific IRQs, clocks and resets properties. In addition the Baikal-T1 DDRC is added to the DT-bindings since it's based on the DW uMCTL2 DDRC v2.61a. After that the driver is finally altered to informing the MCI core with the detected SDRAM ranks and making sure the detected errors are reported to the corresponding rank. Then the DDRC capabilities are extended with optional Scrub functionality. It's indeed possible to have the DW uMCTL2 controller with no HW-accelerated Scrub support (no RMW engine). In that case the MCI core is supposed to perform the erroneous location ECC update by means of the platform-specific scrub method. Then the error-injection functionality is fixed a bit. First since the driver now has the Sys<->SDRAM address translation infrastructure it can be utilized to convert the supplied poisonous system address to the SDRAM one. Thus there is no longer need in preserving the address in the device private data. Second a DebuFS node-based command to disable the error-injection feature is added (no idea why it hasn't been done in the first place). Afterwards a series of the IRQ-related patches goes. First introduce the individual DDRC event IRQs support in accordance with what has been added to the DT-bindings and what the native DW uMCTL2 DDR controller actually provides. Then aside to the ECC CE/UE errors detection, the DFI/SDRAM CRC/Parity errors report is added. It specifically useful for the DDR4 memory which has dedicated ALARM_n signal, but can be still utilized in the framework of the older protocols if the device DFI-PHY calculates the HIF-interface signals parity. Third after adding the platform clock/resets request procedure introduce the HW-accelerated Scrubber support. Its performance can be tuned by means of the sdram_scrub_rate SysFS node and the Core clock rate. Note it is possible to one-time-run the Scrubber in the back-to-back mode so to perform a burst-like scan of the entire SDRAM memory. At the patchset closure he DW uMCTL2 DDRC kernel config is finally fixed to be available not only on the Xilinx, Intel and MXC platforms, but on anyone including the Baikal-T1 SoC which has the DW uMCTL2 DDRC v2.61a on board. Changelog v2: - Replace "snps,ddrc-3.80a" compatible string with "snps,dw-umctl2-ddrc" in the example. - Move unrelated changes in to the dedicated patches. (@Krzysztof) - Use the IRQ macros in the example. (@Krzysztof) - Add a new patch: [PATCH v2 01/15] dt-bindings: memory: snps: Replace opencoded numbers with macros (@Krzysztof) - Add a new patch: [PATCH v2 03/15] dt-bindings: memory: snps: Convert the schema to being generic (@Krzysztof) - Drop the PHY CSR region. (@Rob) - Move the Baikal-T1 DDRC bindings to the separate DT-schema. Changelog v3: - Create common DT-schema instead of using the generic device DT-bindings. (@Rob) - Drop the merged in patches: [PATCH v2 01/15] dt-bindings: memory: snps: Replace opencoded numbers with macros [PATCH v2 02/15] dt-bindings: memory: snps: Extend schema with IRQs/resets/clocks props (@Krzysztof) Changelog v4: - Explicitly set snps_ddrc_info.dq_width for Baikal-T1 DDRC for better maintainability. - Explicitly set sys_app_map.minsize to SZ_256M instead of using a helper macro DDR_MIN_SARSIZE for Baikal-T1 DDRC. - Use div_u64() instead of do_div(). - Use FIELD_MAX() instead of open-coding the bitwise shift to find the max field value. - Fix inject_data_error string printing "Rank" word where "Col" is supposed to be. - Rebase onto the kernel v6.6-rcX. Signed-off-by: Serge Semin Cc: Punnaiah Choudary Kalluri Cc: Dinh Nguyen Cc: Arnd Bergmann Cc: Greg Kroah-Hartman Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: devicetree@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-edac@vger.kernel.org Cc: linux-kernel@vger.kernel.org Serge Semin (13): dt-bindings: memory: snps: Convert the schema to being generic dt-bindings: memory: Add BT1 DDRC DT-schema EDAC/synopsys: Add multi-ranked memory support EDAC/synopsys: Add optional ECC Scrub support EDAC/synopsys: Drop ECC poison address from private data EDAC/synopsys: Add data poisoning disable support EDAC/synopsys: Split up ECC UE/CE IRQs handler EDAC/synopsys: Add individual named ECC IRQs support EDAC/synopsys: Add DFI alert_n IRQ support EDAC/synopsys: Add reference clocks support EDAC/synopsys: Add ECC Scrubber support EDAC/synopsys: Drop vendor-specific arch dependency EDAC/synopsys: Add BT1 DDRC support .../memory-controllers/baikal,bt1-ddrc.yaml | 91 ++ .../snps,dw-umctl2-common.yaml | 75 ++ .../snps,dw-umctl2-ddrc.yaml | 57 +- drivers/edac/Kconfig | 1 - drivers/edac/synopsys_edac.c | 950 ++++++++++++++---- 5 files changed, 933 insertions(+), 241 deletions(-) create mode 100644 Documentation/devicetree/bindings/memory-controllers/baikal,bt1-ddrc.yaml create mode 100644 Documentation/devicetree/bindings/memory-controllers/snps,dw-umctl2-common.yaml