/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * drivers/riscv/sun21iw1/platform.h
 *
 * Copyright (c) 2007-2025 Allwinnertech Co., Ltd.
 * Author: wujiayi <wujiayi@allwinnertech.com>
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details
 *
 */

#ifndef __SUNXI_PLATFORM_H
#define __SUNXI_PLATFORM_H

#include "../common/imgdts.h"

#define RTOS_MAGIC				"freertos"
#define MAGIC_SIZE				8
#define RTOS_VERSION			1
#define PADDING_LEN				(512)

/*the size is 48*/
typedef struct rtos_img_hdr_t {
	unsigned int  jump_instruction;   /* one intruction jumping to real code */
	unsigned char magic[MAGIC_SIZE];  /* ="freertos"*/
	unsigned int  check_sum;          /* generated by PC */
	unsigned int  image_size;        /* the size of image*/
	unsigned int  header_size;       /* the size of header */
	unsigned int  rtos_version;		 /* rtos version */
	unsigned int  dram_size;		  /* dram size in K*/
	unsigned int  rtos_run_addr;	/*rtos load addr*/
	unsigned int  dtb_addr;			/*dtb load addr*/
	unsigned int  dtb_size;			/*the size of dtb*/
	struct dts_msg_t dts_msg;
	unsigned char reserved[4];
} rtos_img_hdr;


typedef struct box_start_os_cfg {
	unsigned int used;
	unsigned int start_type;
	unsigned int irkey_used;
	unsigned int pmukey_used;
	unsigned int pmukey_num;
	unsigned int led_power;
	unsigned int led_state;
} box_start_os_cfg_t;

struct dram_para_32 {
	/* normal configuration */
	unsigned int dram_clk;
	unsigned int dram_type;
	unsigned int dram_zq;
	unsigned int dram_odt_en;

	/* control configuration */
	unsigned int dram_para1;
	unsigned int dram_para2;

	/* timing configuration */
	unsigned int dram_mr0;
	unsigned int dram_mr1;
	unsigned int dram_mr2;
	unsigned int dram_mr3;
	unsigned int dram_tpr0;
	unsigned int dram_tpr1;
	unsigned int dram_tpr2;
	unsigned int dram_tpr3;
	unsigned int dram_tpr4;
	unsigned int dram_tpr5;
	unsigned int dram_tpr6;
	unsigned int dram_tpr7;
	unsigned int dram_tpr8;
	unsigned int dram_tpr9;
	unsigned int dram_tpr10;
	unsigned int dram_tpr11;
	unsigned int dram_tpr12;
	unsigned int dram_tpr13;
	unsigned int dram_tpr14;
	unsigned int dram_tpr15;
	unsigned int dram_tpr16;
	unsigned int dram_tpr17;
	unsigned int dram_tpr18;
	unsigned int dram_tpr19;
	unsigned int dram_tpr20;
	unsigned int dram_tpr21;
};

struct rtos_img_params_t {
	/* 32 * 4 = 128 byte */
	struct dram_para_32 dram_para;
	/* size ~ 56Bytes + 64Bytes*2 + 28Bytes = 212 Bytes */
	/* struct audio_param audio_param; */
	/* unsigned int message_pool_phys; */
	/* unsigned int message_pool_size; */
	/* unsigned int standby_base; */
	/* unsigned int standby_size; */
	/* unsigned int suart_status; */
	/* unsigned int pmu_bat_shutdown_ltf; */
	/* unsigned int pmu_bat_shutdown_htf; */
	/* unsigned int pmu_pwroff_vol; */
	/* unsigned int power_mode; */
	/* unsigned int power_start; */
	/* unsigned int powchk_used; */
	/* unsigned int power_reg; */
	/* unsigned int system_power; */
	/* 7 * 4 = 28 byte */
	struct box_start_os_cfg start_os;
	/* struct ir_key ir_key; */
	/* unsigned int reserved[256]; */
};

struct spare_rtos_head_t {
	struct rtos_img_hdr_t	rtos_img_hdr;
	struct rtos_img_params_t	rtos_img_params;
	unsigned char padding[PADDING_LEN - sizeof(struct rtos_img_hdr_t) -
			      sizeof(struct rtos_img_params_t)];
	unsigned char cert_magic[MAGIC_SIZE];
	unsigned int cert_size;
	/* NOTICE: the 1k - 128 byete start version string */
};

#endif /* __SUNXI_PLATFORM_H */
