134 lines
2.7 KiB
C
Executable file
134 lines
2.7 KiB
C
Executable file
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Copyright (c) 2013-2016, Linux Foundation. All rights reserved.
|
|
*/
|
|
|
|
#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 128
|
|
#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_ */
|