Allow ISA-style drivers on modern systems
Subsystems (6)
cover 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 patchset introduces the ISA_BUS_API and ISA_BUS Kconfig options. The X86 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).
For now, the ISA_BUS Kconfig option is only be available on X86 architectures. Support for other architectures may be 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/x86/Kconfig | 13 +++++++++++++ drivers/base/Makefile | 2 +- drivers/gpio/Kconfig | 8 ++++---- drivers/iio/dac/Kconfig | 2 +- drivers/watchdog/Kconfig | 2 +- 5 files changed, 20 insertions(+), 7 deletions(-)
Signature · 1 line
2.7.3
PATCH 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 X86 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).
For now, the ISA_BUS Kconfig option is only be available on X86 architectures. Support for other architectures may be added as required.
--- arch/x86/Kconfig | 13 +++++++++++++ drivers/base/Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-)
arch/x86/Kconfig +13 -0
@@ -2439,6 +2439,19 @@ config PCI_CNB20LE_QUIRK source "drivers/pci/Kconfig" +config ISA_BUS_API + def_bool ISA + +config ISA_BUS + bool "ISA-style bus support on modern systems" if (X86 && EXPERT) + default y + 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 Y. + # 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
@@ -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
Signature · 1 line
2.7.3
Guenter Roeck
maintainerRe: [PATCH 1/4] isa: Allow ISA-style drivers on modern systems
Quoted 28 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_APIandISA_BUSKconfigoptions. The X86 ISA bus driver will now build conditionally on theISA_BUS_APIKconfigoption, which defaults to the legacy ISAKconfigoption. TheISA_BUSKconfigoption allows theISA_BUS_APIKconfigoption to be selected on architectures which do not enable ISA (e.g.X86_64).For now, the
ISA_BUSKconfigoption is only be available on X86 architectures. Support for other architectures may be added as required.Cc Linus Torvalds <[email protected]>Signed-off-by William Breathitt Gray <[email protected]>--- arch/x86/Kconfig | 13 +++++++++++++ drivers/base/Makefile | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-)arch/x86/Kconfig +0
-0
arch/x86/Kconfig config PCI_CNB20LE_QUIRK · line 2447
Quoted 9 lines
arch/x86/Kconfig +6
-0@@ -2439,6 +2439,19 @@ config PCI_CNB20LE_QUIRK source "drivers/pci/Kconfig" +config ISA_BUS_API + def_bool ISA + +config ISA_BUS + bool "ISA-style bus support on modern systems" if (X86 && EXPERT) + default y
Sure you want it enabled by default ?
Quoted 15 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 Y. + # 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 +0
-0
drivers/base/Makefile obj-$(CONFIG_DMA_CMA) += dma-contiguous.o · line 13
Quoted 5 lines
drivers/base/Makefile +1
-1@@ -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
Unless I am missing something, this is insufficient, and I am a bit surprised that it actually works. include/linux/isa.h declares isa_register_driver() and isa_unregister_driver() as dummies if CONFIG_ISA is not enabled. Doesn't this cause a compile error ? Confused.
Thanks,
Guenter
Quoted 10 lines
drivers/base/Makefile +0
-0obj-$(CONFIG_FW_LOADER) += firmware_class.o obj-$(CONFIG_NUMA) += node.o obj-$(CONFIG_MEMORY_HOTPLUG_SPARSE) += memory.oSignature · 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
Re: [PATCH 1/4] isa: Allow ISA-style drivers on modern systems
Quoted 9 lines · Guenter Roeck
arch/x86/Kconfig config PCI_CNB20LE_QUIRK · line 2447
Quoted 6 lines · William Breathitt Gray
arch/x86/Kconfig +6
-0+config ISA_BUS_API + def_bool ISA + +config ISA_BUS + bool "ISA-style bus support on modern systems" if (X86 && EXPERT) + default ySure you want it enabled by default ?
Since the X86 ISA bus driver is more of an abstraction interface and doesn't perform any hardware operations, I believe it's safe enough to enable by default, thus allowing drivers dependent on it to show up for selection in menuconfig.
Quoted 17 lines
Quoted 17 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 Y. + # 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 +0
-0@@ -10,7 +10,7 @@ obj-$(CONFIG_DMA_CMA) += dma-contiguous.o obj-y += power/ obj-$(CONFIG_HAS_DMA) += dma-mapping.o
Quoted 8 lines
drivers/base/Makefile obj-$(CONFIG_DMA_CMA) += dma-contiguous.o · line 13
Quoted 3 lines
drivers/base/Makefile +1
-1obj-$(CONFIG_HAVE_GENERIC_DMA_COHERENT) += dma-coherent.o -obj-$(CONFIG_ISA) += isa.o +obj-$(CONFIG_ISA_BUS_API) += isa.oUnless I am missing something, this is insufficient, and I am a bit surprised that it actually works.
include/linux/isa.hdeclaresisa_register_driver()andisa_unregister_driver()as dummies ifCONFIG_ISAis not enabled. Doesn't this cause a compile error ? Confused.
You are correct: CONFIG_ISA in include/linux/isa.h should be CONFIG_ISA_BUS_API. I'll add the change and submit version 2 of this patchset after retesting.
William Breathitt Gray
Re: [PATCH 1/4] isa: Allow ISA-style drivers on modern systems
In reply to William Breathitt GrayQuoted 3 lines · William Breathitt Gray
For now, the
ISA_BUSKconfigoption is only be available on X86 architectures. Support for other architectures may be added as required.
So I'd prefer to see that
arch/x86/Kconfig config PCI_CNB20LE_QUIRK · line 2443
Quoted 2 lines
arch/x86/Kconfig +2
-0+config ISA_BUS_API + def_bool ISA
part in arch/Kconfig.
Why?
Because other architectures _already_ define that ISA symbol, and we want the "ISA_BUS_API" to be a complete superset of ISA.
So whenever ISA is enabled, ISA_BUS_API should be enabled.
And the way you did that, that's not true. Now, if you were to enable ISA on ARM, you'd not get ISA_BUS_API. And that sounds insane to me. It also sounds *wrong* because it effectively changes the meaning of this:
--- a/drivers/base/Makefile +++ b/drivers/base/Makefile @@ -10,7 +10,7 @@ obj-$(CONFIG_DMA_CMA) += dma-contiguous.o -obj-$(CONFIG_ISA) += isa.o +obj-$(CONFIG_ISA_BUS_API) += isa.o
where now that "isa.c" file gets built only on x86, whereas it *used* to get built whenever ISA was enabled.
So the reason I suggested a separate ISA_BUS_API config option (that then a particular architecture can choose to enable, in this case the x86 choice of selecting ISA_BUS) was _exactly_ this issue. The plain "ISA" config variable is not limited to x86, and the new subset of it (the ISA_BUS_API) thus also must not be limited to just x86.
Linus
PATCH 2/4 gpio: Allow PC/104 devices on X86_64
In reply to William Breathitt GrayWith 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
@@ -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
PATCH 3/4 iio: stx104: Allow build for X86_64
In reply to William Breathitt GrayWith 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.
--- drivers/iio/dac/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/dac/Kconfig +1 -1
@@ -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 · 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
PATCH 4/4 watchdog: ebc-c384_wdt: Allow build for X86_64
In reply to William Breathitt GrayWith 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.
--- drivers/watchdog/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/Kconfig +1 -1
@@ -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