Linux preempt-rt

Check our new training course

Real-Time Linux with PREEMPT_RT

Check our new training course
with Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

# Copyright (c) 2017 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config SOC_ESP32
	bool "ESP32"
	select XTENSA
	select CLOCK_CONTROL
	select CLOCK_CONTROL_ESP32
	select DYNAMIC_INTERRUPTS

if SOC_ESP32

config IDF_TARGET_ESP32
	bool "ESP32 as target board"
	default y

config ESPTOOLPY_FLASHFREQ_80M
	bool
	default y

config ESP32_BT_RESERVE_DRAM
	hex "Bluetooth controller reserved RAM region"
	default 0xdb5c if BT
	default 0

config ESP_HEAP_MEM_POOL_REGION_1_SIZE
	int "Internal DRAM region 1 mempool size"
	default 49152
	help
	  ESP32 has two banks of size 192K and 128K which can be used
	  as DRAM, system heap allocates area from region 0.
	  This configuration can be used to add memory from region 1
	  to heap and can be allocated using k_malloc.

config ESP_SPIRAM
	bool "Support for external, SPI-connected RAM"
	help
	  This enables support for an external SPI RAM chip, connected in
	  parallel with the main SPI flash chip.

config ESP_HEAP_MIN_EXTRAM_THRESHOLD
	int "Minimum threshold for external RAM allocation"
	default 8192
	range 1024 131072
	depends on ESP_SPIRAM
	help
	  Threshold to decide if memory will be allocated from DRAM
	  or SPIRAM. If value of allocation size is less than this value,
	  memory will be allocated from internal RAM.

config ESP_HEAP_SEARCH_ALL_REGIONS
	bool "Search for all available heap regions"
	depends on ESP_SPIRAM
	default y
	help
	  This configuration enables searching all available heap
	  regions. If the region of desired capability is exhausted,
	  memory will be allocated from other available region.

menu "SPI RAM config"
	depends on ESP_SPIRAM

	choice SPIRAM_TYPE
		prompt "Type of SPI RAM chip in use"
		default SPIRAM_TYPE_ESPPSRAM16

		config SPIRAM_TYPE_ESPPSRAM16
			bool "ESP-PSRAM16 or APS1604"

		config SPIRAM_TYPE_ESPPSRAM32
			bool "ESP-PSRAM32 or IS25WP032"

		config SPIRAM_TYPE_ESPPSRAM64
			bool "ESP-PSRAM64 or LY68L6400"

	endchoice

	config ESP_SPIRAM_SIZE
		int "Size of SPIRAM part"
		default 2097152 if SPIRAM_TYPE_ESPPSRAM16
		default 4194304 if SPIRAM_TYPE_ESPPSRAM32
		default 8388608 if SPIRAM_TYPE_ESPPSRAM64
		help
		  Specify size of SPIRAM part.
		  NOTE: If SPIRAM size is greater than 4MB, only
		  lower 4MB can be allocated using k_malloc().

	choice SPIRAM_SPEED
		prompt "Set RAM clock speed"
		default SPIRAM_SPEED_40M
		help
		  Select the speed for the SPI RAM chip.
		  If SPI RAM is enabled, we only support three combinations of SPI speed mode we supported now:

		  1. Flash SPI running at 40Mhz and RAM SPI running at 40Mhz
		  2. Flash SPI running at 80Mhz and RAM SPI running at 40Mhz
		  3. Flash SPI running at 80Mhz and RAM SPI running at 80Mhz

		  Note: If the third mode(80Mhz+80Mhz) is enabled for SPI RAM of type 32MBit, one of the HSPI/VSPI host
		  will be occupied by the system. Which SPI host to use can be selected by the config item
		  SPIRAM_OCCUPY_SPI_HOST. Application code should never touch HSPI/VSPI hardware in this case. The
		  option to select 80MHz will only be visible if the flash SPI speed is also 80MHz.
		  (ESPTOOLPY_FLASHFREQ_79M is true)

		config SPIRAM_SPEED_40M
		    bool "40MHz clock speed"
		config SPIRAM_SPEED_80M
			depends on ESPTOOLPY_FLASHFREQ_80M
			bool "80MHz clock speed"
	endchoice

	menu "PSRAM clock and cs IO for ESP32-DOWD"

		config D0WD_PSRAM_CLK_IO
			int "PSRAM CLK IO number"
			range 0 33
			default 17
			help
			  The PSRAM CLOCK IO can be any unused GPIO, user can config it based on hardware design. If user use
			  1.8V flash and 1.8V psram, this value can only be one of 6, 7, 8, 9, 10, 11, 16, 17.

		config D0WD_PSRAM_CS_IO
			int "PSRAM CS IO number"
			range 0 33
			default 16
			help
			  The PSRAM CS IO can be any unused GPIO, user can config it based on hardware design. If user use
			  1.8V flash and 1.8V psram, this value can only be one of 6, 7, 8, 9, 10, 11, 16, 17.
	endmenu

	menu "PSRAM clock and cs IO for ESP32-D2WD"

		config D2WD_PSRAM_CLK_IO
			int "PSRAM CLK IO number"
			range 0 33
			default 9
			help
			  User can config it based on hardware design. For ESP32-D2WD chip, the psram can only be 1.8V psram,
			  so this value can only be one of 6, 7, 8, 9, 10, 11, 16, 17.

		config D2WD_PSRAM_CS_IO
			int "PSRAM CS IO number"
			range 0 33
			default 10
			help
			  User can config it based on hardware design. For ESP32-D2WD chip, the psram can only be 1.8V psram,
			  so this value can only be one of 6, 7, 8, 9, 10, 11, 16, 17.
		endmenu

	menu "PSRAM clock and cs IO for ESP32-PICO"

		config PICO_PSRAM_CS_IO
			int "PSRAM CS IO number"
			range 0 33
			default 10
			help
			  The PSRAM CS IO can be any unused GPIO, user can config it based on hardware design.

			  For ESP32-PICO chip, the psram share clock with flash, so user do not need to configure the clock
			  IO.
			  For the reference hardware design, please refer to
			  https://www.espressif.com/sites/default/files/documentation/esp32-pico-d4_datasheet_en.pdf

	endmenu

	config SPIRAM_CUSTOM_SPIWP_SD3_PIN
		bool "Use custom SPI PSRAM WP(SD3) Pin when flash pins set in eFuse (read help)"
		default y if SPIRAM_SPIWP_SD3_PIN != 7  # backwards compatibility, can remove in IDF 5
		default n
		help
		  This setting is only used if the SPI flash pins have been overridden by setting the eFuses
		  SPI_PAD_CONFIG_xxx, and the SPI flash mode is DIO or DOUT.

		  When this is the case, the eFuse config only defines 3 of the 4 Quad I/O data pins. The WP pin (aka
		  ESP32 pin "SD_DATA_3" or SPI flash pin "IO2") is not specified in eFuse. The psram only has QPI
		  mode, so a WP pin setting is necessary.

		  If this config item is set to N (default), the correct WP pin will be automatically used for any
		  Espressif chip or module with integrated flash. If a custom setting is needed, set this config item
		  to Y and specify the GPIO number connected to the WP pin.

		  When flash mode is set to QIO or QOUT, the PSRAM WP pin will be set the same as the SPI Flash WP pin
		  configured in the bootloader.

	config SPIRAM_SPIWP_SD3_PIN
		int "Custom SPI PSRAM WP(SD3) Pin"
		range 0 33
		default 7
		help
		  The option "Use custom SPI PSRAM WP(SD3) pin" must be set or this value is ignored

		  If burning a customized set of SPI flash pins in eFuse and using DIO or DOUT mode for flash, set this
		  value to the GPIO number of the SPIRAM WP pin.

	config SPIRAM
		bool
		default y
