# SPDX-License-Identifier: GPL-2.0
#
# SATA/PATA driver configuration
#

config HAVE_PATA_PLATFORM
	bool
	help
	  This is an internal configuration node for any machine that
	  uses pata-platform driver to enable the relevant driver in the
	  configuration structure without having to submit endless patches
	  to update the PATA_PLATFORM entry.

menuconfig ATA
	tristate "Serial ATA and Parallel ATA drivers (libata)"
	depends on HAS_IOMEM
	depends on BLOCK
	select SCSI
	select GLOB
	help
	  If you want to use an ATA hard disk, ATA tape drive, ATA CD-ROM or
	  any other ATA device under Linux, say Y and make sure that you know
	  the name of your ATA host adapter (the card inside your computer
	  that "speaks" the ATA protocol, also called ATA controller),
	  because you will be asked for it.

	  NOTE: ATA enables basic SCSI support; *however*,
	  'SCSI disk support', 'SCSI tape support', or
	  'SCSI CDROM support' may also be needed,
	  depending on your hardware configuration.

if ATA

config ATA_NONSTANDARD
       bool

config SATA_HOST
	bool

config PATA_TIMINGS
	bool

config ATA_VERBOSE_ERROR
	bool "Verbose ATA error reporting"
	default y
	help
	  This option adds parsing of ATA command descriptions and error bits
	  in libata kernel output, making it easier to interpret.
	  This option will enlarge the kernel by approx. 6KB. Disable it only
	  if kernel size is more important than ease of debugging.

	  If unsure, say Y.

config ATA_FORCE
	bool "\"libata.force=\" kernel parameter support" if EXPERT
	default y
	help
	  This option adds support for "libata.force=" kernel parameter for
	  forcing configuration settings.

	  For further information, please read
	  <file:Documentation/admin-guide/kernel-parameters.txt>.

	  This option will enlarge the kernel by approx. 3KB. Disable it if
	  kernel size is more important than ability to override the default
	  configuration settings.

	  If unsure, say Y.

config ATA_ACPI
	bool "ATA ACPI Support"
	depends on ACPI
	select PATA_TIMINGS
	default y
	help
	  This option adds support for ATA-related ACPI objects.
	  These ACPI objects add the ability to retrieve taskfiles
	  from the ACPI BIOS and write them to the disk controller.
	  These objects may be related to performance, security,
	  power management, or other areas.
	  You can disable this at kernel boot time by using the
	  option libata.noacpi=1

config SATA_ZPODD
	bool "SATA Zero Power Optical Disc Drive (ZPODD) support"
	depends on ATA_ACPI && PM
	help
	  This option adds support for SATA Zero Power Optical Disc
	  Drive (ZPODD). It requires both the ODD and the platform
	  support, and if enabled, will automatically power on/off the
	  ODD when certain condition is satisfied. This does not impact
	  end user's experience of the ODD, only power is saved when
	  the ODD is not in use (i.e. no disc inside).

	  If unsure, say N.

config SATA_PMP
	bool "SATA Port Multiplier support"
	depends on SATA_HOST
	default y
	help
	  This option adds support for SATA Port Multipliers
	  (the SATA version of an ethernet hub, or SAS expander).

if HAS_DMA

comment "Controllers with non-SFF native interface"

config SATA_AHCI
	tristate "AHCI SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for AHCI Serial ATA.

	  If unsure, say N.

