lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240415070620.133143-1-richard.xnu.clark@gmail.com>
Date: Mon, 15 Apr 2024 15:06:20 +0800
From: Richard Clark <richard.xnu.clark@...il.com>
To: adrian.hunter@...el.com,
	ulf.hansson@...aro.org
Cc: linux-mmc@...r.kernel.org,
	linux-kernel@...r.kernel.org,
	linux-arm-kernel@...ts.infradead.org,
	richard.xnu.clark@...il.com
Subject: [PATCH] sdhci: Fix SD card detection issue

The mmc_gpio_get_cd(...) will return 0 called from sdhci_get_cd(...), which means
the card is not present. Actually, the card detection pin is active low by default
according to the SDHCI psec, thus the card detection result is not correct, more
specificly below if condition is true in mmc_rescan(...):
	...
	if (mmc_card_is_removable(host) && host->ops->get_cd &&
		host->ops->get_cd(host) == 0) {
		...
		goto out;
	}
The SD card device will have no chance to be created.

This commit fixes this detection issue via the MMC_CAP2_CD_ACTIVE_HIGH cap2 flag,
parsed from the 'cd-inverted' property of DT.

Signed-off-by: Richard Clark <richard.xnu.clark@...il.com>
---
 drivers/mmc/host/sdhci.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index c79f73459915..79f33a161ca8 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2483,6 +2483,9 @@ static int sdhci_get_cd(struct mmc_host *mmc)
 	 * Try slot gpio detect, if defined it take precedence
 	 * over build in controller functionality
 	 */
+	if (!(mmc->caps2 & MMC_CAP2_CD_ACTIVE_HIGH))
+		gpio_cd = !gpio_cd;
+
 	if (gpio_cd >= 0)
 		return !!gpio_cd;
 
-- 
2.34.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