# Microchip MEC MCU line

# Copyright (c) 2018, Intel Corporation
# Copyright (c) 2022, Microchip Technology Inc.
# SPDX-License-Identifier: Apache-2.0

config SOC_FAMILY_MICROCHIP_MEC
	select HAS_SEGGER_RTT if ZEPHYR_SEGGER_MODULE

if SOC_FAMILY_MICROCHIP_MEC

menuconfig MCHP_MEC_UNSIGNED_HEADER
	bool "Create an unsigned output binary with MCHP MEC binary header"
	depends on SOC_SERIES_MEC172X
	help
	  On Microchip MEC series chip, the ROM code loads firmware image from flash
	  to RAM using a TAG to locate a Header which specifies the location and
	  size of the firmware image. Enable this to invoke the mec_spi_gen tool
	  which generates an SPI image with TAG, Header, and firmware binary. This
	  tool does not produce a signed image which can be authenticated by the
	  Boot-ROM. Use the full Microchip SPI image generator program for
	  authentication and all other Boot-ROM loader features. Refer to the MCHP
	  EVB boards for an example.

if MCHP_MEC_UNSIGNED_HEADER

config MCHP_MEC_HEADER_CHIP
	string
	default "mec15xx" if SOC_SERIES_MEC15XX
	default "mec172x" if SOC_SERIES_MEC172X

choice MCHP_MEC_HEADER_SPI_FREQ_MHZ_CHOICE
	prompt "Clock rate to use for SPI flash"
	default MCHP_MEC_HEADER_SPI_FREQ_MHZ_12
	help
	  This selects the SPI clock frequency that will be used for loading
	  firmware binary from flash to RAM.

config MCHP_MEC_HEADER_SPI_FREQ_MHZ_12
	bool "SPI flash clock rate of 12 MHz"

config MCHP_MEC_HEADER_SPI_FREQ_MHZ_16
	bool "SPI flash clock rate of 16 MHz"

config MCHP_MEC_HEADER_SPI_FREQ_MHZ_24
	bool "SPI flash clock rate of 24 MHz"

config MCHP_MEC_HEADER_SPI_FREQ_MHZ_48
	bool "SPI flash clock rate of 48 MHz"

endchoice

config MCHP_MEC_HEADER_SPI_FREQ_MHZ
	int
	default 12 if MCHP_MEC_HEADER_SPI_FREQ_MHZ_12
	default 25 if MCHP_MEC_HEADER_SPI_FREQ_MHZ_16
	default 24 if MCHP_MEC_HEADER_SPI_FREQ_MHZ_24
	default 48 if MCHP_MEC_HEADER_SPI_FREQ_MHZ_48

choice MCHP_MEC_HEADER_SPI_READ_MODE_CHOICE
	prompt "Reading mode used by the SPI flash"
	default MCHP_MEC_HEADER_SPI_READ_MODE_FAST
	help
	  This sets the reading mode that can be used by the SPI flash.
	  Reading modes supported are normal, fast, dual, and quad.

config MCHP_MEC_HEADER_SPI_READ_MODE_NORMAL
	bool "SPI flash operates full-duplex with frequency (< 25 MHz)"

config MCHP_MEC_HEADER_SPI_READ_MODE_FAST
	bool "SPI flash operates full-duplex with fast reading mode"

config MCHP_MEC_HEADER_SPI_READ_MODE_DUAL
	bool "SPI flash operates with dual data reading mode"

config MCHP_MEC_HEADER_SPI_READ_MODE_QUAD
	bool "SPI flash operates with quad data reading mode"

endchoice

config MCHP_MEC_HEADER_SPI_READ_MODE
	string
	default "slow" if MCHP_MEC_HEADER_SPI_READ_MODE_NORMAL
	default "fast" if MCHP_MEC_HEADER_SPI_READ_MODE_FAST
	default "dual" if MCHP_MEC_HEADER_SPI_READ_MODE_DUAL
	default "quad" if MCHP_MEC_HEADER_SPI_READ_MODE_QUAD

