/*
 * Copyright (C) 2018 Synaptics Incorporated. 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 version 2 as
 * published by the Free Software Foundation.
 *
 * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND
 * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY
 * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR
 * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND
 * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF
 * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT
 * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY
 * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS.
 */

#ifndef _BLOCK0_H_
#define _BLOCK0_H_

typedef struct _bootparam_t_ {
	unsigned int magic;

	unsigned int 	page_size		:	8;
	unsigned int 	address_cycle		:	8;
	unsigned int 	block_size		:	16;

	unsigned int	ecc_en			:	8;
	unsigned int	bch_en			:	8;
	unsigned int	spare_en		:	8;
	unsigned int	reserve			:	8;
} bootparam_t;

#define DDR2	2
#define DDR3	3
#define DDR_DUAL_CHANNEL	2
#define DDR_SINGLE_CHANNEL	1

typedef struct _block0_t_ {
	union{
		bootparam_t bootparam[33];
		char pad[2048];
	} ;

	unsigned int 	ndtr0cs0; 
	unsigned int	ndtr1cs0; 
	unsigned int	ndredel; 
	unsigned int	ddr_CSL; 
	unsigned int 	ddr_timing1; 
	unsigned int	ddr_timing2; 
	unsigned int 	ddr_timing3;
	unsigned int	first_burn_flag;
	unsigned char	ddr_type	: 4;
	unsigned char	ddr_channel	: 4;
	unsigned char	cpu_type[2];
} block0_t;

#endif
