Received: by 2002:a05:7412:da14:b0:e2:908c:2ebd with SMTP id fe20csp747223rdb; Fri, 6 Oct 2023 19:28:06 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGt50WdhyR4cTAEikm+uIv+bs6b7SbN7nHHf6pc6BCWAEyvzIWPr6rTG4z2iXAg6jdi1sAa X-Received: by 2002:a05:6e02:1d03:b0:351:5d30:4777 with SMTP id i3-20020a056e021d0300b003515d304777mr12659313ila.28.1696645686191; Fri, 06 Oct 2023 19:28:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696645686; cv=none; d=google.com; s=arc-20160816; b=wZghj7+BsBFVn4gqEAVip9y/+JCY722B9WN0V3pqetrb9DpEg1HU4s7D+wfl4viuN1 NSuWZNgmJWDgY32P3Moa0N+RjW7xprIc/yBhfmAR+4b0USwMJK6OV2ELGRiLZ9aouiWX /XFfM1pFAyqU1pDeBWwI/GDHBFcD/nd6Prz/C5SP/dY6gbdQS7Baqecunu/X+NB6Nfzr ln3LibQ+L0WdsKXMr9Q9OZ3leOW2YRpmRTYiWzfFJQ9DCBNFCLEEeQopy4Q22rbyKEW1 wslVESfjItv3RXObFHgAR4tOVEvb27MTTlCaD7plwaZ5wp2MALJIlK9+QGXv/Kry+Fok WcdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=yNDhtLOEKcYAnbXxDszSP4U1anKPaHCaiVOg9N7z6KQ=; fh=klg4CbWLM0rRkey8JyNLN6hJulFCFb3UXDwDbYYMDq0=; b=i6fO6EemsoBY4mCInITVrGmCPlsf7DgciSXol36JdaBGV+cXhwcf64ma2lSvSyetw0 zWdwVDUAAaGorp50uD1Oo4jWTeulSlgGbqzsXf61YRn78AyMhQ6mkOIZ9sAE1ItEzD1S Y8LW46k0EGBbEO1c68oaHKthrgj/6yrBBnCj5KDuha8xPBqlwN7zgskNI+15/GD67v4b eoqo+8oauB9bi5ZKQhIWUKfQCW552gg8aHkQyEpEoEpJhCJ8xRag+fNo3ZjkfsNiUF7T WreiyexQcJesiGHCX8OpldGvbpk8w++VMqvtZdz4YmN280dNJnsWgFHF1Egdp+G5KVDU Mm+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=Mvs9FlG6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from morse.vger.email (morse.vger.email. [2620:137:e000::3:1]) by mx.google.com with ESMTPS id f11-20020a056a0022cb00b00690de92ffe3si2834967pfj.309.2023.10.06.19.28.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Oct 2023 19:28:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) client-ip=2620:137:e000::3:1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=Mvs9FlG6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:1 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id B01BC8040D5D; Fri, 6 Oct 2023 19:28:03 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234050AbjJGC13 (ORCPT + 99 others); Fri, 6 Oct 2023 22:27:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233755AbjJGC12 (ORCPT ); Fri, 6 Oct 2023 22:27:28 -0400 Received: from mail-qv1-xf36.google.com (mail-qv1-xf36.google.com [IPv6:2607:f8b0:4864:20::f36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6498ABD; Fri, 6 Oct 2023 19:27:27 -0700 (PDT) Received: by mail-qv1-xf36.google.com with SMTP id 6a1803df08f44-65b0557ec77so15066696d6.0; Fri, 06 Oct 2023 19:27:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696645646; x=1697250446; darn=vger.kernel.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=yNDhtLOEKcYAnbXxDszSP4U1anKPaHCaiVOg9N7z6KQ=; b=Mvs9FlG6CjgFiLAjDkwDiSi0P1MKXpEiRJbcueJFrWKA1qtAAnuGQ093cyu/RLxlq8 k9FnHh7KX9tkPHpLGBsGYWkqEQahZOSpeIemR7satPmskvNzSPuW4bXGof3M+86L1D+D EVf3+SGJWznoqRC103+/wMBXHBFMSLQ5fIaRopQ7MkLYLh83aZDmzn1Yz9ziaZelCjJl 3kgQczaLKVM7GnqG3423fzNfpih6SfDP9xdSPG+X9vq3LwajdonT9IWWkpoaCmij6Ld4 OcaepBGQXVT1ZvTU2cUKRe/LypF2gsjwNGpc/3kDWPHI1AYl8/fA7LV8WAhTkzklaZeR v4FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696645646; x=1697250446; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=yNDhtLOEKcYAnbXxDszSP4U1anKPaHCaiVOg9N7z6KQ=; b=We+DH0vH9qzlXDhP0pbvQQzuieKftbzj/4lmUBBk4fTt/Zuu+iwPxCFFycnU/iC9yV gKym11OI333lmCPyLi+7rPX2dnEGFM5CamXb1SYbLxi113eO5rfAnnIOa3BOk1SZd2j9 lxgLZ7vDkLiFuZuH30/kw8i+YfV0jDw/9aq6QaNg63FZbOLjbPw5LEXOX7W9j0ehuZK+ aaTUg0RTOgb7SVeceIuUs/cz+8ibzjgTlMyVR0U/9lm7HkXJq4xdYbEypR9wOwVXAnfp SxjL3uoMOOe280gJpeHD/suhlKOkabvSMzPYYlhw+v5eFpm9+ItqUnXWB/Mlu73csEwM cEbQ== X-Gm-Message-State: AOJu0Yzvooj1p0lqKKkcuexUj5uArOwgVqguR9gr4nifUX8ycKjdiBor KrXEZ6KTkEay0DZvI+kJeMIKkEQmdwBhNkjkkBK1H7XAt8s= X-Received: by 2002:a05:6214:310f:b0:658:59e7:aac5 with SMTP id ks15-20020a056214310f00b0065859e7aac5mr8793292qvb.23.1696645646459; Fri, 06 Oct 2023 19:27:26 -0700 (PDT) MIME-Version: 1.0 References: <20230929-mmc-caps-v2-0-11a4c2d94f15@axis.com> <20230929-mmc-caps-v2-2-11a4c2d94f15@axis.com> In-Reply-To: <20230929-mmc-caps-v2-2-11a4c2d94f15@axis.com> From: Wenchao Chen Date: Sat, 7 Oct 2023 10:27:15 +0800 Message-ID: Subject: Re: [PATCH v2 2/2] mmc: debugfs: Allow host caps to be modified To: Vincent Whitchurch Cc: Ulf Hansson , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@axis.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=3.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_SBL_CSS, SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Fri, 06 Oct 2023 19:28:03 -0700 (PDT) X-Spam-Level: ** On Fri, 29 Sept 2023 at 21:17, Vincent Whitchurch wrote: > > During board verification, there is a need to test the various supported > eMMC/SD speed modes. However, since the framework chooses the best mode > supported by the card and the host controller's caps, this currently > necessitates changing the devicetree for every iteration. > > Allow the various speed mode host capabilities to be modified via > debugfs in order to allow easier hardware verification. The values to > be written are the raw MMC_CAP* values from include/linux/mmc/host.h. > This is rather low-level, and these defines are not guaranteed to be > stable, but it is perhaps good enough for the intended use case. > > MMC_CAP_AGGRESSIVE_PM can also be set, in order to be able to > re-initialize the card without having to physically remove and re-insert > it. > > /sys/kernel/debug/mmc0# grep timing ios > timing spec: 9 (mmc HS200) > > // Turn on MMC_CAP_AGGRESSIVE_PM and re-trigger runtime suspend > /sys/kernel/debug/mmc0# echo $(($(cat caps) | (1 << 7))) > caps > /sys/kernel/debug/mmc0# echo on > /sys/bus/mmc/devices/mmc0\:0001/power/control > /sys/kernel/debug/mmc0# echo auto > /sys/bus/mmc/devices/mmc0\:0001/power/control > > // MMC_CAP2_HS200_1_8V_SDR > /sys/kernel/debug/mmc0# echo $(($(cat caps2) & ~(1 << 5))) > caps2 $(($(cat caps2) & ~(1 << 5))) looks complicated, does it use echo DDR52 > caps2? > /sys/kernel/debug/mmc0# echo on > /sys/bus/mmc/devices/mmc0\:0001/power/control > /sys/kernel/debug/mmc0# grep timing ios > timing spec: 8 (mmc DDR52) > > Signed-off-by: Vincent Whitchurch > --- > drivers/mmc/core/debugfs.c | 51 ++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 49 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c > index 2c97b94aab23..1642ea72d22c 100644 > --- a/drivers/mmc/core/debugfs.c > +++ b/drivers/mmc/core/debugfs.c > @@ -12,9 +12,12 @@ > #include > #include > #include > +#include > > #include > #include > +#include > +#include > > #include "core.h" > #include "card.h" > @@ -298,6 +301,49 @@ static const struct file_operations mmc_err_stats_fops = { > .release = single_release, > }; > > +static int mmc_caps_get(void *data, u64 *val) > +{ > + *val = *(u32 *)data; > + return 0; > +} > + > +static int mmc_caps_set(void *data, u64 val) > +{ > + u32 *caps = data; > + u32 diff = *caps ^ val; > + u32 allowed = MMC_CAP_AGGRESSIVE_PM | > + MMC_CAP_SD_HIGHSPEED | > + MMC_CAP_MMC_HIGHSPEED | > + MMC_CAP_UHS | > + MMC_CAP_DDR; > + > + if (diff & ~allowed) > + return -EINVAL; > + > + *caps = val; > + > + return 0; > +} > + > +static int mmc_caps2_set(void *data, u64 val) > +{ > + u32 allowed = MMC_CAP2_HSX00_1_8V | MMC_CAP2_HSX00_1_2V; > + u32 *caps = data; > + u32 diff = *caps ^ val; > + > + if (diff & ~allowed) > + return -EINVAL; > + > + *caps = val; > + > + return 0; > +} > + > +DEFINE_DEBUGFS_ATTRIBUTE(mmc_caps_fops, mmc_caps_get, mmc_caps_set, > + "0x%08llx\n"); > +DEFINE_DEBUGFS_ATTRIBUTE(mmc_caps2_fops, mmc_caps_get, mmc_caps2_set, > + "0x%08llx\n"); > + > void mmc_add_host_debugfs(struct mmc_host *host) > { > struct dentry *root; > @@ -306,8 +352,9 @@ void mmc_add_host_debugfs(struct mmc_host *host) > host->debugfs_root = root; > > debugfs_create_file("ios", S_IRUSR, root, host, &mmc_ios_fops); > - debugfs_create_x32("caps", S_IRUSR, root, &host->caps); > - debugfs_create_x32("caps2", S_IRUSR, root, &host->caps2); > + debugfs_create_file("caps", 0600, root, &host->caps, &mmc_caps_fops); > + debugfs_create_file("caps2", 0600, root, &host->caps2, > + &mmc_caps2_fops); Would it be better to use "S_IRUSR | S_IWUSR" instead of "0600"? > debugfs_create_file_unsafe("clock", S_IRUSR | S_IWUSR, root, host, > &mmc_clock_fops); > > > -- > 2.34.1 >