config SATA_MOBILE_LPM_POLICY
	int "Default SATA Link Power Management policy"
	range 0 5
	default 3
	depends on SATA_AHCI
	help
	  Select the Default SATA Link Power Management (LPM) policy to use
	  for chipsets / "South Bridges" supporting low-power modes. Such
	  chipsets are ubiquitous across laptops, desktops and servers.
	  Each policy combines power saving states and features:
	   - Partial: The Phy logic is powered but is in a reduced power
                      state. The exit latency from this state is no longer than
                      10us).
	   - Slumber: The Phy logic is powered but is in an even lower power
                      state. The exit latency from this state is potentially
		      longer, but no longer than 10ms.
	   - DevSleep: The Phy logic may be powered down. The exit latency from
	               this state is no longer than 20 ms, unless otherwise
		       specified by DETO in the device Identify Device Data log.
	   - HIPM: Host Initiated Power Management (host automatically
		   transitions to partial and slumber).
	   - DIPM: Device Initiated Power Management (device automatically
		   transitions to partial and slumber).

	  The possible values for the default SATA link power management
	  policies are:
		0 => Keep firmware settings
		1 => No power savings (maximum performance)
		2 => HIPM (Partial)
		3 => HIPM (Partial) and DIPM (Partial and Slumber)
		4 => HIPM (Partial and DevSleep) and DIPM (Partial and Slumber)
		5 => HIPM (Slumber and DevSleep) and DIPM (Partial and Slumber)

	  Excluding the value 0, higher values represent policies with higher
	  power savings.

config SATA_AHCI_PLATFORM
	tristate "Platform AHCI SATA support"
	select SATA_HOST
	help
	  This option enables support for Platform AHCI Serial ATA
	  controllers.

	  If unsure, say N.

config AHCI_BRCM
	tristate "Broadcom AHCI SATA support"
	depends on ARCH_BRCMSTB || BMIPS_GENERIC || ARCH_BCM_NSP || \
		   ARCH_BCMBCA || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for the AHCI SATA3 controller found on
	  Broadcom SoC's.

	  If unsure, say N.

config AHCI_DA850
	tristate "DaVinci DA850 AHCI SATA support"
	depends on ARCH_DAVINCI_DA850 || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for the DaVinci DA850 SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_DM816
	tristate "DaVinci DM816 AHCI SATA support"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for the DaVinci DM816 SoC's
	  onboard AHCI SATA controller.

	  If unsure, say N.

config AHCI_DWC
	tristate "Synopsys DWC AHCI SATA support"
	select SATA_HOST
	select MFD_SYSCON if (MIPS_BAIKAL_T1 || COMPILE_TEST)
	help
	  This option enables support for the Synopsys DWC AHCI SATA
	  controller implementation.

	  If unsure, say N.

config AHCI_ST
	tristate "ST AHCI SATA support"
	depends on ARCH_STI || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for ST AHCI SATA controller.

	  If unsure, say N.

config AHCI_IMX
	tristate "Freescale i.MX AHCI SATA support"
	depends on MFD_SYSCON && (ARCH_MXC || COMPILE_TEST)
	depends on (HWMON && (THERMAL || !THERMAL_OF)) || !HWMON
	select SATA_HOST
	help
	  This option enables support for the Freescale i.MX SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_CEVA
	tristate "CEVA AHCI SATA support"
	depends on OF
	select SATA_HOST
	help
	  This option enables support for the CEVA AHCI SATA.
	  It can be found on the Xilinx Zynq UltraScale+ MPSoC.

	  If unsure, say N.

config AHCI_MTK
	tristate "MediaTek AHCI SATA support"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	select MFD_SYSCON
	select SATA_HOST
	help
	  This option enables support for the MediaTek SoC's
	  onboard AHCI SATA controller.

	  If unsure, say N.

config AHCI_MVEBU
	tristate "Marvell EBU AHCI SATA support"
	depends on ARCH_MVEBU || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for the Marvebu EBU SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_OCTEON
	tristate "Cavium Octeon Soc Serial ATA"
	depends on SATA_AHCI_PLATFORM && CAVIUM_OCTEON_SOC
	default y
	help
	  This option enables support for Cavium Octeon SoC Serial ATA.

	  If unsure, say N.

config AHCI_SUNXI
	tristate "Allwinner sunxi AHCI SATA support"
	depends on ARCH_SUNXI || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for the Allwinner sunxi SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_TEGRA
	tristate "NVIDIA Tegra AHCI SATA support"
	depends on ARCH_TEGRA || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for the NVIDIA Tegra SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config AHCI_XGENE
	tristate "APM X-Gene 6.0Gbps AHCI SATA host controller support"
	depends on PHY_XGENE || COMPILE_TEST
	select SATA_HOST
	help
	 This option enables support for APM X-Gene SoC SATA host controller.

