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

Commit 2fb88832 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "defconfig: sdxlemur: Enable MHI Host driver"

parents 48d7c9d7 175a5390
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -46,3 +46,6 @@ CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_VFAT_FS=y
CONFIG_MHI_BUS=y
CONFIG_MHI_DEBUG=y
CONFIG_MHI_UCI=y
+2 −0
Original line number Diff line number Diff line
@@ -232,3 +232,5 @@ CONFIG_CLOCK_CPU_SDXLEMUR=y
CONFIG_AQFWD=y
CONFIG_ATLFWD_FWD=y
# CONFIG_ATLFWD_FWD_NETLINK is not set
CONFIG_MHI_BUS=y
CONFIG_MHI_UCI=y
+7 −7
Original line number Diff line number Diff line
@@ -210,10 +210,10 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
	int ret;
	u32 rx_status;
	enum mhi_ee ee;
	const u32 delayus = 5000;
	u32 retry = (mhi_cntrl->timeout_ms * 1000) / delayus;
	const u32 rddm_timeout_us = 200000;
	int rddm_retry = rddm_timeout_us / delayus; /* time to enter rddm */
	const u32 delayms = 5;
	u32 retry = (mhi_cntrl->timeout_ms) / delayms;
	const u32 rddm_timeout_ms = 200;
	int rddm_retry = rddm_timeout_ms / delayms; /* time to enter rddm */
	void __iomem *base = mhi_cntrl->bhie;

	MHI_CNTRL_LOG("Entered with pm_state:%s dev_state:%s ee:%s\n",
@@ -256,7 +256,7 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
			if (ee == MHI_EE_RDDM)
				break;

			udelay(delayus);
			mdelay(delayms);
		}

		if (rddm_retry <= 0) {
@@ -266,7 +266,7 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
			mhi_cntrl->write_reg(mhi_cntrl, mhi_cntrl->regs,
				      MHI_SOC_RESET_REQ_OFFSET,
				      MHI_SOC_RESET_REQ);
			udelay(delayus);
			mdelay(delayms);
		}

		ee = mhi_get_exec_env(mhi_cntrl);
@@ -287,7 +287,7 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
			return 0;
		}

		udelay(delayus);
		mdelay(delayms);
	}

	ee = mhi_get_exec_env(mhi_cntrl);
+16 −4
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. */

#include <asm/arch_timer.h>
#include <linux/debugfs.h>
#include <linux/device.h>
#include <linux/dma-direction.h>
@@ -324,10 +325,19 @@ static const struct attribute_group mhi_sysfs_group = {

void mhi_create_sysfs(struct mhi_controller *mhi_cntrl)
{
	sysfs_create_group(&mhi_cntrl->mhi_dev->dev.kobj, &mhi_sysfs_group);
	if (mhi_cntrl->mhi_tsync)
		sysfs_create_group(&mhi_cntrl->mhi_dev->dev.kobj,
	int ret;

	ret = sysfs_create_group(&mhi_cntrl->mhi_dev->dev.kobj,
			&mhi_sysfs_group);
	if (ret)
		MHI_CNTRL_LOG("Failed to create mhi_sysfs_group");

	if (mhi_cntrl->mhi_tsync) {
		ret = sysfs_create_group(&mhi_cntrl->mhi_dev->dev.kobj,
				   &mhi_tsync_group);
		if (ret)
			MHI_CNTRL_LOG("Failed to create mhi_tsync_group");
	}
}

void mhi_destroy_sysfs(struct mhi_controller *mhi_cntrl)
@@ -808,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 */
Loading