diff mbox series

[FSL,P50x0] Keyboard and mouse don't work anymore after the devicetree updates for 5.19

Message ID 229b38b6-1a79-259a-e571-2551d80f334d@xenosoft.de (mailing list archive)
State Not Applicable
Headers show
Series [FSL,P50x0] Keyboard and mouse don't work anymore after the devicetree updates for 5.19 | expand

Commit Message

Christian Zigotzky June 9, 2022, 6:03 p.m. UTC
On 06 June 2022 at 07:06 pm, Rob Herring wrote:
> On Mon, Jun 6, 2022 at 11:14 AM Christian Zigotzky
> <chzigotzky@xenosoft.de> wrote:
>> On 06 June 2022 at 04:58 pm, Rob Herring wrote:
>>> On Fri, May 27, 2022 at 9:23 AM Rob Herring <robh@kernel.org> wrote:
>>>> On Fri, May 27, 2022 at 3:33 AM Christian Zigotzky
>>>> <chzigotzky@xenosoft.de> wrote:
>>>>> On 27 May 2022 at 10:14 am, Prabhakar Mahadev Lad wrote:
>>>>>> Hi,
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: Christian Zigotzky <chzigotzky@xenosoft.de>
>>>>>>>
>>>>>>> On 27 May 2022 at 09:56 am, Prabhakar Mahadev Lad wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>>> -----Original Message-----
>>>>>>>>> From: Christophe Leroy <christophe.leroy@csgroup.eu>
>>> [...]
>>>
>>>>>>>> Looks like the driver which you are using has not been converted to use
>>>>>>> platform_get_irq(), could you please check that.
>>>>>>>> Cheers,
>>>>>>>> Prabhakar
>>>>>>> Do you mean the mouse and keyboard driver?
>>>>>>>
>>>>>> No it could be your gpio/pinctrl driver assuming the keyboard/mouse are using GPIO's. If you are using interrupts then it might be some hierarchal irqc driver in drivers/irqchip/.
>>>>>>
>>>>>> Cheers,
>>>>>> Prabhakar
>>>>> Good to know. I only use unmodified drivers from the official Linux
>>>>> kernel so it's not an issue of the Cyrus+ board.
>>>> The issue is in drivers/usb/host/fsl-mph-dr-of.c which copies the
>>>> resources to a child platform device. Can you try the following
>>>> change:
>>>>
>>>> diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c
>>>> index 44a7e58a26e3..47d9b7be60da 100644
>>>> --- a/drivers/usb/host/fsl-mph-dr-of.c
>>>> +++ b/drivers/usb/host/fsl-mph-dr-of.c
>>>> @@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_device_register(
>>>>                                           const char *name, int id)
>>>>    {
>>>>           struct platform_device *pdev;
>>>> -       const struct resource *res = ofdev->resource;
>>>> -       unsigned int num = ofdev->num_resources;
>>>>           int retval;
>>>>
>>>>           pdev = platform_device_alloc(name, id);
>>>> @@ -106,11 +104,7 @@ static struct platform_device *fsl_usb2_device_register(
>>>>           if (retval)
>>>>                   goto error;
>>>>
>>>> -       if (num) {
>>>> -               retval = platform_device_add_resources(pdev, res, num);
>>>> -               if (retval)
>>>> -                       goto error;
>>>> -       }
>>>> +       pdev->dev.of_node = ofdev->dev.of_node;
>>> >From the log, I think you also need to add this line:
>>>
>>> pdev->dev.of_node_reused = true;
>>>
>>>>           retval = platform_device_add(pdev);
>>>>           if (retval)
>> Hello Rob,
>>
>> Thanks a lot for your answer.
>>
>> Is the following patch correct?
> Yes
>
>> --- a/drivers/usb/host/fsl-mph-dr-of.c    2022-05-28 09:10:26.797688422
>> +0200
>> +++ b/drivers/usb/host/fsl-mph-dr-of.c    2022-05-28 09:15:01.668594809
>> +0200
>> @@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_
>>                        const char *name, int id)
>>    {
>>        struct platform_device *pdev;
>> -    const struct resource *res = ofdev->resource;
>> -    unsigned int num = ofdev->num_resources;
>>        int retval;
>>
>>        pdev = platform_device_alloc(name, id);
>> @@ -106,11 +104,7 @@ static struct platform_device *fsl_usb2_
>>        if (retval)
>>            goto error;
>>
>> -    if (num) {
>> -        retval = platform_device_add_resources(pdev, res, num);
>> -        if (retval)
>> -            goto error;
>> -    }
>> +    pdev->dev.of_node = ofdev->dev.of_node;
>> +    pdev->dev.of_node_reused = true;
>>
>>        retval = platform_device_add(pdev);
>>        if (retval)
>>
>> ---
>>
>> Thanks,
>> Christian
Hello Rob,

I tested this patch today and unfortunately the issue still exists.

Do you have another idea?

Thanks,
Christian

Updated patch:

Comments

Rob Herring June 13, 2022, 3:57 p.m. UTC | #1
On Thu, Jun 9, 2022 at 12:03 PM Christian Zigotzky
<chzigotzky@xenosoft.de> wrote:
>
> On 06 June 2022 at 07:06 pm, Rob Herring wrote:
> > On Mon, Jun 6, 2022 at 11:14 AM Christian Zigotzky
> > <chzigotzky@xenosoft.de> wrote:
> >> On 06 June 2022 at 04:58 pm, Rob Herring wrote:
> >>> On Fri, May 27, 2022 at 9:23 AM Rob Herring <robh@kernel.org> wrote:
> >>>> On Fri, May 27, 2022 at 3:33 AM Christian Zigotzky
> >>>> <chzigotzky@xenosoft.de> wrote:
> >>>>> On 27 May 2022 at 10:14 am, Prabhakar Mahadev Lad wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>>> -----Original Message-----
> >>>>>>> From: Christian Zigotzky <chzigotzky@xenosoft.de>
> >>>>>>>
> >>>>>>> On 27 May 2022 at 09:56 am, Prabhakar Mahadev Lad wrote:
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>>> -----Original Message-----
> >>>>>>>>> From: Christophe Leroy <christophe.leroy@csgroup.eu>
> >>> [...]
> >>>
> >>>>>>>> Looks like the driver which you are using has not been converted to use
> >>>>>>> platform_get_irq(), could you please check that.
> >>>>>>>> Cheers,
> >>>>>>>> Prabhakar
> >>>>>>> Do you mean the mouse and keyboard driver?
> >>>>>>>
> >>>>>> No it could be your gpio/pinctrl driver assuming the keyboard/mouse are using GPIO's. If you are using interrupts then it might be some hierarchal irqc driver in drivers/irqchip/.
> >>>>>>
> >>>>>> Cheers,
> >>>>>> Prabhakar
> >>>>> Good to know. I only use unmodified drivers from the official Linux
> >>>>> kernel so it's not an issue of the Cyrus+ board.
> >>>> The issue is in drivers/usb/host/fsl-mph-dr-of.c which copies the
> >>>> resources to a child platform device. Can you try the following
> >>>> change:
> >>>>
> >>>> diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c
> >>>> index 44a7e58a26e3..47d9b7be60da 100644
> >>>> --- a/drivers/usb/host/fsl-mph-dr-of.c
> >>>> +++ b/drivers/usb/host/fsl-mph-dr-of.c
> >>>> @@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_device_register(
> >>>>                                           const char *name, int id)
> >>>>    {
> >>>>           struct platform_device *pdev;
> >>>> -       const struct resource *res = ofdev->resource;
> >>>> -       unsigned int num = ofdev->num_resources;
> >>>>           int retval;
> >>>>
> >>>>           pdev = platform_device_alloc(name, id);
> >>>> @@ -106,11 +104,7 @@ static struct platform_device *fsl_usb2_device_register(
> >>>>           if (retval)
> >>>>                   goto error;
> >>>>
> >>>> -       if (num) {
> >>>> -               retval = platform_device_add_resources(pdev, res, num);
> >>>> -               if (retval)
> >>>> -                       goto error;
> >>>> -       }
> >>>> +       pdev->dev.of_node = ofdev->dev.of_node;
> >>> >From the log, I think you also need to add this line:
> >>>
> >>> pdev->dev.of_node_reused = true;
> >>>
> >>>>           retval = platform_device_add(pdev);
> >>>>           if (retval)
> >> Hello Rob,
> >>
> >> Thanks a lot for your answer.
> >>
> >> Is the following patch correct?
> > Yes
> >
> >> --- a/drivers/usb/host/fsl-mph-dr-of.c    2022-05-28 09:10:26.797688422
> >> +0200
> >> +++ b/drivers/usb/host/fsl-mph-dr-of.c    2022-05-28 09:15:01.668594809
> >> +0200
> >> @@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_
> >>                        const char *name, int id)
> >>    {
> >>        struct platform_device *pdev;
> >> -    const struct resource *res = ofdev->resource;
> >> -    unsigned int num = ofdev->num_resources;
> >>        int retval;
> >>
> >>        pdev = platform_device_alloc(name, id);
> >> @@ -106,11 +104,7 @@ static struct platform_device *fsl_usb2_
> >>        if (retval)
> >>            goto error;
> >>
> >> -    if (num) {
> >> -        retval = platform_device_add_resources(pdev, res, num);
> >> -        if (retval)
> >> -            goto error;
> >> -    }
> >> +    pdev->dev.of_node = ofdev->dev.of_node;
> >> +    pdev->dev.of_node_reused = true;
> >>
> >>        retval = platform_device_add(pdev);
> >>        if (retval)
> >>
> >> ---
> >>
> >> Thanks,
> >> Christian
> Hello Rob,
>
> I tested this patch today and unfortunately the issue still exists.

The log is the same?

Rob
Christian Zigotzky June 16, 2022, 5:04 p.m. UTC | #2
On 13 June 2022 at 05:57 pm, Rob Herring wrote:
> On Thu, Jun 9, 2022 at 12:03 PM Christian Zigotzky
> <chzigotzky@xenosoft.de> wrote:
>> On 06 June 2022 at 07:06 pm, Rob Herring wrote:
>>> On Mon, Jun 6, 2022 at 11:14 AM Christian Zigotzky
>>> <chzigotzky@xenosoft.de> wrote:
>>>> On 06 June 2022 at 04:58 pm, Rob Herring wrote:
>>>>> On Fri, May 27, 2022 at 9:23 AM Rob Herring <robh@kernel.org> wrote:
>>>>>> On Fri, May 27, 2022 at 3:33 AM Christian Zigotzky
>>>>>> <chzigotzky@xenosoft.de> wrote:
>>>>>>> On 27 May 2022 at 10:14 am, Prabhakar Mahadev Lad wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>>> -----Original Message-----
>>>>>>>>> From: Christian Zigotzky <chzigotzky@xenosoft.de>
>>>>>>>>>
>>>>>>>>> On 27 May 2022 at 09:56 am, Prabhakar Mahadev Lad wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>>> -----Original Message-----
>>>>>>>>>>> From: Christophe Leroy <christophe.leroy@csgroup.eu>
>>>>> [...]
>>>>>
>>>>>>>>>> Looks like the driver which you are using has not been converted to use
>>>>>>>>> platform_get_irq(), could you please check that.
>>>>>>>>>> Cheers,
>>>>>>>>>> Prabhakar
>>>>>>>>> Do you mean the mouse and keyboard driver?
>>>>>>>>>
>>>>>>>> No it could be your gpio/pinctrl driver assuming the keyboard/mouse are using GPIO's. If you are using interrupts then it might be some hierarchal irqc driver in drivers/irqchip/.
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> Prabhakar
>>>>>>> Good to know. I only use unmodified drivers from the official Linux
>>>>>>> kernel so it's not an issue of the Cyrus+ board.
>>>>>> The issue is in drivers/usb/host/fsl-mph-dr-of.c which copies the
>>>>>> resources to a child platform device. Can you try the following
>>>>>> change:
>>>>>>
>>>>>> diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c
>>>>>> index 44a7e58a26e3..47d9b7be60da 100644
>>>>>> --- a/drivers/usb/host/fsl-mph-dr-of.c
>>>>>> +++ b/drivers/usb/host/fsl-mph-dr-of.c
>>>>>> @@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_device_register(
>>>>>>                                            const char *name, int id)
>>>>>>     {
>>>>>>            struct platform_device *pdev;
>>>>>> -       const struct resource *res = ofdev->resource;
>>>>>> -       unsigned int num = ofdev->num_resources;
>>>>>>            int retval;
>>>>>>
>>>>>>            pdev = platform_device_alloc(name, id);
>>>>>> @@ -106,11 +104,7 @@ static struct platform_device *fsl_usb2_device_register(
>>>>>>            if (retval)
>>>>>>                    goto error;
>>>>>>
>>>>>> -       if (num) {
>>>>>> -               retval = platform_device_add_resources(pdev, res, num);
>>>>>> -               if (retval)
>>>>>> -                       goto error;
>>>>>> -       }
>>>>>> +       pdev->dev.of_node = ofdev->dev.of_node;
>>>>> >From the log, I think you also need to add this line:
>>>>>
>>>>> pdev->dev.of_node_reused = true;
>>>>>
>>>>>>            retval = platform_device_add(pdev);
>>>>>>            if (retval)
>>>> Hello Rob,
>>>>
>>>> Thanks a lot for your answer.
>>>>
>>>> Is the following patch correct?
>>> Yes
>>>
>>>> --- a/drivers/usb/host/fsl-mph-dr-of.c    2022-05-28 09:10:26.797688422
>>>> +0200
>>>> +++ b/drivers/usb/host/fsl-mph-dr-of.c    2022-05-28 09:15:01.668594809
>>>> +0200
>>>> @@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_
>>>>                         const char *name, int id)
>>>>     {
>>>>         struct platform_device *pdev;
>>>> -    const struct resource *res = ofdev->resource;
>>>> -    unsigned int num = ofdev->num_resources;
>>>>         int retval;
>>>>
>>>>         pdev = platform_device_alloc(name, id);
>>>> @@ -106,11 +104,7 @@ static struct platform_device *fsl_usb2_
>>>>         if (retval)
>>>>             goto error;
>>>>
>>>> -    if (num) {
>>>> -        retval = platform_device_add_resources(pdev, res, num);
>>>> -        if (retval)
>>>> -            goto error;
>>>> -    }
>>>> +    pdev->dev.of_node = ofdev->dev.of_node;
>>>> +    pdev->dev.of_node_reused = true;
>>>>
>>>>         retval = platform_device_add(pdev);
>>>>         if (retval)
>>>>
>>>> ---
>>>>
>>>> Thanks,
>>>> Christian
>> Hello Rob,
>>
>> I tested this patch today and unfortunately the issue still exists.
> The log is the same?
>
> Rob
Yes, it's the same.

Link: http://www.xenosoft.de/dmesg_FSL_P5040_Void_PPC-2.txt

-- Christian
diff mbox series

Patch

--- a/drivers/usb/host/fsl-mph-dr-of.c  2022-06-06 02:18:54.000000000 +0200
+++ b/drivers/usb/host/fsl-mph-dr-of.c  2022-06-09 19:31:50.135472793 +0200
@@ -80,8 +80,6 @@  static struct platform_device *fsl_usb2_
                                         const char *name, int id)
  {
         struct platform_device *pdev;
-       const struct resource *res = ofdev->resource;
-       unsigned int num = ofdev->num_resources;
         int retval;

         pdev = platform_device_alloc(name, id);
@@ -105,12 +103,8 @@  static struct platform_device *fsl_usb2_
         retval = platform_device_add_data(pdev, pdata, sizeof(*pdata));
         if (retval)
                 goto error;
-
-       if (num) {
-               retval = platform_device_add_resources(pdev, res, num);
-               if (retval)
-                       goto error;
-       }
+        pdev->dev.of_node = ofdev->dev.of_node;
+        pdev->dev.of_node_reused = true;

         retval = platform_device_add(pdev);
         if (retval)