endmenu

choice ESP32_UNIVERSAL_MAC_ADDRESSES
	bool "Number of universally administered (by IEEE) MAC address"
	default ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR
	help
	  Configure the number of universally administered (by IEEE) MAC addresses.
	  During initialization, MAC addresses for each network interface are generated or
	  derived from a single base MAC address. If the number of universal MAC addresses is four,
	  all four interfaces (WiFi station, WiFi softap, Bluetooth and Ethernet) receive a universally
	  administered MAC address. These are generated sequentially by adding 0, 1, 2 and 3 (respectively)
	  to the final octet of the base MAC address. If the number of universal MAC addresses is two,
	  only two interfaces (WiFi station and Bluetooth) receive a universally administered MAC address.
	  These are generated sequentially by adding 0 and 1 (respectively) to the base MAC address.
	  The remaining two interfaces (WiFi softap and Ethernet) receive local MAC addresses.
	  These are derived from the universal WiFi station and Bluetooth MAC addresses, respectively.
	  When using the default (Espressif-assigned) base MAC address, either setting can be used.
	  When using a custom universal MAC address range, the correct setting will depend on the
	  allocation of MAC addresses in this range (either 2 or 4 per device.)

	config ESP32_UNIVERSAL_MAC_ADDRESSES_TWO
		bool "Two"
		select ESP_MAC_ADDR_UNIVERSE_WIFI_STA
		select ESP_MAC_ADDR_UNIVERSE_BT

	config ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR
		bool "Four"
		select ESP_MAC_ADDR_UNIVERSE_WIFI_STA
		select ESP_MAC_ADDR_UNIVERSE_WIFI_AP
		select ESP_MAC_ADDR_UNIVERSE_BT
		select ESP_MAC_ADDR_UNIVERSE_ETH

endchoice

config ESP_MAC_ADDR_UNIVERSE_WIFI_AP
	bool

config ESP_MAC_ADDR_UNIVERSE_WIFI_STA
	bool

config ESP_MAC_ADDR_UNIVERSE_BT
	bool

config ESP_MAC_ADDR_UNIVERSE_ETH
	bool

config ESP32_UNIVERSAL_MAC_ADDRESSES
	int
	default 2 if ESP32_UNIVERSAL_MAC_ADDRESSES_TWO
	default 4 if ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR

endif # SOC_ESP32