config AHCI_QORIQ
	tristate "Freescale QorIQ AHCI SATA support"
	depends on OF
	depends on SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for the Freescale QorIQ AHCI SoC's
	  onboard AHCI SATA.

	  If unsure, say N.

config SATA_FSL
	tristate "Freescale 3.0Gbps SATA support"
	depends on FSL_SOC || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for Freescale 3.0Gbps SATA controller.
	  It can be found on MPC837x and MPC8315.

	  If unsure, say N.

config SATA_GEMINI
	tristate "Gemini SATA bridge support"
	depends on ARCH_GEMINI || COMPILE_TEST
	select SATA_HOST
	default ARCH_GEMINI
	help
	  This enabled support for the FTIDE010 to SATA bridge
	  found in Cortina Systems Gemini platform.

	  If unsure, say N.

config SATA_AHCI_SEATTLE
	tristate "AMD Seattle 6.0Gbps AHCI SATA host controller support"
	depends on ARCH_SEATTLE || COMPILE_TEST
	select SATA_HOST
	help
	 This option enables support for AMD Seattle SATA host controller.

	 If unsure, say N

config SATA_INIC162X
	tristate "Initio 162x SATA support (Very Experimental)"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Initio 162x Serial ATA.

config SATA_ACARD_AHCI
	tristate "ACard AHCI variant (ATP 8620)"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Acard.

	  If unsure, say N.

config SATA_SIL24
	tristate "Silicon Image 3124/3132 SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Silicon Image 3124/3132 Serial ATA.

	  If unsure, say N.

endif # HAS_DMA

config ATA_SFF
	bool "ATA SFF support (for legacy IDE and PATA)"
	default y
	help
	  This option adds support for ATA controllers with SFF
	  compliant or similar programming interface.

	  SFF is the legacy IDE interface that has been around since
	  the dawn of time.  Almost all PATA controllers have an
	  SFF interface.  Many SATA controllers have an SFF interface
	  when configured into a legacy compatibility mode.

	  For users with exclusively modern controllers like AHCI,
	  Silicon Image 3124, or Marvell 6440, you may choose to
	  disable this unneeded SFF support.

	  If unsure, say Y.

if ATA_SFF

comment "SFF controllers with custom DMA interface"

config PDC_ADMA
	tristate "Pacific Digital ADMA support"
	depends on PCI
	help
	  This option enables support for Pacific Digital ADMA controllers

	  If unsure, say N.

config PATA_OCTEON_CF
	tristate "OCTEON Boot Bus Compact Flash support"
	depends on CAVIUM_OCTEON_SOC
	select PATA_TIMINGS
	help
	  This option enables a polled compact flash driver for use with
	  compact flash cards attached to the OCTEON boot bus.

	  If unsure, say N.

config SATA_QSTOR
	tristate "Pacific Digital SATA QStor support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Pacific Digital Serial ATA QStor.

	  If unsure, say N.

config SATA_SX4
	tristate "Promise SATA SX4 support (Experimental)"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Promise Serial ATA SX4.

	  If unsure, say N.

config ATA_BMDMA
	bool "ATA BMDMA support"
	depends on HAS_DMA
	default y
	help
	  This option adds support for SFF ATA controllers with BMDMA
	  capability.  BMDMA stands for bus-master DMA and is the
	  de facto DMA interface for SFF controllers.

	  If unsure, say Y.

if ATA_BMDMA

comment "SATA SFF controllers with BMDMA"

config ATA_PIIX
	tristate "Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for ICH5/6/7/8 Serial ATA
	  and support for PATA on the Intel ESB/ICH/PIIX3/PIIX4 series
	  host controllers.

	  If unsure, say N.

config SATA_DWC
	tristate "DesignWare Cores SATA support"
	depends on DMADEVICES
	select GENERIC_PHY
	select SATA_HOST
	help
	  This option enables support for the on-chip SATA controller of the
	  AppliedMicro processor 460EX.

	  If unsure, say N.

config SATA_DWC_OLD_DMA
	bool "Support old device trees"
	depends on SATA_DWC
	select DW_DMAC_CORE
	default y if 460EX
	help
	  This option enables support for old device trees without the
	  "dmas" property.

