Skip to content

Commit da4b532

Browse files
committed
Merge branch 'mhi-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mani/mhi.git
2 parents d0b9ec2 + 12606ba commit da4b532

File tree

1 file changed

+50
-18
lines changed

1 file changed

+50
-18
lines changed

drivers/bus/mhi/ep/main.c

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -71,45 +71,77 @@ static int mhi_ep_send_event(struct mhi_ep_cntrl *mhi_cntrl, u32 ring_idx,
7171
static int mhi_ep_send_completion_event(struct mhi_ep_cntrl *mhi_cntrl, struct mhi_ep_ring *ring,
7272
struct mhi_ring_element *tre, u32 len, enum mhi_ev_ccs code)
7373
{
74-
struct mhi_ring_element event = {};
74+
struct mhi_ring_element *event;
75+
int ret;
76+
77+
event = kzalloc(sizeof(struct mhi_ring_element), GFP_KERNEL);
78+
if (!event)
79+
return -ENOMEM;
7580

76-
event.ptr = cpu_to_le64(ring->rbase + ring->rd_offset * sizeof(*tre));
77-
event.dword[0] = MHI_TRE_EV_DWORD0(code, len);
78-
event.dword[1] = MHI_TRE_EV_DWORD1(ring->ch_id, MHI_PKT_TYPE_TX_EVENT);
81+
event->ptr = cpu_to_le64(ring->rbase + ring->rd_offset * sizeof(*tre));
82+
event->dword[0] = MHI_TRE_EV_DWORD0(code, len);
83+
event->dword[1] = MHI_TRE_EV_DWORD1(ring->ch_id, MHI_PKT_TYPE_TX_EVENT);
7984

80-
return mhi_ep_send_event(mhi_cntrl, ring->er_index, &event, MHI_TRE_DATA_GET_BEI(tre));
85+
ret = mhi_ep_send_event(mhi_cntrl, ring->er_index, event, MHI_TRE_DATA_GET_BEI(tre));
86+
kfree(event);
87+
88+
return ret;
8189
}
8290

8391
int mhi_ep_send_state_change_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_state state)
8492
{
85-
struct mhi_ring_element event = {};
93+
struct mhi_ring_element *event;
94+
int ret;
95+
96+
event = kzalloc(sizeof(struct mhi_ring_element), GFP_KERNEL);
97+
if (!event)
98+
return -ENOMEM;
8699

87-
event.dword[0] = MHI_SC_EV_DWORD0(state);
88-
event.dword[1] = MHI_SC_EV_DWORD1(MHI_PKT_TYPE_STATE_CHANGE_EVENT);
100+
event->dword[0] = MHI_SC_EV_DWORD0(state);
101+
event->dword[1] = MHI_SC_EV_DWORD1(MHI_PKT_TYPE_STATE_CHANGE_EVENT);
89102

90-
return mhi_ep_send_event(mhi_cntrl, 0, &event, 0);
103+
ret = mhi_ep_send_event(mhi_cntrl, 0, event, 0);
104+
kfree(event);
105+
106+
return ret;
91107
}
92108

93109
int mhi_ep_send_ee_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_ee_type exec_env)
94110
{
95-
struct mhi_ring_element event = {};
111+
struct mhi_ring_element *event;
112+
int ret;
113+
114+
event = kzalloc(sizeof(struct mhi_ring_element), GFP_KERNEL);
115+
if (!event)
116+
return -ENOMEM;
96117

97-
event.dword[0] = MHI_EE_EV_DWORD0(exec_env);
98-
event.dword[1] = MHI_SC_EV_DWORD1(MHI_PKT_TYPE_EE_EVENT);
118+
event->dword[0] = MHI_EE_EV_DWORD0(exec_env);
119+
event->dword[1] = MHI_SC_EV_DWORD1(MHI_PKT_TYPE_EE_EVENT);
99120

100-
return mhi_ep_send_event(mhi_cntrl, 0, &event, 0);
121+
ret = mhi_ep_send_event(mhi_cntrl, 0, event, 0);
122+
kfree(event);
123+
124+
return ret;
101125
}
102126

103127
static int mhi_ep_send_cmd_comp_event(struct mhi_ep_cntrl *mhi_cntrl, enum mhi_ev_ccs code)
104128
{
105129
struct mhi_ep_ring *ring = &mhi_cntrl->mhi_cmd->ring;
106-
struct mhi_ring_element event = {};
130+
struct mhi_ring_element *event;
131+
int ret;
132+
133+
event = kzalloc(sizeof(struct mhi_ring_element), GFP_KERNEL);
134+
if (!event)
135+
return -ENOMEM;
107136

108-
event.ptr = cpu_to_le64(ring->rbase + ring->rd_offset * sizeof(struct mhi_ring_element));
109-
event.dword[0] = MHI_CC_EV_DWORD0(code);
110-
event.dword[1] = MHI_CC_EV_DWORD1(MHI_PKT_TYPE_CMD_COMPLETION_EVENT);
137+
event->ptr = cpu_to_le64(ring->rbase + ring->rd_offset * sizeof(struct mhi_ring_element));
138+
event->dword[0] = MHI_CC_EV_DWORD0(code);
139+
event->dword[1] = MHI_CC_EV_DWORD1(MHI_PKT_TYPE_CMD_COMPLETION_EVENT);
111140

112-
return mhi_ep_send_event(mhi_cntrl, 0, &event, 0);
141+
ret = mhi_ep_send_event(mhi_cntrl, 0, event, 0);
142+
kfree(event);
143+
144+
return ret;
113145
}
114146

115147
static int mhi_ep_process_cmd_ring(struct mhi_ep_ring *ring, struct mhi_ring_element *el)

0 commit comments

Comments
 (0)