choice MCHP_MEC_HEADER_FLASH_SIZE_CHOICE
	prompt "Flash size"
	default MCHP_MEC_HEADER_FLASH_SIZE_16M
	help
	  This sets the SPI flash size.

config MCHP_MEC_HEADER_FLASH_SIZE_256K
	bool "SPI flash size 256K Bytes"
	help
	  The SPI flash size is 256K Bytes.

config MCHP_MEC_HEADER_FLASH_SIZE_512K
	bool "SPI flash size 512K Bytes"
	help
	  The SPI flash size is 512K Bytes.

config MCHP_MEC_HEADER_FLASH_SIZE_1M
	bool "SPI flash size 1M Bytes"
	help
	  The SPI flash size is 1M Bytes.

config MCHP_MEC_HEADER_FLASH_SIZE_2M
	bool "SPI flash size 2M Bytes"
	help
	  The SPI flash size is 2M Bytes.

config MCHP_MEC_HEADER_FLASH_SIZE_4M
	bool "SPI flash size 4M Bytes"
	help
	  The SPI flash size is 4M Bytes.

config MCHP_MEC_HEADER_FLASH_SIZE_8M
	bool "SPI flash size 8M Bytes"
	help
	  The SPI flash size is 8M Bytes.

config MCHP_MEC_HEADER_FLASH_SIZE_16M
	bool "SPI flash size 16M Bytes"
	help
	  The SPI flash size is 16M Bytes.

endchoice

config MCHP_MEC_HEADER_FLASH_SIZE
	int
	default 256 if MCHP_MEC_HEADER_FLASH_SIZE_256K
	default 512 if MCHP_MEC_HEADER_FLASH_SIZE_512K
	default 1024 if MCHP_MEC_HEADER_FLASH_SIZE_1M
	default 2048 if MCHP_MEC_HEADER_FLASH_SIZE_2M
	default 4096 if MCHP_MEC_HEADER_FLASH_SIZE_4M
	default 8192 if MCHP_MEC_HEADER_FLASH_SIZE_8M
	default 16384 if MCHP_MEC_HEADER_FLASH_SIZE_16M

choice MCHP_MEC_HEADER_SPI_DRVSTR_CHOICE
	prompt "Flash drive strength"
	default MCHP_MEC_HEADER_SPI_DRVSTR_1X
	help
	  This sets the SPI flash size.

config MCHP_MEC_HEADER_SPI_DRVSTR_1X
	bool "SPI flash drive strength multiplier 1"
	help
	  The SPI flash size is 256K Bytes.

config MCHP_MEC_HEADER_SPI_DRVSTR_2X
	bool "SPI flash drive strength multiplier 2"
	help
	  The SPI flash size is 256K Bytes.

config MCHP_MEC_HEADER_SPI_DRVSTR_4X
	bool "SPI flash drive strength multiplier 4"
	help
	  The SPI flash size is 512K Bytes.

config MCHP_MEC_HEADER_SPI_DRVSTR_6X
	bool "SPI flash drive strength multiplier 6"
	help
	  The SPI flash size is 1M Bytes.

endchoice

config MCHP_MEC_HEADER_SPI_DRVSTR
	string
	default "1x" if MCHP_MEC_HEADER_SPI_DRVSTR_1X
	default "2x" if MCHP_MEC_HEADER_SPI_DRVSTR_2X
	default "4x" if MCHP_MEC_HEADER_SPI_DRVSTR_4X
	default "6x" if MCHP_MEC_HEADER_SPI_DRVSTR_6X

choice MCHP_MEC_HEADER_SPI_SLEW_RATE_CHOICE
	prompt "Slew rate of SPI pins"
	default MCHP_MEC_HEADER_SPI_SLEW_RATE_SLOW
	help
	  This sets the slew rate of the SPI pins. Default is slow
	  slew rate which is 1/2 the AHB clock rate. Fast slew is the
	  AHB clock rate.

