mirror of
https://github.com/frank-w/u-boot.git
synced 2026-01-10 02:27:06 +08:00
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>
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -55,6 +55,10 @@ typedef struct block_dev_desc {
|
||||
void *priv; /* driver private struct pointer */
|
||||
}block_dev_desc_t;
|
||||
|
||||
#define BLOCK_CNT(size, block_dev_desc) (PAD_COUNT(size, block_dev_desc->blksz))
|
||||
#define PAD_TO_BLOCKSIZE(size, block_dev_desc) \
|
||||
(PAD_SIZE(size, block_dev_desc->blksz))
|
||||
|
||||
/* Interface types: */
|
||||
#define IF_TYPE_UNKNOWN 0
|
||||
#define IF_TYPE_IDE 1
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#define EFI_PMBR_OSTYPE_EFI 0xEF
|
||||
#define EFI_PMBR_OSTYPE_EFI_GPT 0xEE
|
||||
|
||||
#define GPT_BLOCK_SIZE 512
|
||||
#define GPT_HEADER_SIGNATURE 0x5452415020494645ULL
|
||||
#define GPT_HEADER_REVISION_V1 0x00010000
|
||||
#define GPT_PRIMARY_PARTITION_TABLE_LBA 1ULL
|
||||
@@ -112,7 +111,6 @@ typedef struct _gpt_header {
|
||||
__le32 num_partition_entries;
|
||||
__le32 sizeof_partition_entry;
|
||||
__le32 partition_entry_array_crc32;
|
||||
u8 reserved2[GPT_BLOCK_SIZE - 92];
|
||||
} __packed gpt_header;
|
||||
|
||||
typedef union _gpt_entry_attributes {
|
||||
|
||||
Reference in New Issue
Block a user