[U-Boot] [PATCH] MPC8xxx: Define cache ops for USB

This patch conditionally defines flush_dcache_range() and invalidate_dcache_range() on MPC8xxx, to avoid EHCI complaining, resulting in the following output:
$ ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- ./MAKEALL MPC8572DS Configuring for MPC8572DS board... make: *** [u-boot] Error 1 powerpc-linux-gnu-size: './u-boot': No such file e1000.c: In function ‘e1000_initialize’: e1000.c:5264:13: warning: assignment from incompatible pointer type [enabled by default] tsec.c: In function ‘tsec_initialize’: tsec.c:638:12: warning: assignment from incompatible pointer type [enabled by default] drivers/usb/host/libusb_host.o: In function `ehci_td_buffer': /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:186: undefined reference to `flush_dcache_range' drivers/usb/host/libusb_host.o: In function `ehci_submit_async': /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:346: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:348: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:349: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:372: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:374: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:376: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:386: undefined reference to `invalidate_dcache_range' make: *** [u-boot] Error 1
--------------------- SUMMARY ---------------------------- Boards compiled: 1 Boards with errors: 1 ( MPC8572DS ) ----------------------------------------------------------
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de Cc: Anatolij Gustschin agust@denx.de --- arch/powerpc/cpu/mpc83xx/Makefile | 3 +++ arch/powerpc/cpu/mpc83xx/cache.c | 33 +++++++++++++++++++++++++++++++++ arch/powerpc/cpu/mpc85xx/Makefile | 3 +++ arch/powerpc/cpu/mpc85xx/cache.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 arch/powerpc/cpu/mpc83xx/cache.c create mode 100644 arch/powerpc/cpu/mpc85xx/cache.c
diff --git a/arch/powerpc/cpu/mpc83xx/Makefile b/arch/powerpc/cpu/mpc83xx/Makefile index b5c499d..012ab6b 100644 --- a/arch/powerpc/cpu/mpc83xx/Makefile +++ b/arch/powerpc/cpu/mpc83xx/Makefile @@ -41,6 +41,9 @@ COBJS-$(CONFIG_PCI) += pci.o COBJS-$(CONFIG_PCIE) += pcie.o COBJS-$(CONFIG_OF_LIBFDT) += fdt.o
+# Stub implementations of cache management functions for USB +COBJS-$(CONFIG_USB_EHCI) += cache.o + ifdef CONFIG_FSL_DDR2 COBJS_LN-$(CONFIG_MPC8349) += ddr-gen2.o else diff --git a/arch/powerpc/cpu/mpc83xx/cache.c b/arch/powerpc/cpu/mpc83xx/cache.c new file mode 100644 index 0000000..2a08b65 --- /dev/null +++ b/arch/powerpc/cpu/mpc83xx/cache.c @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 Marek Vasut marex@denx.de + * + * This file contains stub implementation of + * invalidate_dcache_range() + * flush_dcache_range() + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ +} + +void flush_dcache_range(unsigned long start, unsigned long stop) +{ +} diff --git a/arch/powerpc/cpu/mpc85xx/Makefile b/arch/powerpc/cpu/mpc85xx/Makefile index 058d609..c512b33 100644 --- a/arch/powerpc/cpu/mpc85xx/Makefile +++ b/arch/powerpc/cpu/mpc85xx/Makefile @@ -129,6 +129,9 @@ COBJS += speed.o COBJS += tlb.o COBJS += traps.o
+# Stub implementations of cache management functions for USB +COBJS-$(CONFIG_USB_EHCI) += cache.o + SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) START := $(addprefix $(obj),$(START)) diff --git a/arch/powerpc/cpu/mpc85xx/cache.c b/arch/powerpc/cpu/mpc85xx/cache.c new file mode 100644 index 0000000..2a08b65 --- /dev/null +++ b/arch/powerpc/cpu/mpc85xx/cache.c @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 Marek Vasut marex@denx.de + * + * This file contains stub implementation of + * invalidate_dcache_range() + * flush_dcache_range() + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ +} + +void flush_dcache_range(unsigned long start, unsigned long stop) +{ +}

This patch conditionally defines flush_dcache_range() and invalidate_dcache_range() on MPC8xxx, to avoid EHCI complaining, resulting in the following output:
$ ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- ./MAKEALL MPC8572DS Configuring for MPC8572DS board... make: *** [u-boot] Error 1 powerpc-linux-gnu-size: './u-boot': No such file e1000.c: In function ‘e1000_initialize’: e1000.c:5264:13: warning: assignment from incompatible pointer type [enabled by default] tsec.c: In function ‘tsec_initialize’: tsec.c:638:12: warning: assignment from incompatible pointer type [enabled by default] drivers/usb/host/libusb_host.o: In function `ehci_td_buffer': /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:186: undefined reference to `flush_dcache_range' drivers/usb/host/libusb_host.o: In function `ehci_submit_async': /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:346: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:348: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:349: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:372: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:374: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:376: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:386: undefined reference to `invalidate_dcache_range' make: *** [u-boot] Error 1
--------------------- SUMMARY ---------------------------- Boards compiled: 1 Boards with errors: 1 ( MPC8572DS ) ----------------------------------------------------------
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de Cc: Anatolij Gustschin agust@denx.de --- arch/powerpc/cpu/mpc512x/Makefile | 3 +++ arch/powerpc/cpu/mpc512x/cache.c | 33 +++++++++++++++++++++++++++++++++ arch/powerpc/cpu/mpc83xx/Makefile | 3 +++ arch/powerpc/cpu/mpc83xx/cache.c | 33 +++++++++++++++++++++++++++++++++ arch/powerpc/cpu/mpc85xx/Makefile | 3 +++ arch/powerpc/cpu/mpc85xx/cache.c | 33 +++++++++++++++++++++++++++++++++ 6 files changed, 108 insertions(+) create mode 100644 arch/powerpc/cpu/mpc512x/cache.c create mode 100644 arch/powerpc/cpu/mpc83xx/cache.c create mode 100644 arch/powerpc/cpu/mpc85xx/cache.c
V2: Fix MPC512x too
diff --git a/arch/powerpc/cpu/mpc512x/Makefile b/arch/powerpc/cpu/mpc512x/Makefile index 4a4bc0d..b53232f 100644 --- a/arch/powerpc/cpu/mpc512x/Makefile +++ b/arch/powerpc/cpu/mpc512x/Makefile @@ -41,6 +41,9 @@ COBJS-$(CONFIG_CMD_IDE) += ide.o COBJS-$(CONFIG_IIM) += iim.o COBJS-$(CONFIG_PCI) += pci.o
+# Stub implementations of cache management functions for USB +COBJS-$(CONFIG_USB_EHCI) += cache.o + COBJS := $(COBJS-y) SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) diff --git a/arch/powerpc/cpu/mpc512x/cache.c b/arch/powerpc/cpu/mpc512x/cache.c new file mode 100644 index 0000000..2a08b65 --- /dev/null +++ b/arch/powerpc/cpu/mpc512x/cache.c @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 Marek Vasut marex@denx.de + * + * This file contains stub implementation of + * invalidate_dcache_range() + * flush_dcache_range() + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ +} + +void flush_dcache_range(unsigned long start, unsigned long stop) +{ +} diff --git a/arch/powerpc/cpu/mpc83xx/Makefile b/arch/powerpc/cpu/mpc83xx/Makefile index b5c499d..012ab6b 100644 --- a/arch/powerpc/cpu/mpc83xx/Makefile +++ b/arch/powerpc/cpu/mpc83xx/Makefile @@ -41,6 +41,9 @@ COBJS-$(CONFIG_PCI) += pci.o COBJS-$(CONFIG_PCIE) += pcie.o COBJS-$(CONFIG_OF_LIBFDT) += fdt.o
+# Stub implementations of cache management functions for USB +COBJS-$(CONFIG_USB_EHCI) += cache.o + ifdef CONFIG_FSL_DDR2 COBJS_LN-$(CONFIG_MPC8349) += ddr-gen2.o else diff --git a/arch/powerpc/cpu/mpc83xx/cache.c b/arch/powerpc/cpu/mpc83xx/cache.c new file mode 100644 index 0000000..2a08b65 --- /dev/null +++ b/arch/powerpc/cpu/mpc83xx/cache.c @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 Marek Vasut marex@denx.de + * + * This file contains stub implementation of + * invalidate_dcache_range() + * flush_dcache_range() + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ +} + +void flush_dcache_range(unsigned long start, unsigned long stop) +{ +} diff --git a/arch/powerpc/cpu/mpc85xx/Makefile b/arch/powerpc/cpu/mpc85xx/Makefile index 058d609..c512b33 100644 --- a/arch/powerpc/cpu/mpc85xx/Makefile +++ b/arch/powerpc/cpu/mpc85xx/Makefile @@ -129,6 +129,9 @@ COBJS += speed.o COBJS += tlb.o COBJS += traps.o
+# Stub implementations of cache management functions for USB +COBJS-$(CONFIG_USB_EHCI) += cache.o + SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) START := $(addprefix $(obj),$(START)) diff --git a/arch/powerpc/cpu/mpc85xx/cache.c b/arch/powerpc/cpu/mpc85xx/cache.c new file mode 100644 index 0000000..2a08b65 --- /dev/null +++ b/arch/powerpc/cpu/mpc85xx/cache.c @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2012 Marek Vasut marex@denx.de + * + * This file contains stub implementation of + * invalidate_dcache_range() + * flush_dcache_range() + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ +} + +void flush_dcache_range(unsigned long start, unsigned long stop) +{ +}

