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

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

mhi: core: add multi-EE support for MHI channels



Same MHI channel could support multiple execution environments,
adding support for such channels.

CRs-Fixed: 2289334
Change-Id: Ib6de0753238714fda40dfbd2d1220b809b88585d
Signed-off-by: default avatarSujeev Dias <sdias@codeaurora.org>
parent 7c2ec568
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -76,9 +76,15 @@ mhi channel node properties:
- mhi,ee
  Usage: required
  Value type: <u32>
  Definition: Channel execution enviornment as defined by enum MHI_EE
	1 = Bootloader stage
	2 = AMSS mode
  Definition: Channel execution enviornment (EE) mask as defined by enum
	mhi_ch_ee_mask
		BIT(0) = Channel supported in PBL EE
		BIT(1) = Channel supported in SBL EE
		BIT(2) = Channel supported in AMSS EE
		BIT(3) = Channel supported in BHIe EE
		BIT(4) = Channel supported in RDDM EE
		BIT(5) = Channel supported in PTHRU EE
		BIT(6) = Channel supported in EDL EE

- mhi,pollcfg
  Usage: optional
@@ -223,7 +229,7 @@ mhi_controller {
		mhi,chan-dir = <1>;
		mhi,data-type = <0>;
		mhi,doorbell-mode = <2>;
		mhi,ee = <2>;
		mhi,ee = <0x4>;
	};

	mhi_chan@1 {
@@ -234,7 +240,7 @@ mhi_controller {
		mhi,chan-dir = <2>;
		mhi,data-type = <0>;
		mhi,doorbell-mode = <2>;
		mhi,ee = <2>;
		mhi,ee = <0x4>;
	};

	mhi_event@0 {
+60 −60
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@1 {
@@ -53,7 +53,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@2 {
@@ -64,7 +64,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <1>;
				mhi,ee = <0x2>;
			};

			mhi_chan@3 {
@@ -75,7 +75,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <1>;
				mhi,ee = <0x2>;
			};

			mhi_chan@4 {
@@ -86,7 +86,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@5 {
@@ -97,7 +97,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@8 {
@@ -108,7 +108,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@9 {
@@ -119,7 +119,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@10 {
@@ -130,7 +130,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@11 {
@@ -141,7 +141,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@14 {
@@ -152,7 +152,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@15 {
@@ -163,7 +163,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@16 {
@@ -174,7 +174,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@17 {
@@ -185,7 +185,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@18 {
@@ -196,7 +196,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@19 {
@@ -207,7 +207,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,auto-queue;
			};

@@ -219,7 +219,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <1>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,auto-start;
			};

@@ -231,7 +231,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,auto-queue;
				mhi,auto-start;
			};
@@ -244,7 +244,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@23 {
@@ -255,7 +255,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@24 {
@@ -266,7 +266,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <1>;
				mhi,ee = <0x2>;
			};

			mhi_chan@25 {
@@ -277,7 +277,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <1>;
				mhi,ee = <0x2>;
			};

			mhi_chan@26 {
@@ -288,7 +288,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@27 {
@@ -299,7 +299,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@32 {
@@ -310,7 +310,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@33 {
@@ -321,7 +321,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@100 {
@@ -332,7 +332,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <1>;
				mhi,doorbell-mode = <3>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,db-mode-switch;
			};

@@ -344,7 +344,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <1>;
				mhi,doorbell-mode = <3>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@104 {
@@ -353,7 +353,7 @@
				mhi,event-ring = <4>;
				mhi,chan-dir = <1>;
				mhi,data-type = <3>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,offload-chan;
			};

@@ -363,7 +363,7 @@
				mhi,event-ring = <5>;
				mhi,chan-dir = <2>;
				mhi,data-type = <3>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,offload-chan;
				mhi,lpm-notify;
			};
@@ -470,7 +470,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@1 {
@@ -481,7 +481,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@2 {
@@ -492,7 +492,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <1>;
				mhi,ee = <0x2>;
			};

			mhi_chan@3 {
@@ -503,7 +503,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <1>;
				mhi,ee = <0x2>;
			};

			mhi_chan@4 {
@@ -514,7 +514,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@5 {
@@ -525,7 +525,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@8 {
@@ -536,7 +536,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@9 {
@@ -547,7 +547,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@10 {
@@ -558,7 +558,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@11 {
@@ -569,7 +569,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@14 {
@@ -580,7 +580,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@15 {
@@ -591,7 +591,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@16 {
@@ -602,7 +602,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@17 {
@@ -613,7 +613,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@18 {
@@ -624,7 +624,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@19 {
@@ -635,7 +635,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,auto-queue;
			};

@@ -647,7 +647,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <1>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,auto-start;
			};

@@ -659,7 +659,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,auto-queue;
				mhi,auto-start;
			};
@@ -672,7 +672,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@23 {
@@ -683,7 +683,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@24 {
@@ -694,7 +694,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <1>;
				mhi,ee = <0x2>;
			};

			mhi_chan@25 {
@@ -705,7 +705,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <1>;
				mhi,ee = <0x2>;
			};

			mhi_chan@26 {
@@ -716,7 +716,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@27 {
@@ -727,7 +727,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@32 {
@@ -738,7 +738,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@33 {
@@ -749,7 +749,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <0>;
				mhi,doorbell-mode = <2>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@100 {
@@ -760,7 +760,7 @@
				mhi,chan-dir = <1>;
				mhi,data-type = <1>;
				mhi,doorbell-mode = <3>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,db-mode-switch;
			};

@@ -772,7 +772,7 @@
				mhi,chan-dir = <2>;
				mhi,data-type = <1>;
				mhi,doorbell-mode = <3>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
			};

			mhi_chan@104 {
@@ -781,7 +781,7 @@
				mhi,event-ring = <4>;
				mhi,chan-dir = <1>;
				mhi,data-type = <3>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,offload-chan;
			};

@@ -791,7 +791,7 @@
				mhi,event-ring = <5>;
				mhi,chan-dir = <2>;
				mhi,data-type = <3>;
				mhi,ee = <2>;
				mhi,ee = <0x4>;
				mhi,offload-chan;
				mhi,lpm-notify;
			};
+2 −2
Original line number Diff line number Diff line
@@ -900,8 +900,8 @@ static int of_parse_ch_cfg(struct mhi_controller *mhi_cntrl,
		if (ret)
			goto error_chan_cfg;

		ret = of_property_read_u32(child, "mhi,ee", &mhi_chan->ee);
		if (ret || mhi_chan->ee >= MHI_EE_MAX_SUPPORTED)
		ret = of_property_read_u32(child, "mhi,ee", &mhi_chan->ee_mask);
		if (ret)
			goto error_chan_cfg;

		of_property_read_u32(child, "mhi,pollcfg",
+11 −1
Original line number Diff line number Diff line
@@ -476,6 +476,16 @@ enum mhi_er_data_type {
	MHI_ER_DATA_TYPE_MAX = MHI_ER_TSYNC_ELEMENT_TYPE,
};

enum mhi_ch_ee_mask {
	MHI_CH_EE_PBL = BIT(MHI_EE_PBL),
	MHI_CH_EE_SBL = BIT(MHI_EE_SBL),
	MHI_CH_EE_AMSS = BIT(MHI_EE_AMSS),
	MHI_CH_EE_BHIE = BIT(MHI_EE_BHIE),
	MHI_CH_EE_RDDM = BIT(MHI_EE_RDDM),
	MHI_CH_EE_PTHRU = BIT(MHI_EE_PTHRU),
	MHI_CH_EE_EDL = BIT(MHI_EE_EDL),
};

struct db_cfg {
	bool reset_req;
	bool db_mode;
@@ -571,7 +581,7 @@ struct mhi_chan {
	u32 intmod;
	enum dma_data_direction dir;
	struct db_cfg db_cfg;
	enum mhi_ee ee;
	u32 ee_mask;
	enum MHI_XFER_TYPE xfer_type;
	enum MHI_CH_STATE ch_state;
	enum MHI_EV_CCS ccs;
+5 −5
Original line number Diff line number Diff line
@@ -657,7 +657,8 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl)

	mhi_chan = mhi_cntrl->mhi_chan;
	for (i = 0; i < mhi_cntrl->max_chan; i++, mhi_chan++) {
		if (!mhi_chan->configured || mhi_chan->ee != mhi_cntrl->ee)
		if (!mhi_chan->configured || mhi_chan->mhi_dev ||
		    !(mhi_chan->ee_mask & BIT(mhi_cntrl->ee)))
			continue;
		mhi_dev = mhi_alloc_device(mhi_cntrl);
		if (!mhi_dev)
@@ -1320,10 +1321,9 @@ static int __mhi_prepare_channel(struct mhi_controller *mhi_cntrl,

	MHI_LOG("Entered: preparing channel:%d\n", mhi_chan->chan);

	if (mhi_cntrl->ee != mhi_chan->ee) {
		MHI_ERR("Current EE:%s Required EE:%s for chan:%s\n",
			TO_MHI_EXEC_STR(mhi_cntrl->ee),
			TO_MHI_EXEC_STR(mhi_chan->ee),
	if (!(BIT(mhi_cntrl->ee) & mhi_chan->ee_mask)) {
		MHI_ERR("Current EE:%s Required EE Mask:0x%x for chan:%s\n",
			TO_MHI_EXEC_STR(mhi_cntrl->ee), mhi_chan->ee_mask,
			mhi_chan->name);
		return -ENOTCONN;
	}