Received: by 2002:a05:7208:3188:b0:7e:5202:c8b4 with SMTP id r8csp885782rbd; Fri, 23 Feb 2024 06:40:38 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWrOXipbITz9wblfKWaFAUPGwPSLn3wf883l1Nu4rNgpj9XgzEqRlzwc7NeDZ3IZg1PkEp68qeB8P6P00HCACxFufIKUAFqjep2ZMku1Q== X-Google-Smtp-Source: AGHT+IH/AH3YxZZhPX2UzJVTZ5Zvh7O/3JQbWtweOzxfOBnDdODTWTYmuoJ9rT4AR1BedBD9kLaY X-Received: by 2002:a05:620a:3849:b0:787:a8b3:b079 with SMTP id po9-20020a05620a384900b00787a8b3b079mr1744104qkn.71.1708699237799; Fri, 23 Feb 2024 06:40:37 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708699237; cv=pass; d=google.com; s=arc-20160816; b=t9pzlOc9zyPlrNYUkfl7z0S6W/5HX+4KZ97OIeJw3gJAjx01y5rMkU8mRl2BZ9QmPG zyIhSB+EQO2bYjn6X5Gh1hsVGhC6HdPGcpcHt2ugLjmRYT4kwsHcvBIr1uFaksSnDYls grHePOjq9I25KD8y2CI11Q6WDZPMFd8Oz0X88X9z2qe3Cpx/mru9Ahm+eIFKQ+5PhaJE 6+oIpP2xX9QqQuIViBkg2hUDeJmIx3gdqv6mpGsXFqrveWlJsK8xQeaev3KxdisFd/Hb ZHN7i3ZB1Nmh2aDCblmrz/7dRWESY+1KMP/4gGuZ9yhhSrgzU+7p1Yc+Vs/fjtVTgo96 PAUA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=JIOCLLamCEHkn7MNShQK6YZeDCles9pjQDpQCPEpGUY=; fh=HSG1GuUk1qrw7ZagzQBYl1ym3Aq+DwkDC5iYsmK8j3I=; b=mvHzduxpkkcJFlsPDud7rH3SvZJEn/ROaYEhKoOhdKHZ8ioNBlN7zQ9kYxE1O5jEFs fKKV3mwOcBgWKOXQOcbLD3dkCj8Si3ddMmUfsATZWh+wh2PDh09rEUeeHmF/aEKvlFND JrdzOYi3jpa6VjjlQZWZJuZb1i9DpGpS2hsC3sdCcspkSkX4wMZ17p99wwMgS+kGf81T tPZ1mj2PMbAkKnB+/looZrCeYOSjmSOQl6sok63XrZExVYxceAwTuT4Q9LxcZEM8B5W4 hl+pVk6t3+3UKAI4izzCFKpp9PD/FwIC7GKEMMFjNyNkBi9US87bTRpg0U6pOyxmR3F6 e26g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=huawei.com dmarc=pass fromdomain=huawei.com); spf=pass (google.com: domain of linux-kernel+bounces-78500-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-78500-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id s2-20020a05620a29c200b00787b59e5659si1028284qkp.200.2024.02.23.06.40.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Feb 2024 06:40:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-78500-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=huawei.com dmarc=pass fromdomain=huawei.com); spf=pass (google.com: domain of linux-kernel+bounces-78500-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-78500-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 7B7E01C20A0F for ; Fri, 23 Feb 2024 14:40:37 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9A33883CDB; Fri, 23 Feb 2024 14:37:53 +0000 (UTC) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DAB0D82871; Fri, 23 Feb 2024 14:37:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708699072; cv=none; b=OEX5OHqRNueLtMvOifRYStVaAxEiaT+lro3MzRFnazHkUNJj+bNpYYG69L1AZE/H4ztAs/0DnfNEQx3x6wWfQTP63qHHVdML9IVOpMtF93yzCblis8AptD814ITxbhAI82rBrkpLV7dDwmTu/9utYa7S3AVVMeIgnox1yUVq8l4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708699072; c=relaxed/simple; bh=raPgUodaldD9KuFpvmwyvYiVBzI0yurRJQDZ5oEOQ7c=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Vp4w78HU2ebm/aVoVqUpABPskFDNk9MeM2VaXyb30FvQOdGKSEwbPosM+MLQJa3bG3r/MJiNaRD1NB+nRhOO79eMmIM/2gfqU7TOhFtGmQYYKNk/R6DiwFU06YnIdvU+VNJiwinqlkZXqGYy4IgEWLiWqC9A3dk+O5O09DQLE48= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.18.186.216]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4ThCDg2Jg0z6K5ts; Fri, 23 Feb 2024 22:33:39 +0800 (CST) Received: from lhrpeml500006.china.huawei.com (unknown [7.191.161.198]) by mail.maildlp.com (Postfix) with ESMTPS id A19ED140D26; Fri, 23 Feb 2024 22:37:48 +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_256_GCM_SHA384) id 15.1.2507.35; Fri, 23 Feb 2024 14:37:47 +0000 From: To: , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [RFC PATCH v7 11/12] ACPI:RAS2: Add driver for ACPI RAS2 feature table (RAS2) Date: Fri, 23 Feb 2024 22:37:22 +0800 Message-ID: <20240223143723.1574-12-shiju.jose@huawei.com> X-Mailer: git-send-email 2.35.1.windows.2 In-Reply-To: <20240223143723.1574-1-shiju.jose@huawei.com> References: <20240223143723.1574-1-shiju.jose@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: lhrpeml500003.china.huawei.com (7.191.162.67) To lhrpeml500006.china.huawei.com (7.191.161.198) From: Shiju Jose Add support for ACPI RAS2 feature table (RAS2) defined in the ACPI 6.5 Specification, section 5.2.21. This driver contains RAS2 Init, which extracts the RAS2 table. Driver adds platform device, for each memory feature, which binds to the RAS2 memory driver. Signed-off-by: Shiju Jose --- drivers/acpi/Makefile | 2 +- drivers/acpi/ras2_acpi.c | 97 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100755 drivers/acpi/ras2_acpi.c diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile index b12fba9cff06..e3fd6feb3e54 100644 --- a/drivers/acpi/Makefile +++ b/drivers/acpi/Makefile @@ -105,7 +105,7 @@ obj-$(CONFIG_ACPI_CUSTOM_METHOD)+= custom_method.o obj-$(CONFIG_ACPI_BGRT) += bgrt.o obj-$(CONFIG_ACPI_CPPC_LIB) += cppc_acpi.o obj-$(CONFIG_ACPI_SPCR_TABLE) += spcr.o -obj-$(CONFIG_ACPI_RAS2) += ras2_acpi_common.o +obj-$(CONFIG_ACPI_RAS2) += ras2_acpi_common.o ras2_acpi.o obj-$(CONFIG_ACPI_DEBUGGER_USER) += acpi_dbg.o obj-$(CONFIG_ACPI_PPTT) += pptt.o obj-$(CONFIG_ACPI_PFRUT) += pfr_update.o pfr_telemetry.o diff --git a/drivers/acpi/ras2_acpi.c b/drivers/acpi/ras2_acpi.c new file mode 100755 index 000000000000..cd2e8f5ad253 --- /dev/null +++ b/drivers/acpi/ras2_acpi.c @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * ras2_acpi.c - Implementation of ACPI RAS2 feature table processing + * functions. + * + * Copyright (c) 2023 HiSilicon Limited. + * + * Support for + * RAS2 - ACPI 6.5 Specification, section 5.2.21 + * + * Driver contains RAS2 init, which extracts the RAS2 table and + * registers the PCC channel for communicating with the ACPI compliant + * platform that contains RAS2 command support in hardware.Driver adds + * platform device which binds to the RAS2 memory driver. + */ + +#define pr_fmt(fmt) "ACPI RAS2: " fmt + +#include +#include +#include +#include +#include +#include + +#define RAS2_FEATURE_TYPE_MEMORY 0x00 + +static int __init ras2_acpi_init(void) +{ + u8 count; + acpi_status status; + acpi_size ras2_size; + int pcc_subspace_idx; + struct platform_device *pdev; + struct acpi_table_ras2 *pRas2Table; + struct acpi_ras2_pcc_desc *pcc_desc_list; + struct platform_device **pdev_list = NULL; + struct acpi_table_header *pAcpiTable = NULL; + + status = acpi_get_table("RAS2", 0, &pAcpiTable); + if (ACPI_FAILURE(status) || !pAcpiTable) { + pr_err("ACPI RAS2 driver failed to initialize, get table failed\n"); + return RAS2_FAILURE; + } + + ras2_size = pAcpiTable->length; + if (ras2_size < sizeof(struct acpi_table_ras2)) { + pr_err("ACPI RAS2 table present but broken (too short #1)\n"); + goto free_ras2_table; + } + + pRas2Table = (struct acpi_table_ras2 *)pAcpiTable; + + if (pRas2Table->num_pcc_descs <= 0) { + pr_err("ACPI RAS2 table does not contain PCC descriptors\n"); + goto free_ras2_table; + } + + pdev_list = kzalloc((pRas2Table->num_pcc_descs * sizeof(struct platform_device *)), + GFP_KERNEL); + if (!pdev_list) + goto free_ras2_table; + + pcc_desc_list = (struct acpi_ras2_pcc_desc *) + ((void *)pRas2Table + sizeof(struct acpi_table_ras2)); + count = 0; + while (count < pRas2Table->num_pcc_descs) { + if (pcc_desc_list->feature_type == RAS2_FEATURE_TYPE_MEMORY) { + pcc_subspace_idx = pcc_desc_list->channel_id; + /* Add the platform device and bind ras2 memory driver */ + pdev = ras2_add_platform_device("ras2", &pcc_subspace_idx, + sizeof(pcc_subspace_idx)); + if (!pdev) + goto free_ras2_pdev; + pdev_list[count] = pdev; + } + count++; + pcc_desc_list = pcc_desc_list + sizeof(struct acpi_ras2_pcc_desc); + } + + acpi_put_table(pAcpiTable); + return RAS2_SUCCESS; + +free_ras2_pdev: + count = 0; + while (count < pRas2Table->num_pcc_descs) { + if (pcc_desc_list->feature_type == + RAS2_FEATURE_TYPE_MEMORY) + platform_device_put(pdev_list[count++]); + } + kfree(pdev_list); + +free_ras2_table: + acpi_put_table(pAcpiTable); + return RAS2_FAILURE; +} +late_initcall(ras2_acpi_init) -- 2.34.1