config SATA_HIGHBANK
	tristate "Calxeda Highbank SATA support"
	depends on ARCH_HIGHBANK || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for the Calxeda Highbank SoC's
	  onboard SATA.

	  If unsure, say N.

config SATA_MV
	tristate "Marvell SATA support"
	depends on PCI || ARCH_DOVE || ARCH_MV78XX0 || \
		   ARCH_MVEBU || ARCH_ORION5X || COMPILE_TEST
	select GENERIC_PHY
	select SATA_HOST
	help
	  This option enables support for the Marvell Serial ATA family.
	  Currently supports 88SX[56]0[48][01] PCI(-X) chips,
	  as well as the newer [67]042 PCI-X/PCIe and SOC devices.

	  If unsure, say N.

config SATA_NV
	tristate "NVIDIA SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for NVIDIA Serial ATA.

	  If unsure, say N.

config SATA_PROMISE
	tristate "Promise SATA TX2/TX4 support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Promise Serial ATA TX2/TX4.

	  If unsure, say N.

config SATA_RCAR
	tristate "Renesas R-Car SATA support"
	depends on ARCH_RENESAS || COMPILE_TEST
	select SATA_HOST
	help
	  This option enables support for Renesas R-Car Serial ATA.

	  If unsure, say N.

config SATA_SIL
	tristate "Silicon Image SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Silicon Image Serial ATA.

	  If unsure, say N.

config SATA_SIS
	tristate "SiS 964/965/966/180 SATA support"
	depends on PCI
	select PATA_SIS
	select SATA_HOST
	help
	  This option enables support for SiS Serial ATA on
	  SiS 964/965/966/180 and Parallel ATA on SiS 180.
	  The PATA support for SiS 180 requires additionally to
	  enable the PATA_SIS driver in the config.
	  If unsure, say N.

config SATA_SVW
	tristate "ServerWorks Frodo / Apple K2 SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Broadcom/Serverworks/Apple K2
	  SATA support.

	  If unsure, say N.

config SATA_ULI
	tristate "ULi Electronics SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for ULi Electronics SATA.

	  If unsure, say N.

config SATA_VIA
	tristate "VIA SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for VIA Serial ATA.

	  If unsure, say N.

config SATA_VITESSE
	tristate "VITESSE VSC-7174 / INTEL 31244 SATA support"
	depends on PCI
	select SATA_HOST
	help
	  This option enables support for Vitesse VSC7174 and Intel 31244 Serial ATA.

	  If unsure, say N.

comment "PATA SFF controllers with BMDMA"

config PATA_ALI
	tristate "ALi PATA support"
	depends on PCI && HAS_IOPORT
	select PATA_TIMINGS
	help
	  This option enables support for the ALi ATA interfaces
	  found on the many ALi chipsets.

	  If unsure, say N.

config PATA_AMD
	tristate "AMD/NVidia PATA support"
	depends on PCI && HAS_IOPORT
	select PATA_TIMINGS
	help
	  This option enables support for the AMD and NVidia PATA
	  interfaces found on the chipsets for Athlon/Athlon64.

	  If unsure, say N.

config PATA_ARASAN_CF
	tristate "ARASAN CompactFlash PATA Controller Support"
	depends on ARCH_SPEAR13XX || COMPILE_TEST
	depends on DMADEVICES
	select DMA_ENGINE
	help
	  Say Y here to support the ARASAN CompactFlash PATA controller

config PATA_ARTOP
	tristate "ARTOP 6210/6260 PATA support"
	depends on PCI && HAS_IOPORT
	help
	  This option enables support for ARTOP PATA controllers.

	  If unsure, say N.

config PATA_ATIIXP
	tristate "ATI PATA support"
	depends on PCI
	help
	  This option enables support for the ATI ATA interfaces
	  found on the many ATI chipsets.

	  If unsure, say N.

config PATA_ATP867X
	tristate "ARTOP/Acard ATP867X PATA support"
	depends on PCI
	select PATA_TIMINGS
	help
	  This option enables support for ARTOP/Acard ATP867X PATA
	  controllers.

	  If unsure, say N.

