2020-11-12 16:26:50

by Caleb Connolly

[permalink] [raw]
Subject: [PATCH 5/5] i2c: geni: sdm845: dont perform DMA for OnePlus 6 devices

The OnePlus 6/T has the same issue as the Yoga c630 causing a crash when DMA
is used for i2c, so disable it.

https://patchwork.kernel.org/patch/11133827/

Signed-off-by: Caleb Connolly <[email protected]>
---
drivers/i2c/busses/i2c-qcom-geni.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
index 8b4c35f47a70..9acdcfe73be2 100644
--- a/drivers/i2c/busses/i2c-qcom-geni.c
+++ b/drivers/i2c/busses/i2c-qcom-geni.c
@@ -357,7 +357,8 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
struct geni_se *se = &gi2c->se;
size_t len = msg->len;

- if (!of_machine_is_compatible("lenovo,yoga-c630"))
+ if (!of_machine_is_compatible("lenovo,yoga-c630") &&
+ !of_machine_is_compatible("oneplus,oneplus6"))
dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);

if (dma_buf)
@@ -399,7 +400,8 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
struct geni_se *se = &gi2c->se;
size_t len = msg->len;

- if (!of_machine_is_compatible("lenovo,yoga-c630"))
+ if (!of_machine_is_compatible("lenovo,yoga-c630") &&
+ !of_machine_is_compatible("oneplus,oneplus6"))
dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);

if (dma_buf)
--
2.29.2



2020-11-17 11:51:00

by Akash Asthana

[permalink] [raw]
Subject: Re: [PATCH 5/5] i2c: geni: sdm845: dont perform DMA for OnePlus 6 devices


On 11/12/2020 9:52 PM, Caleb Connolly wrote:
> The OnePlus 6/T has the same issue as the Yoga c630 causing a crash when DMA
> is used for i2c, so disable it.
>
> https://patchwork.kernel.org/patch/11133827/
>
> Signed-off-by: Caleb Connolly <[email protected]>
Reviewed-by : Akash Asthana <[email protected]>

--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,\na Linux Foundation Collaborative Project

2020-11-22 03:51:30

by Bjorn Andersson

[permalink] [raw]
Subject: Re: [PATCH 5/5] i2c: geni: sdm845: dont perform DMA for OnePlus 6 devices

On Thu 12 Nov 10:22 CST 2020, Caleb Connolly wrote:

> The OnePlus 6/T has the same issue as the Yoga c630 causing a crash when DMA
> is used for i2c, so disable it.
>
> https://patchwork.kernel.org/patch/11133827/
>
> Signed-off-by: Caleb Connolly <[email protected]>
> ---
> drivers/i2c/busses/i2c-qcom-geni.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
> index 8b4c35f47a70..9acdcfe73be2 100644
> --- a/drivers/i2c/busses/i2c-qcom-geni.c
> +++ b/drivers/i2c/busses/i2c-qcom-geni.c
> @@ -357,7 +357,8 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
> struct geni_se *se = &gi2c->se;
> size_t len = msg->len;
>
> - if (!of_machine_is_compatible("lenovo,yoga-c630"))
> + if (!of_machine_is_compatible("lenovo,yoga-c630") &&
> + !of_machine_is_compatible("oneplus,oneplus6"))

This hack seems to have been working around two separate issues. First
with iommu active the GENI wrappers needs to have their stream mapping
configured. Secondly there was a bug in the transaction setup that was
recently fixed by Doug Anderson.

So can you please give the following patch a go? I've yet to test it on
the Lenovo machine, but I think it allows us to remove the quirk.

https://lore.kernel.org/lkml/[email protected]/T/#u

Regards,
Bjorn

> dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);
>
> if (dma_buf)
> @@ -399,7 +400,8 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
> struct geni_se *se = &gi2c->se;
> size_t len = msg->len;
>
> - if (!of_machine_is_compatible("lenovo,yoga-c630"))
> + if (!of_machine_is_compatible("lenovo,yoga-c630") &&
> + !of_machine_is_compatible("oneplus,oneplus6"))
> dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);
>
> if (dma_buf)
> --
> 2.29.2
>
>

2020-11-22 18:02:42

by Caleb Connolly

[permalink] [raw]
Subject: Re: [PATCH 5/5] i2c: geni: sdm845: dont perform DMA for OnePlus 6 devices

Hi Bjorn,

It looks like I still have the same issue even with this patch applied.

Regards,
Caleb

