mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way
@ 2026-11-09 21:07 Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 01/11] PCI: Free device name when pci_setup_device() fails Ilpo Järvinen
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki
  Cc: linux-kernel, Ilpo Järvinen, Adrian Hunter, Alex Dubov,
	Dominik Brodowski, linux1394-devel, linux-mmc, Maxim Levitsky,
	Sascha Sommer, Takashi Sakamoto, Ulf Hansson

Hi all,
 
When CARDBUS=n, there are still leftovers in the bridge setup code that
add annoying corner cases by confusing CardBus bridges with normal PCI
devices. This series attempts to truly disable CardBus bridges when
config asks to do so as it seems the most reasonable way to prevent
those corner cases. That is, this series removes ability to select only
"partial CardBus support", full support for CardBus remains in kernel
and can still be enabled with CONFIG_CARDBUS. The alternative to this
would be to sprinkle pci_is_cardbus_bridge() everywhere to work around
the corner case is not reasonable given CardBus is quite old and rarely
used legacy technology.
 
Disabling CARDBUS also implies the entire Multi-Function Device is lost
because CardBus bridge at Function 0 gates enumeration of the rest of
the functions that are not CardBus related (multiple drivers affected).
This is intentionally not addressed with Kconfig dependencies; see the
changelogs for the rationale. Towards the end, part of the patches are
marked as RFC because they might have an impact on existing configs for
that reason.

The series first fixes a few issues in PCI core and CardBus integration
(4 patches, the first one is totally unrelated to CardBus but CardBus
integration will use the same label in a later change). The fixes can
be applied on their own if needed. After that, there are some
preparatory changes and the main move of CardBus setup into
setup-cardbus.c. Finally, the series moves a few CardBus specific
quirks and the resource name getter into setup-cardbus.c to keep them
out of the other PCI core code.


Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alex Dubov <oakad@yahoo.com>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: linux1394-devel@lists.sourceforge.net
Cc: linux-mmc@vger.kernel.org
Cc: "Maciej W. Rozycki" <macro@orcam.me.uk>
Cc: Maxim Levitsky <maximlevitsky@gmail.com>
Cc: Sascha Sommer <saschasommer@freenet.de>
Cc: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Cc: Ulf Hansson <ulfh@kernel.org>


Ilpo Järvinen (11):
  PCI: Free device name when pci_setup_device() fails
  PCI: Use Header Type in __pci_bridge_assign_resources()
  PCI: Use Header Type to detect CardBus bridges in
    pci_resource_alignment()
  PCI: Fix off-by-one in CardBus resource names
  PCI: Move pci_read_bases() wrapper with BUILD_BUG_ON() to pci.h
  mmc: sdricoh_cs: Depend on CARDBUS
  pcmcia: yenta_socket: Always select CARDBUS
  PCI: Move CardBus device setup to setup-cardbus.c
  PCI: Move CardBus legacy mode quirk to setup-cardbus.c
  PCI: Move Ricoh RL5C476 MMC quirk to setup-cardbus.c
  PCI: Move CardBus resource names to setup-cardbus.c

 drivers/mmc/host/Kconfig    |  2 +-
 drivers/pci/pci.c           | 25 +---------
 drivers/pci/pci.h           | 23 ++++++++-
 drivers/pci/probe.c         | 27 +++++-----
 drivers/pci/quirks.c        | 45 -----------------
 drivers/pci/setup-bus.c     |  6 +--
 drivers/pci/setup-cardbus.c | 99 +++++++++++++++++++++++++++++++++++++
 drivers/pci/setup-res.c     |  2 +-
 drivers/pcmcia/Kconfig      |  2 +-
 9 files changed, 144 insertions(+), 87 deletions(-)


base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 01/11] PCI: Free device name when pci_setup_device() fails
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 02/11] PCI: Use Header Type in __pci_bridge_assign_resources() Ilpo Järvinen
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, Kay Sievers,
	Greg Kroah-Hartman, linux-kernel
  Cc: Ilpo Järvinen, stable

pci_setup_device() calls dev_set_name(), which allocates the name, before
it can fail on an unknown Header Type. Its callers then free the device
with kfree() because device_initialize() has not yet been called, so the
name is never freed.

Free the name in the error path of pci_setup_device().

Fixes: 1fa5ae857bb1 ("driver core: get rid of struct device's bus_id string array")
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Cc: stable@vger.kernel.org
---

CardBus disabled case will reuse the same label after the move, thus
add the rollback path in this patch.

 drivers/pci/probe.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 9a178e0e5f7f..1c2caf3ce664 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -2194,8 +2194,8 @@ int pci_setup_device(struct pci_dev *dev)
 	default:				    /* unknown header */
 		pci_err(dev, "unknown header type %02x, ignoring device\n",
 			dev->hdr_type);
