/*
 * board/amlogic/gxl_p281_v1/firmware/ramdump.h
 *
 * Copyright (C) 2017 Amlogic, Inc. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * 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 __RAM_DUMP_H__
#define __RAM_DUMP_H__

#include <config.h>
#ifdef CONFIG_MDUMP_COMPRESS
#define CONFIG_COMPRESS_SECTION		5

#if CONFIG_COMPRESS_SECTION > 8
#error ---> CONFIG_COMPRESS_SECTION out of range, max should be 8
#endif
/*
 * Full Memory lay out for RAM compress:
 *
 *                 DDR_TOP -> +--------+
 *                            |        |
 *                            |        |
 *                            |   5    |
 *                            |        |
 *                            |        |
 *                            |~~~~~~~~| <- store compressing data
 *                            |~~~~~~~~|
 *                            |~~~~~~~~|
 *                            |~~~~~~~~|
 *                            |~~~~~~~~|
 *                            |~~~~~~~~|
 *                            |~~~~~~~~|
 *                            |~~~~~~~~|
 *                            |~~~~~~~~|
 *         COMPRESSED_DATA -> +--------+
 *                            |        |
 *                            |   4    |
 *                            |        |
 *          BL2_IGNORE_END -> +--------+ -- IGNORE_SIZE
 *                            ||||||||||
 *                            ||||3|||||
 *                            ||||||||||
 *         BL2_IGNORE_ADDR -> +--------+
 *                            |        |
 *                            |   2    |
 *                            |        |
 *  CONFIG_1ST_RESERVED_END-> +--------+
 *                            |        |
 *                            |   1    |
 *                            |        |
 *     COMPRESS_START_ADDR -> +--------+
 */
#define CONFIG_DDR_TOTAL_SIZE		(((unsigned int)CONFIG_DDR_SIZE) << 20)
#define CONFIG_COMPRESSED_DATA_ADDR	(0x08000000)
#define CONFIG_COMPRESSED_DATA_ADDR1	(0x08000000)

#define CONFIG_COMPRESS_START_ADDR	(0x00000000)
#define CONFIG_1ST_RESERVED_SIZE	(0x00100000)
#define CONFIG_1ST_RESERVED_END		(CONFIG_1ST_RESERVED_SIZE + \
					 CONFIG_COMPRESS_START_ADDR)
#define CONFIG_BL2_IGNORE_ADDR		(0x05000000)
#define CONFIG_BL2_IGNORE_SIZE		(0x00300000)
#define CONFIG_SEG4_ADDR		(CONFIG_BL2_IGNORE_ADDR + \
					 CONFIG_BL2_IGNORE_SIZE)

enum {
	RAM_COMPRESS_NORMAL = 1,
	RAM_COMPRESS_COPY   = 2,
	RAM_COMPRESS_SET    = 3		/* set ram content to same vale */
};

struct ram_compress_section {
	void *phy_addr;
	unsigned int section_size;
	unsigned int section_index :  8;
	unsigned int compress_type :  8;
	unsigned int set_value     : 16;
};

struct ram_compress_full {
	void *store_phy_addr;
	unsigned int full_memsize;
	unsigned int section_count;
	struct ram_compress_section sections[CONFIG_COMPRESS_SECTION];
};

#endif
#endif /* __RAM_DUMP_H__ */
