kernel_samsung_a53x/drivers/scsi/ufs/s5e8825/ufs-cal-if.h
2024-06-15 16:02:09 -03:00

129 lines
2.6 KiB
C
Executable file

#ifndef _UFS_CAL_
#define _UFS_CAL_
#include "ufs-vs-mmio.h"
#include "ufs-cal-if.h"
#undef NULL
#define NULL 0
#undef BIT
#define BIT(a) (1U << (a))
struct uic_pwr_mode {
u8 lane;
u8 gear;
u8 mode;
u8 hs_series;
};
enum {
HOST_EMBD = 0,
HOST_CARD = 1,
};
enum {
EOM_RTY_G1 = 8,
EOM_RTY_G2 = 4,
EOM_RTY_G3 = 2,
EOM_RTY_G4 = 1,
EOM_RTY_MAX = 8,
};
enum {
GEAR_1 = 1,
GEAR_2,
GEAR_3,
GEAR_4,
GEAR_MAX = GEAR_4,
};
#define MAX_LANE 4
#define EOM_PH_SEL_MAX 72
#define EOM_DEF_VREF_MAX 256
#define EOM_MAX_SIZE (EOM_RTY_MAX * EOM_PH_SEL_MAX * \
EOM_DEF_VREF_MAX)
static const u32 ufs_s_eom_repeat[GEAR_MAX + 1] = {
0, EOM_RTY_G1, EOM_RTY_G2, EOM_RTY_G3, EOM_RTY_G4
};
struct ufs_eom_result_s {
u32 v_phase;
u32 v_vref;
u32 v_err;
};
/* interface */
struct ufs_cal_param {
/* input */
struct ufs_vs_handle *handle;
u8 available_lane;
u8 connected_tx_lane;
u8 connected_rx_lane;
u8 active_tx_lane;
u8 active_rx_lane;
u32 mclk_rate;
u8 tbl;
u8 board;
u8 evt_ver;
u8 max_gear;
struct uic_pwr_mode *pmd;
/* output */
u32 eom_sz;
struct ufs_eom_result_s *eom[MAX_LANE]; /* per lane */
/* private data */
u32 mclk_period;
u32 mclk_period_rnd_off;
u32 mclk_period_unipro_18;
/* AH8 */
u32 support_ah8_cal;
u32 ah8_thinern8_time;
u32 ah8_brefclkgatingwaittime;
};
enum ufs_cal_errno {
UFS_CAL_NO_ERROR = 0,
UFS_CAL_TIMEOUT,
UFS_CAL_ERROR,
UFS_CAL_INV_ARG,
UFS_CAL_INV_CONF,
};
enum {
__BRD_SMDK,
__BRD_ASB,
__BRD_HSIE,
__BRD_ZEBU,
__BRD_UNIV,
__BRD_MAX,
};
#define BRD_SMDK BIT(__BRD_SMDK)
#define BRD_ASB BIT(__BRD_ASB)
#define BRD_HSIE BIT(__BRD_HSIE)
#define BRD_ZEBU BIT(__BRD_ZEBU)
#define BRD_UNIV BIT(__BRD_UNIV)
#define BRD_MAX BIT(__BRD_MAX)
#define BRD_ALL (BIT(__BRD_MAX) - 1)
/* UFS CAL interface */
typedef enum ufs_cal_errno (*cal_if_func_init) (struct ufs_cal_param *, int);
typedef enum ufs_cal_errno (*cal_if_func) (struct ufs_cal_param *);
enum ufs_cal_errno ufs_cal_post_h8_enter(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_pre_h8_exit(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_post_pmc(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_pre_pmc(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_post_link(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_pre_link(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_init(struct ufs_cal_param *p, int idx);
enum ufs_cal_errno ufs_cal_eom(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_loopback_init(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_loopback_set_1(struct ufs_cal_param *p);
enum ufs_cal_errno ufs_cal_loopback_set_2(struct ufs_cal_param *p);
#endif /*_UFS_CAL_ */