-		pci_release_of_node(dev);
-		return -EIO;
+		err = -EIO;
+		goto free_name;
 
 	bad:
 		pci_err(dev, "ignoring class %#08x (doesn't match header type %02x)\n",
@@ -2205,6 +2205,11 @@ int pci_setup_device(struct pci_dev *dev)
 
 	/* We found a fine healthy device, go go go... */
 	return 0;
+
+free_name:
+	kfree_const(dev->dev.kobj.name);
+	pci_release_of_node(dev);
+	return err;
 }
 
 static void pci_configure_mps(struct pci_dev *dev)
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 02/11] PCI: Use Header Type in __pci_bridge_assign_resources()
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 01/11] PCI: Free device name when pci_setup_device() fails Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 03/11] PCI: Use Header Type to detect CardBus bridges in pci_resource_alignment() Ilpo Järvinen
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, linux-kernel
  Cc: Ilpo Järvinen, stable

Commit b2fb5cc57469 ("PCI: Rely on config space header type, not class
code") converted bridge window sizing and assignment to use the Header
Type but __pci_bridge_assign_resources() still uses the Class Code to
decide how to program the bridge windows. A Type 1 bridge whose Class
Code is not PCI_CLASS_BRIDGE_PCI gets its windows sized and assigned but
they are never programmed into the bridge.

Use the Header Type also in __pci_bridge_assign_resources().

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Cc: stable@vger.kernel.org
---

I don't have known failure to point to with this, thus I've not added the
Fixes tag (the commit ref is available in the changelog if it's needed).

 drivers/pci/setup-bus.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index ed16ef7c26fa..6209773a35f1 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -1636,12 +1636,12 @@ static void __pci_bridge_assign_resources(struct pci_dev *bridge,
 
 	__pci_bus_assign_resources(b, add_list, fail_head);
 
-	switch (bridge->class >> 8) {
-	case PCI_CLASS_BRIDGE_PCI:
+	switch (bridge->hdr_type) {
+	case PCI_HEADER_TYPE_BRIDGE:
 		pci_setup_bridge(b);
 		break;
 
-	case PCI_CLASS_BRIDGE_CARDBUS:
+	case PCI_HEADER_TYPE_CARDBUS:
 		pci_setup_cardbus_bridge(b);
 		break;
 
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 03/11] PCI: Use Header Type to detect CardBus bridges in pci_resource_alignment()
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 01/11] PCI: Free device name when pci_setup_device() fails Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 02/11] PCI: Use Header Type in __pci_bridge_assign_resources() Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 04/11] PCI: Fix off-by-one in CardBus resource names Ilpo Järvinen
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, Ilpo Järvinen,
	linux-kernel
  Cc: stable

pci_resource_alignment() detects CardBus bridges by the Class Code while
the rest of the PCI core uses the Header Type.

When CONFIG_CARDBUS is not set, pci_cardbus_resource_alignment() returns
zero. A non-CardBus device that reports the CardBus Class Code then gets
zero alignment for all its resources, and pbus_size_mem() calls __ffs()
on it, which is undefined behavior. When CARDBUS is set, the device gets
CardBus window alignment instead of its own alignment.

Use pci_is_cardbus_bridge() in pci_resource_alignment() and make it take
a const pointer as pci_resource_alignment() has one.

Fixes: fd29d4ea09ba ("PCI: Separate CardBus setup & build it only with CONFIG_CARDBUS")
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Cc: stable@vger.kernel.org
---
 drivers/pci/pci.h       | 2 +-
 drivers/pci/setup-res.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 77efa4c5c960..519918e24cc5 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -419,7 +419,7 @@ extern unsigned long pci_hotplug_mmio_size;
 extern unsigned long pci_hotplug_mmio_pref_size;
 extern unsigned long pci_hotplug_bus_size;
 
-static inline bool pci_is_cardbus_bridge(struct pci_dev *dev)
+static inline bool pci_is_cardbus_bridge(const struct pci_dev *dev)
 {
 	return dev->hdr_type == PCI_HEADER_TYPE_CARDBUS;
 }
diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
index 376f09630a4a..d8d53861b4a6 100644
--- a/drivers/pci/setup-res.c
+++ b/drivers/pci/setup-res.c
@@ -255,7 +255,7 @@ resource_size_t pci_resource_alignment(const struct pci_dev *dev,
 
 	if (pci_resource_is_iov(resno))
 		return pci_sriov_resource_alignment(dev, resno);
-	if (dev->class >> 8 == PCI_CLASS_BRIDGE_CARDBUS)
+	if (pci_is_cardbus_bridge(dev))
 		return pci_cardbus_resource_alignment(res);
 	return resource_alignment(res);
 }
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 04/11] PCI: Fix off-by-one in CardBus resource names
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
                   ` (2 preceding siblings ...)
  2026-11-09 21:07 ` [PATCH 03/11] PCI: Use Header Type to detect CardBus bridges in pci_resource_alignment() Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 05/11] PCI: Move pci_read_bases() wrapper with BUILD_BUG_ON() to pci.h Ilpo Järvinen
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, Puranjay Mohan,
	linux-kernel
  Cc: Ilpo Järvinen, stable