On 2020-11-22 03:47, Bjorn Andersson wrote:
> On Thu 12 Nov 10:22 CST 2020, Caleb Connolly wrote:
>
>> The OnePlus 6/T has the same issue as the Yoga c630 causing a crash when DMA
>> is used for i2c, so disable it.
>>
>> https://patchwork.kernel.org/patch/11133827/
>>
>> Signed-off-by: Caleb Connolly <[email protected]>
>> ---
>> drivers/i2c/busses/i2c-qcom-geni.c | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
>> index 8b4c35f47a70..9acdcfe73be2 100644
>> --- a/drivers/i2c/busses/i2c-qcom-geni.c
>> +++ b/drivers/i2c/busses/i2c-qcom-geni.c
>> @@ -357,7 +357,8 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
>> struct geni_se *se = &gi2c->se;
>> size_t len = msg->len;
>>
>> - if (!of_machine_is_compatible("lenovo,yoga-c630"))
>> + if (!of_machine_is_compatible("lenovo,yoga-c630") &&
>> + !of_machine_is_compatible("oneplus,oneplus6"))
> This hack seems to have been working around two separate issues. First
> with iommu active the GENI wrappers needs to have their stream mapping
> configured. Secondly there was a bug in the transaction setup that was
> recently fixed by Doug Anderson.
>
> So can you please give the following patch a go? I've yet to test it on
> the Lenovo machine, but I think it allows us to remove the quirk.
>
> https://lore.kernel.org/lkml/[email protected]/T/#u
>
> Regards,
> Bjorn
>
>> dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);
>>
>> if (dma_buf)
>> @@ -399,7 +400,8 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg,
>> struct geni_se *se = &gi2c->se;
>> size_t len = msg->len;
>>
>> - if (!of_machine_is_compatible("lenovo,yoga-c630"))
>> + if (!of_machine_is_compatible("lenovo,yoga-c630") &&
>> + !of_machine_is_compatible("oneplus,oneplus6"))
>> dma_buf = i2c_get_dma_safe_msg_buf(msg, 32);
>>
>> if (dma_buf)
>> --
>> 2.29.2
>>
>>


2020-12-02 15:42:24

by Wolfram Sang

[permalink] [raw]
Subject: Re: [PATCH 5/5] i2c: geni: sdm845: dont perform DMA for OnePlus 6 devices


> >> - if (!of_machine_is_compatible("lenovo,yoga-c630"))
> >> + if (!of_machine_is_compatible("lenovo,yoga-c630") &&
> >> + !of_machine_is_compatible("oneplus,oneplus6"))
> > This hack seems to have been working around two separate issues. First
> > with iommu active the GENI wrappers needs to have their stream mapping
> > configured. Secondly there was a bug in the transaction setup that was
> > recently fixed by Doug Anderson.
> >
> > So can you please give the following patch a go? I've yet to test it on
> > the Lenovo machine, but I think it allows us to remove the quirk.
> >
> > https://lore.kernel.org/lkml/[email protected]/T/#u

Please don't top-post. I fixed it this time.

> It looks like I still have the same issue even with this patch applied.

So we still need your patch, am I reading correctly?


Attachments:
(No filename) (878.00 B)
signature.asc (849.00 B)
Download all attachments

2020-12-02 16:38:49

by Bjorn Andersson

[permalink] [raw]
Subject: Re: [PATCH 5/5] i2c: geni: sdm845: dont perform DMA for OnePlus 6 devices

On Wed 02 Dec 09:39 CST 2020, Wolfram Sang wrote:

>
> > >> - if (!of_machine_is_compatible("lenovo,yoga-c630"))
> > >> + if (!of_machine_is_compatible("lenovo,yoga-c630") &&
> > >> + !of_machine_is_compatible("oneplus,oneplus6"))
> > > This hack seems to have been working around two separate issues. First
> > > with iommu active the GENI wrappers needs to have their stream mapping
> > > configured. Secondly there was a bug in the transaction setup that was
> > > recently fixed by Doug Anderson.
> > >
> > > So can you please give the following patch a go? I've yet to test it on
> > > the Lenovo machine, but I think it allows us to remove the quirk.
> > >
> > > https://lore.kernel.org/lkml/[email protected]/T/#u
>
> Please don't top-post. I fixed it this time.
>
> > It looks like I still have the same issue even with this patch applied.
>
> So we still need your patch, am I reading correctly?
>

With Doug's recent fixes in the DMA handling and the introduction of
proper iommu configuration, which Caleb tested [1], I think we're good
without this on the OnePlus. Caleb, please confirm.

If I understood Caleb's report he saw exactly the same problem that Lee
Jones did that lead to the workaround for the Lenovo Yoga C630, and with
the two changes the i2c-hid keyboard came up nicely on my Yoga. So I
posted [2].

[1] https://lore.kernel.org/linux-arm-msm/[email protected]/
[2] https://lore.kernel.org/linux-arm-msm/[email protected]/

Regards,
Bjorn

2020-12-02 20:26:39

by Wolfram Sang

[permalink] [raw]
Subject: Re: [PATCH 5/5] i2c: geni: sdm845: dont perform DMA for OnePlus 6 devices


> With Doug's recent fixes in the DMA handling and the introduction of
> proper iommu configuration, which Caleb tested [1], I think we're good
> without this on the OnePlus. Caleb, please confirm.

Yes, he confirmed already. I missed it was private only.

Thanks for your heads up, too!


Attachments:
(No filename) (299.00 B)
signature.asc (849.00 B)
Download all attachments