spl: fat: Add option to disable DMA alignment

If we don't DMA-align buffers we pass to FAT, it will align them itself.
This behaviour likely should be deprecated in favor of
CONFIG_BOUNCE_BUFFER, but that's a task for another series. For the
meantime, don't bother aligning the buffer unless we had been doing so in
the past.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Sean Anderson 2023-11-08 11:48:58 -05:00 committed by Tom Rini
parent 14509a28aa
commit 54a8d845be
3 changed files with 24 additions and 4 deletions

View file

@ -694,13 +694,28 @@ config SPL_FS_SQUASHFS
config SPL_FS_FAT config SPL_FS_FAT
bool "Support FAT filesystems" bool "Support FAT filesystems"
select FS_FAT select FS_FAT
select SPL_LOAD_BLOCK
help help
Enable support for FAT and VFAT filesystems with SPL. This Enable support for FAT and VFAT filesystems with SPL. This
permits U-Boot (or Linux in Falcon mode) to be loaded from a FAT permits U-Boot (or Linux in Falcon mode) to be loaded from a FAT
filesystem from within SPL. Support for the underlying block filesystem from within SPL. Support for the underlying block
device (e.g. MMC or USB) must be enabled separately. device (e.g. MMC or USB) must be enabled separately.
config SPL_FS_FAT_DMA_ALIGN
bool "Use DMA-aligned buffers with FAT"
depends on SPL_FS_FAT
select SPL_LOAD_BLOCK
default y if SPL_LOAD_FIT
help
The FAT filesystem driver tries to ensure that the reads it issues to
the block subsystem use DMA-aligned buffers. If the supplied buffer is
not DMA-aligned, the FAT driver will use a bounce-buffer and read
block-by-block. This is separate from the bounce-buffer used by the
block subsystem (CONFIG_BOUNCE_BUFFER).
Enable this config to align buffers passed to the FAT filesystem
driver. This will speed up reads, but will increase the size of U-Boot
by around 60 bytes.
config SPL_FS_LOAD_PAYLOAD_NAME config SPL_FS_LOAD_PAYLOAD_NAME
string "File to load for U-Boot from the filesystem" string "File to load for U-Boot from the filesystem"
depends on SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS || SPL_SEMIHOSTING depends on SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS || SPL_SEMIHOSTING
@ -1282,7 +1297,6 @@ config SPL_NVME
depends on BLK depends on BLK
select FS_LOADER select FS_LOADER
select SPL_BLK_FS select SPL_BLK_FS
select SPL_LOAD_BLOCK
help help
This option enables support for NVM Express devices. This option enables support for NVM Express devices.
It supports basic functions of NVMe (read/write). It supports basic functions of NVMe (read/write).

View file

@ -82,7 +82,10 @@ int spl_blk_load_image(struct spl_image_info *spl_image,
} }
load.read = spl_fit_read; load.read = spl_fit_read;
if (IS_ENABLED(CONFIG_SPL_FS_FAT_DMA_ALIGN))
spl_set_bl_len(&load, ARCH_DMA_MINALIGN); spl_set_bl_len(&load, ARCH_DMA_MINALIGN);
else
spl_set_bl_len(&load, 1);
load.priv = &dev; load.priv = &dev;
return spl_load(spl_image, bootdev, &load, filesize, 0); return spl_load(spl_image, bootdev, &load, filesize, 0);
} }

View file

@ -86,7 +86,10 @@ int spl_load_image_fat(struct spl_image_info *spl_image,
} }
load.read = spl_fit_read; load.read = spl_fit_read;
if (IS_ENABLED(CONFIG_SPL_FS_FAT_DMA_ALIGN))
spl_set_bl_len(&load, ARCH_DMA_MINALIGN); spl_set_bl_len(&load, ARCH_DMA_MINALIGN);
else
spl_set_bl_len(&load, 1);
load.priv = (void *)filename; load.priv = (void *)filename;
err = spl_load(spl_image, bootdev, &load, size, 0); err = spl_load(spl_image, bootdev, &load, size, 0);