cardbus_name[] in pci_resource_name() has no entry for resource index 6
(PCI_ROM_RESOURCE). As a result, all names after it are off by one: the
last non-window resource is named "CardBus bridge window 0", each
CardBus bridge window is given the name of the preceding window, and
PCI_CB_BRIDGE_MEM_1_WINDOW falls outside the array.

Add the missing entry.

Fixes: 65f8e0beac5a ("PCI: Update BAR # and window messages")
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Cc: stable@vger.kernel.org
---
 drivers/pci/pci.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 7c6f2aba8144..46da873c9aac 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -839,6 +839,7 @@ const char *pci_resource_name(struct pci_dev *dev, unsigned int i)
 		"unknown",
 		"unknown",
 		"unknown",
+		"unknown",
 #ifdef CONFIG_PCI_IOV
 		"unknown",
 		"unknown",
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 05/11] PCI: Move pci_read_bases() wrapper with BUILD_BUG_ON() to pci.h
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
                   ` (3 preceding siblings ...)
  2026-11-09 21:07 ` [PATCH 04/11] PCI: Fix off-by-one in CardBus resource names Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 06/11] mmc: sdricoh_cs: Depend on CARDBUS Ilpo Järvinen
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, linux-kernel
  Cc: Ilpo Järvinen

pci_read_bases() is static in probe.c. An upcoming change moves CardBus
device setup into setup-cardbus.c, which needs to read the CardBus
BAR from outside probe.c.

Move the body of pci_read_bases() into __pci_read_bases() and keep the
BUILD_BUG_ON() check in an __always_inline pci_read_bases() wrapper in
pci.h so all callers retain the check.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
 drivers/pci/pci.h   | 10 ++++++++++
 drivers/pci/probe.c |  5 +----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 519918e24cc5..798b31c31ae4 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -532,6 +532,16 @@ void __pci_size_stdbars(struct pci_dev *dev, int count,
 			unsigned int pos, u32 *sizes);
 int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
 		    struct resource *res, unsigned int reg, u32 *sizes);
