summaryrefslogtreecommitdiff
path: root/include/common.h
diff options
context:
space:
mode:
authorEgbert Eich <eich@suse.com>2013-04-09 06:03:36 +0000
committerTom Rini <trini@ti.com>2013-05-01 16:24:02 -0400
commitae1768a72cf70c00eec6824a5cc9079b0a247640 (patch)
treef39da7d478d7208b2603d0466c258dd9e710c30f /include/common.h
parent9d956e0fefa39ba49250f61e3c7aa3dadafdb7fd (diff)
disk/gpt: Fix GPT partition handling for blocksize != 512
Disks beyond 2T in size use blocksizes of 4096 bytes. However a lot of code in u-boot still assumes a 512 byte blocksize. This patch fixes the handling of GPTs. Signed-off-by: Egbert Eich <eich@suse.com>
Diffstat (limited to 'include/common.h')
-rw-r--r--include/common.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/include/common.h b/include/common.h
index 28aa4b9d60..84315a0b43 100644
--- a/include/common.h
+++ b/include/common.h
@@ -1011,10 +1011,17 @@ static inline phys_addr_t map_to_sysmem(void *ptr)
* of a function scoped static buffer. It can not be used to create a cache
* line aligned global buffer.
*/
-#define ALLOC_ALIGN_BUFFER(type, name, size, align) \
- char __##name[ROUND(size * sizeof(type), align) + (align - 1)]; \
+#define PAD_COUNT(s, pad) ((s - 1) / pad + 1)
+#define PAD_SIZE(s, pad) (PAD_COUNT(s, pad) * pad)
+#define ALLOC_ALIGN_BUFFER_PAD(type, name, size, align, pad) \
+ char __##name[ROUND(PAD_SIZE(size * sizeof(type), pad), align) \
+ + (align - 1)]; \
\
type *name = (type *) ALIGN((uintptr_t)__##name, align)
+#define ALLOC_ALIGN_BUFFER(type, name, size, align) \
+ ALLOC_ALIGN_BUFFER_PAD(type, name, size, align, 1)
+#define ALLOC_CACHE_ALIGN_BUFFER_PAD(type, name, size, pad) \
+ ALLOC_ALIGN_BUFFER_PAD(type, name, size, ARCH_DMA_MINALIGN, pad)
#define ALLOC_CACHE_ALIGN_BUFFER(type, name, size) \
ALLOC_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)