config PATA_CMD64X
	tristate "CMD64x PATA support"
	depends on PCI && HAS_IOPORT
	select PATA_TIMINGS
	help
	  This option enables support for the CMD64x series chips
	  except for the CMD640.

	  If unsure, say N.

config PATA_CS5520
	tristate "CS5510/5520 PATA support"
	depends on PCI && (X86_32 || COMPILE_TEST)
	help
	  This option enables support for the Cyrix 5510/5520
	  companion chip used with the MediaGX/Geode processor family.

	  If unsure, say N.

config PATA_CS5530
	tristate "CS5530 PATA support"
	depends on PCI && (X86_32 || COMPILE_TEST)
	help
	  This option enables support for the Cyrix/NatSemi/AMD CS5530
	  companion chip used with the MediaGX/Geode processor family.

	  If unsure, say N.

config PATA_CS5535
	tristate "CS5535 PATA support (Experimental)"
	depends on PCI && (X86_32 || (X86_64 && COMPILE_TEST))
	depends on !UML
	help
	  This option enables support for the NatSemi/AMD CS5535
	  companion chip used with the Geode processor family.

	  If unsure, say N.

config PATA_CS5536
	tristate "CS5536 PATA support"
	depends on PCI && (X86_32 || MIPS || COMPILE_TEST)
	help
	  This option enables support for the AMD CS5536
	  companion chip used with the Geode LX processor family.

	  If unsure, say N.

config PATA_CYPRESS
	tristate "Cypress CY82C693 PATA support (Very Experimental)"
	depends on PCI && HAS_IOPORT
	select PATA_TIMINGS
	help
	  This option enables support for the Cypress/Contaq CY82C693
	  chipset found in some Alpha systems

	  If unsure, say N.

config PATA_EFAR
	tristate "EFAR SLC90E66 support"
	depends on PCI
	help
	  This option enables support for the EFAR SLC90E66
	  IDE controller found on some older machines.

	  If unsure, say N.

config PATA_EP93XX
	tristate "Cirrus Logic EP93xx PATA support"
	depends on ARCH_EP93XX
	select PATA_TIMINGS
	help
	  This option enables support for the PATA controller in
	  the Cirrus Logic EP9312 and EP9315 ARM CPU.

	  If unsure, say N.

config PATA_FTIDE010
	tristate "Faraday Technology FTIDE010 PATA support"
	depends on ARM || COMPILE_TEST
	depends on SATA_GEMINI
	help
	  This option enables support for the Faraday FTIDE010
	  PATA controller found in the Cortina Gemini SoCs.

	  If unsure, say N.

config PATA_HPT366
	tristate "HPT 366/368 PATA support"
	depends on PCI
	help
	  This option enables support for the HPT 366 and 368
	  PATA controllers via the new ATA layer.

	  If unsure, say N.

config PATA_HPT37X
	tristate "HPT 370/370A/371/372/374/302 PATA support"
	depends on PCI && HAS_IOPORT
	help
	  This option enables support for the majority of the later HPT
	  PATA controllers via the new ATA layer.

	  If unsure, say N.

config PATA_HPT3X2N
	tristate "HPT 371N/372N/302N PATA support"
	depends on PCI && HAS_IOPORT
	help
	  This option enables support for the N variant HPT PATA
	  controllers via the new ATA layer.

	  If unsure, say N.

config PATA_HPT3X3
	tristate "HPT 343/363 PATA support"
	depends on PCI
	help
	  This option enables support for the HPT 343/363
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_HPT3X3_DMA
	bool "HPT 343/363 DMA support"
	depends on PATA_HPT3X3
	help
	  This option enables DMA support for the HPT343/363
	  controllers. Enable with care as there are still some
	  problems with DMA on this chipset.

config PATA_ICSIDE
	tristate "Acorn ICS PATA support"
	depends on ARM && ARCH_ACORN
	select PATA_TIMINGS
	help
	  On Acorn systems, say Y here if you wish to use the ICS PATA
	  interface card.  This is not required for ICS partition support.
	  If you are unsure, say N to this.