+void __pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom);
+
+static __always_inline void pci_read_bases(struct pci_dev *dev,
+					   unsigned int howmany, int rom)
+{
+	BUILD_BUG_ON(statically_true(howmany > PCI_STD_NUM_BARS));
+
+	__pci_read_bases(dev, howmany, rom);
+}
+
 void pci_configure_ari(struct pci_dev *dev);
 
 int pci_dev_res_add_to_list(struct list_head *head, struct pci_dev *dev,
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 1c2caf3ce664..a20ceaf7307a 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -322,15 +322,12 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
 	return (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
 }
 
-static __always_inline void pci_read_bases(struct pci_dev *dev,
-					   unsigned int howmany, int rom)
+void __pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
 {
 	u32 rombar, stdbars[PCI_STD_NUM_BARS];
 	unsigned int pos, reg;
 	u16 orig_cmd;
 
-	BUILD_BUG_ON(statically_true(howmany > PCI_STD_NUM_BARS));
-
 	if (dev->non_compliant_bars)
 		return;
 
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 06/11] mmc: sdricoh_cs: Depend on CARDBUS
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
                   ` (4 preceding siblings ...)
  2026-11-09 21:07 ` [PATCH 05/11] PCI: Move pci_read_bases() wrapper with BUILD_BUG_ON() to pci.h Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [RFC PATCH 07/11] pcmcia: yenta_socket: Always select CARDBUS Ilpo Järvinen
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, Ulf Hansson,
	linux-mmc, linux-kernel
  Cc: Ilpo Järvinen, Sascha Sommer, Dominik Brodowski

sdricoh_cs accesses the SD controller through the PCI device of the
Ricoh RL5C476 CardBus bridge. An upcoming change makes the PCI core
ignore CardBus bridges when CONFIG_CARDBUS is not set, so the driver
would no longer find the controller.

Make MMC_SDRICOH_CS depend on CARDBUS.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
Cc: Ulf Hansson <ulfh@kernel.org>
Cc: Sascha Sommer <saschasommer@freenet.de>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: linux-mmc@vger.kernel.org

 drivers/mmc/host/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
index 79bfc425e7c7..6b18b66c10b4 100644
--- a/drivers/mmc/host/Kconfig
+++ b/drivers/mmc/host/Kconfig
@@ -692,7 +692,7 @@ config MMC_SPI
 
 config MMC_SDRICOH_CS
 	tristate "MMC/SD driver for Ricoh Bay1Controllers"
-	depends on PCI && PCMCIA
+	depends on PCI && PCMCIA && CARDBUS
 	help
 	  Say Y here if your Notebook reports a Ricoh Bay1Controller PCMCIA
 	  card whenever you insert a MMC or SD card into the card slot.
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [RFC PATCH 07/11] pcmcia: yenta_socket: Always select CARDBUS
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
                   ` (5 preceding siblings ...)
  2026-11-09 21:07 ` [PATCH 06/11] mmc: sdricoh_cs: Depend on CARDBUS Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [RFC PATCH 08/11] PCI: Move CardBus device setup to setup-cardbus.c Ilpo Järvinen
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, Dominik Brodowski,
	linux-kernel
  Cc: Ilpo Järvinen

YENTA selects CARDBUS unless EXPERT is set, so with EXPERT, yenta_socket
can be used without CARDBUS to support 16-bit PC Cards in the slot of a
CardBus bridge. An upcoming change makes the PCI core ignore CardBus
bridges when CONFIG_CARDBUS is not set effectively removing "partial
CardBus support" from kernel, which leaves yenta_socket with no device
to bind to.

Select CARDBUS also when EXPERT is set.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: linux-kernel@vger.kernel.org

 drivers/pcmcia/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig
index d1d25aa296ad..92c34553b1ba 100644
--- a/drivers/pcmcia/Kconfig
+++ b/drivers/pcmcia/Kconfig
@@ -73,7 +73,7 @@ comment "PC-card bridges"
 config YENTA
 	tristate "CardBus yenta-compatible bridge support"
 	depends on PCI
-	select CARDBUS if !EXPERT
+	select CARDBUS
 	select PCCARD_NONSTATIC if PCMCIA != n
 	help
 	  This option enables support for CardBus host bridges.  Virtually
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [RFC PATCH 08/11] PCI: Move CardBus device setup to setup-cardbus.c
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
                   ` (6 preceding siblings ...)
  2026-11-09 21:07 ` [RFC PATCH 07/11] pcmcia: yenta_socket: Always select CARDBUS Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 09/11] PCI: Move CardBus legacy mode quirk " Ilpo Järvinen
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, linux-kernel
  Cc: Ilpo Järvinen, Dominik Brodowski, Ulf Hansson,
	Adrian Hunter, Takashi Sakamoto, Alex Dubov, Maxim Levitsky,
	linux-mmc, linux1394-devel

CardBus support can be disabled with CONFIG_CARDBUS, but
pci_setup_device() still sets up CardBus bridges regardless of it. This
inconsistency leads to a few corner cases in the resource sizing and
assignment algorithm where CardBus bridges are treated like normal PCI
devices.

Move the CardBus-specific part of pci_setup_device() into
pci_setup_cardbus_device() in setup-cardbus.c and ignore CardBus bridges
when CARDBUS is not set.

If a CardBus bridge that is Function 0 of a Multi-Function Device is
ignored, pci_scan_slot() does not enumerate the other Functions either.
Without CARDBUS, this makes the other Functions of CardBus combo chips
unusable, e.g., the SD controller of the Ricoh RL5C476 (sdhci-pci), and
the FireWire (firewire-ohci), Flash Media (tifm_7xx1), and SD
(sdhci-pci) controllers of the TI PCIxx21. Making those drivers depend
on CARDBUS would force CardBus also on users of chips without CardBus,
e.g., the SD controller of the Ricoh R5C832 family, where Function 0 is
a FireWire controller.

CARDBUS defaults to y if CONFIG_PCCARD is enabled and the yenta_socket
driver (CONFIG_YENTA) selects it, so CARDBUS=n on hardware with a
CardBus slot is most likely an intentional choice. It seems reasonable
to require users with such an exceptional config to enable CARDBUS to
keep using the drivers above with this legacy hardware.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---

Cc: "Maciej W. Rozycki" <macro@orcam.me.uk>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: Ulf Hansson <ulfh@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Cc: Alex Dubov <oakad@yahoo.com>
Cc: Maxim Levitsky <maximlevitsky@gmail.com>
Cc: linux-mmc@vger.kernel.org
Cc: linux1394-devel@lists.sourceforge.net

 drivers/pci/pci.h           |  6 ++++++
 drivers/pci/probe.c         | 13 +++++++------
 drivers/pci/setup-cardbus.c | 13 +++++++++++++
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 798b31c31ae4..057c8a2c7ee7 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -425,6 +425,7 @@ static inline bool pci_is_cardbus_bridge(const struct pci_dev *dev)
 }
 #ifdef CONFIG_CARDBUS
 unsigned long pci_cardbus_resource_alignment(const struct resource *res);
