Hi York, On Tue, 19 Mar 2013 13:29:52 -0700, York Sun <york...@freescale.com> wrote:
> When we need the copied code/data in the main memory, we can flush the > cache now. It uses the existing function flush_cache. Syntax is > > flush_cache <addr> <size> > > The addr and size are given in hexadecimal. Like memory command, there is > no sanity check for the parameters. > > Signed-off-by: York Sun <york...@freescale.com> > --- > common/cmd_cache.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/common/cmd_cache.c b/common/cmd_cache.c > index 5512f92..93b7337 100644 > --- a/common/cmd_cache.c > +++ b/common/cmd_cache.c > @@ -94,6 +94,29 @@ int do_dcache(cmd_tbl_t *cmdtp, int flag, int argc, char * > const argv[]) > return 0; > } > > +void __weak flush_cache(ulong addr, ulong size) > +{ > + puts("No arch specific flush_cache available!\n"); > + /* please define arch specific flush_cache */ > +} > + > +int do_flush_cache(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > +{ > + ulong addr, size; > + > + switch (argc) { > + case 3: > + addr = simple_strtoul(argv[1], NULL, 16); > + size = simple_strtoul(argv[2], NULL, 16); > + flush_cache(addr, size); > + break; > + default: > + return cmd_usage(cmdtp); > + } > + return 0; > + > +} > + > static int parse_argv(const char *s) > { > if (strcmp(s, "flush") == 0) > @@ -120,3 +143,10 @@ U_BOOT_CMD( > "[on, off, flush]\n" > " - enable, disable, or flush data (writethrough) cache" > ); > + > +U_BOOT_CMD( > + flush_cache, 3, 0, do_flush_cache, > + "flush cache for a range", > + "<addr> <size>\n" > + " - flush cache for specificed range" > +); What's the point of this command exactly? I can see the point of range flushes (and invalidates) in the code for drivers that use DMA, but as a shell command, I fail to see the interest of it. Amicalement, -- Albert. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot