From patchwork Fri Apr 26 22:03:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeremy Linton X-Patchwork-Id: 162976 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp1246508jan; Fri, 26 Apr 2019 15:03:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqyx8dSYwqxJPzlZPPZfWbZRaw+CkFEmeDNwSdLiGnc/h03ZcWywuEiVumNr08W9fW05CynN X-Received: by 2002:a63:8bc9:: with SMTP id j192mr2473301pge.212.1556316203873; Fri, 26 Apr 2019 15:03:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556316203; cv=none; d=google.com; s=arc-20160816; b=kedV28WcVokObuu06SVwpnfOQMbufa3KaFhHSch/yw/te1PlMeV+WSgfwFbyqjO2cT DRJkfRW2kcXhFo0gdrjV3WYpLX9LeHQxsMtC+UzPtXJ/QEBVYHLbiqkhGvKolcubFSKC fLZDt1+SR4faQS8g7F4bVPEKUdpTNDU5LXjHo+3l7ElE1plUqQPm6nW2N0Ax6N9e5r72 BWwUpCMadcZoWyoVQGVic0bEZlQ1BBuMDwiaV8+QR33sHcQIqBHDiVMbvjIsjEVCTeEN 7CL4U8TMwG5AG4Z2XQmcT5bstzpl8cDlfY3uu1nGIBZwHzWFdUblHeTPoh8uq2K/S+Ix pLAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=bGeYeI9aGFRaHSrk872EuDRl+54QVFqU4OMd204VNFo=; b=a+nlDnM0NlzYhRiolcATBe0pgAT2/f4uVPUOw9YwzS5Dn0Z3qxqKLCM4CUubJhI1Af SQm2BPXnT+CB9DzPAw6Ug1NL/UWunD++ArmDGTspqq7Eetp0ixSoe4wOhB65cKmBctHP gJ2MXv7gTBE9xCyhhuHOfbWxuJfpUPhH5/kDMfQUSKdlIKjvN4ocAj8D+tay2r0NIK2G W+E6L1FOW09A9vo423K4YfZ0BTEY6ucUePBLoSqeBbAs7Q38lqe5xJ5xFN2uzFzX4eP8 erBrvr6Wwbe0LY/xrnMMYf/mmSGQSyB+lotQA0/P/pON56KaWXSearnHfstWUkBGW/au +yyA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a3si11946562pgm.455.2019.04.26.15.03.23; Fri, 26 Apr 2019 15:03:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727114AbfDZWDX (ORCPT + 9 others); Fri, 26 Apr 2019 18:03:23 -0400 Received: from foss.arm.com ([217.140.101.70]:52858 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727111AbfDZWDX (ORCPT ); Fri, 26 Apr 2019 18:03:23 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 526F3EBD; Fri, 26 Apr 2019 15:03:22 -0700 (PDT) Received: from mammon-tx2.austin.arm.com (mammon-tx2.austin.arm.com [10.118.29.246]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id BCA7A3F557; Fri, 26 Apr 2019 15:03:21 -0700 (PDT) From: Jeremy Linton To: linux-arm-kernel@lists.infradead.org Cc: linux-acpi@vger.kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, rjw@rjwysocki.net, lenb@kernel.org, mark.rutland@arm.com, lorenzo.pieralisi@arm.com, sudeep.holla@arm.com, linuxarm@huawei.com, john.garry@huawei.com, Jeremy Linton Subject: [PATCH v2 1/5] ACPI/PPTT: Trivial, Modify the case of CPU Date: Fri, 26 Apr 2019 17:03:05 -0500 Message-Id: <20190426220309.55654-2-jeremy.linton@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426220309.55654-1-jeremy.linton@arm.com> References: <20190426220309.55654-1-jeremy.linton@arm.com> MIME-Version: 1.0 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org CPU is an acronym and customarily capitalized. Much of the commenting in the PPTT code has been using "cpu" rather than "CPU". Correct that, and other human readable strings. Signed-off-by: Jeremy Linton --- drivers/acpi/pptt.c | 48 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) -- 2.20.1 Acked-by: Rafael J. Wysocki diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c index 065c4fc245d1..83a026765faa 100644 --- a/drivers/acpi/pptt.c +++ b/drivers/acpi/pptt.c @@ -164,7 +164,7 @@ static struct acpi_pptt_cache *acpi_find_cache_level(struct acpi_table_header *t } /** - * acpi_count_levels() - Given a PPTT table, and a cpu node, count the caches + * acpi_count_levels() - Given a PPTT table, and a CPU node, count the caches * @table_hdr: Pointer to the head of the PPTT table * @cpu_node: processor node we wish to count caches for * @@ -235,7 +235,7 @@ static int acpi_pptt_leaf_node(struct acpi_table_header *table_hdr, /** * acpi_find_processor_node() - Given a PPTT table find the requested processor * @table_hdr: Pointer to the head of the PPTT table - * @acpi_cpu_id: cpu we are searching for + * @acpi_cpu_id: CPU we are searching for * * Find the subtable entry describing the provided processor. * This is done by iterating the PPTT table looking for processor nodes @@ -456,21 +456,21 @@ static struct acpi_pptt_processor *acpi_find_processor_package_id(struct acpi_ta static void acpi_pptt_warn_missing(void) { - pr_warn_once("No PPTT table found, cpu and cache topology may be inaccurate\n"); + pr_warn_once("No PPTT table found, CPU and cache topology may be inaccurate\n"); } /** * topology_get_acpi_cpu_tag() - Find a unique topology value for a feature * @table: Pointer to the head of the PPTT table - * @cpu: Kernel logical cpu number + * @cpu: Kernel logical CPU number * @level: A level that terminates the search * @flag: A flag which terminates the search * - * Get a unique value given a cpu, and a topology level, that can be - * matched to determine which cpus share common topological features + * Get a unique value given a CPU, and a topology level, that can be + * matched to determine which CPUs share common topological features * at that level. * - * Return: Unique value, or -ENOENT if unable to locate cpu + * Return: Unique value, or -ENOENT if unable to locate CPU */ static int topology_get_acpi_cpu_tag(struct acpi_table_header *table, unsigned int cpu, int level, int flag) @@ -510,7 +510,7 @@ static int find_acpi_cpu_topology_tag(unsigned int cpu, int level, int flag) return -ENOENT; } retval = topology_get_acpi_cpu_tag(table, cpu, level, flag); - pr_debug("Topology Setup ACPI cpu %d, level %d ret = %d\n", + pr_debug("Topology Setup ACPI CPU %d, level %d ret = %d\n", cpu, level, retval); acpi_put_table(table); @@ -519,9 +519,9 @@ static int find_acpi_cpu_topology_tag(unsigned int cpu, int level, int flag) /** * acpi_find_last_cache_level() - Determines the number of cache levels for a PE - * @cpu: Kernel logical cpu number + * @cpu: Kernel logical CPU number * - * Given a logical cpu number, returns the number of levels of cache represented + * Given a logical CPU number, returns the number of levels of cache represented * in the PPTT. Errors caused by lack of a PPTT table, or otherwise, return 0 * indicating we didn't find any cache levels. * @@ -534,7 +534,7 @@ int acpi_find_last_cache_level(unsigned int cpu) int number_of_levels = 0; acpi_status status; - pr_debug("Cache Setup find last level cpu=%d\n", cpu); + pr_debug("Cache Setup find last level CPU=%d\n", cpu); acpi_cpu_id = get_acpi_id_for_cpu(cpu); status = acpi_get_table(ACPI_SIG_PPTT, 0, &table); @@ -551,14 +551,14 @@ int acpi_find_last_cache_level(unsigned int cpu) /** * cache_setup_acpi() - Override CPU cache topology with data from the PPTT - * @cpu: Kernel logical cpu number + * @cpu: Kernel logical CPU number * * Updates the global cache info provided by cpu_get_cacheinfo() * when there are valid properties in the acpi_pptt_cache nodes. A * successful parse may not result in any updates if none of the * cache levels have any valid flags set. Futher, a unique value is * associated with each known CPU cache entry. This unique value - * can be used to determine whether caches are shared between cpus. + * can be used to determine whether caches are shared between CPUs. * * Return: -ENOENT on failure to find table, or 0 on success */ @@ -567,7 +567,7 @@ int cache_setup_acpi(unsigned int cpu) struct acpi_table_header *table; acpi_status status; - pr_debug("Cache Setup ACPI cpu %d\n", cpu); + pr_debug("Cache Setup ACPI CPU %d\n", cpu); status = acpi_get_table(ACPI_SIG_PPTT, 0, &table); if (ACPI_FAILURE(status)) { @@ -582,8 +582,8 @@ int cache_setup_acpi(unsigned int cpu) } /** - * find_acpi_cpu_topology() - Determine a unique topology value for a given cpu - * @cpu: Kernel logical cpu number + * find_acpi_cpu_topology() - Determine a unique topology value for a given CPU + * @cpu: Kernel logical CPU number * @level: The topological level for which we would like a unique ID * * Determine a topology unique ID for each thread/core/cluster/mc_grouping @@ -596,7 +596,7 @@ int cache_setup_acpi(unsigned int cpu) * other levels beyond this use a generated value to uniquely identify * a topological feature. * - * Return: -ENOENT if the PPTT doesn't exist, or the cpu cannot be found. + * Return: -ENOENT if the PPTT doesn't exist, or the CPU cannot be found. * Otherwise returns a value which represents a unique topological feature. */ int find_acpi_cpu_topology(unsigned int cpu, int level) @@ -606,12 +606,12 @@ int find_acpi_cpu_topology(unsigned int cpu, int level) /** * find_acpi_cpu_cache_topology() - Determine a unique cache topology value - * @cpu: Kernel logical cpu number + * @cpu: Kernel logical CPU number * @level: The cache level for which we would like a unique ID * * Determine a unique ID for each unified cache in the system * - * Return: -ENOENT if the PPTT doesn't exist, or the cpu cannot be found. + * Return: -ENOENT if the PPTT doesn't exist, or the CPU cannot be found. * Otherwise returns a value which represents a unique topological feature. */ int find_acpi_cpu_cache_topology(unsigned int cpu, int level) @@ -643,17 +643,17 @@ int find_acpi_cpu_cache_topology(unsigned int cpu, int level) /** - * find_acpi_cpu_topology_package() - Determine a unique cpu package value - * @cpu: Kernel logical cpu number + * find_acpi_cpu_topology_package() - Determine a unique CPU package value + * @cpu: Kernel logical CPU number * - * Determine a topology unique package ID for the given cpu. + * Determine a topology unique package ID for the given CPU. * This ID can then be used to group peers, which will have matching ids. * * The search terminates when either a level is found with the PHYSICAL_PACKAGE * flag set or we reach a root node. * - * Return: -ENOENT if the PPTT doesn't exist, or the cpu cannot be found. - * Otherwise returns a value which represents the package for this cpu. + * Return: -ENOENT if the PPTT doesn't exist, or the CPU cannot be found. + * Otherwise returns a value which represents the package for this CPU. */ int find_acpi_cpu_topology_package(unsigned int cpu) { From patchwork Fri Apr 26 22:03:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeremy Linton X-Patchwork-Id: 162977 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp1246526jan; Fri, 26 Apr 2019 15:03:24 -0700 (PDT) X-Google-Smtp-Source: APXvYqw+273BTPvd4DVckt7fWbuVr4jm8wZnxzr7CvKcCX7OvHnVfQcDWP4LbWOLjVhHG8GXenLu X-Received: by 2002:a62:305:: with SMTP id 5mr13957078pfd.65.1556316204650; Fri, 26 Apr 2019 15:03:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556316204; cv=none; d=google.com; s=arc-20160816; b=FqMIs0AL3uxQwM58FcI98Ql/RNcBseW+yxrpKKD6UDYA0pPbI6j1jc1ZwyNvQuEPLq LEMa23xtNIGXQFTsg7pwleINXaR70N9AeEbn2UN24FLxvoDdM3FBpw/RXSv1BreJ8r8S QG6fUPnIKlZr272zArqCDrhLd4vr7yVZ+PhmgtEhjNFgA76K9gDV0Sa9chyqRsojpysK uzF/f4O2ZUPNuAVD55ZQ3/g4ZcPKSom4yM12/pPQ+QSHxC2K1ueCPW8IsJ3JRwTVBq4M d1SzYf6gX4wo6EGCeWIOBfQ4TuQu4Ypxi7HsGPWPEsrPLxyz47V4lNR9KGvqdH5x/HT4 Sheg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=stIvyb5vXc9VDol/qw09e1IDCT0idugUVsNiyfRnQOI=; b=o/NlK44YdrrYpUaK4Y2vWDpKu/NFL/CYXkcVXGZ4zUlDao/RcONtOcsY9HUJiVa7x/ Qu4XWpylNsB6CXMiNZYI9bcheUVuAzOFtGc9EdwoEpldWqtOcNLo2sElAnHCqIDUX0+s Cqit3JSzwzwCKpJzCQEe+osK4zogS6XpmJaZ1A3pDvxvLfDgIYOmb+1x12UvP+r+WgDY BgIxVDy+1RwsWI4ZcR+AxLRUfIz/8crChbDENpTF6S2OGfqGe5fX4o9VBz/BlZs7XJ+i 4Kc2NY0FzOXp7Qi+N2prnobpbjW5zhF0/C703p8G0k5NtaqtuXhUC5+2fXEy7au4jzM/ Ur9g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a3si11946562pgm.455.2019.04.26.15.03.24; Fri, 26 Apr 2019 15:03:24 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726246AbfDZWDY (ORCPT + 9 others); Fri, 26 Apr 2019 18:03:24 -0400 Received: from foss.arm.com ([217.140.101.70]:52870 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727111AbfDZWDX (ORCPT ); Fri, 26 Apr 2019 18:03:23 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 664F015AB; Fri, 26 Apr 2019 15:03:23 -0700 (PDT) Received: from mammon-tx2.austin.arm.com (mammon-tx2.austin.arm.com [10.118.29.246]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id D059C3F557; Fri, 26 Apr 2019 15:03:22 -0700 (PDT) From: Jeremy Linton To: linux-arm-kernel@lists.infradead.org Cc: linux-acpi@vger.kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, rjw@rjwysocki.net, lenb@kernel.org, mark.rutland@arm.com, lorenzo.pieralisi@arm.com, sudeep.holla@arm.com, linuxarm@huawei.com, john.garry@huawei.com, Jeremy Linton Subject: [PATCH v2 2/5] ACPI/PPTT: Add function to return ACPI 6.3 Identical tokens Date: Fri, 26 Apr 2019 17:03:06 -0500 Message-Id: <20190426220309.55654-3-jeremy.linton@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426220309.55654-1-jeremy.linton@arm.com> References: <20190426220309.55654-1-jeremy.linton@arm.com> MIME-Version: 1.0 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org ACPI 6.3 adds a flag to indicate that child nodes are all identical cores. This is useful to authoritatively determine if a set of (possibly offline) cores are identical or not. Since the flag doesn't give us a unique id we can generate one and use it to create bitmaps of sibling nodes, or simply in a loop to determine if a subset of cores are identical. Signed-off-by: Jeremy Linton --- drivers/acpi/pptt.c | 26 ++++++++++++++++++++++++++ include/linux/acpi.h | 5 +++++ 2 files changed, 31 insertions(+) -- 2.20.1 diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c index 83a026765faa..1865515297ca 100644 --- a/drivers/acpi/pptt.c +++ b/drivers/acpi/pptt.c @@ -660,3 +660,29 @@ int find_acpi_cpu_topology_package(unsigned int cpu) return find_acpi_cpu_topology_tag(cpu, PPTT_ABORT_PACKAGE, ACPI_PPTT_PHYSICAL_PACKAGE); } + +/** + * find_acpi_cpu_topology_hetero_id() - Get a core architecture tag + * @cpu: Kernel logical CPU number + * + * Determine a unique heterogeneous tag for the given CPU. CPUs with the same + * implementation should have matching tags. + * + * The returned tag can be used to group peers with identical implementation. + * + * The search terminates when a level is found with the identical implementation + * flag set or we reach a root node. + * + * Due to limitations in the PPTT data structure, there may be rare situations + * where two cores in a heterogeneous machine may be identical, but won't have + * the same tag. + * + * Return: -ENOENT if the PPTT doesn't exist, or the CPU cannot be found. + * Otherwise returns a value which represents a group of identical cores + * similar to this CPU. + */ +int find_acpi_cpu_topology_hetero_id(unsigned int cpu) +{ + return find_acpi_cpu_topology_tag(cpu, PPTT_ABORT_PACKAGE, + ACPI_PPTT_ACPI_IDENTICAL); +} diff --git a/include/linux/acpi.h b/include/linux/acpi.h index d5dcebd7aad3..1444fb042898 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -1309,6 +1309,7 @@ static inline int lpit_read_residency_count_address(u64 *address) #ifdef CONFIG_ACPI_PPTT int find_acpi_cpu_topology(unsigned int cpu, int level); int find_acpi_cpu_topology_package(unsigned int cpu); +int find_acpi_cpu_topology_hetero_id(unsigned int cpu); int find_acpi_cpu_cache_topology(unsigned int cpu, int level); #else static inline int find_acpi_cpu_topology(unsigned int cpu, int level) @@ -1319,6 +1320,10 @@ static inline int find_acpi_cpu_topology_package(unsigned int cpu) { return -EINVAL; } +static int find_acpi_cpu_topology_hetero_id(unsigned int cpu) +{ + return -EINVAL; +} static inline int find_acpi_cpu_cache_topology(unsigned int cpu, int level) { return -EINVAL; From patchwork Fri Apr 26 22:03:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeremy Linton X-Patchwork-Id: 162978 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp1246555jan; Fri, 26 Apr 2019 15:03:25 -0700 (PDT) X-Google-Smtp-Source: APXvYqw0uRwNKsIz3N/V98VVmlck2DFSpN2noyzIDwCQLoxobgk4V7FTPJ4AmFOUiA8589VTZ7Kv X-Received: by 2002:a17:902:e110:: with SMTP id cc16mr47475693plb.147.1556316205841; Fri, 26 Apr 2019 15:03:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556316205; cv=none; d=google.com; s=arc-20160816; b=bzJc+1Qaz+DCgxMZ4j6hXdgg772RMzqKu2uaerQxWeEuaTv7+29Hxtu7+PghYCnDR0 DLtdIwR2nHN3yyLcnSuPKuw2+t6U5G6wvd/inT4YP1+bGQ9SPKDZ4BDQcJEUE1+JshjC z1iX7SUdtiT+sVhH2WwsfTjVwehIds7LSrbFDKzZ+cOb9K8UcWqaLIjPKjx7AQ+KFKYl hS/+2x+RoCPiQKEnMFSPLGZcDb0nPWGfsJr5Z7TtutSg62lQDAurlesL3nO3QSGNhJPP SzBp0pB7phDBQPLbdkyB/s5FLE2EC7zKUyro7pkRsjIUcPN1QMSM2N9mZqMPmYUn4jpP 8p7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=vNbidbYblgQ8xyQ7knURjAPgS7IlcwagwvxFnNy3nXA=; b=TgOa5gyQTAlfUEXvzuMDmwUx0qxZ+oQeM2fO5BayaAtxXO60CPutayBXfbtKiUay+P PyCHZLoHZ2rwrf7XIlPkVn40APsxic2cpimIXZeiKf60hkNbDAg0ixRiiqyvLoswDK6V uo84MIPH+0cA7lpx2YyUrGq7hY2x3hdb5xB6Wxsv9xa9+RZFCtf+5d9hdiIJtTW41mSK i9jvDhZiy3zDPfQGvZFRKEdzFc2es4SkVDJ7c0m7ht1+nZA8FOqNwFIEKo5i7j2NX2XX peVwVbRyOYdamtohI1wP1ITyPqZ9SH3M39w6oYW9g0MA88gWSqMBpat/h/lcQlbYe+Or l0og== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a3si11946562pgm.455.2019.04.26.15.03.25; Fri, 26 Apr 2019 15:03:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727125AbfDZWDZ (ORCPT + 9 others); Fri, 26 Apr 2019 18:03:25 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:52882 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727111AbfDZWDZ (ORCPT ); Fri, 26 Apr 2019 18:03:25 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7850A15BE; Fri, 26 Apr 2019 15:03:24 -0700 (PDT) Received: from mammon-tx2.austin.arm.com (mammon-tx2.austin.arm.com [10.118.29.246]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id E25CC3F557; Fri, 26 Apr 2019 15:03:23 -0700 (PDT) From: Jeremy Linton To: linux-arm-kernel@lists.infradead.org Cc: linux-acpi@vger.kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, rjw@rjwysocki.net, lenb@kernel.org, mark.rutland@arm.com, lorenzo.pieralisi@arm.com, sudeep.holla@arm.com, linuxarm@huawei.com, john.garry@huawei.com, Jeremy Linton Subject: [PATCH v2 3/5] ACPI/PPTT: Modify node flag detection to find last IDENTICAL Date: Fri, 26 Apr 2019 17:03:07 -0500 Message-Id: <20190426220309.55654-4-jeremy.linton@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426220309.55654-1-jeremy.linton@arm.com> References: <20190426220309.55654-1-jeremy.linton@arm.com> MIME-Version: 1.0 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org The ACPI specification implies that the IDENTICAL flag should be set on all non leaf nodes where the children are identical. This means that we need to be searching for the last node with the identical flag set rather than the first one. To achieve this with the existing code we need to pass a function through the tree traversal logic so we can check the next node to assure that IDENTICAL isn't set before returning a node with IDENTICAL set. Signed-off-by: Jeremy Linton --- drivers/acpi/pptt.c | 62 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 14 deletions(-) -- 2.20.1 diff --git a/drivers/acpi/pptt.c b/drivers/acpi/pptt.c index 1865515297ca..39f660d8be0a 100644 --- a/drivers/acpi/pptt.c +++ b/drivers/acpi/pptt.c @@ -432,17 +432,51 @@ static void cache_setup_acpi_cpu(struct acpi_table_header *table, } } + +typedef bool (*node_check)(struct acpi_table_header *table_hdr, + struct acpi_pptt_processor *cpu); +static bool flag_package(struct acpi_table_header *table_hdr, + struct acpi_pptt_processor *cpu) +{ + return cpu->flags & ACPI_PPTT_PHYSICAL_PACKAGE; +} + +static bool flag_identical(struct acpi_table_header *table_hdr, + struct acpi_pptt_processor *cpu) +{ + struct acpi_pptt_processor *next; + + /* heterogeneous machines must use PPTT revision > 1 */ + if (table_hdr->revision < 2) + return false; + + /* Locate the last node in the tree with IDENTICAL set */ + if (cpu->flags & ACPI_PPTT_ACPI_IDENTICAL) { + next = fetch_pptt_node(table_hdr, cpu->parent); + if (!(next && next->flags & ACPI_PPTT_ACPI_IDENTICAL)) + return true; + } + + return false; +} + +static bool flag_none(struct acpi_table_header *table_hdr, + struct acpi_pptt_processor *cpu) +{ + return false; +} + /* Passing level values greater than this will result in search termination */ #define PPTT_ABORT_PACKAGE 0xFF -static struct acpi_pptt_processor *acpi_find_processor_package_id(struct acpi_table_header *table_hdr, - struct acpi_pptt_processor *cpu, - int level, int flag) +static struct acpi_pptt_processor *acpi_find_processor_tag_id(struct acpi_table_header *table_hdr, + struct acpi_pptt_processor *cpu, + int level, node_check chk) { struct acpi_pptt_processor *prev_node; while (cpu && level) { - if (cpu->flags & flag) + if (chk(table_hdr, cpu)) break; pr_debug("level %d\n", level); prev_node = fetch_pptt_node(table_hdr, cpu->parent); @@ -473,15 +507,15 @@ static void acpi_pptt_warn_missing(void) * Return: Unique value, or -ENOENT if unable to locate CPU */ static int topology_get_acpi_cpu_tag(struct acpi_table_header *table, - unsigned int cpu, int level, int flag) + unsigned int cpu, int level, node_check chk) { struct acpi_pptt_processor *cpu_node; u32 acpi_cpu_id = get_acpi_id_for_cpu(cpu); cpu_node = acpi_find_processor_node(table, acpi_cpu_id); if (cpu_node) { - cpu_node = acpi_find_processor_package_id(table, cpu_node, - level, flag); + cpu_node = acpi_find_processor_tag_id(table, cpu_node, + level, chk); /* * As per specification if the processor structure represents * an actual processor, then ACPI processor ID must be valid. @@ -498,7 +532,7 @@ static int topology_get_acpi_cpu_tag(struct acpi_table_header *table, return -ENOENT; } -static int find_acpi_cpu_topology_tag(unsigned int cpu, int level, int flag) +static int find_acpi_cpu_topology_tag(unsigned int cpu, int level, node_check chk) { struct acpi_table_header *table; acpi_status status; @@ -509,7 +543,7 @@ static int find_acpi_cpu_topology_tag(unsigned int cpu, int level, int flag) acpi_pptt_warn_missing(); return -ENOENT; } - retval = topology_get_acpi_cpu_tag(table, cpu, level, flag); + retval = topology_get_acpi_cpu_tag(table, cpu, level, chk); pr_debug("Topology Setup ACPI CPU %d, level %d ret = %d\n", cpu, level, retval); acpi_put_table(table); @@ -601,7 +635,7 @@ int cache_setup_acpi(unsigned int cpu) */ int find_acpi_cpu_topology(unsigned int cpu, int level) { - return find_acpi_cpu_topology_tag(cpu, level, 0); + return find_acpi_cpu_topology_tag(cpu, level, flag_none); } /** @@ -658,7 +692,7 @@ int find_acpi_cpu_cache_topology(unsigned int cpu, int level) int find_acpi_cpu_topology_package(unsigned int cpu) { return find_acpi_cpu_topology_tag(cpu, PPTT_ABORT_PACKAGE, - ACPI_PPTT_PHYSICAL_PACKAGE); + flag_package); } /** @@ -670,8 +704,8 @@ int find_acpi_cpu_topology_package(unsigned int cpu) * * The returned tag can be used to group peers with identical implementation. * - * The search terminates when a level is found with the identical implementation - * flag set or we reach a root node. + * The search terminates when a level is found without the identical + * implementation flag set following a node with it set, or we reach the root. * * Due to limitations in the PPTT data structure, there may be rare situations * where two cores in a heterogeneous machine may be identical, but won't have @@ -684,5 +718,5 @@ int find_acpi_cpu_topology_package(unsigned int cpu) int find_acpi_cpu_topology_hetero_id(unsigned int cpu) { return find_acpi_cpu_topology_tag(cpu, PPTT_ABORT_PACKAGE, - ACPI_PPTT_ACPI_IDENTICAL); + flag_identical); } From patchwork Fri Apr 26 22:03:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeremy Linton X-Patchwork-Id: 162979 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp1246576jan; Fri, 26 Apr 2019 15:03:27 -0700 (PDT) X-Google-Smtp-Source: APXvYqxO3Vdy3o0jvlCF5VBDsS0Ed5AEFsRlhRF6wWflAieUjtf3uTaz2jYM0EpSDQXXFSUz0il2 X-Received: by 2002:a17:902:22f:: with SMTP id 44mr47783399plc.175.1556316206977; Fri, 26 Apr 2019 15:03:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556316206; cv=none; d=google.com; s=arc-20160816; b=U1tM8W34brjAnWpiEoNlC9dtuRyOkrsQXvIJlcTZRoGPANHhEcG44FPuZmm73G6hNZ 2lvNc2Q8lcBrUZ4EGJi2OxZvwqvqbO5axawcyzyWPF8gD9ioIa1/PeOduANq1lpGrnJH /Z+X933HAbYTvwIZ2aPtkP9zrzXvhT3c+5JhJmTa5hYHOxQLTNd6eQInrBLbQ3YahuzZ O02CVeJKdy7ZFA86TBjhYyQa2IB3UBctfBh5zxD2nzr02IRX628ccI5fvXXDOBjKTryE LQTFCKG+/RNlP9GhdY8qzsUfq6/SixY8bYmtnFlYYmghTB1YFW8QtZYoKtZxTyPLFgUt HNgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=KYcKnNmEjsSW65N30xmtyz/r0mfpJLJhEXD9361EUZ0=; b=Qv+c7SGii6sSx1y743coXq+FYKxMqS5iW3rcClunvx7V9CRk8N268qgtD1jbXEY0iy Heb8CtD9GL6xR2a6lxwAD9XQ1pQFD4PFcvF7EnqKgyl6Ocayw6op//w8JeTmURjmzqL2 u7rVTnlegNmyW40srW3HJ82Blzbe7BrTm6yvR7i3lmc0cUZTb357/wfcRsMuO8/jfY5W egctRDcSj2vOnD9XPWHX0eFR3JQJVASXk2+NhLtMhjE9zQeepo24YlsaYA+hB0zqB3WK aUKaACHHZ+6qgoeLVmrXhGnKiPsG21f8BHzd5xq1ztoJVgd3X2dpRLNGNk51o9eHgWal nNIQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a3si11946562pgm.455.2019.04.26.15.03.26; Fri, 26 Apr 2019 15:03:26 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727069AbfDZWD0 (ORCPT + 9 others); Fri, 26 Apr 2019 18:03:26 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:52894 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727111AbfDZWD0 (ORCPT ); Fri, 26 Apr 2019 18:03:26 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8716D165C; Fri, 26 Apr 2019 15:03:25 -0700 (PDT) Received: from mammon-tx2.austin.arm.com (mammon-tx2.austin.arm.com [10.118.29.246]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id F15103F557; Fri, 26 Apr 2019 15:03:24 -0700 (PDT) From: Jeremy Linton To: linux-arm-kernel@lists.infradead.org Cc: linux-acpi@vger.kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, rjw@rjwysocki.net, lenb@kernel.org, mark.rutland@arm.com, lorenzo.pieralisi@arm.com, sudeep.holla@arm.com, linuxarm@huawei.com, john.garry@huawei.com, Jeremy Linton Subject: [PATCH v2 4/5] arm_pmu: acpi: spe: Add initial MADT/SPE probing Date: Fri, 26 Apr 2019 17:03:08 -0500 Message-Id: <20190426220309.55654-5-jeremy.linton@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426220309.55654-1-jeremy.linton@arm.com> References: <20190426220309.55654-1-jeremy.linton@arm.com> MIME-Version: 1.0 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org ACPI 6.3 adds additional fields to the MADT GICC structure to describe SPE PPI's. We pick these out of the cached reference to the madt_gicc structure similarly to the core PMU code. We then create a platform device referring to the IRQ and let the user/module loader decide whether to load the SPE driver. Signed-off-by: Jeremy Linton --- arch/arm64/include/asm/acpi.h | 3 ++ drivers/perf/Kconfig | 5 +++ drivers/perf/arm_pmu_acpi.c | 76 +++++++++++++++++++++++++++++++++++ include/linux/perf/arm_pmu.h | 2 + 4 files changed, 86 insertions(+) -- 2.20.1 diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h index 7628efbe6c12..d10399b9f998 100644 --- a/arch/arm64/include/asm/acpi.h +++ b/arch/arm64/include/asm/acpi.h @@ -41,6 +41,9 @@ (!(entry) || (entry)->header.length < ACPI_MADT_GICC_MIN_LENGTH || \ (unsigned long)(entry) + (entry)->header.length > (end)) +#define ACPI_MADT_GICC_SPE (ACPI_OFFSET(struct acpi_madt_generic_interrupt, \ + spe_interrupt) + sizeof(u16)) + /* Basic configuration for ACPI */ #ifdef CONFIG_ACPI pgprot_t __acpi_get_mem_attribute(phys_addr_t addr); diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig index af9bc178495d..bc2647c64c9d 100644 --- a/drivers/perf/Kconfig +++ b/drivers/perf/Kconfig @@ -52,6 +52,11 @@ config ARM_PMU_ACPI depends on ARM_PMU && ACPI def_bool y +config ARM_SPE_ACPI + depends on ARM_PMU_ACPI && ARM_SPE_PMU + def_bool y + + config ARM_DSU_PMU tristate "ARM DynamIQ Shared Unit (DSU) PMU" depends on ARM64 diff --git a/drivers/perf/arm_pmu_acpi.c b/drivers/perf/arm_pmu_acpi.c index 0f197516d708..b0244e1e8c91 100644 --- a/drivers/perf/arm_pmu_acpi.c +++ b/drivers/perf/arm_pmu_acpi.c @@ -74,6 +74,80 @@ static void arm_pmu_acpi_unregister_irq(int cpu) acpi_unregister_gsi(gsi); } +#ifdef CONFIG_ARM_SPE_ACPI +static struct resource spe_resources[] = { + { + /* irq */ + .flags = IORESOURCE_IRQ, + } +}; + +static struct platform_device spe_dev = { + .name = ARMV8_SPE_PDEV_NAME, + .id = -1, + .resource = spe_resources, + .num_resources = ARRAY_SIZE(spe_resources) +}; + +/* + * For lack of a better place, hook the normal PMU MADT walk + * and create a SPE device if we detect a recent MADT with + * a homogeneous PPI mapping. + */ +static int arm_spe_acpi_register_device(void) +{ + int cpu, ret, irq; + int hetid; + u16 gsi = 0; + bool first = true; + + struct acpi_madt_generic_interrupt *gicc; + + /* + * sanity check all the GICC tables for the same interrupt number + * for now we only support homogeneous ACPI/SPE machines. + */ + for_each_possible_cpu(cpu) { + gicc = acpi_cpu_get_madt_gicc(cpu); + + if (gicc->header.length < ACPI_MADT_GICC_SPE) + return -ENODEV; + if (first) { + gsi = gicc->spe_interrupt; + if (!gsi) + return -ENODEV; + hetid = find_acpi_cpu_topology_hetero_id(cpu); + first = false; + } else if ((gsi != gicc->spe_interrupt) || + (hetid != find_acpi_cpu_topology_hetero_id(cpu))) { + pr_warn("ACPI: SPE must be homogeneous\n"); + return -EINVAL; + } + } + + irq = acpi_register_gsi(NULL, gsi, ACPI_LEVEL_SENSITIVE, + ACPI_ACTIVE_HIGH); + if (irq < 0) { + pr_warn("ACPI: SPE Unable to register interrupt: %d\n", gsi); + return irq; + } + + spe_resources[0].start = irq; + ret = platform_device_register(&spe_dev); + if (ret < 0) { + pr_warn("ACPI: SPE: Unable to register device\n"); + acpi_unregister_gsi(gsi); + } + + return ret; +} +#else +static inline int arm_spe_acpi_register_device(void) +{ + return -ENODEV; +} +#endif /* CONFIG_ARM_SPE_ACPI */ + static int arm_pmu_acpi_parse_irqs(void) { int irq, cpu, irq_cpu, err; @@ -279,6 +353,8 @@ static int arm_pmu_acpi_init(void) if (acpi_disabled) return 0; + arm_spe_acpi_register_device(); /* failures are expected */ + ret = arm_pmu_acpi_parse_irqs(); if (ret) return ret; diff --git a/include/linux/perf/arm_pmu.h b/include/linux/perf/arm_pmu.h index 4641e850b204..784bc58f165a 100644 --- a/include/linux/perf/arm_pmu.h +++ b/include/linux/perf/arm_pmu.h @@ -175,4 +175,6 @@ void armpmu_free_irq(int irq, int cpu); #endif /* CONFIG_ARM_PMU */ +#define ARMV8_SPE_PDEV_NAME "arm,spe-v1" + #endif /* __ARM_PMU_H__ */ From patchwork Fri Apr 26 22:03:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeremy Linton X-Patchwork-Id: 162980 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp1246590jan; Fri, 26 Apr 2019 15:03:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqy9TUbr6rVUPlHFLnUlDuJ0YcV/MdwBSKgfotbv/9I6L6xSITbFOct5fEFEdAg6MosL7jts X-Received: by 2002:a62:be13:: with SMTP id l19mr50287671pff.137.1556316208007; Fri, 26 Apr 2019 15:03:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556316208; cv=none; d=google.com; s=arc-20160816; b=EYZZMzPOVh/KBuzqMI7uTdIO7i0MOiaxXDtaaog4C4fjR9TC2N4lLrumIaVPep2bnt t0e6se2HYLF0iNwQR90VLZ3pUqfG7evkZbv/62HovZr8lKSLOdJ6fRVcFpvu6yyNQ3UN XEbz+Y1IcWkvEDr76RXODfX8e3pB2HJ0RuMlRtb5JqLQlORHe2nySH9AEt+KO88QXHLL fk9yc35NC6sfAi4rPQL/6/VKEQRh3mb2GvmFH6XJV33Tld1VJQy7dLHmpqGXF5ay84WB XNjCrf90RG56adMWZTpCxDSZBbpJ+XacHdo3Rouz0OEM0SZ9aSMKSOa1gJMP8KFGgv8M VHpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=tLquwqy+h02T2oH9vlfHbjW3v18kHUdqPxDk4S0d7PA=; b=X2kXh2826guKVaQU7EDwI65+ps+GMQKbYTWItbzBOicLaI87XqEHBCo+BSmoiacAjP iFDYCWm3jGWkWJ583nxTAp1MNON7UEwSz8s28/NYvu5k+6rYkGkwh84bgqGtOJY3uudo o8nRxj6ZVj8PaQ77ovyfE+zi7ayNLA2gK5u7z3MfGqAqkisrcDe9LARuNRPJcoE/xFkS peOeNAYcTU55AfonPwwCW2N6Eyhdx+UbdFAibPMwKiiZuO1whaH/bDZlYgUagfSwVPY9 Uk0l0Q6+nsKXI5aEVCy/v4bBWGZT3c8Q66RV9WaPrbVqE4EABhZGrybBxy49hJjwrzmf 26bw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a3si11946562pgm.455.2019.04.26.15.03.27; Fri, 26 Apr 2019 15:03:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727131AbfDZWD1 (ORCPT + 9 others); Fri, 26 Apr 2019 18:03:27 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:52902 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727101AbfDZWD1 (ORCPT ); Fri, 26 Apr 2019 18:03:27 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8C8F3A78; Fri, 26 Apr 2019 15:03:26 -0700 (PDT) Received: from mammon-tx2.austin.arm.com (mammon-tx2.austin.arm.com [10.118.29.246]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 02BE93F557; Fri, 26 Apr 2019 15:03:25 -0700 (PDT) From: Jeremy Linton To: linux-arm-kernel@lists.infradead.org Cc: linux-acpi@vger.kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, rjw@rjwysocki.net, lenb@kernel.org, mark.rutland@arm.com, lorenzo.pieralisi@arm.com, sudeep.holla@arm.com, linuxarm@huawei.com, john.garry@huawei.com, Jeremy Linton Subject: [PATCH v2 5/5] perf: arm_spe: Enable ACPI/Platform automatic module loading Date: Fri, 26 Apr 2019 17:03:09 -0500 Message-Id: <20190426220309.55654-6-jeremy.linton@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190426220309.55654-1-jeremy.linton@arm.com> References: <20190426220309.55654-1-jeremy.linton@arm.com> MIME-Version: 1.0 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Lets add the MODULE_TABLE and platform id_table entries so that the SPE driver can attach to the ACPI platform device created by the core pmu code. Signed-off-by: Jeremy Linton Reviewed-by: Sudeep Holla --- drivers/perf/arm_spe_pmu.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) -- 2.20.1 diff --git a/drivers/perf/arm_spe_pmu.c b/drivers/perf/arm_spe_pmu.c index 7cb766dafe85..a11951b08330 100644 --- a/drivers/perf/arm_spe_pmu.c +++ b/drivers/perf/arm_spe_pmu.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -1176,7 +1177,13 @@ static const struct of_device_id arm_spe_pmu_of_match[] = { }; MODULE_DEVICE_TABLE(of, arm_spe_pmu_of_match); -static int arm_spe_pmu_device_dt_probe(struct platform_device *pdev) +static const struct platform_device_id arm_spe_match[] = { + { ARMV8_SPE_PDEV_NAME, 0}, + { } +}; +MODULE_DEVICE_TABLE(platform, arm_spe_match); + +static int arm_spe_pmu_device_probe(struct platform_device *pdev) { int ret; struct arm_spe_pmu *spe_pmu; @@ -1236,11 +1243,12 @@ static int arm_spe_pmu_device_remove(struct platform_device *pdev) } static struct platform_driver arm_spe_pmu_driver = { + .id_table = arm_spe_match, .driver = { .name = DRVNAME, .of_match_table = of_match_ptr(arm_spe_pmu_of_match), }, - .probe = arm_spe_pmu_device_dt_probe, + .probe = arm_spe_pmu_device_probe, .remove = arm_spe_pmu_device_remove, };