[PATCH 13/15] ARM: rpi: add heuristic for skipping detection of SDIO card
Ahmad Fatoum
a.fatoum at pengutronix.de
Thu May 5 01:01:50 PDT 2022
mci0 is normally the WiFi while mci1 is the SD-Card on the Raspberry Pi
4. The proper way would be to use aliases, but as we accept device trees
from outside, we can apply a simple heuristic to disfavor the SDIO
controller: The SDIO controller tends to have a child node.
If this is not the case, use mci0 as before. As probing the SDIO in
barebox leads to many annoying error messages, disable its detection, so
device_detect_all done by ifup -a (which doesn't find the Ethernet
controller yet), doesn't spam the console.
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
arch/arm/boards/raspberry-pi/rpi-common.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c
index 0db03098e564..efa3157d61b9 100644
--- a/arch/arm/boards/raspberry-pi/rpi-common.c
+++ b/arch/arm/boards/raspberry-pi/rpi-common.c
@@ -230,13 +230,31 @@ static int rpi_mem_init(void)
}
mem_initcall(rpi_mem_init);
+static bool mci_hwdev_has_child(struct device_d *dev)
+{
+ return dev && dev->parent && dev->parent->device_node &&
+ of_get_next_available_child(dev->parent->device_node, NULL);
+}
+
static int rpi_env_init(void)
{
struct stat s;
const char *diskdev = "/dev/disk0.0";
- int ret;
+ int ret = -ENODEV;
- device_detect_by_name("mci0");
+ struct device_d *mci0dev = get_device_by_name("mci0");
+ if (mci0dev) {
+ struct device_d *mci1dev = get_device_by_name("mci1");
+
+ if (mci_hwdev_has_child(mci0dev) && mci1dev &&
+ !mci_hwdev_has_child(mci1dev))
+ ret = device_detect(mci1dev);
+
+ if (ret)
+ device_detect(mci0dev);
+ else
+ mci0dev->detect = mci0dev->parent->detect = NULL;
+ }
ret = stat(diskdev, &s);
if (ret) {
--
2.30.2
More information about the barebox
mailing list