From patchwork Fri Feb 23 10:23:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 129348 Delivered-To: patch@linaro.org Received: by 10.46.66.2 with SMTP id p2csp436420lja; Fri, 23 Feb 2018 02:25:57 -0800 (PST) X-Google-Smtp-Source: AH8x224p3eytGjfuQwas4QXlaExwovumC2g8gQWzLho6p4YYQwqx6I1KY1mYlZfVejGi6RsnmfT+ X-Received: by 2002:a17:902:7404:: with SMTP id g4-v6mr1246346pll.235.1519381556980; Fri, 23 Feb 2018 02:25:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519381556; cv=none; d=google.com; s=arc-20160816; b=Oi8odgGDhpUnMUZIzXQ+kz75JrWEvmD7/ftWfxJvyo2pCpaJZ7DBURB1HLnr9Zz/P7 YllukZDPqUNLaISbvBOMKbSCmcASdIgyVsSd80crqhNYGrko8wgyEgH24bh+yxi0PZ+T SnZwkURzH1ZHDWDVYw6nM3s26GwhKMZ/YtJYEmkXqiBvCp/SxikAImccZBov+nxOa+AN AAgMjPpURbd+UEelqw6SDlswauoD0k0Sp4hKjdy3xGqPmDwjdvxyDhMB7QnJYEscjWTo sTcK6naJWvDwaAjlvQdVteIPSAP7k3wlEampKYzWXS3XEfSheF7o/BNA+Ht63nkXAlp7 0VJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=Tyw/mrJdFFjfo1YJuoZPOmEuLTwlV0np1KAhDQwf3+8=; b=RIBO2u2/HPNWUPVSsMmA/sABymm+mTyGmNwkLdoopLbdHmhVp1IkJsmu4ttFNnVaGC Fgxi+wkyzgqL5styMcKLI/osbGHHGiWh+xc71H5v4Av/xtopXed0Yw6pbPY5Lp6sqpNA sWtPUfo5KZncrPlJtCpe1LVMRq0mOuDqMGa0kbaPUBvGyP6CZXMem1x7CJ8hhFIYTsGa GYmAbJqIQBi/A4nFD/55zoCJK8XL4AsMcDsMJGbrb65JDcnO3fJWIbuajmwYb8a4r9P6 XJ67E1tL9fCA3JCG8crMpmzK9wGjOzTqh5VBZOvH4dldrSxrY/lmFGIGP1LAuXSDf+CH bTLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LKeAzf8z; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w124si1610705pfw.55.2018.02.23.02.25.56; Fri, 23 Feb 2018 02:25:56 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LKeAzf8z; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751698AbeBWKYb (ORCPT + 28 others); Fri, 23 Feb 2018 05:24:31 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:41751 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751444AbeBWKYY (ORCPT ); Fri, 23 Feb 2018 05:24:24 -0500 Received: by mail-pl0-f65.google.com with SMTP id k8so4658949pli.8 for ; Fri, 23 Feb 2018 02:24:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=Tyw/mrJdFFjfo1YJuoZPOmEuLTwlV0np1KAhDQwf3+8=; b=LKeAzf8zPPJ7F1dgz9YajaImgKkBeGcob/kC3HnHdqWZMCp+FPq8G9gpsLG+5WFVj7 kYvhEVJ3bK5WzfwrspLhlotYNjzzcUMXYllY3nmmwBNq/Z8R1ZYy/uP+E63PvIzYwk+T nLM/GQleTWJAdO8TCZm4r6MiTwDRPMzwxfgw0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=Tyw/mrJdFFjfo1YJuoZPOmEuLTwlV0np1KAhDQwf3+8=; b=BNHNPekmq/G9ijzXrb3xxV8gFQnC4JSjRzyhDlJi8PndmUpz1Mf+SX7K1gaBAM7jIE DJIb8LUdVw4visBoM2KOMQ/yocqePdH+SOZADEth7F+dLlC9nxO9QekQwDQpw9GUWKkE vHo1cSGDolXMh7CgDrykiWhu+qCuKi8nY/WhEUHi6iv8qhj6gwP2Z5PzjusQ4rAlzXel 7YPyMdZcW8jiXqM3xAS8s9PJLdTqZnDsm+qTn6JHcGtuCEzrLyZKg2ITF37G/5BGIVFV ya+498KB15ciZgwH/MCYYG10B7SDmgiNUksqxk5/2bb+v7jLD2+0dG9LRdcGxCZ8z96F vR2Q== X-Gm-Message-State: APf1xPBm1sW5vRG9m64uAYsvTmc1wsakiYFWT8PRZ2s2V+8mZctx0sth Mo5xtvvYfjbWBnCq0XnWpT7vuw== X-Received: by 2002:a17:902:3124:: with SMTP id w33-v6mr1252362plb.356.1519381463462; Fri, 23 Feb 2018 02:24:23 -0800 (PST) Received: from localhost ([122.167.232.138]) by smtp.gmail.com with ESMTPSA id g16sm4632893pfd.23.2018.02.23.02.24.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 23 Feb 2018 02:24:22 -0800 (PST) From: Viresh Kumar To: Greg Kroah-Hartman Cc: Viresh Kumar , Vincent Guittot , Stephen Boyd , Rajendra Nayak , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, robdclark@gmail.com, s.hauer@pengutronix.de, l.stach@pengutronix.de, shawnguo@kernel.org, fabio.estevam@nxp.com, nm@ti.com, xuwei5@hisilicon.com, robh+dt@kernel.org, olof@lixom.net Subject: [PATCH V7 07/13] boot_constraint: Add debugfs support Date: Fri, 23 Feb 2018 15:53:46 +0530 Message-Id: <745f7dea835174ff837af39a2ae6e9f2b8b94cc0.1519380923.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.15.0.194.g9af6a3dea062 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds debugfs support for boot constraints. This is how it looks for a "vmmc-supply" constraint for the MMC device. $ ls -R /sys/kernel/debug/boot_constraints/ /sys/kernel/debug/boot_constraints/: f723d000.dwmmc0 /sys/kernel/debug/boot_constraints/f723d000.dwmmc0: clk-ciu pm-domain supply-vmmc supply-vmmcaux /sys/kernel/debug/boot_constraints/f723d000.dwmmc0/clk-ciu: /sys/kernel/debug/boot_constraints/f723d000.dwmmc0/pm-domain: /sys/kernel/debug/boot_constraints/f723d000.dwmmc0/supply-vmmc: u_volt_max u_volt_min /sys/kernel/debug/boot_constraints/f723d000.dwmmc0/supply-vmmcaux: u_volt_max u_volt_min Tested-by: Rajendra Nayak Signed-off-by: Viresh Kumar --- drivers/bootconstraint/clk.c | 3 +++ drivers/bootconstraint/core.c | 59 +++++++++++++++++++++++++++++++++++++++++ drivers/bootconstraint/core.h | 6 +++++ drivers/bootconstraint/pm.c | 11 ++++++-- drivers/bootconstraint/supply.c | 9 +++++++ 5 files changed, 86 insertions(+), 2 deletions(-) -- 2.15.0.194.g9af6a3dea062 diff --git a/drivers/bootconstraint/clk.c b/drivers/bootconstraint/clk.c index 90262fe9057c..1ee8ab1978a5 100644 --- a/drivers/bootconstraint/clk.c +++ b/drivers/bootconstraint/clk.c @@ -46,6 +46,8 @@ int constraint_clk_add(struct constraint *constraint, void *data) cclk->clk_info.name = kstrdup_const(clk_info->name, GFP_KERNEL); constraint->private = cclk; + constraint_add_debugfs(constraint, clk_info->name); + return 0; put_clk: @@ -60,6 +62,7 @@ void constraint_clk_remove(struct constraint *constraint) { struct constraint_clk *cclk = constraint->private; + constraint_remove_debugfs(constraint); kfree_const(cclk->clk_info.name); clk_disable_unprepare(cclk->clk); clk_put(cclk->clk); diff --git a/drivers/bootconstraint/core.c b/drivers/bootconstraint/core.c index a6148b625b48..5a6984276139 100644 --- a/drivers/bootconstraint/core.c +++ b/drivers/bootconstraint/core.c @@ -21,6 +21,63 @@ static LIST_HEAD(constraint_devices); static DEFINE_MUTEX(constraint_devices_mutex); +/* Debugfs */ + +static struct dentry *rootdir; + +static void constraint_device_add_debugfs(struct constraint_dev *cdev) +{ + struct device *dev = cdev->dev; + + cdev->dentry = debugfs_create_dir(dev_name(dev), rootdir); +} + +static void constraint_device_remove_debugfs(struct constraint_dev *cdev) +{ + debugfs_remove_recursive(cdev->dentry); +} + +void constraint_add_debugfs(struct constraint *constraint, const char *suffix) +{ + struct device *dev = constraint->cdev->dev; + const char *prefix; + char name[NAME_MAX]; + + switch (constraint->type) { + case DEV_BOOT_CONSTRAINT_CLK: + prefix = "clk"; + break; + case DEV_BOOT_CONSTRAINT_PM: + prefix = "pm"; + break; + case DEV_BOOT_CONSTRAINT_SUPPLY: + prefix = "supply"; + break; + default: + dev_err(dev, "%s: Constraint type (%d) not supported\n", + __func__, constraint->type); + return; + } + + snprintf(name, NAME_MAX, "%s-%s", prefix, suffix); + + constraint->dentry = debugfs_create_dir(name, constraint->cdev->dentry); +} + +void constraint_remove_debugfs(struct constraint *constraint) +{ + debugfs_remove_recursive(constraint->dentry); +} + +static int __init constraint_debugfs_init(void) +{ + rootdir = debugfs_create_dir("boot_constraints", NULL); + + return 0; +} +core_initcall(constraint_debugfs_init); + + /* Boot constraints core */ static struct constraint_dev *constraint_device_find(struct device *dev) @@ -48,12 +105,14 @@ static struct constraint_dev *constraint_device_allocate(struct device *dev) INIT_LIST_HEAD(&cdev->constraints); list_add(&cdev->node, &constraint_devices); + constraint_device_add_debugfs(cdev); return cdev; } static void constraint_device_free(struct constraint_dev *cdev) { + constraint_device_remove_debugfs(cdev); list_del(&cdev->node); kfree(cdev); } diff --git a/drivers/bootconstraint/core.h b/drivers/bootconstraint/core.h index 35ea984d74f0..3084baaee127 100644 --- a/drivers/bootconstraint/core.h +++ b/drivers/bootconstraint/core.h @@ -7,6 +7,7 @@ #define _CORE_H #include +#include #include #include @@ -14,6 +15,7 @@ struct constraint_dev { struct device *dev; struct list_head node; struct list_head constraints; + struct dentry *dentry; }; struct constraint { @@ -22,12 +24,16 @@ struct constraint { enum dev_boot_constraint_type type; void (*free_resources)(void *data); void *free_resources_data; + struct dentry *dentry; int (*add)(struct constraint *constraint, void *data); void (*remove)(struct constraint *constraint); void *private; }; +void constraint_add_debugfs(struct constraint *constraint, const char *suffix); +void constraint_remove_debugfs(struct constraint *constraint); + /* Forward declarations of constraint specific callbacks */ int constraint_clk_add(struct constraint *constraint, void *data); void constraint_clk_remove(struct constraint *constraint); diff --git a/drivers/bootconstraint/pm.c b/drivers/bootconstraint/pm.c index f52bff240dd5..65810d9485bc 100644 --- a/drivers/bootconstraint/pm.c +++ b/drivers/bootconstraint/pm.c @@ -11,11 +11,18 @@ int constraint_pm_add(struct constraint *constraint, void *data) { struct device *dev = constraint->cdev->dev; + int ret; - return dev_pm_domain_attach(dev, true); + ret = dev_pm_domain_attach(dev, true); + if (ret) + return ret; + + constraint_add_debugfs(constraint, "domain"); + + return 0; } void constraint_pm_remove(struct constraint *constraint) { - /* Nothing to do for now */ + constraint_remove_debugfs(constraint); } diff --git a/drivers/bootconstraint/supply.c b/drivers/bootconstraint/supply.c index 352ded92d057..8965db534be6 100644 --- a/drivers/bootconstraint/supply.c +++ b/drivers/bootconstraint/supply.c @@ -57,6 +57,14 @@ int constraint_supply_add(struct constraint *constraint, void *data) csupply->supply.name = kstrdup_const(supply->name, GFP_KERNEL); constraint->private = csupply; + constraint_add_debugfs(constraint, supply->name); + + debugfs_create_u32("u_volt_min", 0444, constraint->dentry, + &csupply->supply.u_volt_min); + + debugfs_create_u32("u_volt_max", 0444, constraint->dentry, + &csupply->supply.u_volt_max); + return 0; remove_voltage: @@ -77,6 +85,7 @@ void constraint_supply_remove(struct constraint *constraint) struct device *dev = constraint->cdev->dev; int ret; + constraint_remove_debugfs(constraint); kfree_const(supply->name); ret = regulator_disable(csupply->reg);