+int pci_setup_cardbus_device(struct pci_dev *dev);
 int pci_bus_size_cardbus_bridge(struct pci_bus *bus,
 				struct list_head *realloc_head);
 int pci_cardbus_scan_bridge_extend(struct pci_bus *bus, struct pci_dev *dev,
@@ -437,6 +438,10 @@ static inline unsigned long pci_cardbus_resource_alignment(const struct resource
 {
 	return 0;
 }
+static inline int pci_setup_cardbus_device(struct pci_dev *dev)
+{
+	return -EOPNOTSUPP;
+}
 static inline int pci_bus_size_cardbus_bridge(struct pci_bus *bus,
 					      struct list_head *realloc_head)
 {
@@ -528,6 +533,7 @@ bool pci_bus_generic_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *pl,
 					int rrs_timeout);
 
 int pci_setup_device(struct pci_dev *dev);
+void pci_read_irq(struct pci_dev *dev);
 void __pci_size_stdbars(struct pci_dev *dev, int count,
 			unsigned int pos, u32 *sizes);
 int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index a20ceaf7307a..f7afbaac723d 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1599,7 +1599,7 @@ EXPORT_SYMBOL(pci_scan_bridge);
  * Read interrupt line and base address registers.
  * The architecture-dependent code can tweak these, of course.
  */
-static void pci_read_irq(struct pci_dev *dev)
+void pci_read_irq(struct pci_dev *dev)
 {
 	unsigned char irq;
 
@@ -2180,12 +2180,13 @@ int pci_setup_device(struct pci_dev *dev)
 		break;
 
 	case PCI_HEADER_TYPE_CARDBUS:		    /* CardBus bridge header */
-		if (class != PCI_CLASS_BRIDGE_CARDBUS)
+		err = pci_setup_cardbus_device(dev);
+		if (err == -EOPNOTSUPP) {
+			pci_err(dev, "CONFIG_CARDBUS not set, ignoring CardBus bridge\n");
+			goto free_name;
+		}
+		if (err)
 			goto bad;
-		pci_read_irq(dev);
-		pci_read_bases(dev, 1, 0);
-		pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
-		pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
 		break;
 
 	default:				    /* unknown header */
diff --git a/drivers/pci/setup-cardbus.c b/drivers/pci/setup-cardbus.c
index dcb8e2b3f73b..0de82d7fde68 100644
--- a/drivers/pci/setup-cardbus.c
+++ b/drivers/pci/setup-cardbus.c
@@ -31,6 +31,19 @@ unsigned long pci_cardbus_resource_alignment(const struct resource *res)
 	return 0;
 }
 
+int pci_setup_cardbus_device(struct pci_dev *dev)
+{
+	if (dev->class >> 8 != PCI_CLASS_BRIDGE_CARDBUS)
+		return -EIO;
+
+	pci_read_irq(dev);
+	pci_read_bases(dev, 1, 0);
+	pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
+	pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
+
+	return 0;
+}
+
 int pci_bus_size_cardbus_bridge(struct pci_bus *bus,
 				struct list_head *realloc_head)
 {
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 09/11] PCI: Move CardBus legacy mode quirk to setup-cardbus.c
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
                   ` (7 preceding siblings ...)
  2026-11-09 21:07 ` [RFC PATCH 08/11] PCI: Move CardBus device setup to setup-cardbus.c Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [RFC PATCH 10/11] PCI: Move Ricoh RL5C476 MMC " Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 11/11] PCI: Move CardBus resource names " Ilpo Järvinen
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, linux-kernel
  Cc: Ilpo Järvinen, Dominik Brodowski

quirk_cardbus_legacy() disables the legacy i82365 mode of CardBus
bridges. It was originally applied even without CardBus support to keep
the i82365 driver away from CardBus bridges, but that driver was removed
by commit b3c26ea81ccc ("pcmcia: remove obsolete host controller
drivers").

CardBus bridges are no longer set up when CONFIG_CARDBUS is not set, so
the quirk only matters with CARDBUS. Move it to setup-cardbus.c.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---

Cc: Dominik Brodowski <linux@dominikbrodowski.net>

 drivers/pci/quirks.c        | 13 -------------
 drivers/pci/setup-cardbus.c | 15 +++++++++++++++
 2 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 7f1f47ea2ee4..78f6df5d4d19 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1286,19 +1286,6 @@ static void quirk_vt82c598_id(struct pci_dev *dev)
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_82C597_0,	quirk_vt82c598_id);
 
-/*
- * CardBus controllers have a legacy base address that enables them to
- * respond as i82365 PCMCIA controllers.  We don't want them to do this.
- */
-static void quirk_cardbus_legacy(struct pci_dev *dev)
-{
-	pci_write_config_dword(dev, PCI_CB_LEGACY_MODE_BASE, 0);
-}
-DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
-			PCI_CLASS_BRIDGE_CARDBUS, 8, quirk_cardbus_legacy);
-DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY(PCI_ANY_ID, PCI_ANY_ID,
-			PCI_CLASS_BRIDGE_CARDBUS, 8, quirk_cardbus_legacy);
-
 /*
  * Following the PCI ordering rules is optional on the AMD762. I'm not sure
  * what the designers were smoking but let's not inhale...
diff --git a/drivers/pci/setup-cardbus.c b/drivers/pci/setup-cardbus.c
index 0de82d7fde68..ef35393aca1b 100644
--- a/drivers/pci/setup-cardbus.c
+++ b/drivers/pci/setup-cardbus.c
@@ -316,3 +316,18 @@ int pci_cardbus_scan_bridge_extend(struct pci_bus *bus, struct pci_dev *dev,
 
 	return max;
 }
+
+#ifdef CONFIG_PCI_QUIRKS
+/*
+ * CardBus controllers have a legacy base address that enables them to
+ * respond as i82365 PCMCIA controllers.  We don't want them to do this.
+ */
+static void quirk_cardbus_legacy(struct pci_dev *dev)
+{
+	pci_write_config_dword(dev, PCI_CB_LEGACY_MODE_BASE, 0);
+}
+DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
+			PCI_CLASS_BRIDGE_CARDBUS, 8, quirk_cardbus_legacy);
+DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY(PCI_ANY_ID, PCI_ANY_ID,
+			PCI_CLASS_BRIDGE_CARDBUS, 8, quirk_cardbus_legacy);
+#endif /* CONFIG_PCI_QUIRKS */
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [RFC PATCH 10/11] PCI: Move Ricoh RL5C476 MMC quirk to setup-cardbus.c
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
                   ` (8 preceding siblings ...)
  2026-11-09 21:07 ` [PATCH 09/11] PCI: Move CardBus legacy mode quirk " Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  2026-11-09 21:07 ` [PATCH 11/11] PCI: Move CardBus resource names " Ilpo Järvinen
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, linux-kernel
  Cc: Ilpo Järvinen, Maxim Levitsky, Ulf Hansson, Adrian Hunter,
	linux-mmc

