Received: by 10.213.65.16 with SMTP id m16csp158762imf; Sun, 11 Mar 2018 21:32:47 -0700 (PDT) X-Google-Smtp-Source: AG47ELsfSCxBNNovMGr3/GdB2V09qof0iun9ojL52zVQyA7xBsxeiK+aYEfau9gcBQl8wEBUEeXq X-Received: by 10.101.71.138 with SMTP id e10mr5646681pgs.317.1520829167621; Sun, 11 Mar 2018 21:32:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520829167; cv=none; d=google.com; s=arc-20160816; b=ATQ4Gp/seV19kJpRHIzwCa+Mkr5okmcz9azpnpZnqWDh9DUgavSyrT7m/t0fMra5uV ysNrgbFODfinAmAQME5eYBZqc507OCocTiuVIR8WKF4HCTcURh2xJWjA8ObgnnpXlMi1 tFwlZEQYtFoHMseWpp7AapGn7LCPBUoCMO/qRdDtunEVBBTfQpNHy9F3MTEaryoFgV5k z3sGh/MsWorMuxIKIgRlIxO7onwUqSXyUTMH+CtNySujgNpicBcGzDshx48jp8/12aLA iSq/5j5+K8Nz7BE2r97ALJP57DYjT/FQE/ElzUzTrLmcklWeYBPd+0kSkGkkGuPy97Ci 6CQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from:arc-authentication-results; bh=pr90b70G0ymYEqE/0p9wlmpZtJb+MeT7Mauy+qqyQVk=; b=wpA8pgSOG8Fa2xUJXouAYMh8DL+arY7w8ItZEi1xZ8gwG0OwIypO30slFaZkCuh08B nPIdm7pa/7y7Lggo/aPwfnj8mXFOaYnP4O2lCTG18c3gy78FSjKYfLPB3notn9dxO6z1 D7/Xt1WVnF2dJBVXx3RHUlQynY3ILNWVauV6d4DQZyqaWlwdNZ+IUivqd50azyafsB90 isPT+iyrbdy6qmePVKWrSjUJRAi+ftCks/77QjZgNu3D0CHsXye93gcC0Mj20AHyux4P aYlkY5TCmbnwwdp8DgeCe2lVackLvB1ErXdPO6ISRm5aI6oa2xa6bdQ1Mu/pWHOvyGIs CWuQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p1-v6si4330859plb.297.2018.03.11.21.32.32; Sun, 11 Mar 2018 21:32:47 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751232AbeCLEbn (ORCPT + 99 others); Mon, 12 Mar 2018 00:31:43 -0400 Received: from relay1.mentorg.com ([192.94.38.131]:34267 "EHLO relay1.mentorg.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750764AbeCLEbm (ORCPT ); Mon, 12 Mar 2018 00:31:42 -0400 Received: from svr-orw-fem-04.mgc.mentorg.com ([147.34.97.41]) by relay1.mentorg.com with esmtps (TLSv1:ECDHE-RSA-AES256-SHA:256) id 1evF7Y-0006Ql-Jf from Harish_Kandiga@mentor.com ; Sun, 11 Mar 2018 21:31:36 -0700 Received: from hkandiga-VirtualBox.ina.mentorg.com (147.34.91.1) by svr-orw-fem-04.mgc.mentorg.com (147.34.97.41) with Microsoft SMTP Server id 14.3.224.2; Sun, 11 Mar 2018 21:31:35 -0700 From: Harish Jenny K N To: , , , , , CC: , , , Subject: [PATCH v9] mmc: Export host capabilities to debugfs. Date: Mon, 12 Mar 2018 10:01:30 +0530 Message-ID: <1520829090-3567-1-git-send-email-harish_kandiga@mentor.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch exports the host capabilities to debugfs This idea of sharing host capabilities over debugfs came up from Abbas Raza Earlier discussions: https://lkml.org/lkml/2018/3/5/357 https://www.spinics.net/lists/linux-mmc/msg48219.html Signed-off-by: Harish Jenny K N --- Changes in v9 - More code cleanup as suggested by Andy Shevchenko. Changes in v8 - Changes to use for_each_set_bit as suggested by Andy Shevchenko. Changes in v7 - Moved additional capabilities also to caps file as mentioned by Ulf Hansson - compacting the code with macros Changes in v6: - Used DEFINE_SHOW_ATTRIBUTE Changes in v5: - Added parser logic in kernel by using debugfs_create_file for caps and caps2 instead of debugfs_create_x32 - Changed Author Changes in v4: - Moved the creation of nodes to mmc_add_host_debugfs - Exported caps2 - Renamed host_caps to caps Changes in v3: - Removed typecasting of &host->caps to (u32 *) Changes in v2: - Changed Author drivers/mmc/core/debugfs.c | 107 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c index c51e0c0..e19305a 100644 --- a/drivers/mmc/core/debugfs.c +++ b/drivers/mmc/core/debugfs.c @@ -225,6 +225,110 @@ static int mmc_clock_opt_set(void *data, u64 val) DEFINE_SIMPLE_ATTRIBUTE(mmc_clock_fops, mmc_clock_opt_get, mmc_clock_opt_set, "%llu\n"); +/* + * mmc_host_capabilities - MMC host capabilities + * + * This must be in sync with caps definitions in the mmc/host.h + */ +static const char * const mmc_host_capabilities[] = { + "4-bit transfers allowed", + "Supports MMC high-speed timing", + "Supports SD high-speed timing", + "Can signal pending SDIO IRQs", + "Talks only SPI protocols", + "Needs polling for card-detection", + "8 bit transfers allowed", + "Suspends (e)MMC/SD at idle", + "Nonremovable", + "Waits while card is busy", + "Allows erase/trim commands", + "Supports DDR mode at 3.3V", + "Supports DDR mode at 1.8V", + "Supports DDR mode at 1.2V", + "Can power off after boot", + "CMD14/CMD19 bus width ok", + "Supports UHS SDR12 mode", + "Supports UHS SDR25 mode", + "Supports UHS SDR50 mode", + "Supports UHS SDR104 mode", + "Supports UHS DDR50 mode", + "Unknown (bit 21)", + "Unknown (bit 22)", + "Supports Driver Type A", + "Supports Driver Type C", + "Supports Driver Type D", + "Unknown (bit 26)", + "RW reqs can be completed within mmc_request_done()", + "Supports Enable card detect wake", + "Can send commands during data transfer", + "CMD23 supported", + "Supports Hardware reset" +}; + +/* + * mmc_host_capabilities2 - MMC host additional capabilities + * + * This must be in sync with caps2 definitions in the mmc/host.h + */ +static const char * const mmc_host_capabilities2[] = { + "No access to Boot partition", + "Unknown (bit 1)", + "Can do full power cycle", + "Unknown (bit 3)", + "Unknown (bit 4)", + "Supports HS200 1.8V SDR", + "Supports HS200 1.2V SDR", + "Unknown (bit 7)", + "Unknown (bit 8)", + "Unknown (bit 9)", + "Card-detect signal active high", + "Write-protect signal active high", + "Unknown (bit 12)", + "Unknown (bit 13)", + "Can do complete power cycle of the card", + "Supports HS400 1.8V", + "Support HS400 1.2V", + "SDIO IRQ - Nothread", + "No physical write protect pin, assume always read-write", + "Do not send SDIO commands during initialization", + "Supports enhanced strobe", + "Do not send SD commands during initialization", + "Do not send (e)MMC commands during initialization", + "Has eMMC command queue engine", + "CQE can issue a direct command", + "Unknown (bit 25)", + "Unknown (bit 26)", + "Unknown (bit 27)", + "Unknown (bit 28)", + "Unknown (bit 29)", + "Unknown (bit 30)", + "Unknown (bit 31)" +}; + +static int mmc_caps_show(struct seq_file *s, void *unused) +{ + struct mmc_host *host = s->private; + unsigned long caps = host->caps; + unsigned long caps2 = host->caps2; + int bit; + + seq_puts(s, "MMC Host capabilities are:\n"); + seq_puts(s, "=============================================\n"); + + for_each_set_bit(bit, (const unsigned long *)&caps, BITS_PER_LONG) + seq_printf(s, "%s\n", mmc_host_capabilities[bit]); + + seq_puts(s, "=============================================\n"); + seq_puts(s, "MMC Host additional capabilities are:\n"); + seq_puts(s, "=============================================\n"); + + for_each_set_bit(bit, (const unsigned long *)&caps2, BITS_PER_LONG) + seq_printf(s, "%s\n", mmc_host_capabilities2[bit]); + + return 0; +} +DEFINE_SHOW_ATTRIBUTE(mmc_caps); + void mmc_add_host_debugfs(struct mmc_host *host) { struct dentry *root; @@ -243,6 +347,9 @@ void mmc_add_host_debugfs(struct mmc_host *host) if (!debugfs_create_file("ios", S_IRUSR, root, host, &mmc_ios_fops)) goto err_node; + if (!debugfs_create_file("caps", S_IRUSR, root, host, &mmc_caps_fops)) + goto err_node; + if (!debugfs_create_file("clock", S_IRUSR | S_IWUSR, root, host, &mmc_clock_fops)) goto err_node; -- 1.9.1