# SPDX-License-Identifier: GPL-2.0+
#
#  Copyright (C) 2012 Samsung Electronics
#
#  Lukasz Majewski <l.majewski@samsung.com>

Glossary:
========
- UUID -(Universally Unique Identifier)
- GUID - (Globally Unique ID)
- EFI - (Extensible Firmware Interface)
- UEFI - (Unified EFI) - EFI evolution
- GPT (GUID Partition Table) - it is the EFI standard part
- partitions - lists of available partitions (defined at u-boot):
  ./include/configs/{target}.h

Introduction:
=============
This document describes the GPT partition table format and usage of
the gpt command in u-boot.

UUID introduction:
====================

GPT for marking disks/partitions is using the UUID. It is supposed to be a
globally unique value. A UUID is a 16-byte (128-bit) number. The number of
theoretically possible UUIDs is therefore about 3 x 10^38.
More often UUID is displayed as 32 hexadecimal digits, in 5 groups,
separated by hyphens, in the form 8-4-4-4-12 for a total of 36 characters
(32 digits and 4 hyphens)

For instance, GUID of Basic data partition: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
and GUID of Linux filesystem data: 0FC63DAF-8483-4772-8E79-3D69D8477DE4

Historically there are 5 methods to generate this number. The oldest one is
combining machine's MAC address and timer (epoch) value.

Successive versions are using MD5 hash, random numbers and SHA-1 hash. All major
OSes and programming languages are providing libraries to compute UUID (e.g.
uuid command line tool).

GPT brief explanation:
======================

	Layout:
	-------

	--------------------------------------------------
	LBA 0          |Protective MBR                   |
	----------------------------------------------------------
	LBA 1          |Primary GPT Header               | Primary
	-------------------------------------------------- GPT
	LBA 2          |Entry 1|Entry 2| Entry 3| Entry 4|
	--------------------------------------------------
	LBA 3          |Entries 5 - 128                  |
		       |                                 |
		       |                                 |
	----------------------------------------------------------
	LBA 34         |Partition 1                      |
		       |                                 |
		       -----------------------------------
		       |Partition 2                      |
		       |                                 |
		       -----------------------------------
		       |Partition n                      |
		       |                                 |
	----------------------------------------------------------
	LBA -34        |Entry 1|Entry 2| Entry 3| Entry 4| Backup
	-------------------------------------------------- GPT
	LBA -33        |Entries 5 - 128                  |
		       |                                 |
		       |                                 |
	LBA -2         |                                 |
	--------------------------------------------------
	LBA -1         |Backup GPT Header                |
	----------------------------------------------------------

For a legacy reasons, GPT's LBA 0 sector has a MBR structure. It is called
"protective MBR".
Its first partition entry ID has 0xEE value, and disk software, which is not
handling the GPT sees it as a storage device without free space.

It is possible to define 128 linearly placed partition entries.

"LBA -1" means the last addressable block (in the mmc subsystem:
"dev_desc->lba - 1")

Primary/Backup GPT header:
----------------------------
Offset  Size    Description

0       8 B     Signature ("EFI PART", 45 46 49 20 50 41 52 54)
8       4 B     Revision (For version 1.0, the value is 00 00 01 00)
12      4 B     Header size (in bytes, usually 5C 00 00 00 meaning 92 bytes)
16      4 B     CRC32 of header (0 to header size), with this field zeroed
		during calculation
20      4 B     Reserved (ZERO);
24      8 B     Current LBA (location of this header copy)
32      8 B     Backup LBA (location of the other header copy)
40      8 B     First usable LBA for partitions (primary partition table last
		LBA + 1)
48      8 B     Last usable LBA (secondary partition table first LBA - 1)
56      16 B    Disk GUID (also referred as UUID on UNIXes)
72      8 B     Partition entries starting LBA (always 2 in primary copy)
80      4 B     Number of partition entries
84      4 B     Size of a partition entry (usually 128)
88      4 B     CRC32 of partition array
92      *       Reserved; must be ZERO (420 bytes for a 512-byte LBA)

TOTAL: 512 B


IMPORTANT:

GPT headers and partition entries are protected by CRC32 (the POSIX CRC32).

Primary GPT header and Backup GPT header have swapped values of "Current LBA"
and "Backup LBA" and therefore different CRC32 check-sum.

CRC32 for GPT headers (field "CRC of header") are calculated up till
"Header size" (92), NOT 512 bytes.

CRC32 for partition entries (field "CRC32 of partition array") is calculated for
the whole array entry ( Number_of_partition_entries *
sizeof(partition_entry_size (usually 128)))

Observe, how Backup GPT is placed in the memory. It is NOT a mirror reflect
of the Primary.

	   Partition Entry Format:
	   ----------------------
	   Offset  Size    Description

	   0       16 B    Partition type GUID (Big Endian)
	   16      16 B    Unique partition GUID in (Big Endian)
	   32      8  B    First LBA (Little Endian)
	   40      8  B    Last LBA (inclusive)
	   48      8  B    Attribute flags [+]
	   56      72 B    Partition name (text)

	   Attribute flags:
	   Bit 0  - System partition
	   Bit 1  - Hide from EFI
	   Bit 2  - Legacy BIOS bootable
	   Bit 48-63 - Defined and used by the individual partition type
	   For Basic data partition :
	   Bit 60 - Read-only
	   Bit 62 - Hidden
	   Bit 63 - Not mount

Creating GPT partitions in U-Boot:
==============

