void print_part_efi(block_dev_desc_t * dev_desc)
 {
-       ALLOC_CACHE_ALIGN_BUFFER(gpt_header, gpt_head, 1);
+       ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
        gpt_entry *gpt_pte = NULL;
        int i = 0;
        char uuid[37];
 int get_partition_info_efi(block_dev_desc_t * dev_desc, int part,
                                disk_partition_t * info)
 {
-       ALLOC_CACHE_ALIGN_BUFFER(gpt_header, gpt_head, 1);
+       ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
        gpt_entry *gpt_pte = NULL;
 
        /* "part" argument must be at least 1 */
        /* The ending LBA is inclusive, to calculate size, add 1 to it */
        info->size = ((u64)le64_to_cpu(gpt_pte[part - 1].ending_lba) + 1)
                     - info->start;
-       info->blksz = GPT_BLOCK_SIZE;
+       info->blksz = dev_desc->blksz;
 
        sprintf((char *)info->name, "%s",
                        print_efiname(&gpt_pte[part - 1]));
 
 int test_part_efi(block_dev_desc_t * dev_desc)
 {
-       ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, legacymbr, 1);
+       ALLOC_CACHE_ALIGN_BUFFER_PAD(legacy_mbr, legacymbr, 1, dev_desc->blksz);
 
        /* Read legacy MBR from block 0 and validate it */
        if ((dev_desc->block_read(dev_desc->dev, 0, 1, (ulong *)legacymbr) != 1)
 int write_gpt_table(block_dev_desc_t *dev_desc,
                gpt_header *gpt_h, gpt_entry *gpt_e)
 {
-       const int pte_blk_num = (gpt_h->num_partition_entries
-               * sizeof(gpt_entry)) / dev_desc->blksz;
-
+       const int pte_blk_cnt = BLOCK_CNT((gpt_h->num_partition_entries
+                                          * sizeof(gpt_entry)), dev_desc);
        u32 calc_crc32;
        u64 val;
 
        if (dev_desc->block_write(dev_desc->dev, 1, 1, gpt_h) != 1)
                goto err;
 
-       if (dev_desc->block_write(dev_desc->dev, 2, pte_blk_num, gpt_e)
-           != pte_blk_num)
+       if (dev_desc->block_write(dev_desc->dev, 2, pte_blk_cnt, gpt_e)
+           != pte_blk_cnt)
                goto err;
 
        /* recalculate the values for the Second GPT Header */
 
        if (dev_desc->block_write(dev_desc->dev,
                                  le32_to_cpu(gpt_h->last_usable_lba + 1),
-                                 pte_blk_num, gpt_e) != pte_blk_num)
+                                 pte_blk_cnt, gpt_e) != pte_blk_cnt)
                goto err;
 
        if (dev_desc->block_write(dev_desc->dev,
 {
        int ret;
 
-       gpt_header *gpt_h = calloc(1, sizeof(gpt_header));
+       gpt_header *gpt_h = calloc(1, PAD_TO_BLOCKSIZE(sizeof(gpt_header),
+                                                      dev_desc));
+       gpt_entry *gpt_e;
+
        if (gpt_h == NULL) {
                printf("%s: calloc failed!\n", __func__);
                return -1;
        }
 
-       gpt_entry *gpt_e = calloc(GPT_ENTRY_NUMBERS, sizeof(gpt_entry));
+       gpt_e = calloc(1, PAD_TO_BLOCKSIZE(GPT_ENTRY_NUMBERS
+                                              * sizeof(gpt_entry),
+                                              dev_desc));
        if (gpt_e == NULL) {
                printf("%s: calloc failed!\n", __func__);
                free(gpt_h);
 static gpt_entry *alloc_read_gpt_entries(block_dev_desc_t * dev_desc,
                                         gpt_header * pgpt_head)
 {
-       size_t count = 0;
+       size_t count = 0, blk_cnt;
        gpt_entry *pte = NULL;
 
        if (!dev_desc || !pgpt_head) {
 
        /* Allocate memory for PTE, remember to FREE */
        if (count != 0) {
-               pte = memalign(ARCH_DMA_MINALIGN, count);
+               pte = memalign(ARCH_DMA_MINALIGN,
+                              PAD_TO_BLOCKSIZE(count, dev_desc));
        }
 
        if (count == 0 || pte == NULL) {
        }
 
        /* Read GPT Entries from device */
+       blk_cnt = BLOCK_CNT(count, dev_desc);
        if (dev_desc->block_read (dev_desc->dev,
                le64_to_cpu(pgpt_head->partition_entry_lba),
-               (lbaint_t) (count / GPT_BLOCK_SIZE), pte)
-               != (count / GPT_BLOCK_SIZE)) {
+               (lbaint_t) (blk_cnt), pte)
+               != blk_cnt) {
 
                printf("*** ERROR: Can't read GPT Entries ***\n");
                free(pte);
 
  * 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)