/*
 * Copyright (c) 2019 The Fuchsia Authors
 *
 * SPDX-License-Identifier:	BSD-3-Clause
 */

#include <common.h>
#include <mmc.h>
#include <zircon_uboot/partition_internal.h>

/*
 * ABR and AVB's metadatas used to be located on the 'sysconfig' partition,
 * but were split out into their own GPT partitions at the same locations.
 * Once the GPT entry is added, these offsets will no longer be used.
 *
 * This is maintained on Newman to support the bootstrapping via zedboot workflow.
 *
 * 00000 - CEFFF (828K) sysconfig data
 * CF000 - CFFFF   (4K) A/B/R metadata
 * D0000 - DFFFF  (64K) AVB -a metadata
 * E0000 - EFFFF  (64K) AVB -b metadata
 * F0000 - FFFFF  (64K) AVB -r metadata
 */
#define ABR_OFFSET 0xCF000
#define AVB_A_OFFSET 0xD0000
#define AVB_B_OFFSET 0xE0000
#define AVB_R_OFFSET 0xF0000
#define ABR_SIZE (4 * 1024)
#define AVB_SIZE (64 * 1024)

#define ZIRCON_PART_SIZE (32 * 1024 * 1024)

// Does not include 1 LBA for protective MBR for primary GPT copy.
#define GPT_SIZE_LBA 33

const char *zircon_abr_partition_name = "durable_boot";

const subpart_t bootloader_composite_sub_partitions[] = {
	{
		.name = "bootloader_0",
	},
	{
		.name = "bootloader_1",
	},
};

const zircon_partition_data_t zircon_partition_map[] = {
	{
		.name = "bootloader",
		.type = ZIRCON_PART_TYPE_COMPOSITE,
		.prioritize_over_gpt = true,
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.sub_parts = bootloader_composite_sub_partitions,
		.sub_parts_count =
			ARRAY_SIZE(bootloader_composite_sub_partitions),
	},
	{
		.name = "bootloader_0",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT0,
		.lba_offset = 1, // skip boot_info
	},
	{
		.name = "bootloader_1",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT1,
		.lba_offset = 1, // skip boot_info
	},
	{
		.name = "boot_info_0",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT0,
		.lba_offset = 0,
		.lba_size = 1,
	},
	{
		.name = "boot_info_1",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT1,
		.lba_offset = 0,
		.lba_size = 1,
	},
	{
		.name = "boot0",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT0,
	},
	{
		.name = "boot1",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT1,
	},
	{
		.name = "gpt",
		.type = ZIRCON_PART_TYPE_GPT,
		.prioritize_over_gpt = true,

		// Only for reading / erasing
		.hw_part = MMC_PART_USER,
		.lba_offset = 0,
		.lba_size = GPT_SIZE_LBA + 1, // includes protective MBR
	},
	{
		.name = "mbr",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_USER,
		.lba_offset = 0,
		.lba_size = 1,
	},
	{
		.name = "gpt_primary",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_USER,
		.lba_offset = 1,
		.lba_size = GPT_SIZE_LBA,
	},
	{
		.name = "gpt_backup",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_USER,
		.lba_offset = -GPT_SIZE_LBA,
		.lba_size = GPT_SIZE_LBA,
	},
	{
		.name = ZIRCON_PARTITION_PREFIX "_a",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "boot",
	},
	{
		.name = ZIRCON_PARTITION_PREFIX "_b",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "system",
		// Only the first 32MiB of system is zircon_b
		// The rest is part of fvm.
		.size = ZIRCON_PART_SIZE,
	},
	{
		.name = ZIRCON_PARTITION_PREFIX "_r",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "recovery",
	},
	{
		.name = "durable_boot",
		// Only erase for misc/durable_boot to reset A/B/R metadata. Changing state
		// otherwise should use calls like `set_active` instead of direct writes.
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_ERASE,
		// maintains support for zedboot-partitioned devices with 'misc' partition
		.gpt_name = "misc",
	},
	{
		// maintains support for `fastboot erase misc` on all devices
		.name = "misc",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_ERASE,
		.gpt_name = "durable_boot",
	},
	{
		.name = "vbmeta_a",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "sysconfig",
		.gpt_offset = AVB_A_OFFSET,
		.size = AVB_SIZE,
	},
	{
		.name = "vbmeta_b",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "sysconfig",
		.gpt_offset = AVB_B_OFFSET,
		.size = AVB_SIZE,
	},
	{
		.name = "vbmeta_r",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "sysconfig",
		.gpt_offset = AVB_R_OFFSET,
		.size = AVB_SIZE,
	},
	{
		.name = "fuchsia-fvm",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
	},
	{
		// Expose "fvm" as an alias for "fuchsia-fvm" for consistency with
		// other devices.
		.name = "fvm",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "fuchsia-fvm",
	}
};

const size_t zircon_partition_map_count = ARRAY_SIZE(zircon_partition_map);