To restore GUID partition table one needs to:
1. Define partition layout in the environment.
   Format of partitions layout:
     "uuid_disk=...;name=u-boot,size=60MiB,uuid=...;
	name=kernel,size=60MiB,uuid=...;"
     or
     "uuid_disk=${uuid_gpt_disk};name=${uboot_name},
	size=${uboot_size},uuid=${uboot_uuid};"

   The fields 'name' and 'size' are mandatory for every partition.
   The field 'start' is optional.

   If field 'size' of the last partition is 0, the partition is extended
   up to the end of the device.

   The fields 'uuid' and 'uuid_disk' are optional if CONFIG_RANDOM_UUID is
   enabled. A random uuid will be used if omitted or they point to an empty/
   non-existent environment variable. The environment variable will be set to
   the generated UUID.  The 'gpt guid' command reads the current value of the
   uuid_disk from the GPT.

   The field 'bootable' is optional, it is used to mark the GPT partition
   bootable (set attribute flags "Legacy BIOS bootable").
     "name=u-boot,size=60MiB;name=boot,size=60Mib,bootable;name=rootfs,size=0"
   It can be used to locate bootable disks with command
   "part list <interface> <dev> -bootable <varname>",
   please check out doc/README.distro for use.

2. Define 'CONFIG_EFI_PARTITION' and 'CONFIG_CMD_GPT'

3. From u-boot prompt type:
   gpt write mmc 0 $partitions

Checking (validating) GPT partitions in U-Boot:
===============================================

Procedure is the same as above. The only change is at point 3.

At u-boot prompt one needs to write:
   gpt verify mmc 0 [$partitions]

where [$partitions] is an optional parameter.

When it is not provided, only basic checks based on CRC32 calculation for GPT
header and PTEs are performed.
When provided, additionally partition data - name, size and starting
offset (last two in LBA) - are compared with data defined in '$partitions'
environment variable.

After running this command, return code is set to 0 if no errors found in
on non-volatile medium stored GPT.

Following line can be used to assess if GPT verification has succeed:

U-BOOT> gpt verify mmc 0 $partitions
U-BOOT> if test $? = 0; then echo "GPT OK"; else echo "GPT ERR"; fi

Renaming GPT partitions from U-Boot:
====================================

GPT partition names are a mechanism via which userspace and U-Boot can
communicate about software updates and boot failure.  The 'gpt guid',
'gpt read', 'gpt rename' and 'gpt swap' commands facilitate
programmatic renaming of partitions from bootscripts by generating and
modifying the partitions layout string.  Here is an illustration of
employing 'swap' to exchange 'primary' and 'backup' partition names:

U-BOOT> gpt swap mmc 0 primary backup

Afterwards, all partitions previously named 'primary' will be named
'backup', and vice-versa.  Alternatively, single partitions may be
renamed.  In this example, mmc0's first partition will be renamed
'primary':

U-BOOT> gpt rename mmc 0 1 primary

The GPT functionality may be tested with the 'sandbox' board by
creating a disk image as described under 'Block Device Emulation' in
board/sandbox/README.sandbox:

=>host bind 0 ./disk.raw
=> gpt read host 0
[ . . . ]
=> gpt swap host 0 name othername
[ . . . ]

Partition type GUID:
====================

For created partition, the used partition type GUID is
PARTITION_BASIC_DATA_GUID (EBD0A0A2-B9E5-4433-87C0-68B6B72699C7).

If you define 'CONFIG_PARTITION_TYPE_GUID', a optionnal parameter 'type'
can specify a other partition type guid:

     "uuid_disk=...;name=u-boot,size=60MiB,uuid=...;
	name=kernel,size=60MiB,uuid=...,
	type=0FC63DAF-8483-4772-8E79-3D69D8477DE4;"

Some strings can be also used at the place of known GUID :
	"system" = PARTITION_SYSTEM_GUID
	           (C12A7328-F81F-11D2-BA4B-00A0C93EC93B)
	"mbr"    = LEGACY_MBR_PARTITION_GUID
	           (024DEE41-33E7-11D3-9D69-0008C781F39F)
	"msft"   = PARTITION_MSFT_RESERVED_GUID
	           (E3C9E316-0B5C-4DB8-817D-F92DF00215AE)
	"data"   = PARTITION_BASIC_DATA_GUID
	            (EBD0A0A2-B9E5-4433-87C0-68B6B72699C7)
	"linux"  = PARTITION_LINUX_FILE_SYSTEM_DATA_GUID
	           (0FC63DAF-8483-4772-8E79-3D69D8477DE4)
	"raid"   = PARTITION_LINUX_RAID_GUID
	           (A19D880F-05FC-4D3B-A006-743F0F84911E)
	"swap"   = PARTITION_LINUX_SWAP_GUID
	           (0657FD6D-A4AB-43C4-84E5-0933C84B4F4F)
	"lvm"    = PARTITION_LINUX_LVM_GUID
	           (E6D6D379-F507-44C2-A23C-238F2A3DF928)

    "uuid_disk=...;name=u-boot,size=60MiB,uuid=...;
	name=kernel,size=60MiB,uuid=...,type=linux;"

They are also used to display the type of partition in "part list" command.


Useful info:
============

Two programs, namely: 'gdisk' and 'parted' are recommended to work with GPT
recovery. Both are able to handle GUID partitions.
Please, pay attention at -l switch for parted.

"uuid" program is recommended to generate UUID string. Moreover it can decode
(-d switch) passed in UUID string. It can be used to generate partitions UUID
passed to u-boot environment variables.
If optional CONFIG_RANDOM_UUID is defined then for any partition which environment
uuid is unset, uuid is randomly generated and stored in correspond environment
variable.

note:
Each string block of UUID generated by program "uuid" is in big endian and it is
also stored in big endian in disk GPT.
Partitions layout can be printed by typing "mmc part". Note that each partition
GUID has different byte order than UUID generated before, this is because first
three blocks of GUID string are in Little Endian.
