Skip to contentSkip to conversation

Allow ISA-style drivers on modern systems

PATCH Superseded William Breathitt Gray 2 participants 6 messages May 23, 2016

Subsystems (7)
x86 Linux-next tree GPIO IIO +3 more subsystems

v3 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v3 cover Allow ISA-style drivers on modern systems

Changes in v3:
- Remove redundant X86 dependency from the X86 ISA_BUS Kconfig option

Changes in v2:
- Adjusted preprocessor compilation conditional in include/linux/isa.h to use CONFIG_ISA_BUS_API in order to link the correct ISA bus driver function definitions when available
- Move ISA_BUS_API Kconfig option to arch/Kconfig, thus making it available to all architectures instead of just X86
- X86 ISA_BUS Kconfig option should be disabled by default; ISA devices typically do not have a way to be probed, so users should be required to explicitly enable ISA bus driver support, lest a selected driver be loaded with the misguided expectation of a safe hardware probe

Several modern devices, such as PC/104 cards, are expected to run on modern systems via an ISA bus interface. Since ISA is a legacy interface for most modern architectures, ISA support should remain disabled in general. Support for ISA-style drivers should be enabled on a per driver basis.

To allow ISA-style drivers on modern systems, this patchset introduces the ISA_BUS_API and ISA_BUS Kconfig options. The ISA bus driver will now build conditionally on the ISA_BUS_API Kconfig option, which defaults to the legacy ISA Kconfig option. The ISA_BUS Kconfig option allows the ISA_BUS_API Kconfig option to be selected on architectures which do not enable ISA (e.g. X86_64).

The ISA_BUS Kconfig option is currently only implemented for X86 architectures. Other architectures may have their own ISA_BUS Kconfig option added as required.

An earlier attempt to allow the ISA bus driver to build for X86_64 took an inappropriate approach resulting in legacy ISA drivers becoming enabled unconditionally on untested and unsupported architectures. Commit 51e68d055cba ("x86 isa: add back X86_32 dependency on CONFIG_ISA"), added to restrict the ISA bus driver to only X86_32, causes several drivers intended for X86_64 to be restricted to X86_32 as well.

This patchset replaces the ISA Kconfig option dependency of several drivers to ISA_BUS_API, so that they may build for X86_64 as intended. The respective drivers are as follows:
* ACCES 104-IDIO-16 GPIO driver
* ACCES 104-IDI-48 GPIO driver
* ACCES 104-DIO-48E GPIO driver
* Apex Embedded Systems STX104 DAC driver
* WinSystems EBC-C384 watchdog timer driver
* WinSystems WS16C48 GPIO driver

William Breathitt Gray (4):
isa: Allow ISA-style drivers on modern systems
gpio: Allow PC/104 devices on X86_64
iio: stx104: Allow build for X86_64
watchdog: ebc-c384_wdt: Allow build for X86_64

 arch/Kconfig             |  3 +++
 arch/x86/Kconfig         | 10 ++++++++++
 drivers/base/Makefile    |  2 +-
 drivers/gpio/Kconfig     |  8 ++++----
 drivers/iio/dac/Kconfig  |  2 +-
 drivers/watchdog/Kconfig |  2 +-
 include/linux/isa.h      |  2 +-
 7 files changed, 21 insertions(+), 8 deletions(-)
Signature · 1 line
2.7.3
#1 lore raw

PATCH v3 1/4 isa: Allow ISA-style drivers on modern systems

Several modern devices, such as PC/104 cards, are expected to run on modern systems via an ISA bus interface. Since ISA is a legacy interface for most modern architectures, ISA support should remain disabled in general. Support for ISA-style drivers should be enabled on a per driver basis.

To allow ISA-style drivers on modern systems, this patch introduces the ISA_BUS_API and ISA_BUS Kconfig options. The ISA bus driver will now build conditionally on the ISA_BUS_API Kconfig option, which defaults to the legacy ISA Kconfig option. The ISA_BUS Kconfig option allows the ISA_BUS_API Kconfig option to be selected on architectures which do not enable ISA (e.g. X86_64).

The ISA_BUS Kconfig option is currently only implemented for X86 architectures. Other architectures may have their own ISA_BUS Kconfig options added as required.

---
 arch/Kconfig          |  3 +++
 arch/x86/Kconfig      | 10 ++++++++++
 drivers/base/Makefile |  2 +-
 include/linux/isa.h   |  2 +-
 4 files changed, 15 insertions(+), 2 deletions(-)
arch/Kconfig +3 -0
index b16e74e..9d9942f 100644
@@ -598,6 +598,9 @@ config HAVE_STACK_VALIDATION
 	  Architecture supports the 'objtool check' host tool command, which
 	  performs compile-time stack metadata validation.
 
+config ISA_BUS_API
+	def_bool ISA
+
 #
 # ABI hall of shame
 #
arch/x86/Kconfig +10 -0
index 0a7b885..a5338a6 100644
@@ -2439,6 +2439,16 @@ config PCI_CNB20LE_QUIRK
 
 source "drivers/pci/Kconfig"
 
