From patchwork Mon Sep 23 07:46:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Stanley X-Patchwork-Id: 1165832 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46cGcQ5S4gz9sP6 for ; Mon, 23 Sep 2019 17:47:02 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=jms.id.au Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="H1VpnD8Y"; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 46cGcQ2SXYzDqLN for ; Mon, 23 Sep 2019 17:47:02 +1000 (AEST) X-Original-To: pdbg@lists.ozlabs.org Delivered-To: pdbg@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::542; helo=mail-pg1-x542.google.com; envelope-from=joel.stan@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=jms.id.au Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="H1VpnD8Y"; dkim-atps=neutral Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 46cGcD1HSnzDqJS for ; Mon, 23 Sep 2019 17:46:49 +1000 (AEST) Received: by mail-pg1-x542.google.com with SMTP id s1so6431825pgv.8 for ; Mon, 23 Sep 2019 00:46:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nRxsXRM5jIgifH4MMcdV4vnLd7lMgUCZXzxkt3i6S2s=; b=H1VpnD8Y4k0CEgoIqc6mh6o7DUyuqZ9uL/GVcBTDUz7r+hvL3LhzOQXvD7nwEFUz+A 8vV1s8A0K+x1WIczKtSLD1ALRZilqt73lnI+TD5nVGz95p/lLbHviwhlaXABLyyhLNpe nRJT8lrpJF8hOBPiBioH3i1YbZHRizvxbBZEM1+sqyz3qv3mKcDYKRauwIyzYa2hbccJ JW/btM6q92jLbEyGhC3pzbBCrYKpCPpC2kJGA8uc0HkTRKNYFVUh3KhI4ELPxI9fDJUz ZyMFre4F+n9FcMUT4F1wAjtoaPpLBGhBh1Yq+dxu+HD5etf7WN73+fttZX7s6Zi1YVF/ ad7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=nRxsXRM5jIgifH4MMcdV4vnLd7lMgUCZXzxkt3i6S2s=; b=ALF5qJVaEcQk7Z4kjK8LVSYA8L7SUiWqr9Y7iA7xzXOklIlTkQ/6V5qdYPyY3sCjxj 1g813LHb0n2suVI5j+/tbk3A/HZKA0WQtuTZb/GCYOIl/H2nZVpSa00aS7hcSvlGFuCV NYDdWa6s6X27L1M6N6Cjd8SjFj6d5e63km3pmXyYB62Je6pFY0iOnIl4gavVL7bdM8Zc JHOWmG3lknoe3CkjT4eIfyTTzl7B8Z+n30Tw4rzuS1cuRYAkPSzoZfRZIVopPrNZUehq eZHP4lfUkgcPGWpupryF4bi+DYzhT3JC9++iOn+PoY8XKoZyMPSijzTAOJYmbew1OGdz gmwQ== X-Gm-Message-State: APjAAAX53yGGv+gag53FuYu6i5g516JGVdS7rmoFElQJcClsUGZOCyOp 4nWrsPTIYWUzDywROoGN9/eiEIZq X-Google-Smtp-Source: APXvYqz83adH3bxaoJrvqDtqjeICkx4YLuWtqISVmOacJ+3GhPnOT6YH5Ex5EqkpAcI0vN5dHFjjTQ== X-Received: by 2002:a65:5a84:: with SMTP id c4mr27715366pgt.261.1569224806198; Mon, 23 Sep 2019 00:46:46 -0700 (PDT) Received: from voyager.ibm.com ([36.255.48.244]) by smtp.gmail.com with ESMTPSA id b123sm4222130pgc.72.2019.09.23.00.46.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Sep 2019 00:46:45 -0700 (PDT) From: Joel Stanley To: pdbg@lists.ozlabs.org Date: Mon, 23 Sep 2019 17:16:38 +0930 Message-Id: <20190923074638.15866-1-joel@jms.id.au> X-Mailer: git-send-email 2.23.0 MIME-Version: 1.0 Subject: [Pdbg] [PATCH] kernel: Use FSI master 'class' path X-BeenThere: pdbg@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "mailing list for https://github.com/open-power/pdbg development" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jeremy Kerr Errors-To: pdbg-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Pdbg" The paths to sysfs entries depend on the master driver used. This means pdbg needs to use a different path when running against the hardware FSI master present in the ast2600. Instead of adding to an ever growing list of paths to check, the kernel has created a 'fsi-master' class that any driver can add itself to. On a kernel runnign this code, userspace only needs to check under /sys/class/fsi-master for any platform. This patch adds support for the class based path from a common accessor in kernel.c. It retains support for the existing gpio-fsi master. At some point in the distant future the gpio-fsi code could be deleted. Signed-off-by: Joel Stanley --- libpdbg/dtb.c | 14 +++++++++-- libpdbg/kernel.c | 64 +++++++++++++++++++++++++++++++++++++++-------- libpdbg/libpdbg.h | 2 ++ 3 files changed, 68 insertions(+), 12 deletions(-) diff --git a/libpdbg/dtb.c b/libpdbg/dtb.c index 6c4beeda4fe6..2aea625feaf1 100644 --- a/libpdbg/dtb.c +++ b/libpdbg/dtb.c @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#define _GNU_SOURCE #include #include #include @@ -68,7 +69,7 @@ static enum pdbg_backend default_backend(void) if (rc == 0) /* AMI BMC */ return PDBG_BACKEND_I2C; - rc = access(OPENFSI_BMC, F_OK); + rc = access(kernel_get_fsi_path(), F_OK); if (rc == 0) /* Kernel interface. OpenBMC */ return PDBG_BACKEND_KERNEL; @@ -134,7 +135,16 @@ static void *bmc_target(void) if (!pdbg_backend_option) { /* Try and determine the correct device type */ - cfam_id_file = fopen(FSI_CFAM_ID, "r"); + char *path; + + rc = asprintf(&path, "%s/fsi0/slave@00:00/cfam_id", kernel_get_fsi_path()); + if (rc < 0) { + pdbg_log(PDBG_ERROR, "Unable create fsi path"); + return NULL; + } + + cfam_id_file = fopen(path, "r"); + free(path); if (!cfam_id_file) { pdbg_log(PDBG_ERROR, "Unabled to open CFAM ID file\n"); return NULL; diff --git a/libpdbg/kernel.c b/libpdbg/kernel.c index 4cc0334d7eb3..4a57fc249a04 100644 --- a/libpdbg/kernel.c +++ b/libpdbg/kernel.c @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#define _GNU_SOURCE #include #include #include @@ -29,10 +30,33 @@ #include "operations.h" #include "hwunit.h" -#define FSI_SCAN_PATH "/sys/bus/platform/devices/gpio-fsi/fsi0/rescan" -#define FSI_CFAM_PATH "/sys/devices/platform/gpio-fsi/fsi0/slave@00:00/raw" +#define OPENFSI_LEGACY_PATH "/sys/bus/platform/devices/gpio-fsi/" +#define OPENFSI_PATH "/sys/class/fsi-master/" int fsi_fd; +const char *fsi_base; + +const char *kernel_get_fsi_path(void) +{ + int rc; + + if (fsi_base) + return fsi_base; + + rc = access(OPENFSI_LEGACY_PATH, F_OK); + if (rc == 0) { + fsi_base = OPENFSI_LEGACY_PATH; + return fsi_base; + } + + rc = access(OPENFSI_PATH, F_OK); + if (rc == 0) { + fsi_base = OPENFSI_PATH; + return fsi_base; + } + + return NULL; +} static int kernel_fsi_getcfam(struct fsi *fsi, uint32_t addr64, uint32_t *value) { @@ -42,7 +66,7 @@ static int kernel_fsi_getcfam(struct fsi *fsi, uint32_t addr64, uint32_t *value) rc = lseek(fsi_fd, addr, SEEK_SET); if (rc < 0) { rc = errno; - PR_WARNING("Failed to seek %s", FSI_CFAM_PATH); + PR_WARNING("seek failed: %s", strerror(errno)); return rc; } @@ -69,7 +93,7 @@ static int kernel_fsi_putcfam(struct fsi *fsi, uint32_t addr64, uint32_t data) rc = lseek(fsi_fd, addr, SEEK_SET); if (rc < 0) { rc = errno; - PR_WARNING("Failed to seek %s", FSI_CFAM_PATH); + PR_WARNING("seek failed: %s", strerror(errno)); return rc; } @@ -97,18 +121,27 @@ static void kernel_fsi_destroy(struct pdbg_target *target) static void kernel_fsi_scan_devices(void) { const char one = '1'; + char *path; int rc, fd; - fd = open(FSI_SCAN_PATH, O_WRONLY | O_SYNC); + rc = asprintf(&path, "%s/fsi0/rescan", kernel_get_fsi_path()); + if (rc < 0) { + PR_ERROR("Unable create fsi path"); + return; + } + + fd = open(path, O_WRONLY | O_SYNC); if (fd < 0) { - PR_ERROR("Unable to open %s", FSI_SCAN_PATH); + PR_ERROR("Unable to open %s", path); + free(path); return; } rc = write(fd, &one, sizeof(one)); if (rc < 0) - PR_ERROR("Unable to write to %s", FSI_SCAN_PATH); + PR_ERROR("Unable to write to %s", path); + free(path); close(fd); } @@ -116,12 +149,22 @@ int kernel_fsi_probe(struct pdbg_target *target) { if (!fsi_fd) { int tries = 5; + int rc; + char *path; + + rc = asprintf(&path, "%s/fsi0/rescan", kernel_get_fsi_path()); + if (rc < 0) { + PR_ERROR("Unable create fsi path"); + return rc; + } while (tries) { /* Open first raw device */ - fsi_fd = open(FSI_CFAM_PATH, O_RDWR | O_SYNC); - if (fsi_fd >= 0) + fsi_fd = open(path, O_RDWR | O_SYNC); + if (fsi_fd >= 0) { + free(path); return 0; + } tries--; /* Scan */ @@ -129,7 +172,8 @@ int kernel_fsi_probe(struct pdbg_target *target) sleep(1); } if (fsi_fd < 0) { - PR_ERROR("Unable to open %s", FSI_CFAM_PATH); + PR_ERROR("Unable to open %s", path); + free(path); return -1; } diff --git a/libpdbg/libpdbg.h b/libpdbg/libpdbg.h index 235ff85abdc6..468553bbf4b5 100644 --- a/libpdbg/libpdbg.h +++ b/libpdbg/libpdbg.h @@ -121,6 +121,8 @@ void pdbg_target_priv_set(struct pdbg_target *target, void *priv); struct pdbg_target *pdbg_target_root(void); bool pdbg_target_compatible(struct pdbg_target *target, const char *compatible); +const char *kernel_get_fsi_path(void); + /* Translate an address offset for a target to absolute address in address * space of a "base" target. */ struct pdbg_target *pdbg_address_absolute(struct pdbg_target *target, uint64_t *addr);