/*
 * Copyright (c) 2008, Google Inc.
 * All rights reserved.
 * Copyright (c) 2009-2012, The Linux Foundation. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef __QPIC_NAND_H
#define __QPIC_NAND_H

#include <debug.h>
#include <dev/flash.h>
#include <platform/iomap.h>

#define NAND_REG(off)                                      (nand_base + (off))

#define NAND_FLASH_CMD                                     NAND_REG(0x0000)
#define NAND_ADDR0                                         NAND_REG(0x0004)
#define NAND_ADDR1                                         NAND_REG(0x0008)
#define NAND_FLASH_CHIP_SELECT                             NAND_REG(0x000C)
#define NAND_EXEC_CMD                                      NAND_REG(0x0010)
#define NAND_FLASH_STATUS                                  NAND_REG(0x0014)
#define NAND_BUFFER_STATUS                                 NAND_REG(0x0018)
#define NAND_DEV0_CFG0                                     NAND_REG(0x0020)
#define NAND_DEV0_CFG1                                     NAND_REG(0x0024)
#define NAND_DEV0_ECC_CFG                                  NAND_REG(0x0028)
#define NAND_DEV1_CFG0                                     NAND_REG(0x0030)
#define NAND_DEV1_CFG1                                     NAND_REG(0x0034)
#define NAND_SFLASHC_CMD                                   NAND_REG(0x0038)
#define NAND_SFLASHC_EXEC_CMD                              NAND_REG(0x003C)
#define NAND_READ_ID                                       NAND_REG(0x0040)
#define NAND_READ_STATUS                                   NAND_REG(0x0044)
#define NAND_CONFIG_DATA                                   NAND_REG(0x0050)
#define NAND_CONFIG                                        NAND_REG(0x0054)
#define NAND_CONFIG_MODE                                   NAND_REG(0x0058)
#define NAND_CONFIG_STATUS                                 NAND_REG(0x0060)
#define NAND_MACRO1_REG                                    NAND_REG(0x0064)
#define NAND_XFR_STEP1                                     NAND_REG(0x0070)
#define NAND_XFR_STEP2                                     NAND_REG(0x0074)
#define NAND_XFR_STEP3                                     NAND_REG(0x0078)
#define NAND_XFR_STEP4                                     NAND_REG(0x007C)
#define NAND_XFR_STEP5                                     NAND_REG(0x0080)
#define NAND_XFR_STEP6                                     NAND_REG(0x0084)
#define NAND_XFR_STEP7                                     NAND_REG(0x0088)
#define NAND_GENP_REG0                                     NAND_REG(0x0090)
#define NAND_GENP_REG1                                     NAND_REG(0x0094)
#define NAND_GENP_REG2                                     NAND_REG(0x0098)
#define NAND_GENP_REG3                                     NAND_REG(0x009C)
#define NAND_SFLASHC_STATUS                                NAND_REG(0x001C)
#define NAND_DEV_CMD0                                      NAND_REG(0x00A0)
#define NAND_DEV_CMD1                                      NAND_REG(0x00A4)
#define NAND_DEV_CMD2                                      NAND_REG(0x00A8)
#define NAND_DEV_CMD_VLD                                   NAND_REG(0x00AC)
#define NAND_EBI2_MISR_SIG_REG                             NAND_REG(0x00B0)
#define NAND_ADDR2                                         NAND_REG(0x00C0)
#define NAND_ADDR3                                         NAND_REG(0x00C4)
#define NAND_ADDR4                                         NAND_REG(0x00C8)
#define NAND_ADDR5                                         NAND_REG(0x00CC)
#define NAND_DEV_CMD3                                      NAND_REG(0x00D0)
#define NAND_DEV_CMD4                                      NAND_REG(0x00D4)
#define NAND_DEV_CMD5                                      NAND_REG(0x00D8)
#define NAND_DEV_CMD6                                      NAND_REG(0x00DC)
#define NAND_SFLASHC_BURST_CFG                             NAND_REG(0x00E0)
#define NAND_ADDR6                                         NAND_REG(0x00E4)
#define NAND_ERASED_CW_DETECT_CFG                          NAND_REG(0x00E8)
#define NAND_ERASED_CW_DETECT_STATUS                       NAND_REG(0x00EC)
#define NAND_EBI2_ECC_BUF_CFG                              NAND_REG(0x00F0)
#define NAND_HW_INFO                                       NAND_REG(0x00FC)
#define NAND_FLASH_BUFFER                                  NAND_REG(0x0100)

/* NANDc registers used during BAM transfer */
#define NAND_READ_LOCATION_n(n)                            (NAND_REG(0xF20) + 4 * (n))
#define NAND_RD_LOC_LAST_BIT(x)                            ((x) << 31)
#define NAND_RD_LOC_SIZE(x)                                ((x) <<  16)
#define NAND_RD_LOC_OFFSET(x)                              ((x) <<  0)

