# SPDX-License-Identifier: GPL-2.0-only

config SOUTHBRIDGE_AMD_CIMX_SB800
	bool
	default n
	select HAVE_USBDEBUG_OPTIONS
	select AMD_SB_CIMX
	select HAVE_CF9_RESET
	select HAVE_CF9_RESET_PREPARE
	select SOC_AMD_COMMON
	select SOC_AMD_COMMON_BLOCK_ACPIMMIO
	select SOC_AMD_COMMON_BLOCK_ACPIMMIO_BIOSRAM
	select SOC_AMD_COMMON_BLOCK_PCI_MMCONF
	select BOOT_DEVICE_SUPPORTS_WRITES

if SOUTHBRIDGE_AMD_CIMX_SB800
config ENABLE_IDE_COMBINED_MODE
	bool "Enable SATA IDE combined mode"
	default n
	help
	  If Combined Mode is enabled. IDE controller is exposed and
	  SATA controller has control over Port0 through Port3,
	  IDE controller has control over Port4 and Port5.

	  If Combined Mode is disabled, IDE controller is hidden and
	  SATA controller has full control of all 6 Ports when operating in non-IDE mode.

config IDE_COMBINED_MODE
	hex
	default 0x0 if ENABLE_IDE_COMBINED_MODE
	default 0x1 if !ENABLE_IDE_COMBINED_MODE

choice
	prompt "SATA Mode"
	default SB800_SATA_AHCI
	help
	  Select the mode in which SATA should be driven. NATIVE AHCI, or RAID.
	  The default is AHCI.

config SB800_SATA_IDE
	bool "NATIVE"
	help
	  NATIVE does not require a ROM.

config SB800_SATA_AHCI
	bool "AHCI"
	help
	  AHCI is the default and may work with or without AHCI ROM. It depends on the payload support.
	  For example, seabios does not require the AHCI ROM.

config SB800_SATA_RAID
	bool "RAID"
	help
	  sb800 RAID mode must have the two required ROM files.

endchoice

config SB800_SATA_MODE
	hex
	depends on (SB800_SATA_IDE || SB800_SATA_RAID || SB800_SATA_AHCI)
	default 0x0 if SB800_SATA_IDE
	default 0x1 if SB800_SATA_RAID
	default 0x2 if SB800_SATA_AHCI

config SB_SUPERIO_HWM
	bool
	default n

if SB800_SATA_AHCI
config AHCI_ROM_ID
	string "AHCI device PCI IDs"
	default "1002,4391"

config SB800_AHCI_ROM
	bool "Add a AHCI ROM"

config AHCI_ROM_FILE
	string "AHCI ROM path and filename"
	depends on SB800_AHCI_ROM
	default "site-local/sb800/ahci.bin"
endif

if SB800_SATA_RAID
config RAID_ROM_ID
	string "RAID device PCI IDs"
	default "1002,4393"
	help
	  1002,4392 for SATA NON-RAID5 module, 1002,4393 for SATA RAID5 mode

config RAID_ROM_FILE
	string "RAID ROM path and filename"
	depends on SB800_SATA_RAID
	default "site-local/sb800/raid.bin"

config RAID_MISC_ROM_FILE
	string "RAID Misc ROM path and filename"
	default "site-local/sb800/misc.bin"
	depends on SB800_SATA_RAID

config RAID_MISC_ROM_POSITION
	hex "RAID Misc ROM Position"
	default 0xFFF00000
	depends on SB800_SATA_RAID
	help
	  The RAID ROM requires that the MISC ROM is located between the range
	  0xFFF0_0000 to 0xFFF0_FFFF. Also, it must 1K bytes aligned.
	  The CONFIG_ROM_SIZE must larger than 0x100000.

endif

config SB800_IMC_FWM
	bool "Add IMC firmware"
	default n
	select SPI_FLASH_HAS_VOLATILE_GROUP if SPI_FLASH
	help
	  Add SB800 / Hudson 1 IMC Firmware to support the onboard fan control.

if SB800_IMC_FWM

config SB800_IMC_FWM_FILE
	string "IMC firmware path and filename"
	default "3rdparty/blobs/southbridge/amd/sb800/imc.bin"

choice
	prompt "SB800 Firmware ROM Position"

config SB800_FWM_AT_FFFA0000
	bool "0xFFFA0000"
	help
	  The IMC and GEC ROMs requires a 'signature' located at one of several
	  fixed locations in memory.  The location used shouldn't matter, just
	  select an area that doesn't conflict with anything else.

config SB800_FWM_AT_FFF20000
	bool "0xFFF20000"
	help
	  The IMC and GEC ROMs requires a 'signature' located at one of several
	  fixed locations in memory.  The location used shouldn't matter, just
	  select an area that doesn't conflict with anything else.

config SB800_FWM_AT_FFE20000
	depends on BOARD_ROMSIZE_KB_8192 || BOARD_ROMSIZE_KB_4096 || BOARD_ROMSIZE_KB_2048
	bool "0xFFE20000"
	help
	  The IMC and GEC ROMs requires a 'signature' located at one of several
	  fixed locations in memory.  The location used shouldn't matter, just
	  select an area that doesn't conflict with anything else.

config SB800_FWM_AT_FFC20000
	depends on BOARD_ROMSIZE_KB_8192 || BOARD_ROMSIZE_KB_4096
	bool "0xFFC20000"
	help
	  The IMC and GEC ROMs requires a 'signature' located at one of several
	  fixed locations in memory.  The location used shouldn't matter, just
	  select an area that doesn't conflict with anything else.

config SB800_FWM_AT_FF820000
	depends on BOARD_ROMSIZE_KB_8192
	bool "0xFF820000"
	help
	  The IMC and GEC ROMs requires a 'signature' located at one of several
	  fixed locations in memory.  The location used shouldn't matter, just
	  select an area that doesn't conflict with anything else.

endchoice

config SB800_FWM_POSITION
	hex
	default 0xFFFA0000 if SB800_FWM_AT_FFFA0000
	default 0xFFF20000 if SB800_FWM_AT_FFF20000
	default 0xFFE20000 if SB800_FWM_AT_FFE20000
	default 0xFFC20000 if SB800_FWM_AT_FFC20000
	default 0xFF820000 if SB800_FWM_AT_FF820000

endif  #SB800_IMC_FWM

config EHCI_BAR
	hex
	default 0xfef00000

choice
	prompt "Fan Control"
	default SB800_NO_FAN_CONTROL
	help
	  Select the method of SB800 fan control to be used.  None would be
	  for either fixed maximum speed fans connected to the SB800 or for
	  an external chip controlling the fan speeds.  Manual control sets
	  up the SB800 fan control registers.  IMC fan control uses the SB800
	  IMC to actively control the fan speeds.

config SB800_NO_FAN_CONTROL
	bool "None"
	help
	  No SB800 Fan control - Do not set up the SB800 fan control registers.

config SB800_MANUAL_FAN_CONTROL
	bool "Manual"
	help
	  Configure the SB800 fan control registers in devicetree.cb.

config SB800_IMC_FAN_CONTROL
	bool "IMC Based"
	depends on SB800_IMC_FWM
	help
	  Set up the SB800 to use the IMC based Fan controller.  This requires
	  the IMC ROM from AMD.  Configure the registers in devicetree.cb.

endchoice

endif #SOUTHBRIDGE_AMD_CIMX_SB800