config MCHP_MEC_HEADER_SPI_SLEW_RATE_SLOW
	bool "SPI pins slew rate is 1/2 AHB frequency"

config MCHP_MEC_HEADER_SPI_SLEW_RATE_FAST
	bool "SPI pins slew rate is 1x AHB frequency"

endchoice

config MCHP_MEC_HEADER_SPI_SLEW_RATE
	string
	default "slow" if MCHP_MEC_HEADER_SPI_SLEW_RATE_SLOW
	default "fast" if MCHP_MEC_HEADER_SPI_SLEW_RATE_FAST

config MCHP_MEC_HEADER_FLASH_SPI_MODE
	int "Flash SPI Mode"
	range 0 7
	default 0
	help
	  This three bit value corresponds to the QMSPI controllers clock idle and
	  input/output data phases. Bits[0:2] are CPOL:CPHA_MOSI:CPHA_MISO. Refer
	  to the data sheet. Default value is 0 corresponding to SPI Mode 0
	  signalling.
	  Setting this field to 0 selects mode 0, CPOL=0, CPHA_MOSI=0, CPHA_MISO=0
	  Setting this filed to 7 selects mode 3, CPOL=1, CPHA_MOSI=1, CPHA_MISO=1

config MCHP_HEADER_VERBOSE_OUTPUT
	bool "Debug console output"
	default n
	help
	  Enable print output from SPI generator script for debug

endif # MCHP_MEC_UNSIGNED_HEADER

# Common debug configuration
choice
	prompt "MEC debug interface general configuration"
	default SOC_MEC_DEBUG_AND_TRACING
	depends on SOC_SERIES_MEC174X || SOC_SERIES_MEC175X || SOC_SERIES_MECH172X
	help
	  Select Debug SoC interface support for MEC SoC family

	config SOC_MEC_DEBUG_DISABLED
		bool "Disable debug support"
		help
		  Debug port is disabled, JTAG/SWD cannot be enabled. JTAG_RST#
		  pin is ignored. All other JTAG pins can be used as GPIOs
		  or other non-JTAG alternate functions.

	config SOC_MEC_DEBUG_WITHOUT_TRACING
		bool "Debug support via Serial wire debug"
		help
		  JTAG port in SWD mode.

	config SOC_MEC_DEBUG_AND_TRACING
		bool "Debug support via Serial wire debug with tracing enabled"
		help
		  JTAG port is enabled in SWD mode.
endchoice

choice
	prompt "MEC debug interface trace configuration"
	default SOC_MEC_DEBUG_AND_SWV_TRACING
	depends on SOC_MEC_DEBUG_AND_TRACING
	help
	  Select tracing mode for debug interface

	config SOC_MEC_DEBUG_AND_ETM_TRACING
		bool "Debug support via Serial wire debug"
		help
		  JTAG port in SWD mode and ETM as tracing method.
		  ETM re-assigns 5 pins for clock and 4-bit data bus.
		  Check data sheet for functions shared with ETM.

	config SOC_MEC_DEBUG_AND_SWV_TRACING
		bool "debug support via Serial Wire Debug and Viewer"
		help
		  JTAG port in SWD mode and SWV as tracing method.
		  Check data sheet for functions shared with SWD and SWV pins.
endchoice

# common processor clock divider configuration
config SOC_MEC_PROC_CLK_DIV
	int "PROC_CLK_DIV"
	default 1
	range 1 48
	help
	  This divisor defines a ratio between processor clock (HCLK)
	  and main 96 MHz clock (MCK):
	  HCLK = MCK / PROC_CLK_DIV
	  Allowed divider values: 1, 3, 4, 16, and 48.

# Select SoC Part No. and configuration options
rsource "*/Kconfig"

endif # SOC_FAMILY_MICROCHIP_MEC
