# SPDX-License-Identifier: GPL-2.0+
#
# Copyright (C) 2019, Pascal Linder <pascal.linder@edu.hefr.ch>

config VENDOR_KM
	bool
	help
	  Selected by any KM board to have additional configurations.

if VENDOR_KM

menu "KM Board Setup"

config KM_PNVRAM
	hex "Pseudo RAM"
	default 0x80000
	depends on !ARCH_SOCFPGA
	help
	  Start address of the pseudo non-volatile RAM for application.

config KM_PHRAM
	hex "Physical RAM"
	default 0x17F000 if ARM
	default 0x100000 if PPC
	depends on !ARCH_SOCFPGA
	help
	  Start address of the physical RAM, which is the mounted /var folder.

config KM_RESERVED_PRAM
	hex "Reserved RAM"
	default 0x801000 if KIRKWOOD
	default 0x0 if MPC83xx
	default 0x1000 if MPC85xx
	depends on !ARCH_SOCFPGA
	help
	  Reserved physical RAM area at the end of memory for special purposes.

config KM_CRAMFS_ADDR
	hex "CRAMFS Address"
	default 0x2400000 if KIRKWOOD
	default 0xC00000 if MPC83xx
	default 0x2000000 if MPC85xx
	depends on !ARCH_SOCFPGA
	help
	  Start address of the CRAMFS containing the Linux kernel.

config KM_KERNEL_ADDR
	hex "Kernel Load Address"
	default 0x2000000 if KIRKWOOD
	default 0x400000 if MPC83xx
	default 0x1000000 if MPC85xx || ARCH_SOCFPGA
	help
	  Address where to load Linux kernel in RAM.

config KM_FDT_ADDR
	hex "FDT Load Address"
	default 0x23E0000 if KIRKWOOD || ARCH_SOCFPGA
	default 0xB80000 if MPC83xx
	default 0x1F80000 if MPC85xx
	help
	  Address where to load flattened device tree in RAM.

config KM_CONSOLE_TTY
	string "KM Console"
	default "ttyS0"
	help
	  TTY console to use on board.

config KM_DEF_NETDEV
	string "Default Netdevice"
	default "eth0"
	help
	  Default netdevice for debug interface

config KM_COMMON_ETH_INIT
	bool "Common Ethernet Initialization"
	default y if KIRKWOOD || MPC83xx
	default n if MPC85xx || ARCH_SOCFPGA
	help
	  Use the Ethernet initialization implemented in common code, which
	  detects if a Piggy board is present.

config PIGGY_MAC_ADDRESS_OFFSET
	int "Piggy Address Offset"
	default 0
	help
	  MAC address offset for the Piggy board.

config KM_MVEXTSW_ADDR
	hex "Marvell Switch Address"
	depends on MV88E6352_SWITCH
	default 0x10
	help
	  Address of external Marvell switch.

config KM_IVM_BUS
	int "IVM I2C Bus"
	default 0 if ARCH_SOCFPGA
	default 1 if KIRKWOOD || MPC85xx
	default 2 if MPC83xx
	help
	  Identifier number of I2C bus, where the inventory EEPROM is connected to.

config SYS_IVM_EEPROM_ADR
	hex "IVM I2C Address"
	default 0x50
	help
	  I2C address of the EEPROM containing the inventory.

config SYS_IVM_EEPROM_MAX_LEN
	hex "IVM Length"
	default 0x400
	help
	  Maximum length of inventory in EEPROM.

config SYS_IVM_EEPROM_PAGE_LEN
	hex "IVM Page Size"
	default 0x100
	help
	  Page size of inventory in EEPROM.

source "board/keymile/km83xx/Kconfig"
source "board/keymile/kmp204x/Kconfig"
source "board/keymile/km_arm/Kconfig"

endmenu

endif