Hello Marek,
On 5/25/2012 7:44 PM, Marek Vasut wrote:
This patch conditionally defines flush_dcache_range() and invalidate_dcache_range() on MPC8xxx, to avoid EHCI complaining, resulting in the following output:
<snip>
+void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ +}
+void flush_dcache_range(unsigned long start, unsigned long stop) +{ +}
Don't mind if this is a stupid question. Can't this be placed in some common header? Just to avoid code duplication!
Thanks, Vikram

Hello Marek,
On 5/25/2012 7:44 PM, Marek Vasut wrote:
This patch conditionally defines flush_dcache_range() and invalidate_dcache_range() on MPC8xxx, to avoid EHCI complaining, resulting in the following output:
<snip> > + > +void invalidate_dcache_range(unsigned long start, unsigned long stop) > +{ > +} > + > +void flush_dcache_range(unsigned long start, unsigned long stop) > +{ > +}
Don't mind if this is a stupid question. Can't this be placed in some common header? Just to avoid code duplication!
And why are they just dummy functions? There are cache flush instructions for ppc

Dear Joakim Tjernlund,
Hello Marek,
On 5/25/2012 7:44 PM, Marek Vasut wrote:
This patch conditionally defines flush_dcache_range() and invalidate_dcache_range() on MPC8xxx, to avoid EHCI complaining,
resulting in the following output:
<snip>
+void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ +}
+void flush_dcache_range(unsigned long start, unsigned long stop) +{ +}
Don't mind if this is a stupid question. Can't this be placed in some common header? Just to avoid code duplication!
And why are they just dummy functions? There are cache flush instructions for ppc
Doesn't the PPC have it's own internal snooping?
Best regards, Marek Vasut