ricoh_mmc_fixup_rl5c476() disables the proprietary MMC controller of the
Ricoh RL5C476 through Function 0 of the chip, which is a CardBus bridge.
When CONFIG_CARDBUS is not set, CardBus bridges are ignored and, as
Function 0 is then missing, pci_scan_slot() does not enumerate the other
Functions of the chip either. The quirk has nothing to do in that case.

Move the quirk to setup-cardbus.c so it is only built with CARDBUS.
CARDBUS defaults to y when CONFIG_PCCARD is enabled, so existing configs
for systems with these chips should mostly keep the quirk.

CONFIG_MMC_RICOH_MMC is an option of the SDHCI PCI card reader driver
(CONFIG_MMC_SDHCI_PCI), which drives the SD controller of both the
RL5C476 and the R5C832 family. On the R5C832 family, the MMC controller
is disabled through the FireWire Function, which does not need CardBus.
Thus, do not make MMC_RICOH_MMC depend on CARDBUS.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---

Cc: Maxim Levitsky <maximlevitsky@gmail.com>
Cc: Ulf Hansson <ulfh@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: linux-mmc@vger.kernel.org

 drivers/pci/quirks.c        | 32 -----------------------------
 drivers/pci/setup-cardbus.c | 41 +++++++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 32 deletions(-)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 78f6df5d4d19..85b4c39617a6 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -3320,38 +3320,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_HINT, 0x0020, quirk_hotplug_bridge);
  * #1, and this will confuse the PCI core.
  */
 #ifdef CONFIG_MMC_RICOH_MMC