+config ISA_BUS
+	bool "ISA-style bus support on modern systems" if EXPERT
+	default n
+	select ISA_BUS_API
+	help
+	  Enables ISA-style drivers on modern systems. This is necessary to
+	  support PC/104 devices on X86_64 platforms.
+
+	  If unsure, say N.
+
 # x86_64 have no ISA slots, but can have ISA-style DMA.
 config ISA_DMA_API
 	bool "ISA-style DMA support" if (X86_64 && EXPERT)
drivers/base/Makefile +1 -1
index 6b2a84e..2609ba2 100644
@@ -10,7 +10,7 @@ obj-$(CONFIG_DMA_CMA) += dma-contiguous.o
 obj-y			+= power/
 obj-$(CONFIG_HAS_DMA)	+= dma-mapping.o
 obj-$(CONFIG_HAVE_GENERIC_DMA_COHERENT) += dma-coherent.o
-obj-$(CONFIG_ISA)	+= isa.o
+obj-$(CONFIG_ISA_BUS_API)	+= isa.o
 obj-$(CONFIG_FW_LOADER)	+= firmware_class.o
 obj-$(CONFIG_NUMA)	+= node.o
 obj-$(CONFIG_MEMORY_HOTPLUG_SPARSE) += memory.o
include/linux/isa.h +1 -1
index 5ab8528..384ab9b 100644
@@ -22,7 +22,7 @@ struct isa_driver {
 
 #define to_isa_driver(x) container_of((x), struct isa_driver, driver)
 
-#ifdef CONFIG_ISA
+#ifdef CONFIG_ISA_BUS_API
 int isa_register_driver(struct isa_driver *, unsigned int);
 void isa_unregister_driver(struct isa_driver *);
 #else
Signature · 1 line
2.7.3
maintainer
#2 lore raw

Re: [PATCH v3 1/4] isa: Allow ISA-style drivers on modern systems

Quoted 45 lines · William Breathitt Gray

Several modern devices, such as PC/104 cards, are expected to run on modern systems via an ISA bus interface. Since ISA is a legacy interface for most modern architectures, ISA support should remain disabled in general. Support for ISA-style drivers should be enabled on a per driver basis.

To allow ISA-style drivers on modern systems, this patch introduces the ISA_BUS_API and ISA_BUS Kconfig options. The ISA bus driver will now build conditionally on the ISA_BUS_API Kconfig option, which defaults to the legacy ISA Kconfig option. The ISA_BUS Kconfig option allows the ISA_BUS_API Kconfig option to be selected on architectures which do not enable ISA (e.g. X86_64).

The ISA_BUS Kconfig option is currently only implemented for X86 architectures. Other architectures may have their own ISA_BUS Kconfig options added as required.

---
 arch/Kconfig          |  3 +++
 arch/x86/Kconfig      | 10 ++++++++++
 drivers/base/Makefile |  2 +-
 include/linux/isa.h   |  2 +-
 4 files changed, 15 insertions(+), 2 deletions(-)
arch/Kconfig +3 -0
index b16e74e..9d9942f 100644
@@ -598,6 +598,9 @@ config HAVE_STACK_VALIDATION
 	  Architecture supports the 'objtool check' host tool command, which
 	  performs compile-time stack metadata validation.
 
+config ISA_BUS_API
+	def_bool ISA
+
 #
 # ABI hall of shame
 #
arch/x86/Kconfig +0 -0
index 0a7b885..a5338a6 100644

arch/x86/Kconfig config PCI_CNB20LE_QUIRK · line 2444

Quoted 6 lines
arch/x86/Kconfig +3 -0
@@ -2439,6 +2439,16 @@ config PCI_CNB20LE_QUIRK
 
 source "drivers/pci/Kconfig"
 
+config ISA_BUS
+	bool "ISA-style bus support on modern systems" if EXPERT
+	default n

I don't think an explicit "default n" is necessary.

Quoted 43 lines
arch/x86/Kconfig +7 -0
+	select ISA_BUS_API
+	help
+	  Enables ISA-style drivers on modern systems. This is necessary to
+	  support PC/104 devices on X86_64 platforms.
+
+	  If unsure, say N.
+
 # x86_64 have no ISA slots, but can have ISA-style DMA.
 config ISA_DMA_API
 	bool "ISA-style DMA support" if (X86_64 && EXPERT)
drivers/base/Makefile +1 -1
index 6b2a84e..2609ba2 100644
@@ -10,7 +10,7 @@ obj-$(CONFIG_DMA_CMA) += dma-contiguous.o
 obj-y			+= power/
 obj-$(CONFIG_HAS_DMA)	+= dma-mapping.o
 obj-$(CONFIG_HAVE_GENERIC_DMA_COHERENT) += dma-coherent.o
-obj-$(CONFIG_ISA)	+= isa.o
+obj-$(CONFIG_ISA_BUS_API)	+= isa.o
 obj-$(CONFIG_FW_LOADER)	+= firmware_class.o
 obj-$(CONFIG_NUMA)	+= node.o
 obj-$(CONFIG_MEMORY_HOTPLUG_SPARSE) += memory.o
include/linux/isa.h +1 -1
index 5ab8528..384ab9b 100644
@@ -22,7 +22,7 @@ struct isa_driver {
 
 #define to_isa_driver(x) container_of((x), struct isa_driver, driver)
 
-#ifdef CONFIG_ISA
+#ifdef CONFIG_ISA_BUS_API
 int isa_register_driver(struct isa_driver *, unsigned int);
 void isa_unregister_driver(struct isa_driver *);
 #else
Signature · 6 lines
2.7.3

--
To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#3 lore raw

PATCH v3 2/4 gpio: Allow PC/104 devices on X86_64

In reply to William Breathitt Gray

With the introduction of the ISA_BUS_API Kconfig option, ISA-style drivers may be built for X86_64 architectures. This patch changes the ISA Kconfig option dependency of the PC/104 drivers to ISA_BUS_API, thus allowing them to build for X86_64 as they are expected to.

---
 drivers/gpio/Kconfig | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpio/Kconfig +4 -4
index 48da857..dc6da77 100644
@@ -530,7 +530,7 @@ menu "Port-mapped I/O GPIO drivers"
 
 config GPIO_104_DIO_48E
 	tristate "ACCES 104-DIO-48E GPIO support"
-	depends on ISA
+	depends on ISA_BUS_API
 	select GPIOLIB_IRQCHIP
 	help
 	  Enables GPIO support for the ACCES 104-DIO-48E series (104-DIO-48E,
@@ -540,7 +540,7 @@ config GPIO_104_DIO_48E
 
 config GPIO_104_IDIO_16
 	tristate "ACCES 104-IDIO-16 GPIO support"
-	depends on ISA
+	depends on ISA_BUS_API
 	select GPIOLIB_IRQCHIP
 	help
 	  Enables GPIO support for the ACCES 104-IDIO-16 family (104-IDIO-16,
@@ -551,7 +551,7 @@ config GPIO_104_IDIO_16
 
 config GPIO_104_IDI_48
 	tristate "ACCES 104-IDI-48 GPIO support"
-	depends on ISA
+	depends on ISA_BUS_API
 	select GPIOLIB_IRQCHIP
 	help
 	  Enables GPIO support for the ACCES 104-IDI-48 family (104-IDI-48A,
@@ -627,7 +627,7 @@ config GPIO_TS5500
 
 config GPIO_WS16C48
 	tristate "WinSystems WS16C48 GPIO support"
-	depends on ISA
+	depends on ISA_BUS_API
 	select GPIOLIB_IRQCHIP
 	help
 	  Enables GPIO support for the WinSystems WS16C48. The base port
Signature · 1 line
2.7.3
#4 lore raw

PATCH v3 3/4 iio: stx104: Allow build for X86_64

In reply to William Breathitt Gray

With the introduction of the ISA_BUS_API Kconfig option, ISA-style drivers may be built for X86_64 architectures. This patch changes the ISA Kconfig option dependency of the Apex Embedded Systems STX104 DAC driver to ISA_BUS_API, thus allowing it to build for X86_64 as it is expected to.

Cc Hartmut Knaack <[email protected]>
Cc Lars-Peter Clausen <[email protected]>
Cc Peter Meerwald-Stadler <[email protected]>
Cc Jonathan Cameron <[email protected]>
---
 drivers/iio/dac/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/dac/Kconfig +1 -1
index e63b957..315442f 100644
@@ -247,7 +247,7 @@ config MCP4922
 
 config STX104
 	tristate "Apex Embedded Systems STX104 DAC driver"
-	depends on X86 && ISA
+	depends on ISA_BUS_API
 	help
 	  Say yes here to build support for the 2-channel DAC on the Apex
 	  Embedded Systems STX104 integrated analog PC/104 card. The base port
Signature · 1 line
2.7.3
#5 lore raw

PATCH v3 4/4 watchdog: ebc-c384_wdt: Allow build for X86_64

In reply to William Breathitt Gray

With the introduction of the ISA_BUS_API Kconfig option, ISA-style drivers may be built for X86_64 architectures. This patch changes the ISA Kconfig option dependency of the WinSystems EBC-C384 watchdog timer driver to ISA_BUS_API, thus allowing it to build for X86_64 as it is expected to.

Cc Guenter Roeck <[email protected]>
Cc Wim Van Sebroeck <[email protected]>
---
 drivers/watchdog/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/Kconfig +1 -1
index b54f26c..3938e2d 100644
@@ -746,7 +746,7 @@ config ALIM7101_WDT
 
 config EBC_C384_WDT
 	tristate "WinSystems EBC-C384 Watchdog Timer"
-	depends on X86 && ISA
+	depends on ISA_BUS_API
 	select WATCHDOG_CORE
 	help
 	  Enables watchdog timer support for the watchdog timer on the
Signature · 1 line
2.7.3