Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e9d60aa authored by Sujeev Dias's avatar Sujeev Dias Committed by Gerrit - the friendly Code Review server
Browse files

mhi: core: parse MHI controller version during MHI registration



During registration read and store the controller version so
control driver can select appropriate firmware info.

CRs-Fixed: 2454278
Change-Id: Ia20cb7dc1774a5a8919d03bcd8bb65f8b9846f64
Signed-off-by: default avatarSujeev Dias <sdias@codeaurora.org>
parent 76b7b507
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1188,6 +1188,7 @@ int of_register_mhi_controller(struct mhi_controller *mhi_cntrl)
	struct mhi_chan *mhi_chan;
	struct mhi_cmd *mhi_cmd;
	struct mhi_device *mhi_dev;
	u32 soc_info;

	if (!mhi_cntrl->of_node)
		return -EINVAL;
@@ -1253,6 +1254,27 @@ int of_register_mhi_controller(struct mhi_controller *mhi_cntrl)
		mhi_cntrl->unmap_single = mhi_unmap_single_no_bb;
	}

	/* read the device info if possible */
	if (mhi_cntrl->regs) {
		ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs,
				   SOC_HW_VERSION_OFFS, &soc_info);
		if (ret)
			goto error_alloc_dev;

		mhi_cntrl->family_number =
			(soc_info & SOC_HW_VERSION_FAM_NUM_BMSK) >>
			SOC_HW_VERSION_FAM_NUM_SHFT;
		mhi_cntrl->device_number =
			(soc_info & SOC_HW_VERSION_DEV_NUM_BMSK) >>
			SOC_HW_VERSION_DEV_NUM_SHFT;
		mhi_cntrl->major_version =
			(soc_info & SOC_HW_VERSION_MAJOR_VER_BMSK) >>
			SOC_HW_VERSION_MAJOR_VER_SHFT;
		mhi_cntrl->minor_version =
			(soc_info & SOC_HW_VERSION_MINOR_VER_BMSK) >>
			SOC_HW_VERSION_MINOR_VER_SHFT;
	}

	/* register controller with mhi_bus */
	mhi_dev = mhi_alloc_device(mhi_cntrl);
	if (!mhi_dev) {
+10 −0
Original line number Diff line number Diff line
@@ -215,6 +215,16 @@ extern struct bus_type mhi_bus_type;
#define BHIE_RXVECSTATUS_STATUS_XFER_COMPL (0x02)
#define BHIE_RXVECSTATUS_STATUS_ERROR (0x03)

#define SOC_HW_VERSION_OFFS (0x224)
#define SOC_HW_VERSION_FAM_NUM_BMSK (0xF0000000)
#define SOC_HW_VERSION_FAM_NUM_SHFT (28)
#define SOC_HW_VERSION_DEV_NUM_BMSK (0x0FFF0000)
#define SOC_HW_VERSION_DEV_NUM_SHFT (16)
#define SOC_HW_VERSION_MAJOR_VER_BMSK (0x0000FF00)
#define SOC_HW_VERSION_MAJOR_VER_SHFT (8)
#define SOC_HW_VERSION_MINOR_VER_BMSK (0x000000FF)
#define SOC_HW_VERSION_MINOR_VER_SHFT (0)

/* convert ticks to micro seconds by dividing by 19.2 */
#define TIME_TICKS_TO_US(x) (div_u64((x) * 10, 192))

+4 −0
Original line number Diff line number Diff line
@@ -201,6 +201,10 @@ struct mhi_controller {
	u32 domain;
	u32 bus;
	u32 slot;
	u32 family_number;
	u32 device_number;
	u32 major_version;
	u32 minor_version;

	/* addressing window */
	dma_addr_t iova_start;