From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: distrokit@pengutronix.de
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [DistroKit] [PATCH 02/10] v7a: barebox: switch to new broken-cd device parameter
Date: Fri, 30 Sep 2022 18:21:51 +0200 [thread overview]
Message-ID: <20220930162159.814389-3-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20220930162159.814389-1-a.fatoum@pengutronix.de>
The original patch didn't go upstream, because semantics were a bit odd,
a Kconfig option changing behavior, but only for devices barebox probes.
This imports v3 of the series into DistroKit.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
.../nv/dev.mmc0.broken_cd | 1 +
.../platform-v7a/barebox-am335x-mlo.config | 1 -
configs/platform-v7a/barebox-am335x.config | 1 -
.../platform-v7a/barebox-am335x.config.diff | 2 +-
configs/platform-v7a/barebox-at91.config | 1 -
configs/platform-v7a/barebox-at91.config.diff | 2 +-
.../nv/dev.mmc0.broken_cd | 1 +
configs/platform-v7a/barebox-mx6.config | 1 -
configs/platform-v7a/barebox-mx6.config.diff | 2 +-
.../nv/dev.mci0.broken_cd | 1 +
configs/platform-v7a/barebox-rpi2.config | 1 -
configs/platform-v7a/barebox-rpi2.config.diff | 2 +-
.../nv/dev.mmc0.broken_cd | 1 +
configs/platform-v7a/barebox-stm32mp.config | 1 -
.../platform-v7a/barebox-stm32mp.config.diff | 2 +-
configs/platform-v7a/barebox-vexpress.config | 1 -
.../platform-v7a/barebox-vexpress.config.diff | 2 +-
configs/platform-v7a/barebox.config | 1 -
...new-MCI_BROKEN_CD-option-for-testing.patch | 109 ------------------
...-upon-broken-cd-device-tree-property.patch | 60 ++++++++++
...-core-add-broken_cd-device-parameter.patch | 46 ++++++++
...broken-cd-information-into-kernel-DT.patch | 67 +++++++++++
.../patches/barebox-2022.09.0/series | 4 +-
23 files changed, 186 insertions(+), 124 deletions(-)
create mode 100644 configs/platform-v7a/barebox-am335x-defaultenv/nv/dev.mmc0.broken_cd
create mode 100644 configs/platform-v7a/barebox-mx6-defaultenv/nv/dev.mmc0.broken_cd
create mode 100644 configs/platform-v7a/barebox-rpi2-defaultenv/nv/dev.mci0.broken_cd
create mode 100644 configs/platform-v7a/barebox-stm32mp-defaultenv/nv/dev.mmc0.broken_cd
delete mode 100644 configs/platform-v7a/patches/barebox-2022.09.0/0001-mci-add-new-MCI_BROKEN_CD-option-for-testing.patch
create mode 100644 configs/platform-v7a/patches/barebox-2022.09.0/0001-mci-core-act-upon-broken-cd-device-tree-property.patch
create mode 100644 configs/platform-v7a/patches/barebox-2022.09.0/0002-mci-core-add-broken_cd-device-parameter.patch
create mode 100644 configs/platform-v7a/patches/barebox-2022.09.0/0003-mci-core-fixup-broken-cd-information-into-kernel-DT.patch
diff --git a/configs/platform-v7a/barebox-am335x-defaultenv/nv/dev.mmc0.broken_cd b/configs/platform-v7a/barebox-am335x-defaultenv/nv/dev.mmc0.broken_cd
new file mode 100644
index 000000000000..d00491fd7e5b
--- /dev/null
+++ b/configs/platform-v7a/barebox-am335x-defaultenv/nv/dev.mmc0.broken_cd
@@ -0,0 +1 @@
+1
diff --git a/configs/platform-v7a/barebox-am335x-mlo.config b/configs/platform-v7a/barebox-am335x-mlo.config
index c7ef80c234e9..c296fefaa7a1 100644
--- a/configs/platform-v7a/barebox-am335x-mlo.config
+++ b/configs/platform-v7a/barebox-am335x-mlo.config
@@ -297,7 +297,6 @@ CONFIG_MCI=y
# CONFIG_MCI_WRITE is not set
# CONFIG_MCI_MMC_BOOT_PARTITIONS is not set
# CONFIG_MCI_MMC_GPP_PARTITIONS is not set
-# CONFIG_MCI_BROKEN_CD is not set
#
# --- MCI host drivers ---
diff --git a/configs/platform-v7a/barebox-am335x.config b/configs/platform-v7a/barebox-am335x.config
index 1969802c48a5..313046927a07 100644
--- a/configs/platform-v7a/barebox-am335x.config
+++ b/configs/platform-v7a/barebox-am335x.config
@@ -651,7 +651,6 @@ CONFIG_MCI_INFO=y
CONFIG_MCI_WRITE=y
# CONFIG_MCI_MMC_BOOT_PARTITIONS is not set
# CONFIG_MCI_MMC_GPP_PARTITIONS is not set
-CONFIG_MCI_BROKEN_CD=y
#
# --- MCI host drivers ---
diff --git a/configs/platform-v7a/barebox-am335x.config.diff b/configs/platform-v7a/barebox-am335x.config.diff
index a5c5f077657e..601fe8baac2a 100644
--- a/configs/platform-v7a/barebox-am335x.config.diff
+++ b/configs/platform-v7a/barebox-am335x.config.diff
@@ -1,4 +1,4 @@
-c9dc2932604e238cf0e8d81e538c2819
+db5930a2812171dea02ac82d359831b3
# CONFIG_32BIT is undefined
# CONFIG_64BIT is undefined
# CONFIG_AM33XX_NET_BOOT is not set
diff --git a/configs/platform-v7a/barebox-at91.config b/configs/platform-v7a/barebox-at91.config
index 91bf127c7407..dccd26bbb5c0 100644
--- a/configs/platform-v7a/barebox-at91.config
+++ b/configs/platform-v7a/barebox-at91.config
@@ -608,7 +608,6 @@ CONFIG_MCI_INFO=y
CONFIG_MCI_WRITE=y
CONFIG_MCI_MMC_BOOT_PARTITIONS=y
# CONFIG_MCI_MMC_GPP_PARTITIONS is not set
-CONFIG_MCI_BROKEN_CD=y
#
# --- MCI host drivers ---
diff --git a/configs/platform-v7a/barebox-at91.config.diff b/configs/platform-v7a/barebox-at91.config.diff
index b023e5764795..d3a00045e5aa 100644
--- a/configs/platform-v7a/barebox-at91.config.diff
+++ b/configs/platform-v7a/barebox-at91.config.diff
@@ -1,4 +1,4 @@
-c9dc2932604e238cf0e8d81e538c2819
+db5930a2812171dea02ac82d359831b3
# CONFIG_32BIT is undefined
# CONFIG_64BIT is undefined
CONFIG_ARCH_AT91=y
diff --git a/configs/platform-v7a/barebox-mx6-defaultenv/nv/dev.mmc0.broken_cd b/configs/platform-v7a/barebox-mx6-defaultenv/nv/dev.mmc0.broken_cd
new file mode 100644
index 000000000000..d00491fd7e5b
--- /dev/null
+++ b/configs/platform-v7a/barebox-mx6-defaultenv/nv/dev.mmc0.broken_cd
@@ -0,0 +1 @@
+1
diff --git a/configs/platform-v7a/barebox-mx6.config b/configs/platform-v7a/barebox-mx6.config
index e36de6fc267b..7906fafddfd8 100644
--- a/configs/platform-v7a/barebox-mx6.config
+++ b/configs/platform-v7a/barebox-mx6.config
@@ -764,7 +764,6 @@ CONFIG_MCI_INFO=y
CONFIG_MCI_WRITE=y
CONFIG_MCI_MMC_BOOT_PARTITIONS=y
# CONFIG_MCI_MMC_GPP_PARTITIONS is not set
-CONFIG_MCI_BROKEN_CD=y
#
# --- MCI host drivers ---
diff --git a/configs/platform-v7a/barebox-mx6.config.diff b/configs/platform-v7a/barebox-mx6.config.diff
index 78ab3238b22b..e492d590ea33 100644
--- a/configs/platform-v7a/barebox-mx6.config.diff
+++ b/configs/platform-v7a/barebox-mx6.config.diff
@@ -1,4 +1,4 @@
-c9dc2932604e238cf0e8d81e538c2819
+db5930a2812171dea02ac82d359831b3
# CONFIG_32BIT is undefined
# CONFIG_64BIT is undefined
# CONFIG_ARCH_BCM283X is not set
diff --git a/configs/platform-v7a/barebox-rpi2-defaultenv/nv/dev.mci0.broken_cd b/configs/platform-v7a/barebox-rpi2-defaultenv/nv/dev.mci0.broken_cd
new file mode 100644
index 000000000000..d00491fd7e5b
--- /dev/null
+++ b/configs/platform-v7a/barebox-rpi2-defaultenv/nv/dev.mci0.broken_cd
@@ -0,0 +1 @@
+1
diff --git a/configs/platform-v7a/barebox-rpi2.config b/configs/platform-v7a/barebox-rpi2.config
index ccfede161d32..46fb13b44830 100644
--- a/configs/platform-v7a/barebox-rpi2.config
+++ b/configs/platform-v7a/barebox-rpi2.config
@@ -613,7 +613,6 @@ CONFIG_MCI_INFO=y
CONFIG_MCI_WRITE=y
CONFIG_MCI_MMC_BOOT_PARTITIONS=y
# CONFIG_MCI_MMC_GPP_PARTITIONS is not set
-CONFIG_MCI_BROKEN_CD=y
#
# --- MCI host drivers ---
diff --git a/configs/platform-v7a/barebox-rpi2.config.diff b/configs/platform-v7a/barebox-rpi2.config.diff
index 847e6794157e..2ae317bac58f 100644
--- a/configs/platform-v7a/barebox-rpi2.config.diff
+++ b/configs/platform-v7a/barebox-rpi2.config.diff
@@ -1,4 +1,4 @@
-c9dc2932604e238cf0e8d81e538c2819
+db5930a2812171dea02ac82d359831b3
CONFIG_ARM_ASM_UNIFIED=y
# CONFIG_CMD_NVMEM is not set
# CONFIG_CMD_USBGADGET is undefined
diff --git a/configs/platform-v7a/barebox-stm32mp-defaultenv/nv/dev.mmc0.broken_cd b/configs/platform-v7a/barebox-stm32mp-defaultenv/nv/dev.mmc0.broken_cd
new file mode 100644
index 000000000000..d00491fd7e5b
--- /dev/null
+++ b/configs/platform-v7a/barebox-stm32mp-defaultenv/nv/dev.mmc0.broken_cd
@@ -0,0 +1 @@
+1
diff --git a/configs/platform-v7a/barebox-stm32mp.config b/configs/platform-v7a/barebox-stm32mp.config
index 1d9a68c264de..9403afffaa2f 100644
--- a/configs/platform-v7a/barebox-stm32mp.config
+++ b/configs/platform-v7a/barebox-stm32mp.config
@@ -593,7 +593,6 @@ CONFIG_MCI_INFO=y
CONFIG_MCI_WRITE=y
CONFIG_MCI_MMC_BOOT_PARTITIONS=y
# CONFIG_MCI_MMC_GPP_PARTITIONS is not set
-CONFIG_MCI_BROKEN_CD=y
#
# --- MCI host drivers ---
diff --git a/configs/platform-v7a/barebox-stm32mp.config.diff b/configs/platform-v7a/barebox-stm32mp.config.diff
index e426bb0d6a8e..2879df7917f3 100644
--- a/configs/platform-v7a/barebox-stm32mp.config.diff
+++ b/configs/platform-v7a/barebox-stm32mp.config.diff
@@ -1,4 +1,4 @@
-c9dc2932604e238cf0e8d81e538c2819
+db5930a2812171dea02ac82d359831b3
# CONFIG_32BIT is undefined
# CONFIG_64BIT is undefined
# CONFIG_ARCH_BCM283X is not set
diff --git a/configs/platform-v7a/barebox-vexpress.config b/configs/platform-v7a/barebox-vexpress.config
index 10de783c9a4b..6f553187199b 100644
--- a/configs/platform-v7a/barebox-vexpress.config
+++ b/configs/platform-v7a/barebox-vexpress.config
@@ -607,7 +607,6 @@ CONFIG_MCI_INFO=y
CONFIG_MCI_WRITE=y
# CONFIG_MCI_MMC_BOOT_PARTITIONS is not set
# CONFIG_MCI_MMC_GPP_PARTITIONS is not set
-CONFIG_MCI_BROKEN_CD=y
#
# --- MCI host drivers ---
diff --git a/configs/platform-v7a/barebox-vexpress.config.diff b/configs/platform-v7a/barebox-vexpress.config.diff
index fa80377b86fe..1b66b9c5ad16 100644
--- a/configs/platform-v7a/barebox-vexpress.config.diff
+++ b/configs/platform-v7a/barebox-vexpress.config.diff
@@ -1,4 +1,4 @@
-c9dc2932604e238cf0e8d81e538c2819
+db5930a2812171dea02ac82d359831b3
# CONFIG_32BIT is undefined
# CONFIG_64BIT is undefined
CONFIG_AMBA_SP804=y
diff --git a/configs/platform-v7a/barebox.config b/configs/platform-v7a/barebox.config
index d56b74ccc941..a7fea5731263 100644
--- a/configs/platform-v7a/barebox.config
+++ b/configs/platform-v7a/barebox.config
@@ -630,7 +630,6 @@ CONFIG_MCI_INFO=y
CONFIG_MCI_WRITE=y
# CONFIG_MCI_MMC_BOOT_PARTITIONS is not set
# CONFIG_MCI_MMC_GPP_PARTITIONS is not set
-CONFIG_MCI_BROKEN_CD=y
#
# --- MCI host drivers ---
diff --git a/configs/platform-v7a/patches/barebox-2022.09.0/0001-mci-add-new-MCI_BROKEN_CD-option-for-testing.patch b/configs/platform-v7a/patches/barebox-2022.09.0/0001-mci-add-new-MCI_BROKEN_CD-option-for-testing.patch
deleted file mode 100644
index 3224e99941bc..000000000000
--- a/configs/platform-v7a/patches/barebox-2022.09.0/0001-mci-add-new-MCI_BROKEN_CD-option-for-testing.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From f9fa5cf2ba5842a355aa827ac8847ed62eee65d0 Mon Sep 17 00:00:00 2001
-From: Ahmad Fatoum <a.fatoum@pengutronix.de>
-Date: Mon, 25 Jul 2022 13:58:56 +0200
-Subject: [PATCH] mci: add new MCI_BROKEN_CD option for testing
-
-In remote labs co-located with other hardware, we've observed card
-detect levers of different boards to sporadically fail to detect
-the card, e.g. because the cable on the usbsdmux was yanked around
-by accident. When this happens, barebox usually boots up normally as
-the card detect is ignored and then Linux waits indefinitely for
-the card-detect to turn active. Add a new config option that can be
-enabled to avoid these issues altogether.
-
-Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
----
- drivers/mci/Kconfig | 15 +++++++++++++++
- drivers/mci/mci-core.c | 36 ++++++++++++++++++++++++++++++++----
- 2 files changed, 47 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/mci/Kconfig b/drivers/mci/Kconfig
-index 21d53c0c3f0b..651e59259790 100644
---- a/drivers/mci/Kconfig
-+++ b/drivers/mci/Kconfig
-@@ -56,6 +56,21 @@ config MCI_MMC_GPP_PARTITIONS
- Note: by default, 'MMC' devices have no 'general purpose partitions',
- it requires a special one-time configuration step to enable them.
-
-+config MCI_BROKEN_CD
-+ bool "ignore card-detect pin on boot and in OS"
-+ help
-+ Say 'y' here to have barebox unconditionally ignore the
-+ card-detect pin for its own operation and manipulate the
-+ kernel DT, so all detected MCI cards are polled instead
-+ of expecting the card detect lever to behave correctly.
-+ If you need more fine grained control use of_property
-+ in an init script:
-+
-+ of_property -fd mmc0 cd-gpios
-+ of_property -fs mmc0 broken-cd
-+
-+ If unsure, say 'n' here.
-+
- comment "--- MCI host drivers ---"
-
- config MCI_DW
-diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
-index b8f71e15986e..c6ed6e3d8b79 100644
---- a/drivers/mci/mci-core.c
-+++ b/drivers/mci/mci-core.c
-@@ -1739,6 +1739,27 @@ static int mci_register_partition(struct mci_part *part)
- return 0;
- }
-
-+static int of_broken_cd_fixup(struct device_node *root, void *ctx)
-+{
-+ struct device_d *hw_dev = ctx;
-+ struct device_node *np;
-+ char *name;
-+
-+ name = of_get_reproducible_name(hw_dev->device_node);
-+ np = of_find_node_by_reproducible_name(root, name);
-+ free(name);
-+ if (!np) {
-+ dev_warn(hw_dev, "Cannot find nodepath %s, cannot fixup\n",
-+ hw_dev->device_node->full_name);
-+ return -EINVAL;
-+ }
-+
-+ of_property_write_bool(np, "cd-gpios", false);
-+ of_property_write_bool(np, "broken-cd", true);
-+
-+ return 0;
-+}
-+
- /**
- * Probe an MCI card at the given host interface
- * @param mci MCI device instance
-@@ -1750,10 +1771,13 @@ static int mci_card_probe(struct mci *mci)
- int i, rc, disknum, ret;
- bool has_bootpart = false;
-
-- if (host->card_present && !host->card_present(host) &&
-- !host->non_removable) {
-- dev_err(&mci->dev, "no card inserted\n");
-- return -ENODEV;
-+ if (host->card_present && !host->card_present(host) && !host->non_removable) {
-+ if (!IS_ENABLED(CONFIG_MCI_BROKEN_CD)) {
-+ dev_err(&mci->dev, "no card inserted\n");
-+ return -ENODEV;
-+ }
-+
-+ dev_info(&mci->dev, "no card inserted (ignoring)\n");
- }
-
- ret = regulator_enable(host->supply);
-@@ -1839,6 +1863,10 @@ static int mci_card_probe(struct mci *mci)
- &mci->boot_ack_enable, mci);
- }
-
-+ if (IS_ENABLED(CONFIG_MCI_BROKEN_CD) && !host->no_sd &&
-+ dev_of_node(host->hw_dev))
-+ of_register_fixup(of_broken_cd_fixup, host->hw_dev);
-+
- dev_dbg(&mci->dev, "SD Card successfully added\n");
-
- on_error:
---
-2.30.2
-
diff --git a/configs/platform-v7a/patches/barebox-2022.09.0/0001-mci-core-act-upon-broken-cd-device-tree-property.patch b/configs/platform-v7a/patches/barebox-2022.09.0/0001-mci-core-act-upon-broken-cd-device-tree-property.patch
new file mode 100644
index 000000000000..7360637bdbfc
--- /dev/null
+++ b/configs/platform-v7a/patches/barebox-2022.09.0/0001-mci-core-act-upon-broken-cd-device-tree-property.patch
@@ -0,0 +1,60 @@
+From 1d41bcf91e00a2e590497c266d5171232f30428c Mon Sep 17 00:00:00 2001
+From: Ahmad Fatoum <a.fatoum@pengutronix.de>
+Date: Tue, 6 Sep 2022 20:10:14 +0200
+Subject: [PATCH 1/3] mci: core: act upon broken-cd device tree property
+
+We didn't care much for broken-cd so far, still we have some drivers
+implementing the card_present callback, which we should ignore when
+card-detect is marked broken.
+
+Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
+---
+ drivers/mci/mci-core.c | 12 ++++++++----
+ include/mci.h | 1 +
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
+index b8f71e15986e..5b1aa8dbed87 100644
+--- a/drivers/mci/mci-core.c
++++ b/drivers/mci/mci-core.c
+@@ -1750,10 +1750,13 @@ static int mci_card_probe(struct mci *mci)
+ int i, rc, disknum, ret;
+ bool has_bootpart = false;
+
+- if (host->card_present && !host->card_present(host) &&
+- !host->non_removable) {
+- dev_err(&mci->dev, "no card inserted\n");
+- return -ENODEV;
++ if (host->card_present && !host->card_present(host) && !host->non_removable) {
++ if (!host->broken_cd) {
++ dev_err(&mci->dev, "no card inserted\n");
++ return -ENODEV;
++ }
++
++ dev_info(&mci->dev, "no card inserted (ignoring)\n");
+ }
+
+ ret = regulator_enable(host->supply);
+@@ -2033,6 +2036,7 @@ void mci_of_parse_node(struct mci_host *host,
+ }
+ }
+
++ host->broken_cd = of_property_read_bool(np, "broken-cd");
+ host->non_removable = of_property_read_bool(np, "non-removable");
+ host->no_sd = of_property_read_bool(np, "no-sd");
+ host->disable_wp = of_property_read_bool(np, "disable-wp");
+diff --git a/include/mci.h b/include/mci.h
+index 2098b4fbf084..d949310fac30 100644
+--- a/include/mci.h
++++ b/include/mci.h
+@@ -404,6 +404,7 @@ struct mci_host {
+ unsigned max_req_size;
+ unsigned dsr_val; /**< optional dsr value */
+ int use_dsr; /**< optional dsr usage flag */
++ int broken_cd; /**< card detect is broken */
+ bool non_removable; /**< device is non removable */
+ bool no_sd; /**< do not send SD commands during initialization */
+ bool disable_wp; /**< ignore write-protect detection logic */
+--
+2.30.2
+
diff --git a/configs/platform-v7a/patches/barebox-2022.09.0/0002-mci-core-add-broken_cd-device-parameter.patch b/configs/platform-v7a/patches/barebox-2022.09.0/0002-mci-core-add-broken_cd-device-parameter.patch
new file mode 100644
index 000000000000..b14c1602747d
--- /dev/null
+++ b/configs/platform-v7a/patches/barebox-2022.09.0/0002-mci-core-add-broken_cd-device-parameter.patch
@@ -0,0 +1,46 @@
+From 8d66a16dfd6b5c7e0d39e90954af32667e480074 Mon Sep 17 00:00:00 2001
+From: Ahmad Fatoum <a.fatoum@pengutronix.de>
+Date: Tue, 6 Sep 2022 20:10:37 +0200
+Subject: [PATCH 2/3] mci: core: add broken_cd device parameter
+
+Sometimes a broken card-detect is not a general issue affecting all
+boards, but only a given board. Allow setting broken_cd for such boards
+via a device parameter.
+
+Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
+---
+ drivers/mci/mci-core.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
+index 5b1aa8dbed87..5101ac1d8298 100644
+--- a/drivers/mci/mci-core.c
++++ b/drivers/mci/mci-core.c
+@@ -1919,7 +1919,7 @@ int mci_register(struct mci_host *host)
+ {
+ struct mci *mci;
+ struct device_d *hw_dev;
+- struct param_d *param_probe;
++ struct param_d *param_probe, *param_broken_cd;
+ int ret;
+
+ mci = xzalloc(sizeof(*mci));
+@@ -1963,6 +1963,15 @@ int mci_register(struct mci_host *host)
+ goto err_unregister;
+ }
+
++ param_broken_cd = dev_add_param_bool(&mci->dev, "broken_cd",
++ NULL, NULL, &host->broken_cd, mci);
++
++ if (IS_ERR(param_broken_cd) && PTR_ERR(param_broken_cd) != -ENOSYS) {
++ ret = PTR_ERR(param_broken_cd);
++ dev_dbg(&mci->dev, "Failed to add 'broken_cd' parameter to the MCI device\n");
++ goto err_unregister;
++ }
++
+ if (IS_ENABLED(CONFIG_MCI_INFO))
+ mci->dev.info = mci_info;
+
+--
+2.30.2
+
diff --git a/configs/platform-v7a/patches/barebox-2022.09.0/0003-mci-core-fixup-broken-cd-information-into-kernel-DT.patch b/configs/platform-v7a/patches/barebox-2022.09.0/0003-mci-core-fixup-broken-cd-information-into-kernel-DT.patch
new file mode 100644
index 000000000000..8f2c7767d0d9
--- /dev/null
+++ b/configs/platform-v7a/patches/barebox-2022.09.0/0003-mci-core-fixup-broken-cd-information-into-kernel-DT.patch
@@ -0,0 +1,67 @@
+From 16931f8ef3bc2a5ecce5ae77c33e2b5611ac8d98 Mon Sep 17 00:00:00 2001
+From: Ahmad Fatoum <a.fatoum@pengutronix.de>
+Date: Mon, 25 Jul 2022 13:58:56 +0200
+Subject: [PATCH 3/3] mci: core: fixup broken-cd information into kernel DT
+
+In remote labs co-located with other hardware, we've observed card
+detect levers of different boards to sporadically fail to detect
+the card, e.g. because the cable on the usbsdmux was yanked around
+by accident. When this happens, barebox usually boots up normally as
+the card detect is ignored and then Linux waits indefinitely for
+the card-detect to turn active. We already maintain a broken_cd flag
+for each card. Use this to fixup the kernel DT appropriately.
+
+Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
+---
+ drivers/mci/mci-core.c | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+
+diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
+index 5101ac1d8298..92dbdaf469fd 100644
+--- a/drivers/mci/mci-core.c
++++ b/drivers/mci/mci-core.c
+@@ -1739,6 +1739,31 @@ static int mci_register_partition(struct mci_part *part)
+ return 0;
+ }
+
++static int of_broken_cd_fixup(struct device_node *root, void *ctx)
++{
++ struct mci_host *host = ctx;
++ struct device_d *hw_dev = host->hw_dev;
++ struct device_node *np;
++ char *name;
++
++ if (!host->broken_cd)
++ return 0;
++
++ name = of_get_reproducible_name(hw_dev->device_node);
++ np = of_find_node_by_reproducible_name(root, name);
++ free(name);
++ if (!np) {
++ dev_warn(hw_dev, "Cannot find nodepath %s, cannot fixup\n",
++ hw_dev->device_node->full_name);
++ return -EINVAL;
++ }
++
++ of_property_write_bool(np, "cd-gpios", false);
++ of_property_write_bool(np, "broken-cd", true);
++
++ return 0;
++}
++
+ /**
+ * Probe an MCI card at the given host interface
+ * @param mci MCI device instance
+@@ -1979,6 +2004,9 @@ int mci_register(struct mci_host *host)
+ if (IS_ENABLED(CONFIG_MCI_STARTUP))
+ mci_card_probe(mci);
+
++ if (!host->no_sd && dev_of_node(host->hw_dev))
++ of_register_fixup(of_broken_cd_fixup, host);
++
+ list_add_tail(&mci->list, &mci_list);
+
+ return 0;
+--
+2.30.2
+
diff --git a/configs/platform-v7a/patches/barebox-2022.09.0/series b/configs/platform-v7a/patches/barebox-2022.09.0/series
index 073642265726..26c8a02e7caa 100644
--- a/configs/platform-v7a/patches/barebox-2022.09.0/series
+++ b/configs/platform-v7a/patches/barebox-2022.09.0/series
@@ -1 +1,3 @@
-0001-mci-add-new-MCI_BROKEN_CD-option-for-testing.patch
+0001-mci-core-act-upon-broken-cd-device-tree-property.patch
+0002-mci-core-add-broken_cd-device-parameter.patch
+0003-mci-core-fixup-broken-cd-information-into-kernel-DT.patch
--
2.30.2
next prev parent reply other threads:[~2022-09-30 16:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-30 16:21 [DistroKit] [PATCH 00/10] v7a: add Raspberry Pi 4 32-bit support Ahmad Fatoum
2022-09-30 16:21 ` [DistroKit] [PATCH 01/10] v7a: barebox: version bump v2022.06.0 → v2022.09.0 Ahmad Fatoum
2022-09-30 16:21 ` Ahmad Fatoum [this message]
2022-09-30 16:21 ` [DistroKit] [PATCH 03/10] v7a: rpi2: move rpi-firmware directory to top-level workspace Ahmad Fatoum
2022-09-30 16:21 ` [DistroKit] [PATCH 04/10] rpi-firmware: Update firmware to v1.20220331 for Rpi4 support Ahmad Fatoum
2022-09-30 16:21 ` [DistroKit] [PATCH 05/10] barebox: deploy new barebox-raspberry-pi.img Ahmad Fatoum
2022-09-30 16:21 ` [DistroKit] [PATCH 06/10] v7a: kernel: configure for 32-bit Raspberry Pi 4 support Ahmad Fatoum
2022-09-30 16:21 ` [DistroKit] [PATCH 07/10] v7a: dts: build Raspberry Pi 4 device trees Ahmad Fatoum
2022-09-30 16:21 ` [DistroKit] [PATCH 08/10] v7a: rpi4: add boot loader spec support Ahmad Fatoum
2022-09-30 16:21 ` [DistroKit] [PATCH 09/10] v7a: rpi4: place DT into /boot for VideoCore consumption Ahmad Fatoum
2022-09-30 16:21 ` [DistroKit] [PATCH 10/10] v7a: barebox: enable of_diff command Ahmad Fatoum
2022-09-30 16:55 ` [DistroKit] [PATCH 00/10] v7a: add Raspberry Pi 4 32-bit support Robert Schwebel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220930162159.814389-3-a.fatoum@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=distrokit@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox