[RFC 0/6] pcmcia: separate 16-bit support from cardbus

Oliver Hartkopp socketcan at hartkopp.net
Mon Feb 27 11:07:16 PST 2023


Hello Arnd,

On 27.02.23 14:34, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd at arndb.de>

(..)

> The remaining cardbus/yenta support is essentially a PCI hotplug driver
> with a slightly unusual sysfs interface, and it would still support all
> 32-bit cardbus hosts and cards, but no longer work with the even older
> 16-bit cards that require the pcmcia_driver infrastructure.

I'm using a 2005 Samsung X20 laptop (Pentium M 1.6GHz, Centrino) with 
PCMCIA (type 2) CAN bus cards:

- EMS PCMCIA
https://elixir.bootlin.com/linux/latest/source/drivers/net/can/sja1000/ems_pcmcia.c

- PEAK PCCard
https://elixir.bootlin.com/linux/latest/source/drivers/net/can/sja1000/peak_pcmcia.c

As I still maintain the EMS PCMCIA and had to tweak and test a patch 
recently (with a 5.16-rc2 kernel):

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/net/can/sja1000/ems_pcmcia.c?id=3ec6ca6b1a8e64389f0212b5a1b0f6fed1909e45

I assume these CAN bus PCMCIA interfaces won't work after your patch 
set, right?

Here is the dmesg output of the PCMCIA driver and the CAN drivers from 
the 5.16-rc2 kernel:

[   17.167938] yenta_cardbus 0000:02:09.0: CardBus bridge found [144d:c01a]
[   17.304252] yenta_cardbus 0000:02:09.0: ISA IRQ mask 0x0cb8, PCI irq 16
[   17.304266] yenta_cardbus 0000:02:09.0: Socket status: 30000006
[   17.304275] yenta_cardbus 0000:02:09.0: pcmcia: parent PCI bridge 
window: [io  0x4000-0x4fff]
[   17.304282] pcmcia_socket pcmcia_socket0: cs: IO port probe 
0x4000-0x4fff:
[   17.305582]  excluding 0x4000-0x40ff 0x4400-0x44ff
[   17.318112] yenta_cardbus 0000:02:09.0: pcmcia: parent PCI bridge 
window: [mem 0xb8000000-0xb80fffff]
[   17.318122] pcmcia_socket pcmcia_socket0: cs: memory probe 
0xb8000000-0xb80fffff:
[   17.318129]  excluding 0xb8000000-0xb801ffff
[   18.481675] pcmcia_socket pcmcia_socket0: cs: IO port probe 0x100-0x3af:
[   18.482680]  excluding 0x170-0x177 0x1f0-0x1f7 0x370-0x377
[   18.483428] pcmcia_socket pcmcia_socket0: cs: IO port probe 0x3e0-0x4ff:
[   18.484196]  excluding 0x3f0-0x3f7 0x4d0-0x4d7
[   18.484570] pcmcia_socket pcmcia_socket0: cs: IO port probe 0x820-0x8ff:
[   18.485149]  clean
[   18.485178] pcmcia_socket pcmcia_socket0: cs: IO port probe 0xc00-0xcf7:
[   18.485818]  clean
[   18.485856] pcmcia_socket pcmcia_socket0: cs: memory probe 
0x0c0000-0x0fffff:
[   18.485863]  excluding 0xc0000-0xc7fff 0xd8000-0xfffff
[   18.485908] pcmcia_socket pcmcia_socket0: cs: memory probe 
0xa0000000-0xa0ffffff:
[   18.485929]  clean
[   18.485958] pcmcia_socket pcmcia_socket0: cs: memory probe 
0x60000000-0x60ffffff:
[   18.485972]  excluding 0x60000000-0x60ffffff
[   18.486005] pcmcia_socket pcmcia_socket0: cs: IO port probe 0xa00-0xaff:
[   18.486663]  clean

(..)

[  176.999473] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card 
inserted into slot 0
[  176.999489] pcmcia_socket pcmcia_socket0: cs: memory probe 
0xb8020000-0xb80fffff:
[  177.009792]  clean
[  177.010039] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 (IRQ: 3)
[  177.119671] CAN device driver interface
[  177.140214] sja1000 CAN netdevice driver
[  177.204920] ems_pcmcia: registered can0 on channel #0 at 0xbd4852ee, 
irq 3
[  177.212167] ems_pcmcia: registered can1 on channel #1 at 0x081f55b8, 
irq 3
[ 1003.014730] pcmcia_socket pcmcia_socket0: pccard: card ejected from 
slot 0
[ 1003.014801] ems_pcmcia: removing can0 on channel #0
[ 1003.027520] ems_pcmcia: removing can1 on channel #1
[ 1019.943489] pcmcia_socket pcmcia_socket0: pccard: PCMCIA card 
inserted into slot 0
[ 1019.943715] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 (IRQ: 3)
[ 1020.035605] peak_pcmcia 0.0: PEAK-System pcmcia card PC_CAN_CARD fw 1.5
[ 1020.039539] peak_pcmcia 0.0: can0 on channel 0 at 0x55749494 irq 3
[ 1020.045816] peak_pcmcia 0.0: can1 on channel 1 at 0x415066ba irq 3

Best regards,
Oliver