config PATA_IMX
	tristate "PATA support for Freescale iMX"
	depends on ARCH_MXC || COMPILE_TEST
	select PATA_TIMINGS
	help
	  This option enables support for the PATA host available on Freescale
          iMX SoCs.

	  If unsure, say N.

config PATA_IT8213
	tristate "IT8213 PATA support (Experimental)"
	depends on PCI
	help
	  This option enables support for the ITE 821 PATA
          controllers via the new ATA layer.

	  If unsure, say N.

config PATA_IT821X
	tristate "IT8211/2 PATA support"
	depends on PCI
	help
	  This option enables support for the ITE 8211 and 8212
	  PATA controllers via the new ATA layer, including RAID
	  mode.

	  If unsure, say N.

config PATA_JMICRON
	tristate "JMicron PATA support"
	depends on PCI
	help
	  Enable support for the JMicron IDE controller, via the new
	  ATA layer.

	  If unsure, say N.

config PATA_MACIO
	tristate "Apple PowerMac/PowerBook internal 'MacIO' IDE"
	depends on PPC_PMAC
	help
	  Most IDE capable PowerMacs have IDE busses driven by a variant
          of this controller which is part of the Apple chipset used on
          most PowerMac models. Some models have multiple busses using
          different chipsets, though generally, MacIO is one of them.

config PATA_MARVELL
	tristate "Marvell PATA support via legacy mode"
	depends on PCI
	help
	  This option enables limited support for the Marvell 88SE61xx ATA
	  controllers. If you wish to use only the SATA ports then select
	  the AHCI driver alone. If you wish to the use the PATA port or
	  both SATA and PATA include this driver.

	  If unsure, say N.

config PATA_MPC52xx
	tristate "Freescale MPC52xx SoC internal IDE"
	depends on PPC_MPC52xx && PPC_BESTCOMM
	select PPC_BESTCOMM_ATA
	help
	  This option enables support for integrated IDE controller
	  of the Freescale MPC52xx SoC.

	  If unsure, say N.

config PATA_NETCELL
	tristate "NETCELL Revolution RAID support"
	depends on PCI && HAS_IOPORT
	help
	  This option enables support for the Netcell Revolution RAID
	  PATA controller.

	  If unsure, say N.

config PATA_NINJA32
	tristate "Ninja32/Delkin Cardbus ATA support"
	depends on PCI
	help
	  This option enables support for the Ninja32, Delkin and
	  possibly other brands of Cardbus ATA adapter

	  If unsure, say N.

config PATA_NS87415
	tristate "Nat Semi NS87415 PATA support"
	depends on PCI
	select PATA_TIMINGS
	help
	  This option enables support for the National Semiconductor
	  NS87415 PCI-IDE controller.

	  If unsure, say N.

config PATA_OLDPIIX
	tristate "Intel PATA old PIIX support"
	depends on PCI
	help
	  This option enables support for early PIIX PATA support.

	  If unsure, say N.

config PATA_OPTIDMA
	tristate "OPTI FireStar PATA support (Very Experimental)"
	depends on PCI && HAS_IOPORT
	help
	  This option enables DMA/PIO support for the later OPTi
	  controllers found on some old motherboards and in some
	  laptops.

	  If unsure, say N.

config PATA_PDC2027X
	tristate "Promise PATA 2027x support"
	depends on PCI && HAS_IOPORT
	help
	  This option enables support for Promise PATA pdc20268 to pdc20277 host adapters.

	  If unsure, say N.

config PATA_PDC_OLD
	tristate "Older Promise PATA controller support"
	depends on PCI && HAS_IOPORT
	help
	  This option enables support for the Promise 20246, 20262, 20263,
	  20265 and 20267 adapters.

	  If unsure, say N.

config PATA_RADISYS
	tristate "RADISYS 82600 PATA support (Experimental)"
	depends on PCI
	help
	  This option enables support for the RADISYS 82600
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_RDC
	tristate "RDC PATA support"
	depends on PCI
	help
	  This option enables basic support for the later RDC PATA controllers
	  controllers via the new ATA layer. For the RDC 1010, you need to
	  enable the IT821X driver instead.

	  If unsure, say N.

