mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 00:49:43 +00:00
add4967124
On AM654 SoC(arm64) which is IO coherent and has L3 Cache, cache maintenance operations being done to support non-coherent platforms causes issues. For example, here is how U-Boot prepares/handles a buffer to receive data from a device (DMA Write). This may vary slightly depending on the driver framework: Start DMA to write to destination buffer Wait for DMA to be done (dma_receive()/dma_memcpy()) Invalidate destination buffer (invalidate_dcache_range()) Read from destination buffer The invalidate after the DMA is needed in order to read latest data from memory that’s updated by DMA write. Also, in case random prefetch has pulled in buffer data during the “wait for DMA” before the DMA has written to it. This works well for non-coherent architectures. In case of coherent architecture with L3 cache, DMA write would directly update L3 cache contents (assuming cacheline is present in L3) without updating the DDR memory. So invalidate after “wait for DMA” in above sequence would discard latest data and read will cause stale data to be fetched from DDR. Therefore invalidate after “wait for DMA” is not always correct on coherent architecture. Therefore, provide a Kconfig option to disable cache maintenance ops on coherent architectures. This has added benefit of improving the performance of DMA transfers as we no longer need to invalidate/flush individual cache lines(especially for buffer thats several KBs in size). In order to facilitate use of same Kconfig across different architecture, I have added the symbol to top level arch/Kconfig file. Patch currently disables cache maintenance ops for arm64 only. flush_dcache_all() and invalidate_dcache_all() are exclusively used during enabling/disabling dcache and hence are not disabled. Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
251 lines
5.3 KiB
Text
251 lines
5.3 KiB
Text
config CREATE_ARCH_SYMLINK
|
|
bool
|
|
|
|
config HAVE_ARCH_IOREMAP
|
|
bool
|
|
|
|
choice
|
|
prompt "Architecture select"
|
|
default SANDBOX
|
|
|
|
config ARC
|
|
bool "ARC architecture"
|
|
select ARCH_EARLY_INIT_R
|
|
select ARC_TIMER
|
|
select CLK
|
|
select HAVE_PRIVATE_LIBGCC
|
|
select SUPPORT_OF_CONTROL
|
|
select TIMER
|
|
|
|
config ARM
|
|
bool "ARM architecture"
|
|
select CREATE_ARCH_SYMLINK
|
|
select HAVE_PRIVATE_LIBGCC if !ARM64
|
|
select SUPPORT_OF_CONTROL
|
|
|
|
config M68K
|
|
bool "M68000 architecture"
|
|
select HAVE_PRIVATE_LIBGCC
|
|
select SYS_BOOT_GET_CMDLINE
|
|
select SYS_BOOT_GET_KBD
|
|
|
|
config MICROBLAZE
|
|
bool "MicroBlaze architecture"
|
|
select SUPPORT_OF_CONTROL
|
|
imply CMD_IRQ
|
|
|
|
config MIPS
|
|
bool "MIPS architecture"
|
|
select HAVE_ARCH_IOREMAP
|
|
select HAVE_PRIVATE_LIBGCC
|
|
select SUPPORT_OF_CONTROL
|
|
|
|
config NDS32
|
|
bool "NDS32 architecture"
|
|
select SUPPORT_OF_CONTROL
|
|
|
|
config NIOS2
|
|
bool "Nios II architecture"
|
|
select CPU
|
|
select DM
|
|
select OF_CONTROL
|
|
select SUPPORT_OF_CONTROL
|
|
imply CMD_DM
|
|
|
|
config PPC
|
|
bool "PowerPC architecture"
|
|
select HAVE_PRIVATE_LIBGCC
|
|
select SUPPORT_OF_CONTROL
|
|
select SYS_BOOT_GET_CMDLINE
|
|
select SYS_BOOT_GET_KBD
|
|
|
|
config RISCV
|
|
bool "RISC-V architecture"
|
|
select CREATE_ARCH_SYMLINK
|
|
select SUPPORT_OF_CONTROL
|
|
select OF_CONTROL
|
|
select DM
|
|
imply DM_SERIAL
|
|
imply DM_ETH
|
|
imply DM_MMC
|
|
imply DM_SPI
|
|
imply DM_SPI_FLASH
|
|
imply BLK
|
|
imply CLK
|
|
imply MTD
|
|
imply TIMER
|
|
imply CMD_DM
|
|
|
|
config SANDBOX
|
|
bool "Sandbox"
|
|
select BOARD_LATE_INIT
|
|
select DM
|
|
select DM_GPIO
|
|
select DM_I2C
|
|
select DM_KEYBOARD
|
|
select DM_MMC
|
|
select DM_SERIAL
|
|
select DM_SPI
|
|
select DM_SPI_FLASH
|
|
select HAVE_BLOCK_DEVICE
|
|
select LZO
|
|
select SPI
|
|
select SUPPORT_OF_CONTROL
|
|
imply BITREVERSE
|
|
select BLOBLIST
|
|
imply CMD_DM
|
|
imply CMD_GETTIME
|
|
imply CMD_HASH
|
|
imply CMD_IO
|
|
imply CMD_IOTRACE
|
|
imply CMD_LZMADEC
|
|
imply CMD_SATA
|
|
imply CMD_SF_TEST
|
|
imply CRC32_VERIFY
|
|
imply FAT_WRITE
|
|
imply FIRMWARE
|
|
imply HASH_VERIFY
|
|
imply LZMA
|
|
imply SCSI
|
|
imply TEE
|
|
imply AVB_VERIFY
|
|
imply LIBAVB
|
|
imply CMD_AVB
|
|
imply UDP_FUNCTION_FASTBOOT
|
|
imply VIRTIO_MMIO
|
|
imply VIRTIO_PCI
|
|
imply VIRTIO_SANDBOX
|
|
imply VIRTIO_BLK
|
|
imply VIRTIO_NET
|
|
imply DM_SOUND
|
|
imply PCH
|
|
|
|
config SH
|
|
bool "SuperH architecture"
|
|
select HAVE_PRIVATE_LIBGCC
|
|
|
|
config X86
|
|
bool "x86 architecture"
|
|
select CREATE_ARCH_SYMLINK
|
|
select DM
|
|
select DM_PCI
|
|
select HAVE_ARCH_IOMAP
|
|
select HAVE_PRIVATE_LIBGCC
|
|
select OF_CONTROL
|
|
select PCI
|
|
select SUPPORT_OF_CONTROL
|
|
select TIMER
|
|
select USE_PRIVATE_LIBGCC
|
|
select X86_TSC_TIMER
|
|
imply BLK
|
|
imply CMD_DM
|
|
imply CMD_FPGA_LOADMK
|
|
imply CMD_GETTIME
|
|
imply CMD_IO
|
|
imply CMD_IRQ
|
|
imply CMD_PCI
|
|
imply CMD_SF_TEST
|
|
imply CMD_ZBOOT
|
|
imply DM_ETH
|
|
imply DM_GPIO
|
|
imply DM_KEYBOARD
|
|
imply DM_MMC
|
|
imply DM_RTC
|
|
imply DM_SCSI
|
|
imply DM_SERIAL
|
|
imply DM_SPI
|
|
imply DM_SPI_FLASH
|
|
imply DM_USB
|
|
imply DM_VIDEO
|
|
imply SYSRESET
|
|
imply SYSRESET_X86
|
|
imply USB_ETHER_ASIX
|
|
imply USB_ETHER_SMSC95XX
|
|
imply USB_HOST_ETHER
|
|
imply PCH
|
|
|
|
config XTENSA
|
|
bool "Xtensa architecture"
|
|
select CREATE_ARCH_SYMLINK
|
|
select SUPPORT_OF_CONTROL
|
|
|
|
endchoice
|
|
|
|
config SYS_ARCH
|
|
string
|
|
help
|
|
This option should contain the architecture name to build the
|
|
appropriate arch/<CONFIG_SYS_ARCH> directory.
|
|
All the architectures should specify this option correctly.
|
|
|
|
config SYS_CPU
|
|
string
|
|
help
|
|
This option should contain the CPU name to build the correct
|
|
arch/<CONFIG_SYS_ARCH>/cpu/<CONFIG_SYS_CPU> directory.
|
|
|
|
This is optional. For those targets without the CPU directory,
|
|
leave this option empty.
|
|
|
|
config SYS_SOC
|
|
string
|
|
help
|
|
This option should contain the SoC name to build the directory
|
|
arch/<CONFIG_SYS_ARCH>/cpu/<CONFIG_SYS_CPU>/<CONFIG_SYS_SOC>.
|
|
|
|
This is optional. For those targets without the SoC directory,
|
|
leave this option empty.
|
|
|
|
config SYS_VENDOR
|
|
string
|
|
help
|
|
This option should contain the vendor name of the target board.
|
|
If it is set and
|
|
board/<CONFIG_SYS_VENDOR>/common/Makefile exists, the vendor common
|
|
directory is compiled.
|
|
If CONFIG_SYS_BOARD is also set, the sources under
|
|
board/<CONFIG_SYS_VENDOR>/<CONFIG_SYS_BOARD> directory are compiled.
|
|
|
|
This is optional. For those targets without the vendor directory,
|
|
leave this option empty.
|
|
|
|
config SYS_BOARD
|
|
string
|
|
help
|
|
This option should contain the name of the target board.
|
|
If it is set, either board/<CONFIG_SYS_VENDOR>/<CONFIG_SYS_BOARD>
|
|
or board/<CONFIG_SYS_BOARD> directory is compiled depending on
|
|
whether CONFIG_SYS_VENDOR is set or not.
|
|
|
|
This is optional. For those targets without the board directory,
|
|
leave this option empty.
|
|
|
|
config SYS_CONFIG_NAME
|
|
string
|
|
help
|
|
This option should contain the base name of board header file.
|
|
The header file include/configs/<CONFIG_SYS_CONFIG_NAME>.h
|
|
should be included from include/config.h.
|
|
|
|
config SYS_DISABLE_DCACHE_OPS
|
|
bool
|
|
help
|
|
This option disables dcache flush and dcache invalidation
|
|
operations. For example, on coherent systems where cache
|
|
operatios are not required, enable this option to avoid them.
|
|
Note that, its up to the individual architectures to implement
|
|
this functionality.
|
|
|
|
source "arch/arc/Kconfig"
|
|
source "arch/arm/Kconfig"
|
|
source "arch/m68k/Kconfig"
|
|
source "arch/microblaze/Kconfig"
|
|
source "arch/mips/Kconfig"
|
|
source "arch/nds32/Kconfig"
|
|
source "arch/nios2/Kconfig"
|
|
source "arch/powerpc/Kconfig"
|
|
source "arch/sandbox/Kconfig"
|
|
source "arch/sh/Kconfig"
|
|
source "arch/x86/Kconfig"
|
|
source "arch/xtensa/Kconfig"
|
|
source "arch/riscv/Kconfig"
|