GPMC

The general-purpose memory controller (GPMC) is an unified memory controller dedicated to interfacing external memory devices:
 * Asynchronous SRAM-like memories and application-specific integrated circuit (ASIC) or FPGA devices
 * Asynchronous, synchronous, and page mode (only available in non-multiplexed mode) burst NOR flash devices
 * NAND Flash
 * Pseudo-SRAM devices

The GPMC driver in the Linux kernel was added as part of the 2.6.18 release for the OMAP2 class of processors. The driver is automatically built-in for compatible processors. As of Linux 5.19, it can optionally be built as a module.

As the GPMC is a general-purpose bus used for a variety of purposes, it is extremely configurable. The timing of the bus is controlled through the device tree. Each device that the GPMC communicates with has its own configuration within the device tree, allowing different timings to be used with each device on the bus. See the documentation for the device-tree child bindings before 5.16 or in 5.16 and later.