/* Shift Values */
#define NAND_DEV0_CFG1_WIDE_BUS_SHIFT                      1
#define NAND_DEV0_CFG0_DIS_STS_AFTER_WR_SHIFT              4
#define NAND_DEV0_CFG0_CW_PER_PAGE_SHIFT                   6
#define NAND_DEV0_CFG0_UD_SIZE_BYTES_SHIFT                 9
#define NAND_DEV0_CFG0_ADDR_CYCLE_SHIFT                    27
#define NAND_DEV0_CFG0_SPARE_SZ_BYTES_SHIFT                23

#define NAND_DEV0_CFG1_RECOVERY_CYCLES_SHIFT               2
#define NAND_DEV0_CFG1_CS_ACTIVE_BSY_SHIFT                 5
#define NAND_DEV0_CFG1_BAD_BLK_BYTE_NUM_SHIFT              6
#define NAND_DEV0_CFG1_BAD_BLK_IN_SPARE_SHIFT              16
#define NAND_DEV0_CFG1_WR_RD_BSY_GAP_SHIFT                 17
#define NAND_DEV0_ECC_DISABLE_SHIFT                        0
#define NAND_DEV0_ECC_SW_RESET_SHIFT                       1
#define NAND_DEV0_ECC_MODE_SHIFT                           4
#define NAND_DEV0_ECC_DISABLE_SHIFT                        0
#define NAND_DEV0_ECC_PARITY_SZ_BYTES_SHIFT                8
#define NAND_DEV0_ECC_NUM_DATA_BYTES                       16
#define NAND_DEV0_ECC_FORCE_CLK_OPEN_SHIFT                 30

#define NAND_ERASED_CW_DETECT_STATUS_PAGE_ALL_ERASED       7
#define NAND_ERASED_CW_DETECT_STATUS_CODEWORD_ALL_ERASED   6
#define NAND_ERASED_CW_DETECT_STATUS_CODEWORD_ERASED       4

#define NAND_ERASED_CW_DETECT_CFG_RESET_CTRL               1
#define NAND_ERASED_CW_DETECT_CFG_ACTIVATE_CTRL            0
#define NAND_ERASED_CW_DETECT_ERASED_CW_ECC_MASK           (1 << 1)
#define NAND_ERASED_CW_DETECT_ERASED_CW_ECC_NO_MASK        (0 << 1)

/* device commands */
#define NAND_CMD_SOFT_RESET                                0x01
#define NAND_CMD_PAGE_READ                                 0x32
#define NAND_CMD_PAGE_READ_ECC                             0x33
#define NAND_CMD_PAGE_READ_ALL                             0x34
#define NAND_CMD_SEQ_PAGE_READ                             0x15
#define NAND_CMD_PRG_PAGE                                  0x36
#define NAND_CMD_PRG_PAGE_ECC                              0x37
#define NAND_CMD_PRG_PAGE_ALL                              0x39
#define NAND_CMD_BLOCK_ERASE                               0x3A
#define NAND_CMD_FETCH_ID                                  0x0B
#define NAND_CMD_STATUS                                    0x0C
#define NAND_CMD_RESET                                     0x0D

/* NAND Status errors */
#define NAND_FLASH_MPU_ERR                                 (1 << 8)
#define NAND_FLASH_TIMEOUT_ERR                             (1 << 6)
#define NAND_FLASH_OP_ERR                                  (1 << 4)

#define NAND_FLASH_ERR                                     (NAND_FLASH_MPU_ERR | \
                                                           NAND_FLASH_TIMEOUT_ERR | \
                                                           NAND_FLASH_OP_ERR)

#define PROG_ERASE_OP_RESULT                               (1 << 7)

#define DATA_CONSUMER_PIPE_INDEX                           0
#define DATA_PRODUCER_PIPE_INDEX                           1
#define CMD_PIPE_INDEX                                     2

/* Define BAM pipe lock groups for NANDc*/
#define P_LOCK_GROUP_0                                     0

/* Define BAM pipe lock super groups for NANDc
 * Note: This is configured by TZ.
 */
#define P_LOCK_SUPERGROUP_0                                0
#define P_LOCK_SUPERGROUP_1                                1

#define ONFI_SIGNATURE                                     0x49464E4F

#define ONFI_CRC_POLYNOMIAL                                0x8005
#define ONFI_CRC_INIT_VALUE                                0x4F4E

#define ONFI_READ_PARAM_PAGE_ADDR_CYCLES                   1
#define ONFI_READ_ID_ADDR_CYCLES                           1

#define ONFI_READ_ID_CMD                                   0x90
#define ONFI_READ_PARAM_PAGE_CMD                           0xEC
#define ONFI_READ_ID_ADDR                                  0x20
#define ONFI_READ_PARAM_PAGE_ADDR                          0x00

#define NAND_CFG0_RAW_ONFI_ID                              0x88000800
#define NAND_CFG0_RAW_ONFI_PARAM_PAGE                      0x88040000
#define NAND_CFG1_RAW_ONFI_ID                              0x0005045D
#define NAND_CFG1_RAW_ONFI_PARAM_PAGE                      0x0005045D
#define NAND_CFG0                                          0x290409c0
#define NAND_CFG1                                          0x08045d5c
#define NAND_ECC_BCH_CFG                                   0x42040d10
#define NAND_Bad_Block                                     0x00000175
#define NAND_ECC_BUF_CFG                                   0x00000203

