From: Grant Likely <grant.likely@secretlab.ca>
To: linux-arm-kernel@lists.infradead.org
Cc: Nicolas Pitre <nicolas.pitre@linaro.org>,
Russell King <linux@arm.linux.org.uk>,
Catalin Marinas <catalin.marinas@arm.com>,
devicetree-discuss@lists.ozlabs.org,
linux-kernel@vger.kernel.org, Olof Johansson <olof@lixom.net>,
Jeremy Kerr <jeremy.kerr@canonical.com>,
John Linn <John.Linn@xilinx.com>,
Lennert Buijtenhek <buytenh@wantstofly.org>
Subject: [PATCH 1/8] arm/dt: Make __vet_atags also accept a dtb image
Date: Tue, 18 Jan 2011 13:29:02 -0700 [thread overview]
Message-ID: <20110118202902.13011.68847.stgit@localhost6.localdomain6> (raw)
In-Reply-To: <20110118195933.13011.56098.stgit@localhost6.localdomain6>
The dtb is passed to the kernel via register r2, which is the same
method that is used to pass an atags pointer. This patch modifies
__vet_atags to not clear r2 when it encounters a dtb image.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
---
arch/arm/kernel/head-common.S | 19 +++++++++++++------
arch/arm/kernel/head.S | 8 ++++----
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S
index 8f57515..d9a9105 100644
--- a/arch/arm/kernel/head-common.S
+++ b/arch/arm/kernel/head-common.S
@@ -14,6 +14,7 @@
#define ATAG_CORE 0x54410001
#define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2)
#define ATAG_CORE_SIZE_EMPTY ((2*4) >> 2)
+#define OF_DT_MAGIC 0xedfe0dd0 /* 0xd00dfeed in big-endian */
/*
* Exception handling. Something went wrong and we can't proceed. We
@@ -105,22 +106,28 @@ __lookup_machine_type_data:
/* Determine validity of the r2 atags pointer. The heuristic requires
* that the pointer be aligned, in the first 16k of physical RAM and
- * that the ATAG_CORE marker is first and present. Future revisions
+ * that the ATAG_CORE marker is first and present. If CONFIG_OF_FLATTREE
+ * is selected, then it will also accept a dtb pointer. Future revisions
* of this function may be more lenient with the physical address and
* may also be able to move the ATAGS block if necessary.
*
* r8 = machinfo
*
* Returns:
- * r2 either valid atags pointer, or zero
+ * r2 either valid atags pointer, valid dtb pointer, or zero
* r5, r6 corrupted
*/
__vet_atags:
tst r2, #0x3 @ aligned?
bne 1f
- ldr r5, [r2, #0] @ is first tag ATAG_CORE?
- cmp r5, #ATAG_CORE_SIZE
+#ifdef CONFIG_OF_FLATTREE
+ ldr r5, [r2, #0] @ is it a DTB?
+ ldr r6, =OF_DT_MAGIC
+ cmp r5, r6
+ beq 2f
+#endif
+ cmp r5, #ATAG_CORE_SIZE @ is first tag ATAG_CORE?
cmpne r5, #ATAG_CORE_SIZE_EMPTY
bne 1f
ldr r5, [r2, #4]
@@ -128,7 +135,7 @@ __vet_atags:
cmp r5, r6
bne 1f
- mov pc, lr @ atag pointer is ok
+2: mov pc, lr @ atag/dtb pointer is ok
1: mov r2, #0
mov pc, lr
@@ -140,7 +147,7 @@ ENDPROC(__vet_atags)
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags/dtb pointer
* r9 = processor ID
*/
__INIT
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index f17d9a0..65d9489 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -66,7 +66,7 @@
*
* This is normally called from the decompressor code. The requirements
* are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0,
- * r1 = machine nr, r2 = atags pointer.
+ * r1 = machine nr, r2 = atags or dtb pointer.
*
* This code is mostly position independent, so if you link the kernel at
* 0xc0008000, you call this at __pa(0xc0008000).
@@ -93,7 +93,7 @@ ENTRY(stext)
beq __error_a @ yes, error 'a'
/*
- * r1 = machine no, r2 = atags,
+ * r1 = machine no, r2 = atags or dtb,
* r8 = machinfo, r9 = cpuid, r10 = procinfo
*/
bl __vet_atags
@@ -335,7 +335,7 @@ __secondary_data:
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags or dtb pointer
* r4 = page table pointer
* r9 = processor ID
* r13 = *virtual* address to jump to upon completion
@@ -372,7 +372,7 @@ ENDPROC(__enable_mmu)
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags or dtb pointer
* r9 = processor ID
* r13 = *virtual* address to jump to upon completion
*
WARNING: multiple messages have this Message-ID (diff)
From: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: Nicolas Pitre
<nicolas.pitre-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Jeremy Kerr <jeremy.kerr-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>,
Lennert Buijtenhek
<buytenh-OLH4Qvv75CYX/NnBR394Jw@public.gmane.org>
Subject: [PATCH 1/8] arm/dt: Make __vet_atags also accept a dtb image
Date: Tue, 18 Jan 2011 13:29:02 -0700 [thread overview]
Message-ID: <20110118202902.13011.68847.stgit@localhost6.localdomain6> (raw)
In-Reply-To: <20110118195933.13011.56098.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
The dtb is passed to the kernel via register r2, which is the same
method that is used to pass an atags pointer. This patch modifies
__vet_atags to not clear r2 when it encounters a dtb image.
Signed-off-by: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
---
arch/arm/kernel/head-common.S | 19 +++++++++++++------
arch/arm/kernel/head.S | 8 ++++----
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S
index 8f57515..d9a9105 100644
--- a/arch/arm/kernel/head-common.S
+++ b/arch/arm/kernel/head-common.S
@@ -14,6 +14,7 @@
#define ATAG_CORE 0x54410001
#define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2)
#define ATAG_CORE_SIZE_EMPTY ((2*4) >> 2)
+#define OF_DT_MAGIC 0xedfe0dd0 /* 0xd00dfeed in big-endian */
/*
* Exception handling. Something went wrong and we can't proceed. We
@@ -105,22 +106,28 @@ __lookup_machine_type_data:
/* Determine validity of the r2 atags pointer. The heuristic requires
* that the pointer be aligned, in the first 16k of physical RAM and
- * that the ATAG_CORE marker is first and present. Future revisions
+ * that the ATAG_CORE marker is first and present. If CONFIG_OF_FLATTREE
+ * is selected, then it will also accept a dtb pointer. Future revisions
* of this function may be more lenient with the physical address and
* may also be able to move the ATAGS block if necessary.
*
* r8 = machinfo
*
* Returns:
- * r2 either valid atags pointer, or zero
+ * r2 either valid atags pointer, valid dtb pointer, or zero
* r5, r6 corrupted
*/
__vet_atags:
tst r2, #0x3 @ aligned?
bne 1f
- ldr r5, [r2, #0] @ is first tag ATAG_CORE?
- cmp r5, #ATAG_CORE_SIZE
+#ifdef CONFIG_OF_FLATTREE
+ ldr r5, [r2, #0] @ is it a DTB?
+ ldr r6, =OF_DT_MAGIC
+ cmp r5, r6
+ beq 2f
+#endif
+ cmp r5, #ATAG_CORE_SIZE @ is first tag ATAG_CORE?
cmpne r5, #ATAG_CORE_SIZE_EMPTY
bne 1f
ldr r5, [r2, #4]
@@ -128,7 +135,7 @@ __vet_atags:
cmp r5, r6
bne 1f
- mov pc, lr @ atag pointer is ok
+2: mov pc, lr @ atag/dtb pointer is ok
1: mov r2, #0
mov pc, lr
@@ -140,7 +147,7 @@ ENDPROC(__vet_atags)
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags/dtb pointer
* r9 = processor ID
*/
__INIT
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index f17d9a0..65d9489 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -66,7 +66,7 @@
*
* This is normally called from the decompressor code. The requirements
* are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0,
- * r1 = machine nr, r2 = atags pointer.
+ * r1 = machine nr, r2 = atags or dtb pointer.
*
* This code is mostly position independent, so if you link the kernel at
* 0xc0008000, you call this at __pa(0xc0008000).
@@ -93,7 +93,7 @@ ENTRY(stext)
beq __error_a @ yes, error 'a'
/*
- * r1 = machine no, r2 = atags,
+ * r1 = machine no, r2 = atags or dtb,
* r8 = machinfo, r9 = cpuid, r10 = procinfo
*/
bl __vet_atags
@@ -335,7 +335,7 @@ __secondary_data:
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags or dtb pointer
* r4 = page table pointer
* r9 = processor ID
* r13 = *virtual* address to jump to upon completion
@@ -372,7 +372,7 @@ ENDPROC(__enable_mmu)
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags or dtb pointer
* r9 = processor ID
* r13 = *virtual* address to jump to upon completion
*
WARNING: multiple messages have this Message-ID (diff)
From: grant.likely@secretlab.ca (Grant Likely)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/8] arm/dt: Make __vet_atags also accept a dtb image
Date: Tue, 18 Jan 2011 13:29:02 -0700 [thread overview]
Message-ID: <20110118202902.13011.68847.stgit@localhost6.localdomain6> (raw)
In-Reply-To: <20110118195933.13011.56098.stgit@localhost6.localdomain6>
The dtb is passed to the kernel via register r2, which is the same
method that is used to pass an atags pointer. This patch modifies
__vet_atags to not clear r2 when it encounters a dtb image.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
---
arch/arm/kernel/head-common.S | 19 +++++++++++++------
arch/arm/kernel/head.S | 8 ++++----
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S
index 8f57515..d9a9105 100644
--- a/arch/arm/kernel/head-common.S
+++ b/arch/arm/kernel/head-common.S
@@ -14,6 +14,7 @@
#define ATAG_CORE 0x54410001
#define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2)
#define ATAG_CORE_SIZE_EMPTY ((2*4) >> 2)
+#define OF_DT_MAGIC 0xedfe0dd0 /* 0xd00dfeed in big-endian */
/*
* Exception handling. Something went wrong and we can't proceed. We
@@ -105,22 +106,28 @@ __lookup_machine_type_data:
/* Determine validity of the r2 atags pointer. The heuristic requires
* that the pointer be aligned, in the first 16k of physical RAM and
- * that the ATAG_CORE marker is first and present. Future revisions
+ * that the ATAG_CORE marker is first and present. If CONFIG_OF_FLATTREE
+ * is selected, then it will also accept a dtb pointer. Future revisions
* of this function may be more lenient with the physical address and
* may also be able to move the ATAGS block if necessary.
*
* r8 = machinfo
*
* Returns:
- * r2 either valid atags pointer, or zero
+ * r2 either valid atags pointer, valid dtb pointer, or zero
* r5, r6 corrupted
*/
__vet_atags:
tst r2, #0x3 @ aligned?
bne 1f
- ldr r5, [r2, #0] @ is first tag ATAG_CORE?
- cmp r5, #ATAG_CORE_SIZE
+#ifdef CONFIG_OF_FLATTREE
+ ldr r5, [r2, #0] @ is it a DTB?
+ ldr r6, =OF_DT_MAGIC
+ cmp r5, r6
+ beq 2f
+#endif
+ cmp r5, #ATAG_CORE_SIZE @ is first tag ATAG_CORE?
cmpne r5, #ATAG_CORE_SIZE_EMPTY
bne 1f
ldr r5, [r2, #4]
@@ -128,7 +135,7 @@ __vet_atags:
cmp r5, r6
bne 1f
- mov pc, lr @ atag pointer is ok
+2: mov pc, lr @ atag/dtb pointer is ok
1: mov r2, #0
mov pc, lr
@@ -140,7 +147,7 @@ ENDPROC(__vet_atags)
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags/dtb pointer
* r9 = processor ID
*/
__INIT
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index f17d9a0..65d9489 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -66,7 +66,7 @@
*
* This is normally called from the decompressor code. The requirements
* are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0,
- * r1 = machine nr, r2 = atags pointer.
+ * r1 = machine nr, r2 = atags or dtb pointer.
*
* This code is mostly position independent, so if you link the kernel at
* 0xc0008000, you call this at __pa(0xc0008000).
@@ -93,7 +93,7 @@ ENTRY(stext)
beq __error_a @ yes, error 'a'
/*
- * r1 = machine no, r2 = atags,
+ * r1 = machine no, r2 = atags or dtb,
* r8 = machinfo, r9 = cpuid, r10 = procinfo
*/
bl __vet_atags
@@ -335,7 +335,7 @@ __secondary_data:
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags or dtb pointer
* r4 = page table pointer
* r9 = processor ID
* r13 = *virtual* address to jump to upon completion
@@ -372,7 +372,7 @@ ENDPROC(__enable_mmu)
*
* r0 = cp#15 control register
* r1 = machine ID
- * r2 = atags pointer
+ * r2 = atags or dtb pointer
* r9 = processor ID
* r13 = *virtual* address to jump to upon completion
*
next prev parent reply other threads:[~2011-01-18 20:29 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-18 20:28 [PATCH 0/8] Basic ARM device tree support Grant Likely
2011-01-18 20:28 ` Grant Likely
2011-01-18 20:28 ` Grant Likely
2011-01-18 20:29 ` Grant Likely [this message]
2011-01-18 20:29 ` [PATCH 1/8] arm/dt: Make __vet_atags also accept a dtb image Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 21:26 ` Nicolas Pitre
2011-01-18 21:26 ` Nicolas Pitre
2011-01-18 21:42 ` Grant Likely
2011-01-18 21:42 ` Grant Likely
2011-01-18 21:42 ` Grant Likely
2011-01-18 20:29 ` [PATCH 2/8] arm/dt: allow bootmem reservation for device tree blob and initrd Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` [PATCH 3/8] arm/dt: Allow CONFIG_OF on ARM Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` [PATCH 4/8] arm/dt: consolidate atags setup into setup_machine_atags Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` [PATCH 5/8] arm/dt: probe for platforms via the device tree Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` [PATCH 6/8] arm/dt: Basic versatile devicetree support Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` [PATCH 7/8] arm/tegra: Fix tegra irq_data conversion Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` [PATCH 8/8] arm/dt: Basic tegra devicetree support Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 20:29 ` Grant Likely
2011-01-18 21:47 ` Nicolas Pitre
2011-01-18 21:47 ` Nicolas Pitre
2011-01-18 21:55 ` Grant Likely
2011-01-18 21:55 ` Grant Likely
2011-01-18 21:55 ` Grant Likely
2011-01-19 12:14 ` Sergei Shtylyov
2011-01-19 12:14 ` Sergei Shtylyov
2011-01-19 12:14 ` Sergei Shtylyov
2011-01-26 20:04 ` [PATCH 0/8] Basic ARM device tree support John Linn
2011-01-26 20:04 ` John Linn
2011-01-26 20:04 ` John Linn
2011-01-26 22:32 ` Rob Herring
2011-01-26 22:32 ` Rob Herring
2011-01-28 6:37 ` Jason Liu
2011-01-28 6:37 ` Jason Liu
2011-01-31 18:05 ` Grant Likely
2011-01-31 18:05 ` Grant Likely
2011-01-31 18:05 ` Grant Likely
2011-01-31 18:06 ` John Linn
2011-01-31 18:06 ` John Linn
2011-01-31 18:06 ` John Linn
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=20110118202902.13011.68847.stgit@localhost6.localdomain6 \
--to=grant.likely@secretlab.ca \
--cc=John.Linn@xilinx.com \
--cc=buytenh@wantstofly.org \
--cc=catalin.marinas@arm.com \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=jeremy.kerr@canonical.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=nicolas.pitre@linaro.org \
--cc=olof@lixom.net \
/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.