gk7205v200-uboot/drivers/ddr/goke/default/ddr_interface.h
2025-08-07 17:13:54 +08:00

145 lines
4.2 KiB
C
Executable File

/*
* Copyright (c) Hunan Goke,Chengdu Goke,Shandong Goke. 2021. All rights reserved.
*/
#ifndef DDR_INTERFACE_H
#define DDR_INTERFACE_H
#define DDR_PHY_BYTE_MAX 4
#define DDR_PHY_BIT_NUM 8
/* support max bit 32*/
#define DDR_PHY_BIT_MAX (DDR_PHY_BYTE_MAX * DDR_PHY_BIT_NUM)
#define DDR_REG_NAME_MAX 32 /* register name */
#define DDR_CA_ADDR_MAX 10
#define DDR_SUPPORT_PHY_MAX 2 /* support max phy number */
#define DDR_SUPPORT_RANK_MAX 2 /* support max rank number */
#define DDR_SUPPORT_DMC_MAX 4 /* support max dmc number */
#define DDR_CK_RESULT_MAX 2 /* DCC CK result number */
/**
* DDR training register number:
* WDQS 4
* WDQ Phase 4
* WDQ BDL 8
* WDM 4
* Write DQ/DQS OE 4
* RDQS 4
* RDQ BDL 8
* Gate 4
* CS 1
* CLK 1
* Host Vref 4
* DRAM Vref 4
* CA Phase 1
* CA BDL 5
* -------------------
* 60
*/
#define DDR_TRAINING_REG_NUM 60
/* register max. */
#define DDR_TRAINING_REG_MAX (DDR_TRAINING_REG_NUM * DDR_SUPPORT_PHY_MAX)
#define DDR_TRAINING_CMD_SW (1 << 0)
#define DDR_TRAINING_CMD_HW (1 << 1)
#define DDR_TRAINING_CMD_MPR (1 << 2)
#define DDR_TRAINING_CMD_WL (1 << 3)
#define DDR_TRAINING_CMD_GATE (1 << 4)
#define DDR_TRAINING_CMD_DATAEYE (1 << 5)
#define DDR_TRAINING_CMD_VREF (1 << 6)
#define DDR_TRAINING_CMD_AC (1 << 7)
#define DDR_TRAINING_CMD_LPCA (1 << 8)
#define DDR_TRAINING_CMD_SW_NO_WL (1 << 9)
#define DDR_TRAINING_CMD_CONSOLE (1 << 10)
#define DDR_TRAINING_CMD_DCC (1 << 11)
#define DDR_TRAINING_CMD_PCODE (1 << 12)
/*******log level ********************/
#define DDR_LOG_INFO_STR "info"
#define DDR_LOG_DEBUG_STR "debug"
#define DDR_LOG_WARNING_STR "warning"
#define DDR_LOG_ERROR_STR "error"
#define DDR_LOG_FATAL_STR "fatal"
#define DDR_LOG_INFO (1 << 0)
#define DDR_LOG_DEBUG (1 << 1)
#define DDR_LOG_WARNING (1 << 2)
#define DDR_LOG_ERROR (1 << 3)
#define DDR_LOG_FATAL (1 << 4)
#define DDR_TRAINING_BOOT_RESULT_ADDR (TEXT_BASE + 0x1000000) /* boot + 16M */
#define DDR_TRAINING_VER "V2.1.6 20181228"
#define DDR_VERSION 0x216
struct training_data {
unsigned int ddr_bit_result[DDR_PHY_BIT_MAX];
unsigned int ddr_bit_best[DDR_PHY_BIT_MAX];
unsigned int ddr_win_sum;
};
struct ddr_training_data_st {
unsigned int base_phy;
unsigned int byte_num;
unsigned int rank_idx;
struct training_data read;
struct training_data write;
unsigned int ca_addr[DDR_CA_ADDR_MAX];
};
struct rank_data_st {
unsigned int item;
struct ddr_training_data_st ddrtr_data;
};
struct phy_data_st {
unsigned int rank_num;
struct rank_data_st rank_st[DDR_SUPPORT_RANK_MAX];
};
struct ddr_training_result_st {
unsigned int phy_num;
struct phy_data_st phy_st[DDR_SUPPORT_PHY_MAX];
};
struct ddr_reg_val_st {
unsigned int rank_index;
unsigned int byte_index;
unsigned int offset;
unsigned int val;
char name[DDR_REG_NAME_MAX];
};
struct ddr_cmd_st {
unsigned int cmd;
unsigned int level;
unsigned int start;
unsigned int length;
};
typedef struct ddr_training_result_st * (*ddr_cmd_entry_func)
(struct ddr_cmd_st *cmd_st);
/* DDR training interface before boot */
int ddr_pcode_training_if(void);
int ddr_sw_training_if(void);
int ddr_hw_training_if(void);
int ddr_training_console_if(void *args);
/* DDR training check interface when boot */
struct ddr_training_result_st *ddr_cmd_training_if(struct ddr_cmd_st *cmd_st);
int check_ddr_training(void);
/* DDR training command interface after boot */
void ddr_reg_result_display(struct ddr_training_result_st *ddrtr_result);
void ddr_cmd_result_display(struct ddr_training_result_st *ddrtr_result,
unsigned int cmd);
void *ddr_cmd_get_entry(void);
void ddr_cmd_prepare_copy(void);
void ddr_cmd_site_save(void);
void ddr_cmd_site_restore(void);
#endif /* DDR_INTERFACE_H */