config PATA_SC1200
	tristate "SC1200 PATA support"
	depends on PCI && (X86_32 || COMPILE_TEST) && HAS_IOPORT
	help
	  This option enables support for the NatSemi/AMD SC1200 SoC
	  companion chip used with the Geode processor family.

	  If unsure, say N.

config PATA_SCH
	tristate "Intel SCH PATA support"
	depends on PCI
	help
	  This option enables support for Intel SCH PATA on the Intel
	  SCH (US15W, US15L, UL11L) series host controllers.

	  If unsure, say N.

config PATA_SERVERWORKS
	tristate "SERVERWORKS OSB4/CSB5/CSB6/HT1000 PATA support"
	depends on PCI && HAS_IOPORT
	help
	  This option enables support for the Serverworks OSB4/CSB5/CSB6 and
	  HT1000 PATA controllers, via the new ATA layer.

	  If unsure, say N.

config PATA_SIL680
	tristate "CMD / Silicon Image 680 PATA support"
	depends on PCI
	help
	  This option enables support for CMD / Silicon Image 680 PATA.

	  If unsure, say N.

config PATA_SIS
	tristate "SiS PATA support"
	depends on PCI
	help
	  This option enables support for SiS PATA controllers

	  If unsure, say N.

config PATA_TOSHIBA
	tristate "Toshiba Piccolo support (Experimental)"
	depends on PCI
	help
	  Support for the Toshiba Piccolo controllers. Currently only the
	  primary channel is supported by this driver.

	  If unsure, say N.

config PATA_TRIFLEX
	tristate "Compaq Triflex PATA support"
	depends on PCI
	help
	  Enable support for the Compaq 'Triflex' IDE controller as found
	  on many Compaq Pentium-Pro systems, via the new ATA layer.

	  If unsure, say N.

config PATA_VIA
	tristate "VIA PATA support"
	depends on PCI
	select PATA_TIMINGS
	help
	  This option enables support for the VIA PATA interfaces
	  found on the many VIA chipsets.

	  If unsure, say N.

config PATA_PXA
	tristate "PXA DMA-capable PATA support"
	depends on ARCH_PXA || COMPILE_TEST
	help
	  This option enables support for harddrive attached to PXA CPU's bus.

	  NOTE: This driver utilizes PXA DMA controller, in case your hardware
	        is not capable of doing MWDMA, use pata_platform instead.

	  If unsure, say N.

config PATA_WINBOND
	tristate "Winbond SL82C105 PATA support"
	depends on PCI
	help
	  This option enables support for SL82C105 PATA devices found in the
	  Netwinder and some other systems

	  If unsure, say N.

endif # ATA_BMDMA

comment "PIO-only SFF controllers"

config PATA_CMD640_PCI
	tristate "CMD640 PCI PATA support (Experimental)"
	depends on PCI
	select PATA_TIMINGS
	help
	  This option enables support for the CMD640 PCI IDE
	  interface chip. Only the primary channel is currently
	  supported.

	  If unsure, say N.

config PATA_FALCON
	tristate "Atari Falcon and Q40/Q60 PATA support"
	depends on M68K && (ATARI || Q40)
	help
	  This option enables support for the on-board IDE
	  interface on the Atari Falcon and Q40/Q60.

	  If unsure, say N.

config PATA_GAYLE
	tristate "Amiga Gayle PATA support"
	depends on M68K && AMIGA
	help
	  This option enables support for the on-board IDE
	  interfaces on some Amiga models (A600, A1200,
	  A4000 and A4000T) and also for IDE interfaces on
	  the Zorro expansion bus (M-Tech E-Matrix 530
	  expansion card).

	  If unsure, say N.

config PATA_BUDDHA
	tristate "Buddha/Catweasel/X-Surf PATA support"
	depends on ZORRO
	help
	  This option enables support for the IDE interfaces
	  on the Buddha, Catweasel and X-Surf expansion boards
	  on the Zorro expansion bus. It supports up to two
	  interfaces on the Buddha, three on the Catweasel and
	  two on the X-Surf.

	  If unsure, say N.