-static void ricoh_mmc_fixup_rl5c476(struct pci_dev *dev)
-{
-	u8 write_enable;
-	u8 write_target;
-	u8 disable;
-
-	/*
-	 * Disable via CardBus interface
-	 *
-	 * This must be done via function #0
-	 */
-	if (PCI_FUNC(dev->devfn))
-		return;
-
-	pci_read_config_byte(dev, 0xB7, &disable);
-	if (disable & 0x02)
-		return;
-
-	pci_read_config_byte(dev, 0x8E, &write_enable);
-	pci_write_config_byte(dev, 0x8E, 0xAA);
-	pci_read_config_byte(dev, 0x8D, &write_target);
-	pci_write_config_byte(dev, 0x8D, 0xB7);
-	pci_write_config_byte(dev, 0xB7, disable | 0x02);
-	pci_write_config_byte(dev, 0x8E, write_enable);
-	pci_write_config_byte(dev, 0x8D, write_target);
-
-	pci_notice(dev, "proprietary Ricoh MMC controller disabled (via CardBus function)\n");
-	pci_notice(dev, "MMC cards are now supported by standard SDHCI controller\n");
-}
-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, ricoh_mmc_fixup_rl5c476);
-DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, ricoh_mmc_fixup_rl5c476);
-
 static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
 {
 	u8 write_enable;
diff --git a/drivers/pci/setup-cardbus.c b/drivers/pci/setup-cardbus.c
index ef35393aca1b..33aca7b28354 100644
--- a/drivers/pci/setup-cardbus.c
+++ b/drivers/pci/setup-cardbus.c
@@ -330,4 +330,45 @@ DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_ANY_ID, PCI_ANY_ID,
 			PCI_CLASS_BRIDGE_CARDBUS, 8, quirk_cardbus_legacy);
 DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY(PCI_ANY_ID, PCI_ANY_ID,
 			PCI_CLASS_BRIDGE_CARDBUS, 8, quirk_cardbus_legacy);
+
+#ifdef CONFIG_MMC_RICOH_MMC
+/*
+ * Disable the proprietary Ricoh MMC controller on chips whose function 0
+ * is a CardBus bridge. See ricoh_mmc_fixup_r5c832() in quirks.c for
+ * details.
+ */
+static void ricoh_mmc_fixup_rl5c476(struct pci_dev *dev)
+{
+	u8 write_enable;
+	u8 write_target;
+	u8 disable;
+
+	/*
+	 * Disable via CardBus interface
+	 *
+	 * This must be done via function #0
+	 */
+	if (PCI_FUNC(dev->devfn))
+		return;
+
+	pci_read_config_byte(dev, 0xB7, &disable);
+	if (disable & 0x02)
+		return;
+
+	pci_read_config_byte(dev, 0x8E, &write_enable);
+	pci_write_config_byte(dev, 0x8E, 0xAA);
+	pci_read_config_byte(dev, 0x8D, &write_target);
+	pci_write_config_byte(dev, 0x8D, 0xB7);
+	pci_write_config_byte(dev, 0xB7, disable | 0x02);
+	pci_write_config_byte(dev, 0x8E, write_enable);
+	pci_write_config_byte(dev, 0x8D, write_target);
+
+	pci_notice(dev, "proprietary Ricoh MMC controller disabled (via CardBus function)\n");
+	pci_notice(dev, "MMC cards are now supported by standard SDHCI controller\n");
+}
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476,
+			ricoh_mmc_fixup_rl5c476);
+DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476,
+			       ricoh_mmc_fixup_rl5c476);
+#endif /* CONFIG_MMC_RICOH_MMC */
 #endif /* CONFIG_PCI_QUIRKS */
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 11/11] PCI: Move CardBus resource names to setup-cardbus.c
  2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
                   ` (9 preceding siblings ...)
  2026-11-09 21:07 ` [RFC PATCH 10/11] PCI: Move Ricoh RL5C476 MMC " Ilpo Järvinen
