mmc: add a file to debugfs for changing host max clock at runtime

Usage is as follows:

rk3566_rgo:/ # cat /sys/kernel/debug/mmc1/max_clock
150000000

rk3566_rgo:/ # echo 200000000 > /sys/kernel/debug/mmc1/max_clock
rk3566_rgo:/ # cat /sys/kernel/debug/mmc1/max_clock
200000000
rk3566_rgo:/ # echo 200000000 >  /sys/kernel/debug/mmc1/clock

rk3566_rgo:/ # dmesg -c
[  285.884348] mmc_host mmc1: Bus speed (slot 0) = 198000000Hz (slot req 200000000Hz, actual 198000000HZ div = 0)

Signed-off-by: Alex Zhao <zzc@rock-chips.com>
Change-Id: I7ac9649b231c50b0c6c066407e28954e8c94510c
This commit is contained in:
Alex Zhao
2021-01-06 09:47:33 +08:00
committed by Tao Huang
parent 6f8089df70
commit b59b1c0040

View File

@@ -225,6 +225,31 @@ 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");
static int mmc_max_clock_opt_get(void *data, u64 *val)
{
struct mmc_host *host = data;
*val = host->f_max;
return 0;
}
static int mmc_max_clock_opt_set(void *data, u64 val)
{
struct mmc_host *host = data;
/* We need this check due to input value is u64 */
if (val != 0 && (val > UHS_SDR104_MAX_DTR || val < host->f_min))
return -EINVAL;
host->f_max = (unsigned int) val;
return 0;
}
DEFINE_DEBUGFS_ATTRIBUTE(mmc_max_clock_fops, mmc_max_clock_opt_get, mmc_max_clock_opt_set,
"%llu\n");
void mmc_add_host_debugfs(struct mmc_host *host)
{
struct dentry *root;
@@ -253,6 +278,9 @@ void mmc_add_host_debugfs(struct mmc_host *host)
&mmc_clock_fops))
goto err_node;
debugfs_create_file_unsafe("max_clock", S_IRUSR | S_IWUSR, root, host,
&mmc_max_clock_fops);
#ifdef CONFIG_FAIL_MMC_REQUEST
if (fail_request)
setup_fault_attr(&fail_default_attr, fail_request);