.. _cache-guide: Cache Interface ############### This is a high-level guide to cache interface and Kconfig options related to cache controllers. See :ref:`cache_api` for API reference material. Zephyr has different Kconfig options to control how the cache controller is implemented and controlled. * :kconfig:option:`CONFIG_CPU_HAS_DCACHE` / :kconfig:option:`CONFIG_CPU_HAS_ICACHE`: these hidden options should be selected at SoC / platform level when the CPU actually supports a data or instruction cache. The cache controller can be in the core or can be an external cache controller for which a driver is provided. These options have the goal to document an available feature and should be set whether we plan to support and use the caches in Zephyr or not. * :kconfig:option:`CONFIG_DCACHE` / :kconfig:option:`CONFIG_ICACHE`: these options must be selected when support for data or instruction cache is present and working in zephyr. All the code paths related to cache control must be conditionally enabled depending on these symbols. When the symbol is set the cache is considered enabled and used. These symbols say nothing about the actual API interface exposed to the user. For example a platform using the data cache can enable the :kconfig:option:`CONFIG_DCACHE` symbol and use some HAL exported function in some platform-specific code to enable and manage the d-cache. * :kconfig:option:`CONFIG_CACHE_MANAGEMENT`: this option must be selected when the cache operations are exposed to the user through a standard API (see :ref:`cache_api`). When this option is enabled we assume that all the cache functions are implemented in the architectural code or in an external cache controller driver. * :kconfig:option:`CONFIG_ARCH_CACHE`/:kconfig:option:`CONFIG_EXTERNAL_CACHE`: mutually exclusive options for :kconfig:option:`CACHE_TYPE` used to define whether the cache operations are implemented at arch level or using an external cache controller with a provided driver. * :kconfig:option:`CONFIG_ARCH_CACHE`: the cache API is implemented by the arch code * :kconfig:option:`CONFIG_EXTERNAL_CACHE`: the cache API is implemented by a driver that supports the external cache controller. In this case the driver must be located as usual in the :file:`drivers/cache/` directory .. _cache_api: Cache API ********* .. doxygengroup:: cache_interface