/*
 * OTP Masks
 */

#ifndef __BFIN_PERIPHERAL_OTP__
#define __BFIN_PERIPHERAL_OTP__

#ifndef __ASSEMBLY__

#include "bootrom.h"

static uint32_t (* const otp_command)(uint32_t command, uint32_t value) = (void *)_BOOTROM_OTP_COMMAND;
static uint32_t (* const otp_read)(uint32_t page, uint32_t flags, uint64_t *page_content) = (void *)_BOOTROM_OTP_READ;
static uint32_t (* const otp_write)(uint32_t page, uint32_t flags, uint64_t *page_content) = (void *)_BOOTROM_OTP_WRITE;

#endif

/* otp_command(): defines for "command" */
#define OTP_INIT             0x00000001
#define OTP_CLOSE            0x00000002

/* otp_{read,write}(): defines for "flags" */
#define OTP_LOWER_HALF       0x00000000 /* select upper/lower 64-bit half (bit 0) */
#define OTP_UPPER_HALF       0x00000001
#define OTP_NO_ECC           0x00000010 /* do not use ECC */
#define OTP_LOCK             0x00000020 /* sets page protection bit for page */
#define OTP_ACCESS_READ      0x00001000
#define OTP_ACCESS_READWRITE 0x00002000

/* Return values for all functions */
#define OTP_SUCCESS          0x00000000
#define OTP_MASTER_ERROR     0x001
#define OTP_WRITE_ERROR      0x003
#define OTP_READ_ERROR       0x005
#define OTP_ACC_VIO_ERROR    0x009
#define OTP_DATA_MULT_ERROR  0x011
#define OTP_ECC_MULT_ERROR   0x021
#define OTP_PREV_WR_ERROR    0x041
#define OTP_DATA_SB_WARN     0x100
#define OTP_ECC_SB_WARN      0x200

/* Predefined otp pages: Factory Programmed Settings */
#define FPS00                0x0004
#define FPS01                0x0005
#define FPS02                0x0006
#define FPS03                0x0007
#define FPS04                0x0008
#define FPS05                0x0009
#define FPS06                0x000A
#define FPS07                0x000B
#define FPS08                0x000C
#define FPS09                0x000D
#define FPS10                0x000E
#define FPS11                0x000F

/* Predefined otp pages: Customer Programmed Settings */
#define CPS00                0x0010
#define CPS01                0x0011
#define CPS02                0x0012
#define CPS03                0x0013
#define CPS04                0x0014
#define CPS05                0x0015
#define CPS06                0x0016
#define CPS07                0x0017

/* Predefined otp pages: Pre-Boot Settings */
#define PBS00                0x0018
#define PBS01                0x0019
#define PBS02                0x001A
#define PBS03                0x001B

#endif
