Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: core: Allow more host caps to be modified through debugfs

This makes various signal and function tests more convenient
without the need to modify the DTB.

/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

// Disable 8-bit support
echo $(($(cat caps) & ~(1 << 6))) > caps
// Enable 8-bit support
echo $(($(cat caps) | (1 << 6))) > caps
// Disable 4-bit support
echo $(($(cat caps) & ~(1 << 0))) > caps
// Enable 4-bit support
echo $(($(cat caps) | (1 << 0))) > caps
// Disable CMD23 support
echo $(($(cat caps) & ~(1 << 30))) > caps
// Enable CMD23 support
echo $(($(cat caps) | (1 << 30))) > caps
// Disable CMD23 support
echo $(($(cat caps) & ~(1 << 30))) > caps
// Enable CMD23 support
echo $(($(cat caps) | (1 << 30))) > caps
// Disable CQE support
echo $(($(cat caps2) & ~(1 << 23))) > caps2
// Enable CQE support
echo $(($(cat caps2) | (1 << 23))) > caps2
// Disable CQE DCMD support
echo $(($(cat caps2) & ~(1 << 24))) > caps2
// Enable CQE DCMD support
echo $(($(cat caps2) | (1 << 24))) > caps2

/sys/kernel/debug/mmc0# echo on > /sys/bus/mmc/devices/mmc0\:0001/power/control
/sys/kernel/debug/mmc0# cat ios

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Shawn Lin and committed by
Ulf Hansson
5f87aaf5 fda1e0af

+8 -2
+8 -2
drivers/mmc/core/debugfs.c
··· 315 315 MMC_CAP_SD_HIGHSPEED | 316 316 MMC_CAP_MMC_HIGHSPEED | 317 317 MMC_CAP_UHS | 318 - MMC_CAP_DDR; 318 + MMC_CAP_DDR | 319 + MMC_CAP_4_BIT_DATA | 320 + MMC_CAP_8_BIT_DATA | 321 + MMC_CAP_CMD23; 319 322 320 323 if (diff & ~allowed) 321 324 return -EINVAL; ··· 330 327 331 328 static int mmc_caps2_set(void *data, u64 val) 332 329 { 333 - u32 allowed = MMC_CAP2_HSX00_1_8V | MMC_CAP2_HSX00_1_2V; 330 + u32 allowed = MMC_CAP2_HSX00_1_8V | 331 + MMC_CAP2_HSX00_1_2V | 332 + MMC_CAP2_CQE | 333 + MMC_CAP2_CQE_DCMD; 334 334 u32 *caps = data; 335 335 u32 diff = *caps ^ val; 336 336