Message ID | 20190905102247.27583-1-lee.jones@linaro.org (mailing list archive) |
---|---|
State | Mainlined |
Commit | 127068abe85bf3dee50df51cb039a5a987a4a666 |
Headers | show |
Series | [v3,1/1] i2c: qcom-geni: Provide an option to disable DMA processing | expand |
Hi Lee, I understand you are in a hurry, but please double check before sending... On Thu, Sep 05, 2019 at 11:22:47AM +0100, Lee Jones wrote: > We have a production-level laptop (Lenovo Yoga C630) which is exhibiting > a rather horrific bug. When I2C HID devices are being scanned for at > boot-time the QCom Geni based I2C (Serial Engine) attempts to use DMA. > When it does, the laptop reboots and the user never sees the OS. > > The beautiful thing about this approach is that, *if* the Geni SE DMA > ever starts working, we can remove the C code and any old properties > left in older DTs just become NOOP. Older kernels with newer DTs (less > of a priority) *still* will not work - but they do not work now anyway. ... becasue this paragraph doesn't fit anymore. Needs to be reworded. > > Fixes: 8bc529b25354 ("soc: qcom: geni: Add support for ACPI") As said in the other thread, I don't get it, but this is not a show stopper for me. > Signed-off-by: Lee Jones <lee.jones@linaro.org> > Reviewed-by: Vinod Koul <vkoul@kernel.org> I'd like Vinod to resend his review. Because IMO the change since v2 was not trivial, so the old rev-by has to be dropped. Other than that, the code looks good to me! Regards, Wolfram
On 2019-09-05 15:49, Wolfram Sang wrote: > Hi Lee, > > I understand you are in a hurry, but please double check before > sending... Linus indicated that an rc8 is coming up, which should provide an extra week. https://lwn.net/Articles/798152/ > On Thu, Sep 05, 2019 at 11:22:47AM +0100, Lee Jones wrote: >> We have a production-level laptop (Lenovo Yoga C630) which is exhibiting >> a rather horrific bug. When I2C HID devices are being scanned for at >> boot-time the QCom Geni based I2C (Serial Engine) attempts to use DMA. >> When it does, the laptop reboots and the user never sees the OS. >> >> The beautiful thing about this approach is that, *if* the Geni SE DMA >> ever starts working, we can remove the C code and any old properties >> left in older DTs just become NOOP. Older kernels with newer DTs (less >> of a priority) *still* will not work - but they do not work now anyway. > > ... becasue this paragraph doesn't fit anymore. Needs to be reworded. > >> >> Fixes: 8bc529b25354 ("soc: qcom: geni: Add support for ACPI") > > As said in the other thread, I don't get it, but this is not a show > stopper for me. WAG: because ACPI made some driver load at all, and when it did it something started happening which crashed some machines. Cheers, Peter
On Thu, 05 Sep 2019, Peter Rosin wrote: > On 2019-09-05 15:49, Wolfram Sang wrote: > > Hi Lee, > > > > I understand you are in a hurry, but please double check before > > sending... > > Linus indicated that an rc8 is coming up, which should provide an extra week. > https://lwn.net/Articles/798152/ That is good news. > > On Thu, Sep 05, 2019 at 11:22:47AM +0100, Lee Jones wrote: > >> We have a production-level laptop (Lenovo Yoga C630) which is exhibiting > >> a rather horrific bug. When I2C HID devices are being scanned for at > >> boot-time the QCom Geni based I2C (Serial Engine) attempts to use DMA. > >> When it does, the laptop reboots and the user never sees the OS. > >> > >> The beautiful thing about this approach is that, *if* the Geni SE DMA > >> ever starts working, we can remove the C code and any old properties > >> left in older DTs just become NOOP. Older kernels with newer DTs (less > >> of a priority) *still* will not work - but they do not work now anyway. > > > > ... becasue this paragraph doesn't fit anymore. Needs to be reworded. Yes, you're right. I noticed almost the moment I pressed send. :( > >> Fixes: 8bc529b25354 ("soc: qcom: geni: Add support for ACPI") > > > > As said in the other thread, I don't get it, but this is not a show > > stopper for me. Ah wait. Yes, this is applied against the wrong patch. Please ignore. > WAG: because ACPI made some driver load at all, and when it > did it something started happening which crashed some machines. I'm not sure I understand this sentence. ... resending now.
diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c index a89bfce5388e..17abf60c94ae 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -355,11 +355,13 @@ static int geni_i2c_rx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, { dma_addr_t rx_dma; unsigned long time_left; - void *dma_buf; + void *dma_buf = NULL; struct geni_se *se = &gi2c->se; size_t len = msg->len; - dma_buf = i2c_get_dma_safe_msg_buf(msg, 32); + if (!of_machine_is_compatible("lenovo,yoga-c630")) + dma_buf = i2c_get_dma_safe_msg_buf(msg, 32); + if (dma_buf) geni_se_select_mode(se, GENI_SE_DMA); else @@ -394,11 +396,13 @@ static int geni_i2c_tx_one_msg(struct geni_i2c_dev *gi2c, struct i2c_msg *msg, { dma_addr_t tx_dma; unsigned long time_left; - void *dma_buf; + void *dma_buf = NULL; struct geni_se *se = &gi2c->se; size_t len = msg->len; - dma_buf = i2c_get_dma_safe_msg_buf(msg, 32); + if (!of_machine_is_compatible("lenovo,yoga-c630")) + dma_buf = i2c_get_dma_safe_msg_buf(msg, 32); + if (dma_buf) geni_se_select_mode(se, GENI_SE_DMA); else