Dear Marek Vasut,
In message 1337955286-22345-1-git-send-email-marex@denx.de you wrote:
This patch conditionally defines flush_dcache_range() and invalidate_dcache_range() on MPC8xxx, to avoid EHCI complaining, resulting in the following output:
$ ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- ./MAKEALL MPC8572DS Configuring for MPC8572DS board... make: *** [u-boot] Error 1 powerpc-linux-gnu-size: './u-boot': No such file e1000.c: In function ‘e1000_initialize’: e1000.c:5264:13: warning: assignment from incompatible pointer type [enabled by default] tsec.c: In function ‘tsec_initialize’: tsec.c:638:12: warning: assignment from incompatible pointer type [enabled by default] drivers/usb/host/libusb_host.o: In function `ehci_td_buffer': /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:186: undefined reference to `flush_dcache_range' drivers/usb/host/libusb_host.o: In function `ehci_submit_async': /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:346: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:348: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:349: undefined reference to `flush_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:372: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:374: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:376: undefined reference to `invalidate_dcache_range' /home/marex/U-Boot/u-boot-imx/drivers/usb/host/ehci-hcd.c:386: undefined reference to `invalidate_dcache_range' make: *** [u-boot] Error 1
--------------------- SUMMARY ---------------------------- Boards compiled: 1 Boards with errors: 1 ( MPC8572DS )
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de Cc: Anatolij Gustschin agust@denx.de
arch/powerpc/cpu/mpc512x/Makefile | 3 +++ arch/powerpc/cpu/mpc512x/cache.c | 33 +++++++++++++++++++++++++++++++++ arch/powerpc/cpu/mpc83xx/Makefile | 3 +++ arch/powerpc/cpu/mpc83xx/cache.c | 33 +++++++++++++++++++++++++++++++++ arch/powerpc/cpu/mpc85xx/Makefile | 3 +++ arch/powerpc/cpu/mpc85xx/cache.c | 33 +++++++++++++++++++++++++++++++++ 6 files changed, 108 insertions(+) create mode 100644 arch/powerpc/cpu/mpc512x/cache.c create mode 100644 arch/powerpc/cpu/mpc83xx/cache.c create mode 100644 arch/powerpc/cpu/mpc85xx/cache.c
V2: Fix MPC512x too
Applied, thanks.
Andy, I hope it is OK with you that I apply this directly.
Best regards,
Wolfgang Denk

