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

Commit 77620139 authored by Hemant Kumar's avatar Hemant Kumar
Browse files

mhi: core: Perform 32 bit register reads on time sync reg



Driver is directly performing a 64 bit read on time sync
register. In order to avoid compilation error on a 32 bit
platform perform two 32 bit reads instead of 64 bit read.

Change-Id: I477647c88a0bb2b4302ce2564bdc58fc4d68e806
Signed-off-by: default avatarHemant Kumar <hemantk@codeaurora.org>
parent 9bf56858
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -818,8 +818,10 @@ static int mhi_init_timesync(struct mhi_controller *mhi_cntrl)

	/* save time_offset for obtaining time */
	MHI_CNTRL_LOG("TIME OFFS:0x%x\n", time_offset);
	mhi_tsync->time_reg = mhi_cntrl->regs + time_offset
	mhi_tsync->time_reg_lo = mhi_cntrl->regs + time_offset
			      + TIMESYNC_TIME_LOW_OFFSET;
	mhi_tsync->time_reg_hi = mhi_cntrl->regs + time_offset
			      + TIMESYNC_TIME_HIGH_OFFSET;

	mhi_cntrl->mhi_tsync = mhi_tsync;

+10 −5
Original line number Diff line number Diff line
@@ -723,7 +723,8 @@ struct tsync_node {
};

struct mhi_timesync {
	void __iomem *time_reg;
	void __iomem *time_reg_lo;
	void __iomem *time_reg_hi;
	u32 int_sequence;
	u64 local_time;
	u64 remote_time;
@@ -856,10 +857,14 @@ void mhi_write_reg_offload(struct mhi_controller *mhi_cntrl,
static inline void mhi_timesync_log(struct mhi_controller *mhi_cntrl)
{
	struct mhi_timesync *mhi_tsync = mhi_cntrl->mhi_tsync;
	u64 time_val;

	if (mhi_tsync && mhi_cntrl->tsync_log)
		mhi_cntrl->tsync_log(mhi_cntrl,
				     readq_no_log(mhi_tsync->time_reg));
	if (mhi_tsync && mhi_cntrl->tsync_log) {
		time_val =
			(u64)readl_relaxed_no_log(mhi_tsync->time_reg_hi) << 32
			| readl_relaxed_no_log(mhi_tsync->time_reg_lo);
		mhi_cntrl->tsync_log(mhi_cntrl, time_val);
	}
}

/* memory allocation methods */
+2 −1
Original line number Diff line number Diff line
@@ -2637,7 +2637,8 @@ int mhi_get_remote_time_sync(struct mhi_device *mhi_dev,
	local_irq_disable();

	*t_host = mhi_cntrl->time_get(mhi_cntrl, mhi_cntrl->priv_data);
	*t_dev = readq_relaxed_no_log(mhi_tsync->time_reg);
	*t_dev = (u64)readl_relaxed_no_log(mhi_tsync->time_reg_hi) << 32 |
			readl_relaxed_no_log(mhi_tsync->time_reg_lo);

	local_irq_enable();
	preempt_enable();