From a18ae87e48c36cf21abb282542b67496b3d9c1be Mon Sep 17 00:00:00 2001 From: Paulius Zaleckas Date: Fri, 23 Apr 2010 13:17:47 -0400 Subject: [PATCH] --- yaml --- r: 190191 b: refs/heads/master c: a88a2b886404b1cfc109125b1cba4775e8682955 h: refs/heads/master i: 190189: 26c40097c1bcc603adedc9eaf8143d524425a936 190187: 8a7f0d0cb604773f19c079f1c76b5a83c69b43d6 190183: 1199380abe9deb00c2321ae8fbdcd6b8bd003501 190175: 646b84bad5727ad855d36bf2e037fbc701d1e2c6 v: v3 --- [refs] | 2 +- trunk/drivers/mtd/nand/orion_nand.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 12f6673fe03b..c01dae8c33fa 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e59464c735db19619cde2aa331609adb02005f5b +refs/heads/master: a88a2b886404b1cfc109125b1cba4775e8682955 diff --git a/trunk/drivers/mtd/nand/orion_nand.c b/trunk/drivers/mtd/nand/orion_nand.c index f59c07427af3..d60fc5719fef 100644 --- a/trunk/drivers/mtd/nand/orion_nand.c +++ b/trunk/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; }