#define ONFI_READ_ID_BUFFER_SIZE                           0x4
#define ONFI_READ_PARAM_PAGE_BUFFER_SIZE                   0x200
#define ONFI_PARAM_PAGE_SIZE                               0x100

#define NAND_8BIT_DEVICE                                   0x01
#define NAND_16BIT_DEVICE                                  0x02

#define NAND_CW_SIZE_4_BIT_ECC                             528
#define NAND_CW_SIZE_8_BIT_ECC                             532

/* Indicates the data bytes in the user data portion of the code word. */
#define USER_DATA_BYTES_PER_CW                             512

/* Indicates the number of bytes covered by BCH ECC logic when
 * a codeword is written to a NAND flash device.
 * This is also the number of bytes that are part of the image in  CW.
 * 516 bytes  = (512 bytes of user data and 4 bytes of spare data)
 */
#define DATA_BYTES_IN_IMG_PER_CW                           516

#define NAND_CW_DIV_RIGHT_SHIFT                            9

/* Reset Values for Status registers */
#define NAND_FLASH_STATUS_RESET                            0x00000020
#define NAND_READ_STATUS_RESET                             0x000000C0

/* result type */
typedef enum {
	NANDC_RESULT_SUCCESS = 0,
	NANDC_RESULT_FAILURE = 1,
	NANDC_RESULT_TIMEOUT = 2,
	NANDC_RESULT_PARAM_INVALID = 3,
	NANDC_RESULT_DEV_NOT_SUPPORTED = 4,
	NANDC_RESULT_BAD_PAGE = 5,
	NANDC_RESULT_BAD_BLOCK = 6,
} nand_result_t;

enum nand_bad_block_value
{
	NAND_BAD_BLK_VALUE_NOT_READ,
	NAND_BAD_BLK_VALUE_IS_BAD,
	NAND_BAD_BLK_VALUE_IS_GOOD,
};

enum nand_cfg_value
{
	NAND_CFG_RAW,
	NAND_CFG,
};

struct onfi_param_page
{
	uint32_t signature;
	uint16_t rev;
	uint16_t feature_supported;
	uint16_t opt_cmd_supported;
	uint8_t reserved_1[22];
	uint8_t mib[12];
	uint8_t device_model[20];
	uint8_t manufacturer_id;
	uint16_t date_code;
	uint8_t  reserved_2[13];
	uint32_t data_per_pg;
	uint16_t spare_per_pg;
	uint32_t data_per_partial_pg;
	uint16_t spare_per_partial_pg;
	uint32_t pgs_per_blk;
	uint32_t blks_per_LUN;
	uint8_t num_LUN;
	uint8_t num_addr_cycles;
	uint8_t num_bits_per_cell;
	uint16_t bad_blks_max_per_LUN;
	uint16_t blk_endurance;
	uint8_t guaranteed_vld_blks_at_start;
	uint16_t blk_endurance_for_garunteed_vld_blks;
	uint8_t num_prg_per_pg;
	uint8_t partial_prog_attr;
	uint8_t num_bits_ecc_correctability;
	uint8_t num_interleaved_addr_bits;
	uint8_t interleaved_op_attr;
	uint8_t reserved_3[13];
	uint8_t io_pin_capcacitance;
	uint16_t timing_mode_support;
	uint16_t prog_cache_timing_mode_support;
	uint16_t max_pg_prog_time_us;
	uint16_t max_blk_erase_time_us;
	uint16_t max_pr_rd_time_us;
	uint16_t min_chg_col_setup_time_us;
	uint8_t reserved_4[23];
	uint16_t vendor_rev;
	uint8_t vendor_specific[88];
	uint16_t interity_crc;
}__PACKED;

struct cfg_params
{
	uint32_t addr0;
	uint32_t addr1;
	uint32_t cfg0;
	uint32_t cfg1;
	uint32_t cmd;
	uint32_t ecc_cfg;
	uint32_t addr_loc_0;
	uint32_t exec;
};

struct onfi_probe_params
{
	uint32_t vld;
	uint32_t dev_cmd1;
	struct cfg_params cfg;
};

/* This stucture is used to create a static list of devices we support.
 * This include a subset of values defined in the flash_info struct as
 * other values can be derived.
 */
struct flash_id
{
	unsigned flash_id;
	unsigned mask;
	unsigned density;
	unsigned widebus;
	unsigned pagesize;
	unsigned blksize;
	unsigned oobsize;
	unsigned onenand;
	unsigned ecc_8_bits;
};

/* Structure to hold the pipe numbers */
struct qpic_nand_bam_pipes
{
	unsigned read_pipe;
	unsigned write_pipe;
	unsigned cmd_pipe;
};

/* Structure to define the initial nand config */
struct qpic_nand_init_config
{
	uint32_t nand_base;
	uint32_t bam_base;
	uint32_t ee;
	uint32_t max_desc_len;
	struct qpic_nand_bam_pipes pipes;
};

void
qpic_nand_init(struct qpic_nand_init_config *config);
unsigned
flash_block_size(void);
void
qpic_nand_uninit();

#endif
