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

#include <common.h>
#include <emmc_partitions.h>
#include <mmc.h>
#include <zircon/partition_internal.h>
#include <asm/arch/cpu_config.h>

// Does not include 1 LBA for protective MBR for primary GPT copy.
#define GPT_SIZE_LBA 33
// Skip 1 info block plus BL2
#define TPL_R_BLOCK_OFFET (1 + BL2_SIZE / 512)

const char *zircon_abr_partition_name = "misc";
// clang-format off
const subpart_t tpl_r_composite_sub_partitions[] = {
	{
		.name = "tpl_r_0",
	},
	{
		.name = "tpl_r_1",
	}
};

const subpart_t bootloader_composite_sub_partitions[] = {
	{
		.name = "bl2_0",
		.image_size = BL2_SIZE,
	},
	{
		.name = "bl2_1",
		.image_size = BL2_SIZE,
	},
	{
		.name = "tpl_r_0",
		.image_offset = BL2_SIZE,
	},
	{
		.name = "tpl_r_1",
		.image_offset = BL2_SIZE,
	},
	{
		.name = "tpl_a",
		.image_offset = BL2_SIZE,
	},
	{
		.name = "tpl_b",
		.image_offset = BL2_SIZE,
	}
};
// clang-format on
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 = "bl2_0",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT0,
		.lba_offset = 1, // skip boot_info
	},
	{
		.name = "bl2_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_a",
	},
	{
		.name = ZIRCON_PARTITION_PREFIX "_b",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "boot_b",
	},
	{
		.name = ZIRCON_PARTITION_PREFIX "_r",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "cache",
	},
	{
		.name = "misc",
		// Only erase for misc 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,
		.gpt_name = "misc",
	},
	{
		.name = "tpl_a",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "tpl_a",
	},
	{
		.name = "tpl_b",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "tpl_b",
	},
	{
		.name = "tpl_r",
		.type = ZIRCON_PART_TYPE_COMPOSITE,
		.prioritize_over_gpt = true,
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.sub_parts = tpl_r_composite_sub_partitions,
		.sub_parts_count = ARRAY_SIZE(tpl_r_composite_sub_partitions),
	},
	{
		.name = "tpl_r_0",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT0,
		.lba_offset = TPL_R_BLOCK_OFFET,
	},
	{
		.name = "tpl_r_1",
		.type = ZIRCON_PART_TYPE_RAW_EMMC,
		.prioritize_over_gpt = true,
		.hw_part = MMC_PART_BOOT1,
		.lba_offset = TPL_R_BLOCK_OFFET,
	},
	{
		.name = "vbmeta_a",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "vbmeta_a",
	},
	{
		.name = "vbmeta_b",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "vbmeta_b",
	},
	{
		.name = "vbmeta_r",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "reserved_c",
		.size = 64 * 1024,
	},
	{
		.name = "fvm",
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_FLAG_WRITE,
		.gpt_name = "data",
	},
	{
		.name = MMC_SECURE_STORAGE_NAME,
		.fastboot_locked_access = ZIRCON_PARTITION_ACCESS_DEV_ONLY,
		.gpt_name = "reserved",
		.gpt_offset = MMC_SECURE_STORAGE_OFFSET,
		.size = MMC_SECURE_STORAGE_SIZE,
	},
};

const size_t zircon_partition_map_count = ARRAY_SIZE(zircon_partition_map);