config PATA_ISAPNP
	tristate "ISA Plug and Play PATA support"
	depends on ISAPNP
	help
	  This option enables support for ISA plug & play ATA
	  controllers such as those found on old soundcards.

	  If unsure, say N.

config PATA_IXP4XX_CF
	tristate "IXP4XX Compact Flash support"
	depends on ARCH_IXP4XX || COMPILE_TEST
	help
	  This option enables support for a Compact Flash connected on
	  the ixp4xx expansion bus. This driver had been written for
	  Loft/Avila boards in mind but can work with others.

	  If unsure, say N.

config PATA_MPIIX
	tristate "Intel PATA MPIIX support"
	depends on PCI
	help
	  This option enables support for MPIIX PATA support.

	  If unsure, say N.

config PATA_NS87410
	tristate "Nat Semi NS87410 PATA support"
	depends on PCI
	select PATA_TIMINGS
	help
	  This option enables support for the National Semiconductor
	  NS87410 PCI-IDE controller.

	  If unsure, say N.

config PATA_OPTI
	tristate "OPTI621/6215 PATA support (Very Experimental)"
	depends on PCI
	help
	  This option enables full PIO support for the early Opti ATA
	  controllers found on some old motherboards.

	  If unsure, say N.

config PATA_PCMCIA
	tristate "PCMCIA PATA support"
	depends on PCMCIA
	help
	  This option enables support for PCMCIA ATA interfaces, including
	  compact flash card adapters via the new ATA layer.

	  If unsure, say N.

config PATA_PLATFORM
	tristate "Generic platform device PATA support" if HAVE_PATA_PLATFORM
	help
	  This option enables support for generic directly connected ATA
	  devices commonly found on embedded systems.

	  If unsure, say N.

config PATA_OF_PLATFORM
	tristate "OpenFirmware platform device PATA support"
	depends on OF
	select PATA_PLATFORM
	help
	  This option enables support for generic directly connected ATA
	  devices commonly found on embedded systems with OpenFirmware
	  bindings.

	  If unsure, say N.

config PATA_RB532
	tristate "RouterBoard 532 PATA CompactFlash support"
	depends on MIKROTIK_RB532
	help
	  This option enables support for the RouterBoard 532
	  PATA CompactFlash controller.

	  If unsure, say N.

config PATA_RZ1000
	tristate "PC Tech RZ1000 PATA support"
	depends on PCI
	help
	  This option enables basic support for the PC Tech RZ1000/1
	  PATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_PARPORT
	tristate "Parallel port IDE device support"
	depends on PARPORT_PC
	help
	  There are many external CD-ROM and disk devices that connect through
	  your computer's parallel port. Most of them are actually IDE devices
	  using a parallel port IDE adapter. This option enables the
	  PATA_PARPORT subsystem which contains drivers for many of these
	  external drives.
	  Read <file:Documentation/admin-guide/blockdev/paride.rst> for more
	  information.

source "drivers/ata/pata_parport/Kconfig"

comment "Generic fallback / legacy drivers"

config PATA_ACPI
	tristate "ACPI firmware driver for PATA"
	depends on ATA_ACPI && ATA_BMDMA && PCI
	select PATA_TIMINGS
	help
	  This option enables an ACPI method driver which drives
	  motherboard PATA controller interfaces through the ACPI
	  firmware in the BIOS. This driver can sometimes handle
	  otherwise unsupported hardware.

config ATA_GENERIC
	tristate "Generic ATA support"
	depends on PCI && ATA_BMDMA
	select SATA_HOST
	help
	  This option enables support for generic BIOS configured
	  ATA controllers via the new ATA layer

	  If unsure, say N.

config PATA_LEGACY
	tristate "Legacy ISA PATA support (Experimental)"
	depends on (ISA || PCI) && HAS_IOPORT
	select PATA_TIMINGS
	help
	  This option enables support for ISA/PCI bus legacy PATA
	  ports and allows them to be accessed via the new ATA layer.

	  If unsure, say N.

endif # ATA_SFF
endif # ATA
