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
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
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
>
>
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
>>
>>
> >> - 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?
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
> 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!