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

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

Merge "ARM: dts: msm: Increase size of event ring 6 on msmnile"

parents e0e3cc62 74576c77
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -479,7 +479,7 @@
			};
			};


			mhi_event@6 {
			mhi_event@6 {
				mhi,num-elements = <1024>;
				mhi,num-elements = <2048>;
				mhi,intmod = <5>;
				mhi,intmod = <5>;
				mhi,msi = <6>;
				mhi,msi = <6>;
				mhi,chan = <101>;
				mhi,chan = <101>;
+2 −0
Original line number Original line Diff line number Diff line
@@ -366,6 +366,8 @@ enum mhi_cmd_type {
#define MHI_RSCTRE_DATA_DWORD0(cookie) (cookie)
#define MHI_RSCTRE_DATA_DWORD0(cookie) (cookie)
#define MHI_RSCTRE_DATA_DWORD1 (MHI_PKT_TYPE_COALESCING << 16)
#define MHI_RSCTRE_DATA_DWORD1 (MHI_PKT_TYPE_COALESCING << 16)


#define MHI_RSC_MIN_CREDITS (8)

enum MHI_CMD {
enum MHI_CMD {
	MHI_CMD_RESET_CHAN,
	MHI_CMD_RESET_CHAN,
	MHI_CMD_START_CHAN,
	MHI_CMD_START_CHAN,
+27 −2
Original line number Original line Diff line number Diff line
@@ -448,6 +448,8 @@ int mhi_queue_dma(struct mhi_device *mhi_dev,
	struct mhi_ring *buf_ring = &mhi_chan->buf_ring;
	struct mhi_ring *buf_ring = &mhi_chan->buf_ring;
	struct mhi_buf_info *buf_info;
	struct mhi_buf_info *buf_info;
	struct mhi_tre *mhi_tre;
	struct mhi_tre *mhi_tre;
	bool ring_db = true;
	int nr_tre;


	if (mhi_is_ring_full(mhi_cntrl, tre_ring))
	if (mhi_is_ring_full(mhi_cntrl, tre_ring))
		return -ENOMEM;
		return -ENOMEM;
@@ -489,6 +491,15 @@ int mhi_queue_dma(struct mhi_device *mhi_dev,
		mhi_tre->dword[0] =
		mhi_tre->dword[0] =
			MHI_RSCTRE_DATA_DWORD0(buf_ring->wp - buf_ring->base);
			MHI_RSCTRE_DATA_DWORD0(buf_ring->wp - buf_ring->base);
		mhi_tre->dword[1] = MHI_RSCTRE_DATA_DWORD1;
		mhi_tre->dword[1] = MHI_RSCTRE_DATA_DWORD1;
		/*
		 * on RSC channel IPA HW has a minimum credit requirement before
		 * switching to DB mode
		 */
		nr_tre = mhi_get_no_free_descriptors(mhi_dev, DMA_FROM_DEVICE);
		read_lock_bh(&mhi_chan->lock);
		if (mhi_chan->db_cfg.db_mode && nr_tre < MHI_RSC_MIN_CREDITS)
			ring_db = false;
		read_unlock_bh(&mhi_chan->lock);
	} else {
	} else {
		mhi_tre->ptr = MHI_TRE_DATA_PTR(buf_info->p_addr);
		mhi_tre->ptr = MHI_TRE_DATA_PTR(buf_info->p_addr);
		mhi_tre->dword[0] = MHI_TRE_DATA_DWORD0(buf_info->len);
		mhi_tre->dword[0] = MHI_TRE_DATA_DWORD0(buf_info->len);
@@ -506,7 +517,7 @@ int mhi_queue_dma(struct mhi_device *mhi_dev,
	if (mhi_chan->dir == DMA_TO_DEVICE)
	if (mhi_chan->dir == DMA_TO_DEVICE)
		atomic_inc(&mhi_cntrl->pending_pkts);
		atomic_inc(&mhi_cntrl->pending_pkts);


	if (likely(MHI_DB_ACCESS_VALID(mhi_cntrl))) {
	if (likely(MHI_DB_ACCESS_VALID(mhi_cntrl)) && ring_db) {
		read_lock_bh(&mhi_chan->lock);
		read_lock_bh(&mhi_chan->lock);
		mhi_ring_chan_db(mhi_cntrl, mhi_chan);
		mhi_ring_chan_db(mhi_cntrl, mhi_chan);
		read_unlock_bh(&mhi_chan->lock);
		read_unlock_bh(&mhi_chan->lock);
@@ -902,6 +913,8 @@ static int parse_xfer_event(struct mhi_controller *mhi_cntrl,
	u32 ev_code;
	u32 ev_code;
	struct mhi_result result;
	struct mhi_result result;
	unsigned long flags = 0;
	unsigned long flags = 0;
	bool ring_db = true;
	int nr_tre;


	ev_code = MHI_TRE_GET_EV_CODE(event);
	ev_code = MHI_TRE_GET_EV_CODE(event);
	buf_ring = &mhi_chan->buf_ring;
	buf_ring = &mhi_chan->buf_ring;
@@ -996,9 +1009,21 @@ static int parse_xfer_event(struct mhi_controller *mhi_cntrl,


		MHI_VERB("DB_MODE/OOB Detected chan %d.\n", mhi_chan->chan);
		MHI_VERB("DB_MODE/OOB Detected chan %d.\n", mhi_chan->chan);
		mhi_chan->db_cfg.db_mode = 1;
		mhi_chan->db_cfg.db_mode = 1;

		/*
		 * on RSC channel IPA HW has a minimum credit requirement before
		 * switching to DB mode
		 */
		if (mhi_chan->xfer_type == MHI_XFER_RSC_DMA) {
			nr_tre = mhi_get_no_free_descriptors(mhi_chan->mhi_dev,
					DMA_FROM_DEVICE);
			if (nr_tre < MHI_RSC_MIN_CREDITS)
				ring_db = false;
		}

		read_lock_irqsave(&mhi_cntrl->pm_lock, flags);
		read_lock_irqsave(&mhi_cntrl->pm_lock, flags);
		if (tre_ring->wp != tre_ring->rp &&
		if (tre_ring->wp != tre_ring->rp &&
		    MHI_DB_ACCESS_VALID(mhi_cntrl)) {
		    MHI_DB_ACCESS_VALID(mhi_cntrl) && ring_db) {
			mhi_ring_chan_db(mhi_cntrl, mhi_chan);
			mhi_ring_chan_db(mhi_cntrl, mhi_chan);
		}
		}
		read_unlock_irqrestore(&mhi_cntrl->pm_lock, flags);
		read_unlock_irqrestore(&mhi_cntrl->pm_lock, flags);