@ 2026-11-09 21:07 ` Ilpo Järvinen
  10 siblings, 0 replies; 12+ messages in thread
From: Ilpo Järvinen @ 2026-11-09 21:07 UTC (permalink / raw)
  To: linux-pci, Bjorn Helgaas, Maciej W. Rozycki, linux-kernel
  Cc: Ilpo Järvinen

pci_resource_name() contains a table of resource names specific to
CardBus bridges. Move the CardBus-specific part into
pci_cardbus_resource_name() in setup-cardbus.c to make the core code
cleaner.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
 drivers/pci/pci.c           | 26 ++------------------------
 drivers/pci/pci.h           |  5 +++++
 drivers/pci/setup-cardbus.c | 30 ++++++++++++++++++++++++++++++
 3 files changed, 37 insertions(+), 24 deletions(-)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 46da873c9aac..e6c5a2d28abf 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -832,31 +832,9 @@ const char *pci_resource_name(struct pci_dev *dev, unsigned int i)
 		"bridge window",	/* "mem" included in %pR */
 		"bridge window",	/* "mem pref" included in %pR */
 	};
-	static const char * const cardbus_name[] = {
-		"BAR 1",
-		"unknown",
-		"unknown",
-		"unknown",
-		"unknown",
-		"unknown",
-		"unknown",
-#ifdef CONFIG_PCI_IOV
-		"unknown",
-		"unknown",
-		"unknown",
-		"unknown",
-		"unknown",
-		"unknown",
-#endif
-		"CardBus bridge window 0",	/* I/O */
-		"CardBus bridge window 1",	/* I/O */
-		"CardBus bridge window 0",	/* mem */
-		"CardBus bridge window 1",	/* mem */
-	};
 
-	if (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS &&
-	    i < ARRAY_SIZE(cardbus_name))
-		return cardbus_name[i];
+	if (pci_is_cardbus_bridge(dev))
+		return pci_cardbus_resource_name(i);
 
 	if (i < ARRAY_SIZE(bar_name))
 		return bar_name[i];
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 057c8a2c7ee7..eefa5a2937c1 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -426,6 +426,7 @@ static inline bool pci_is_cardbus_bridge(const struct pci_dev *dev)
 #ifdef CONFIG_CARDBUS
 unsigned long pci_cardbus_resource_alignment(const struct resource *res);
 int pci_setup_cardbus_device(struct pci_dev *dev);
+const char *pci_cardbus_resource_name(unsigned int resno);
 int pci_bus_size_cardbus_bridge(struct pci_bus *bus,
 				struct list_head *realloc_head);
 int pci_cardbus_scan_bridge_extend(struct pci_bus *bus, struct pci_dev *dev,
@@ -442,6 +443,10 @@ static inline int pci_setup_cardbus_device(struct pci_dev *dev)
 {
 	return -EOPNOTSUPP;
 }
+static inline const char *pci_cardbus_resource_name(unsigned int resno)
+{
+	return "unsupported";
+}
 static inline int pci_bus_size_cardbus_bridge(struct pci_bus *bus,
 					      struct list_head *realloc_head)
 {
diff --git a/drivers/pci/setup-cardbus.c b/drivers/pci/setup-cardbus.c
index 33aca7b28354..9acbf299c3a3 100644
--- a/drivers/pci/setup-cardbus.c
+++ b/drivers/pci/setup-cardbus.c
@@ -44,6 +44,36 @@ int pci_setup_cardbus_device(struct pci_dev *dev)
 	return 0;
 }
 
+const char *pci_cardbus_resource_name(unsigned int resno)
+{
+	static const char * const cardbus_name[] = {
+		"BAR 1",
+		"unknown",
+		"unknown",
+		"unknown",
+		"unknown",
+		"unknown",
+		"unknown",
+#ifdef CONFIG_PCI_IOV
+		"unknown",
+		"unknown",
+		"unknown",
+		"unknown",
+		"unknown",
+		"unknown",
+#endif
+		"CardBus bridge window 0",	/* I/O */
+		"CardBus bridge window 1",	/* I/O */
+		"CardBus bridge window 0",	/* mem */
+		"CardBus bridge window 1",	/* mem */
+	};
+
+	if (resno < ARRAY_SIZE(cardbus_name))
+		return cardbus_name[resno];
+
+	return "unknown";
+}
+
 int pci_bus_size_cardbus_bridge(struct pci_bus *bus,
 				struct list_head *realloc_head)
 {
-- 
2.47.3


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-11-09 21:09 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-09 21:07 [PATCH 00/11] PCI/CardBus: Disable properly when CARDBUS=n & fix some issues along the way Ilpo Järvinen
2026-11-09 21:07 ` [PATCH 01/11] PCI: Free device name when pci_setup_device() fails Ilpo Järvinen
2026-11-09 21:07 ` [PATCH 02/11] PCI: Use Header Type in __pci_bridge_assign_resources() Ilpo Järvinen
2026-11-09 21:07 ` [PATCH 03/11] PCI: Use Header Type to detect CardBus bridges in pci_resource_alignment() Ilpo Järvinen
2026-11-09 21:07 ` [PATCH 04/11] PCI: Fix off-by-one in CardBus resource names Ilpo Järvinen
2026-11-09 21:07 ` [PATCH 05/11] PCI: Move pci_read_bases() wrapper with BUILD_BUG_ON() to pci.h Ilpo Järvinen
2026-11-09 21:07 ` [PATCH 06/11] mmc: sdricoh_cs: Depend on CARDBUS Ilpo Järvinen
2026-11-09 21:07 ` [RFC PATCH 07/11] pcmcia: yenta_socket: Always select CARDBUS Ilpo Järvinen
2026-11-09 21:07 ` [RFC PATCH 08/11] PCI: Move CardBus device setup to setup-cardbus.c Ilpo Järvinen
2026-11-09 21:07 ` [PATCH 09/11] PCI: Move CardBus legacy mode quirk " Ilpo Järvinen
2026-11-09 21:07 ` [RFC PATCH 10/11] PCI: Move Ricoh RL5C476 MMC " Ilpo Järvinen
2026-11-09 21:07 ` [PATCH 11/11] PCI: Move CardBus resource names " Ilpo Järvinen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®