From patchwork Tue Nov 14 12:56:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13455274 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 103C8C4167B for ; Tue, 14 Nov 2023 12:57:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B5A5B8000D; Tue, 14 Nov 2023 07:57:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A972680010; Tue, 14 Nov 2023 07:57:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8E8848000D; Tue, 14 Nov 2023 07:57:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 642298000F for ; Tue, 14 Nov 2023 07:57:12 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 406D340954 for ; Tue, 14 Nov 2023 12:57:12 +0000 (UTC) X-FDA: 81456560304.24.5562FCE Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by imf04.hostedemail.com (Postfix) with ESMTP id 5199340019 for ; Tue, 14 Nov 2023 12:57:10 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=none; spf=pass (imf04.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1699966630; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cEzO+glLocDnj+AfuVto/wNDn8W8Wr79a3J0eA5hNFw=; b=lH+nL/bUoJ3vzt2GYKmBNfezGI/YYID9dYFkIE8bC5K3M8/Sg96t0mvg9Z0DDIpHxvSnB2 Xef6YvQIu0TVZ+pfQ+nKoPZKO4NQauXklPg5m4e3fcCA0S8piJ9EV7r61Ja++MJEBb7usG 9zqVfLYybzyg/2jRz1TZwCbEvI8WL/0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1699966630; a=rsa-sha256; cv=none; b=QAtEYaA//N9QHDB68akf12+U3wGM7+Kqo2S+qe/h9G9lpUeAtLB3ZuqNFnBnVb3BR9Zw0M vRIxaJ/BGkGG2JV5OSl9odtLDIDFGlYcV+rG3LKIU6zAIkFmYzR/SkF0g/H5HYqn5nfeTF kO3cBAAgPqV5W0MjTXY7lAR2xLgyeJk= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=none; spf=pass (imf04.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com Received: from lhrpeml500006.china.huawei.com (unknown [172.18.147.201]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4SV5rV0dvgz6K9Ky; Tue, 14 Nov 2023 20:55:54 +0800 (CST) Received: from SecurePC30232.china.huawei.com (10.122.247.234) by lhrpeml500006.china.huawei.com (7.191.161.198) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Tue, 14 Nov 2023 12:57:05 +0000 From: To: CC: , , , , , , , , , , , , , , , , , , , , <"pgonda@pgonda"@google.com>, , , , , , , , , Subject: [RFC PATCH 4/6] memory: scrub: Add scrub control attributes for the DDR5 ECS Date: Tue, 14 Nov 2023 20:56:45 +0800 Message-ID: <20231114125648.1146-5-shiju.jose@huawei.com> X-Mailer: git-send-email 2.35.1.windows.2 In-Reply-To: <20231114125648.1146-1-shiju.jose@huawei.com> References: <20231114125648.1146-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.122.247.234] X-ClientProxiedBy: lhrpeml100001.china.huawei.com (7.191.160.183) To lhrpeml500006.china.huawei.com (7.191.161.198) X-CFilter-Loop: Reflected X-Rspamd-Queue-Id: 5199340019 X-Rspam-User: X-Stat-Signature: nzkphjxw8oaiqzcb8zpb1eqookhnnepy X-Rspamd-Server: rspam03 X-HE-Tag: 1699966630-897794 X-HE-Meta: U2FsdGVkX1+aBdmZVN8cBFF5XZzNApqNjJLjR5InytJTj5EEIMFN8CJrWRZ4tzL7G0U6xYzOmSpTz5mdEpAdxOAjES8SMv4UiwMJnq3sWB0N4ZDS5YvNct2BfhEzJn+kNFTDRVmvPYczLgga1abpsrymi9JwiOLtXtBOGyDyPb+C7zbl15RTvgK1BgCpMOxglxuHrHsvphAEGPZORGHHYSDhYobKinDrn7S7x26olSeBcuvWVc/74wfQSdIKm/M0Uepsu4jhIZ9efZhdG5zxlAYaeXxfJEBZCDk1nVtG/+5GOyXmHZRwyOkCc9Ka45/QKNDmpJ2H6S67bOFjdJqnESwvnyvsxFnO1dRHANpF51FCqddpF7K41u2uKsjvazc2sju0SDXUm/J1zq5Zkz8ybSwAyAOYqz5KXKbTaFBEbnjtxL4E6L4aQsIxJqkT9WAq1+D0LLeG4Bgc4k/rGMwZURRtdzjDEHZVJnGica3GAAbXjmxVAUyTeiEY71BOwd5EHGFp54JjXiy2T1o5ZobNqFbQr7pY8/dXi1vkdGXiGL+76amSljR6q4XKvO/QrY+uYUKpugT1rY5M0JZTeGq1QQPYluAEeDA6y9TXS59gLPE+r5owpofSKVjOzAdFzXZ5+PWQReM/GoGHD6UKCPNMxJWN6ypvFf8mxxjbuBQv9INBJthKSYTcYUXQQWIoIEWikelWPUzqhEGHG97/LaimHXhcSwbW1UGEgmyim3XxGizoluGDSE1DOVUag0vpHyisDTy3K2Ek5mOwkgsmyREc+5z0Itb9KCjn6dgmhycZKXBaEHSYz+lrmhm3LtbLE58Cu+McpSlI3C4MPDNoDI3M0q6nMxreLDrqFbW7HK2QMRwGCjowtZos7Bq1Hwyq5Td+arHcx4kuCcJsmfsr06FzuzbmthUEQ2+eGahrdt+5s+ATZju8leBpyGGCHIYHNxkQh0VNwd8V32erOQNM+4c 9OUztD6U 53wrpGbEuTIPApd8CDoEJaPt2ThUH2jo0A2bdqZLQBWkMZiV+FqljPGFeoKkrVI3JXW22wQLA2Z23K4bxA2fxpscljwxjclSulcc4/r269hSWA44BLwm7RDtYix35jkiRd/4B8abLzz3yBGU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Shiju Jose Add scrub control attributes for the DDR5 ECS feature. The Error Check Scrub (ECS) is a feature defined in JEDEC DDR5 SDRAM Specification (JESD79-5) and allows the DRAM to internally read, correct single-bit errors, and write back corrected data bits to the DRAM array while providing transparency to error counts. The ECS control feature allows the request to configure ECS input configurations during system boot or at run-time. The ECS control allows the requester to change the ECS threshold count provided that the request is within the definition specified in DDR5 mode registers, change mode between codeword mode and row count mode, and reset the ECS counter. Signed-off-by: Shiju Jose --- drivers/memory/scrub/memory-scrub.c | 14 +++++++++++++- include/memory/memory-scrub.h | 11 +++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/memory/scrub/memory-scrub.c b/drivers/memory/scrub/memory-scrub.c index ff5b4a52d2da..5f7b1fd73fb1 100755 --- a/drivers/memory/scrub/memory-scrub.c +++ b/drivers/memory/scrub/memory-scrub.c @@ -211,7 +211,8 @@ static bool is_hex_attr(u32 attr) static bool is_string_attr(u32 attr) { - return attr == scrub_speed_available; + return attr == scrub_speed_available || + attr == scrub_threshold_available; } static struct attribute *scrub_genattr(const void *drvdata, @@ -266,11 +267,22 @@ static struct attribute *scrub_genattr(const void *drvdata, } static const char * const scrub_common_attrs[] = { + /* scrub attributes - common */ [scrub_addr_base] = "addr_base", [scrub_addr_size] = "addr_size", [scrub_enable] = "enable", [scrub_speed] = "speed", [scrub_speed_available] = "speed_available", + /* scrub attributes - DDR5 ECS/common */ + [scrub_ecs_log_entry_type] = "ecs_log_entry_type", + [scrub_ecs_log_entry_type_per_dram] = "ecs_log_entry_type_per_dram", + [scrub_ecs_log_entry_type_per_memory_media] = "ecs_log_entry_type_per_memory_media", + [scrub_mode] = "mode", + [scrub_mode_counts_rows] = "mode_counts_rows", + [scrub_mode_counts_codewords] = "mode_counts_codewords", + [scrub_reset_counter] = "reset_counter", + [scrub_threshold] = "threshold", + [scrub_threshold_available] = "threshold_available", }; static struct attribute ** diff --git a/include/memory/memory-scrub.h b/include/memory/memory-scrub.h index 8e999c9daaed..2e223e29a5bc 100755 --- a/include/memory/memory-scrub.h +++ b/include/memory/memory-scrub.h @@ -17,11 +17,22 @@ enum scrub_types { }; enum scrub_attributes { + /* scrub attributes - common */ scrub_addr_base, scrub_addr_size, scrub_enable, scrub_speed, scrub_speed_available, + /* scrub attributes - DDR5 ECS/common */ + scrub_ecs_log_entry_type, + scrub_ecs_log_entry_type_per_dram, + scrub_ecs_log_entry_type_per_memory_media, + scrub_mode, + scrub_mode_counts_rows, + scrub_mode_counts_codewords, + scrub_reset_counter, + scrub_threshold, + scrub_threshold_available, max_attrs, };