linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] MTD: Fix Orion NAND driver compilation with ARM OABI
@ 2010-03-25 15:25 Paulius Zaleckas
  2010-03-25 16:26 ` Nicolas Pitre
  2010-03-25 20:46 ` Jamie Lokier
  0 siblings, 2 replies; 14+ messages in thread
From: Paulius Zaleckas @ 2010-03-25 15:25 UTC (permalink / raw)
  To: linux-arm-kernel

We must tell GCC to use even register for variable passed
to ldrd instruction. Without this patch GCC 4.2.1 puts this
variable to r2/r3 on EABI and r3/r4 on OABI, so force it to
r2/r3. This does not change anything when EABI and OABI
compilation works OK.

Without this patch and with OABI I get:
  CC      drivers/mtd/nand/orion_nand.o
/tmp/ccMkwOCs.s: Assembler messages:
/tmp/ccMkwOCs.s:63: Error: first destination register must be even -- `ldrd r3,[ip]'
make[5]: *** [drivers/mtd/nand/orion_nand.o] Error 1

Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
---

 drivers/mtd/nand/orion_nand.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/drivers/mtd/nand/orion_nand.c b/drivers/mtd/nand/orion_nand.c
index f59c074..d60fc57 100644
--- a/drivers/mtd/nand/orion_nand.c
+++ b/drivers/mtd/nand/orion_nand.c
@@ -60,7 +60,13 @@ static void orion_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
 	}
 	buf64 = (uint64_t *)buf;
 	while (i < len/8) {
-		uint64_t x;
+		/*
+		 * Since GCC has no proper constraint (PR 43518)
+		 * force x variable to r2/r3 registers as ldrd instruction
+		 * requires first register to be even.
+		 */
+		register uint64_t x asm ("r2");
+
 		asm volatile ("ldrd\t%0, [%1]" : "=&r" (x) : "r" (io_base));
 		buf64[i++] = x;
 	}

^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2010-04-24 13:02 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-25 15:25 [PATCH v2] MTD: Fix Orion NAND driver compilation with ARM OABI Paulius Zaleckas
2010-03-25 16:26 ` Nicolas Pitre
2010-03-31 12:01   ` Paulius Zaleckas
2010-04-23 11:56     ` Artem Bityutskiy
2010-04-23 12:54       ` Nicolas Pitre
2010-04-23 15:13         ` Artem Bityutskiy
2010-04-23 17:50           ` Nicolas Pitre
2010-04-23 18:00             ` Andrew Morton
2010-04-23 18:22               ` Nicolas Pitre
2010-03-25 20:46 ` Jamie Lokier
2010-04-23 19:06   ` Nicolas Pitre
2010-04-24  2:58     ` Jamie Lokier
2010-04-24  3:04       ` Jamie Lokier
2010-04-24 13:02       ` Nicolas Pitre

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).