summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@google.com>2015-01-31 23:24:32 -0800
committerPatrick Georgi <pgeorgi@google.com>2015-03-23 13:11:24 +0100
commite4a642c86713e98617173477b9327cfd3c4cd369 (patch)
tree118cca4526324d46a3fcd8cac6af7ffc2799ae09
parenta874a7c26f7f0477b13428bf6e7405e52b3983f6 (diff)
libpayload arm64: Allow board to define upper address limit on DMA
Instead of forcing boards to have DMA region below 4GiB, provide Kconfig option DMA_LIM_EXCL that a board can use to set the upper limit in MiB units on the address range reserved by DMA. By default, this value is 0x1000 i.e. 4GiB limit on the DMA upper address. BUG=None BRANCH=None TEST=Compiles successfully for rush. Default value is seen as 0x1000. Change-Id: Ie35d3844a0989486ae022f8922fdd4c9d7d57fb4 Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Original-Commit-Id: 6716cf312a103bc0440a558fc43c8c77869816e3 Original-Change-Id: I3ecbb4ec90995ab1568cb0924d5ce9467492697d Original-Signed-off-by: Furquan Shaikh <furquan@google.com> Original-Reviewed-on: https://chromium-review.googlesource.com/245250 Original-Tested-by: Furquan Shaikh <furquan@chromium.org> Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org> Original-Commit-Queue: Furquan Shaikh <furquan@chromium.org> Reviewed-on: http://review.coreboot.org/8800 Tested-by: build bot (Jenkins) Reviewed-by: Furquan Shaikh <furquan@google.com>
-rw-r--r--payloads/libpayload/arch/arm64/Config.in4
-rw-r--r--payloads/libpayload/arch/arm64/mmu.c2
-rw-r--r--payloads/libpayload/configs/config.arm64-generic3
3 files changed, 7 insertions, 2 deletions
diff --git a/payloads/libpayload/arch/arm64/Config.in b/payloads/libpayload/arch/arm64/Config.in
index 0f2596c452..d2f8e5675a 100644
--- a/payloads/libpayload/arch/arm64/Config.in
+++ b/payloads/libpayload/arch/arm64/Config.in
@@ -33,4 +33,8 @@ config ARCH_SPECIFIC_OPTIONS # dummy
def_bool y
select LITTLE_ENDIAN
+config DMA_LIM_EXCL
+ hex "DMA address limit(exclusive) in MiB units"
+ default 0x1000
+
endif
diff --git a/payloads/libpayload/arch/arm64/mmu.c b/payloads/libpayload/arch/arm64/mmu.c
index da2127d0da..adbee0f4b8 100644
--- a/payloads/libpayload/arch/arm64/mmu.c
+++ b/payloads/libpayload/arch/arm64/mmu.c
@@ -609,7 +609,7 @@ static struct mmu_memrange *mmu_add_dma_range(struct mmu_ranges *mmu_ranges)
/* DMA_DEFAULT_SIZE is multiple of GRANULE_SIZE */
assert((DMA_DEFAULT_SIZE % GRANULE_SIZE) == 0);
prop.size = DMA_DEFAULT_SIZE;
- prop.lim_excl = MIN_64_BIT_ADDR;
+ prop.lim_excl = (uint64_t)CONFIG_LP_DMA_LIM_EXCL * MiB;
prop.align = GRANULE_SIZE;
prop.is_valid_range = NULL;
prop.src_type = TYPE_NORMAL_MEM;
diff --git a/payloads/libpayload/configs/config.arm64-generic b/payloads/libpayload/configs/config.arm64-generic
index aa6e2b4014..d44237ef5a 100644
--- a/payloads/libpayload/configs/config.arm64-generic
+++ b/payloads/libpayload/configs/config.arm64-generic
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# libpayload version: 0.2.0
-# Wed Mar 18 16:11:01 2015
+# Sat Mar 21 13:53:09 2015
#
#
@@ -65,3 +65,4 @@ CONFIG_LP_USB_GEN_HUB=y
CONFIG_LP_LITTLE_ENDIAN=y
# CONFIG_LP_IO_ADDRESS_SPACE is not set
CONFIG_LP_ARCH_SPECIFIC_OPTIONS=y
+CONFIG_LP_DMA_LIM_EXCL=0x1000