Skip to content
This repository has been archived by the owner on Apr 13, 2023. It is now read-only.

Commit

Permalink
Revert "net: really fix the build..."
Browse files Browse the repository at this point in the history
This reverts commit ce78ffa.

Wren and Nicolas reported that ath11k was failing to initialise QCA6390
Wi-Fi 6 device with error:

qcom_mhi_qrtr: probe of mhi0_IPCR failed with error -22

Commit ce78ffa ("net: really fix the build..."), introduced in
v5.14-rc5, caused this regression in qrtr. Most likely all ath11k
devices are broken, but I only tested QCA6390. Let's revert the broken
commit so that ath11k works again.

Reported-by: Wren Turkal <wt@penguintechs.org>
Reported-by: Nicolas Schichan <nschichan@freebox.fr>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210826172816.24478-1-kvalo@codeaurora.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Kalle Valo authored and kuba-moo committed Aug 26, 2021
1 parent 75da63b commit 9ebc275
Show file tree
Hide file tree
Showing 6 changed files with 8 additions and 30 deletions.
2 changes: 1 addition & 1 deletion drivers/bus/mhi/core/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -682,7 +682,7 @@ void mhi_rddm_prepare(struct mhi_controller *mhi_cntrl,
struct image_info *img_info);
void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl);
int mhi_prepare_channel(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan, unsigned int flags);
struct mhi_chan *mhi_chan);
int mhi_init_chan_ctxt(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan);
void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
Expand Down
9 changes: 3 additions & 6 deletions drivers/bus/mhi/core/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1430,7 +1430,7 @@ static void mhi_unprepare_channel(struct mhi_controller *mhi_cntrl,
}

int mhi_prepare_channel(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan, unsigned int flags)
struct mhi_chan *mhi_chan)
{
int ret = 0;
struct device *dev = &mhi_chan->mhi_dev->dev;
Expand All @@ -1455,9 +1455,6 @@ int mhi_prepare_channel(struct mhi_controller *mhi_cntrl,
if (ret)
goto error_pm_state;

if (mhi_chan->dir == DMA_FROM_DEVICE)
mhi_chan->pre_alloc = !!(flags & MHI_CH_INBOUND_ALLOC_BUFS);

/* Pre-allocate buffer for xfer ring */
if (mhi_chan->pre_alloc) {
int nr_el = get_nr_avail_ring_elements(mhi_cntrl,
Expand Down Expand Up @@ -1613,7 +1610,7 @@ void mhi_reset_chan(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan)
}

/* Move channel to start state */
int mhi_prepare_for_transfer(struct mhi_device *mhi_dev, unsigned int flags)
int mhi_prepare_for_transfer(struct mhi_device *mhi_dev)
{
int ret, dir;
struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
Expand All @@ -1624,7 +1621,7 @@ int mhi_prepare_for_transfer(struct mhi_device *mhi_dev, unsigned int flags)
if (!mhi_chan)
continue;

ret = mhi_prepare_channel(mhi_cntrl, mhi_chan, flags);
ret = mhi_prepare_channel(mhi_cntrl, mhi_chan);
if (ret)
goto error_open_chan;
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/mhi/net.c
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ static int mhi_net_newlink(void *ctxt, struct net_device *ndev, u32 if_id,
u64_stats_init(&mhi_netdev->stats.tx_syncp);

/* Start MHI channels */
err = mhi_prepare_for_transfer(mhi_dev, 0);
err = mhi_prepare_for_transfer(mhi_dev);
if (err)
goto out_err;

Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wwan/mhi_wwan_ctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ static int mhi_wwan_ctrl_start(struct wwan_port *port)
int ret;

/* Start mhi device's channel(s) */
ret = mhi_prepare_for_transfer(mhiwwan->mhi_dev, 0);
ret = mhi_prepare_for_transfer(mhiwwan->mhi_dev);
if (ret)
return ret;

Expand Down
7 changes: 1 addition & 6 deletions include/linux/mhi.h
Original file line number Diff line number Diff line change
Expand Up @@ -719,13 +719,8 @@ void mhi_device_put(struct mhi_device *mhi_dev);
* host and device execution environments match and
* channels are in a DISABLED state.
* @mhi_dev: Device associated with the channels
* @flags: MHI channel flags
*/
int mhi_prepare_for_transfer(struct mhi_device *mhi_dev,
unsigned int flags);

/* Automatically allocate and queue inbound buffers */
#define MHI_CH_INBOUND_ALLOC_BUFS BIT(0)
int mhi_prepare_for_transfer(struct mhi_device *mhi_dev);

/**
* mhi_unprepare_from_transfer - Reset UL and DL channels for data transfer.
Expand Down
16 changes: 1 addition & 15 deletions net/qrtr/mhi.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ struct qrtr_mhi_dev {
struct qrtr_endpoint ep;
struct mhi_device *mhi_dev;
struct device *dev;
struct completion ready;
};

/* From MHI to QRTR */
Expand Down Expand Up @@ -51,10 +50,6 @@ static int qcom_mhi_qrtr_send(struct qrtr_endpoint *ep, struct sk_buff *skb)
struct qrtr_mhi_dev *qdev = container_of(ep, struct qrtr_mhi_dev, ep);
int rc;

rc = wait_for_completion_interruptible(&qdev->ready);
if (rc)
goto free_skb;

if (skb->sk)
sock_hold(skb->sk);

Expand Down Expand Up @@ -84,7 +79,7 @@ static int qcom_mhi_qrtr_probe(struct mhi_device *mhi_dev,
int rc;

/* start channels */
rc = mhi_prepare_for_transfer(mhi_dev, 0);
rc = mhi_prepare_for_transfer(mhi_dev);
if (rc)
return rc;

Expand All @@ -101,15 +96,6 @@ static int qcom_mhi_qrtr_probe(struct mhi_device *mhi_dev,
if (rc)
return rc;

/* start channels */
rc = mhi_prepare_for_transfer(mhi_dev, MHI_CH_INBOUND_ALLOC_BUFS);
if (rc) {
qrtr_endpoint_unregister(&qdev->ep);
dev_set_drvdata(&mhi_dev->dev, NULL);
return rc;
}

complete_all(&qdev->ready);
dev_dbg(qdev->dev, "Qualcomm MHI QRTR driver probed\n");

return 0;
Expand Down

0 comments on commit 9ebc275

Please sign in to comment.