i3c: i3c-master-qcom-geni: Add HW and FW version read support

This change adds the support to read Firmware and QUP HW version
during probe time. This helps to take decision during debug and
also serves as a debug information.

Change-Id: I3d5de6bc11dd5b30bbc0e345d9b48b342c4ff3ed
Signed-off-by: Mukesh Kumar Savaliya <msavaliy@codeaurora.org>
This commit is contained in:
Mukesh Kumar Savaliya 2020-10-19 17:31:56 +05:30
parent 554cd52a96
commit 62f02fd389

View file

@ -244,6 +244,15 @@ struct rcvd_ibi_data {
u32 payload;
};
struct geni_i3c_ver_info {
int hw_major_ver;
int hw_minor_ver;
int hw_step_ver;
int m_fw_ver;
int s_fw_ver;
};
struct geni_ibi {
bool hw_support;
bool is_init;
@ -283,6 +292,7 @@ struct geni_i3c_dev {
struct work_struct hj_wd;
struct wakeup_source *hj_wl;
struct pinctrl_state *i3c_gpio_disable;
struct geni_i3c_ver_info ver_info;
};
struct geni_i3c_i2c_dev_data {
@ -1990,6 +2000,26 @@ static int i3c_ibi_rsrcs_init(struct geni_i3c_dev *gi3c,
return 0;
}
static void geni_i3c_get_ver_info(struct geni_i3c_dev *gi3c)
{
int hw_ver;
unsigned int major, minor, step;
hw_ver = geni_se_qupv3_hw_version(gi3c->se.i3c_rsc.wrapper_dev,
&major, &minor, &step);
if (hw_ver)
GENI_SE_ERR(gi3c->ipcl, true, gi3c->se.dev,
"%s:Error reading HW version %d\n", __func__, hw_ver);
else
GENI_SE_DBG(gi3c->ipcl, false, gi3c->se.dev,
"%s:Major:%d Minor:%d step:%d\n", __func__, major, minor, step);
gi3c->ver_info.m_fw_ver = get_se_m_fw(gi3c->se.base);
gi3c->ver_info.s_fw_ver = get_se_s_fw(gi3c->se.base);
GENI_SE_DBG(gi3c->ipcl, false, gi3c->se.dev, "%s:FW Ver:0x%x%x\n",
__func__, gi3c->ver_info.m_fw_ver, gi3c->ver_info.s_fw_ver);
}
static int geni_i3c_probe(struct platform_device *pdev)
{
struct geni_i3c_dev *gi3c;
@ -2059,6 +2089,8 @@ static int geni_i3c_probe(struct platform_device *pdev)
"Invalid proto %d\n", proto);
ret = -ENXIO;
goto geni_resources_off;
} else {
geni_i3c_get_ver_info(gi3c);
}
se_mode = geni_read_reg(gi3c->se.base, GENI_IF_FIFO_DISABLE_RO);