From: msalter@redhat.com (Mark Salter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] arm64: fix CONFIG_ZONE_DMA on systems with no 32-bit addressable DRAM
Date: Mon, 23 Jun 2014 01:05:40 -0400 [thread overview]
Message-ID: <1403499940-11258-1-git-send-email-msalter@redhat.com> (raw)
Commit 2d5a5612bc (arm64: Limit the CMA buffer to 32-bit if ZONE_DMA)
forces the CMA buffer to be 32-bit addressable if CONFIG_ZONE_DMA is
defined. This breaks CMA on platforms with no 32-bit addressable DRAM.
This patch checks to make sure there is 32-bit addressable DRAM before
setting the 32-bit limit. If there is none, no limit is placed on the
CMA buffer. This allows a single kernel (with CONFIG_ZONE_DMA defined)
to support platforms requiring the 32-bit limit and platforms with no
32-bit limit.
Signed-off-by: Mark Salter <msalter@redhat.com>
---
arch/arm64/mm/init.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index c5415e2..2925576 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -149,8 +149,17 @@ void __init arm64_memblock_init(void)
early_init_fdt_scan_reserved_mem();
/* 4GB maximum for 32-bit only capable devices */
- if (IS_ENABLED(CONFIG_ZONE_DMA))
+ if (IS_ENABLED(CONFIG_ZONE_DMA)) {
dma_phys_limit = dma_to_phys(NULL, DMA_BIT_MASK(32)) + 1;
+ /*
+ * If platform doesn't have DRAM within the dma_phys_limit,
+ * remove the limit altogether. This allows one kernel (with
+ * CONFIG_ZONE_DMA defined) to support platforms with 32-bit
+ * only devices and platforms with no 32-bit DRAM.
+ */
+ if (dma_phys_limit <= memblock_start_of_DRAM())
+ dma_phys_limit = 0;
+ }
dma_contiguous_reserve(dma_phys_limit);
memblock_allow_resize();
--
1.8.3.1
WARNING: multiple messages have this Message-ID (diff)
From: Mark Salter <msalter@redhat.com>
To: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will.deacon@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Mark Salter <msalter@redhat.com>
Subject: [PATCH] arm64: fix CONFIG_ZONE_DMA on systems with no 32-bit addressable DRAM
Date: Mon, 23 Jun 2014 01:05:40 -0400 [thread overview]
Message-ID: <1403499940-11258-1-git-send-email-msalter@redhat.com> (raw)
Commit 2d5a5612bc (arm64: Limit the CMA buffer to 32-bit if ZONE_DMA)
forces the CMA buffer to be 32-bit addressable if CONFIG_ZONE_DMA is
defined. This breaks CMA on platforms with no 32-bit addressable DRAM.
This patch checks to make sure there is 32-bit addressable DRAM before
setting the 32-bit limit. If there is none, no limit is placed on the
CMA buffer. This allows a single kernel (with CONFIG_ZONE_DMA defined)
to support platforms requiring the 32-bit limit and platforms with no
32-bit limit.
Signed-off-by: Mark Salter <msalter@redhat.com>
---
arch/arm64/mm/init.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index c5415e2..2925576 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -149,8 +149,17 @@ void __init arm64_memblock_init(void)
early_init_fdt_scan_reserved_mem();
/* 4GB maximum for 32-bit only capable devices */
- if (IS_ENABLED(CONFIG_ZONE_DMA))
+ if (IS_ENABLED(CONFIG_ZONE_DMA)) {
dma_phys_limit = dma_to_phys(NULL, DMA_BIT_MASK(32)) + 1;
+ /*
+ * If platform doesn't have DRAM within the dma_phys_limit,
+ * remove the limit altogether. This allows one kernel (with
+ * CONFIG_ZONE_DMA defined) to support platforms with 32-bit
+ * only devices and platforms with no 32-bit DRAM.
+ */
+ if (dma_phys_limit <= memblock_start_of_DRAM())
+ dma_phys_limit = 0;
+ }
dma_contiguous_reserve(dma_phys_limit);
memblock_allow_resize();
--
1.8.3.1
next reply other threads:[~2014-06-23 5:05 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-23 5:05 Mark Salter [this message]
2014-06-23 5:05 ` [PATCH] arm64: fix CONFIG_ZONE_DMA on systems with no 32-bit addressable DRAM Mark Salter
2014-06-25 0:26 ` David Rientjes
2014-06-25 0:26 ` David Rientjes
2014-06-27 16:04 ` Catalin Marinas
2014-06-27 16:04 ` Catalin Marinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1403499940-11258-1-git-send-email-msalter@redhat.com \
--to=msalter@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.