> 
> I don't expect this to be a problem normal laptop support, as the last
> PC models that predate Cardbus support (e.g. 1997 ThinkPad 380ED) are
> all limited to i586MMX CPUs and 80MB of RAM. This is barely enough to
> boot Tiny Core Linux but not a regular distro.
> 
> Support for device drivers is somewhat less clear. Losing support for
> 16-bit cards in cardbus sockets is obviously a limiting factor for
> anyone who still has those cards, but there is also a good chance that
> the only reason to keep the cards around is for using them in pre-cardbus
> machines that cannot be upgrade to 32-bit devices.
> 
> Completely removing the 16-bit PCMCIA support would however break some
> 20+ year old embedded machines that rely on CompactFlash cards as their
> mass-storage device (extension), this notably includes early PocketPC
> models and the reference implementations for OMAP1, StrongARM1100,
> Alchemy and PA-Semi. All of these are still maintained, though most
> of the PocketPC machines got removed in the 6.3 merge window and the
> PA-Semi Electra board is the only one that was introduced after
> 2003.
> 
> The approach that I take in this series is to split drivers/pcmcia
> into two mutually incompatible parts: the Cardbus support contains
> all the code that is relevant for post-1997 laptops and gets moved
> to drivers/pci/hotplug, while the drivers/pcmcia/ subsystem is
> retained for both the older laptops and the embedded systems but no
> longer works with the yenta socket host driver. The BCM63xx
> PCMCIA/Cardbus host driver appears to be unused and conflicts with
> this series, so it is removed in the process.
> 
> My series does not touch any of the pcmcia_driver instances, but
> if there is consensus about splitting out the cardbus support,
> a lot of them can probably get removed as a follow-up.
> 
> [1] https://lore.kernel.org/all/Y07d7rMvd5++85BJ@owl.dominikbrodowski.net/
> [2] https://lore.kernel.org/all/c5b39544-a4fb-4796-a046-0b9be9853787@app.fastmail.com/
> [3] https://lore.kernel.org/all/20230222092302.6348-1-jirislaby@kernel.org/
> 
> Cc: Bjorn Helgaas <bhelgaas at google.com>
> Cc: Dominik Brodowski <linux at dominikbrodowski.net>
> Cc: Florian Fainelli <f.fainelli at gmail.com>
> Cc: H Hartley Sweeten <hsweeten at visionengravers.com>
> Cc: Ian Abbott <abbotti at mev.co.uk>
> Cc: Jakub Kicinski <kuba at kernel.org>
> Cc: Kevin Cernekee <cernekee at gmail.com>
> Cc: Lukas Wunner <lukas at wunner.de>
> Cc: Manuel Lauss <manuel.lauss at gmail.com>
> Cc: Oliver Hartkopp <socketcan at hartkopp.net>
> Cc: Olof Johansson <olof at lixom.net>
> Cc: Robert Jarzmik <robert.jarzmik at free.fr>
> Cc: YOKOTA Hiroshi <yokota at netlab.is.tsukuba.ac.jp>
> Cc: bcm-kernel-feedback-list at broadcom.com
> Cc: linux-arm-kernel at lists.infradead.org
> Cc: linux-can at vger.kernel.org
> Cc: linux-mips at vger.kernel.org
> Cc: linux-pci at vger.kernel.org
> Cc: linux-wireless at vger.kernel.org
> Cc: netdev at vger.kernel.org
> 
> Arnd Bergmann (6):
>    pccard: remove bcm63xx socket driver
>    pccard: split cardbus support from pcmcia
>    yenta_socket: copy pccard core code into driver
>    yenta_socket: remove dead code
>    pccard: drop remnants of cardbus support
>    pci: hotplug: move cardbus code from drivers/pcmcia
> 
>   arch/mips/bcm63xx/Makefile                    |    2 +-
>   arch/mips/bcm63xx/boards/board_bcm963xx.c     |   14 -
>   arch/mips/bcm63xx/dev-pcmcia.c                |  144 -
>   arch/mips/configs/bcm63xx_defconfig           |    1 -
>   .../asm/mach-bcm63xx/bcm63xx_dev_pcmcia.h     |   14 -
>   arch/mips/pci/ops-bcm63xx.c                   |  294 --
>   arch/mips/pci/pci-bcm63xx.c                   |   44 -
>   drivers/Makefile                              |    2 +-
>   drivers/pci/hotplug/Kconfig                   |   56 +
>   drivers/pci/hotplug/Makefile                  |    1 +
>   drivers/pci/hotplug/yenta_socket.c            | 4056 +++++++++++++++++
>   drivers/pcmcia/Kconfig                        |   63 +-
>   drivers/pcmcia/Makefile                       |   13 +-
>   drivers/pcmcia/bcm63xx_pcmcia.c               |  538 ---
>   drivers/pcmcia/bcm63xx_pcmcia.h               |   61 -
>   drivers/pcmcia/cardbus.c                      |  124 -
>   drivers/pcmcia/cistpl.c                       |   10 +-
>   drivers/pcmcia/cs.c                           |  103 +-
>   drivers/pcmcia/cs_internal.h                  |   10 +-
>   drivers/pcmcia/ds.c                           |   14 +-
>   drivers/pcmcia/i82092.c                       |    2 +-
>   drivers/pcmcia/i82365.c                       |    2 +-
>   drivers/pcmcia/o2micro.h                      |  183 -
>   drivers/pcmcia/pd6729.c                       |    3 +-
>   drivers/pcmcia/ricoh.h                        |  169 -
>   drivers/pcmcia/socket_sysfs.c                 |    2 -
>   drivers/pcmcia/ti113x.h                       |  978 ----
>   drivers/pcmcia/topic.h                        |  168 -
>   drivers/pcmcia/yenta_socket.c                 | 1455 ------
>   drivers/pcmcia/yenta_socket.h                 |  136 -
>   {drivers => include}/pcmcia/i82365.h          |    0
>   include/pcmcia/ss.h                           |   21 -
>   32 files changed, 4147 insertions(+), 4536 deletions(-)
>   delete mode 100644 arch/mips/bcm63xx/dev-pcmcia.c
>   delete mode 100644 arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_pcmcia.h
>   create mode 100644 drivers/pci/hotplug/yenta_socket.c
>   delete mode 100644 drivers/pcmcia/bcm63xx_pcmcia.c
>   delete mode 100644 drivers/pcmcia/bcm63xx_pcmcia.h
>   delete mode 100644 drivers/pcmcia/cardbus.c
>   delete mode 100644 drivers/pcmcia/o2micro.h
>   delete mode 100644 drivers/pcmcia/ti113x.h
>   delete mode 100644 drivers/pcmcia/topic.h
>   delete mode 100644 drivers/pcmcia/yenta_socket.c
>   delete mode 100644 drivers/pcmcia/yenta_socket.h
>   rename {drivers => include}/pcmcia/i82365.h (100%)
> 



More information about the linux-arm-kernel mailing list