Dear Marek,
On Fri, 2012-05-25 at 14:24 +0200, Marek Vasut wrote:
arch/powerpc/cpu/mpc83xx/Makefile | 3 +++ arch/powerpc/cpu/mpc83xx/cache.c | 33 +++++++++++++++++++++++++++++++++ arch/powerpc/cpu/mpc85xx/Makefile | 3 +++ arch/powerpc/cpu/mpc85xx/cache.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 arch/powerpc/cpu/mpc83xx/cache.c create mode 100644 arch/powerpc/cpu/mpc85xx/cache.c
There is a "cache.c" at the path "arch/powerpc/lib", and I think it may be better to put those dummy functions in this file.
And thanks your information about this patch in another mail.
Best Regards,
Liu Gang

Dear Liu Gang,
Dear Marek,
On Fri, 2012-05-25 at 14:24 +0200, Marek Vasut wrote:
arch/powerpc/cpu/mpc83xx/Makefile | 3 +++ arch/powerpc/cpu/mpc83xx/cache.c | 33 +++++++++++++++++++++++++++++++++ arch/powerpc/cpu/mpc85xx/Makefile | 3 +++ arch/powerpc/cpu/mpc85xx/cache.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 arch/powerpc/cpu/mpc83xx/cache.c create mode 100644 arch/powerpc/cpu/mpc85xx/cache.c
There is a "cache.c" at the path "arch/powerpc/lib", and I think it may be better to put those dummy functions in this file.
And thanks your information about this patch in another mail.
Honestly, I'm now quite sure about that. As some other PPC CPUs might have different cache management functions implemented? I'll check it though, thanks for the hint, I'm no powerpc expert ;-)
Best Regards,
Liu Gang
Best regards, Marek Vasut
participants (5)
-
Joakim Tjernlund
-
Liu Gang
-
Marek Vasut
-
Vikram Narayanan
-
Wolfgang Denk