Message ID | 20211027080849.3276289-1-geert@linux-m68k.org (mailing list archive) |
---|---|
State | Accepted |
Commit | a0548b26901f082684ad1fb3ba397d2de3a1406a |
Headers | show |
Series | usb: gadget: Mark USB_FSL_QE broken on 64-bit | expand |
On Wed, Oct 27, 2021 at 10:08 AM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > On 64-bit: > > drivers/usb/gadget/udc/fsl_qe_udc.c: In function ‘qe_ep0_rx’: > drivers/usb/gadget/udc/fsl_qe_udc.c:842:13: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] > 842 | vaddr = (u32)phys_to_virt(in_be32(&bd->buf)); > | ^ > In file included from drivers/usb/gadget/udc/fsl_qe_udc.c:41: > drivers/usb/gadget/udc/fsl_qe_udc.c:843:28: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] > 843 | frame_set_data(pframe, (u8 *)vaddr); > | ^ > > The driver assumes physical and virtual addresses are 32-bit, hence it > cannot work on 64-bit platforms. > > Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> > --- Interesting, I have not seen this one in randconfig builds. It looks like the driver also assumes that physical addresses are the same as bus addresses, so maybe it should also be marked broken when CONFIG_IOMMU is enabled? Maybe that takes it too far, as this driver could still be used on a machine without IOMMU in a kernel that supports IOMMUs on other machines. Arnd
On Wed, Oct 27, 2021 at 5:25 AM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > On 64-bit: > > drivers/usb/gadget/udc/fsl_qe_udc.c: In function ‘qe_ep0_rx’: > drivers/usb/gadget/udc/fsl_qe_udc.c:842:13: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] > 842 | vaddr = (u32)phys_to_virt(in_be32(&bd->buf)); > | ^ > In file included from drivers/usb/gadget/udc/fsl_qe_udc.c:41: > drivers/usb/gadget/udc/fsl_qe_udc.c:843:28: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] > 843 | frame_set_data(pframe, (u8 *)vaddr); > | ^ > > The driver assumes physical and virtual addresses are 32-bit, hence it > cannot work on 64-bit platforms. The device is truly only used in legacy 32-bit PowerPC chips and never tested with 64-bit. Thanks. > > Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Li Yang <leoyang.li@nxp.com> > --- > One more casualty of CONFIG_WERROR=y. > http://kisskb.ellerman.id.au/kisskb/buildresult/14652936/ > --- > drivers/usb/gadget/udc/Kconfig | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig > index 8c614bb86c665c77..69394dc1cdfb6436 100644 > --- a/drivers/usb/gadget/udc/Kconfig > +++ b/drivers/usb/gadget/udc/Kconfig > @@ -330,6 +330,7 @@ config USB_AMD5536UDC > config USB_FSL_QE > tristate "Freescale QE/CPM USB Device Controller" > depends on FSL_SOC && (QUICC_ENGINE || CPM) > + depends on !64BIT || BROKEN > help > Some of Freescale PowerPC processors have a Full Speed > QE/CPM2 USB controller, which support device mode with 4 > -- > 2.25.1 >
diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig index 8c614bb86c665c77..69394dc1cdfb6436 100644 --- a/drivers/usb/gadget/udc/Kconfig +++ b/drivers/usb/gadget/udc/Kconfig @@ -330,6 +330,7 @@ config USB_AMD5536UDC config USB_FSL_QE tristate "Freescale QE/CPM USB Device Controller" depends on FSL_SOC && (QUICC_ENGINE || CPM) + depends on !64BIT || BROKEN help Some of Freescale PowerPC processors have a Full Speed QE/CPM2 USB controller, which support device mode with 4
On 64-bit: drivers/usb/gadget/udc/fsl_qe_udc.c: In function ‘qe_ep0_rx’: drivers/usb/gadget/udc/fsl_qe_udc.c:842:13: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] 842 | vaddr = (u32)phys_to_virt(in_be32(&bd->buf)); | ^ In file included from drivers/usb/gadget/udc/fsl_qe_udc.c:41: drivers/usb/gadget/udc/fsl_qe_udc.c:843:28: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] 843 | frame_set_data(pframe, (u8 *)vaddr); | ^ The driver assumes physical and virtual addresses are 32-bit, hence it cannot work on 64-bit platforms. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> --- One more casualty of CONFIG_WERROR=y. http://kisskb.ellerman.id.au/kisskb/buildresult/14652936/ --- drivers/usb/gadget/udc/Kconfig | 1 + 1 file changed, 1 insertion(+)