SPRUJ55D September 2023 – July 2025 AM263P2 , AM263P2-Q1 , AM263P4 , AM263P4-Q1
The FSS includes a prefetcher module optimized for XIP (Execute-In-Place) operations. When no pending requests exist, this module automatically fetches the next sequential block of data. This prefetching mechanism significantly improves performance during linear code execution
By default, the prefetcher block is enabled, and setting the disxip bit in the SYSCONFIG will disable this feature and any prefetched data will be discarded. Once the pre-fetch starts, it will continue as long as the following request occurs during the pre-fetch burst and the requested address is the same address as the pre-fetched burst address. If the read to the pre-fetch burst occurs after the bus has gone idle, the next burst will not be read. If a different block is read, then pre-fetching stops after current pre-fetch completes and the pre-fetch data is saved into a stack allowing up to 1 burst to be remembered. Any write to a pre-fetched burst address will cause that pre-fetched burst to be purged. If the disxip config bit is set pre-fetching is disabled and any prefetched data is discarded.
It is recommended to use disxip as a static configuration bit that is selected based on desired mode of operation and not toggled dynamically while reads are active. For example, pulsing disxip high by writing 1 and 0 in quick succession will not guarantee that prefetch buffer is purged. This is because this pulsing can occur while a prefetch read is in progress and disxip may end up being 0 while prefetch buffer is written. This race condition between software disxip pulsing and hardware prefetch buffer write can be avoided by ensuring that disxip is selected for next read phase based on whether prefetching is required for this phase.
Please note that this is referring to prefetching feature that is useful for linear accesses associated with XIP. This is NOT referring to XIP features implemented in flash Controller or memory device.
Although this feature has reference to XIP, it is not limited to XIP and is applicable to any reads from flash. However, XIP is used in the name since it is most likely to be used for XIP. Block copy requests are generally provided back-to-back and hence XIP prefetcher logic may not even be activated.
The prefetcher module also has the ability to turn all read request into 2-bytes aligned (even length) request due to OSPI limitation on DDR mode. In other words, the logic makes the OSPI address and length even and inclusive of the requested bytes. Setting the ospi_ddr_disable_mode bit will disable this feature and pass all read requests unchanged. To use this feature, the ospi_32b_disable_mode bit must be set.
This module also can take any read and make it a 32-bit read aligned to a 32-bit aligned address for OSPI pipeline modes. Setting the ospi_32b_disable_mode bit will disable this feature and pass all read requests unchanged. This feature has priority over the DDR feature so if both control bits are clear this feature is in operation.