From: Ahmad Fatoum <a.fatoum@pengutronix.de> To: Antony Pavlov <antonynpavlov@gmail.com> Cc: "barebox@lists.infradead.org" <barebox@lists.infradead.org> Subject: Re: [PATCH 07/20] RISC-V: support incoherent I-Cache Date: Mon, 31 May 2021 09:40:30 +0200 [thread overview] Message-ID: <d193ad83-21f2-cbc5-a8d9-01ffa6cbe149@pengutronix.de> (raw) In-Reply-To: <20210531073821.15257-8-a.fatoum@pengutronix.de> Hello Antony, On 31.05.21 09:38, Ahmad Fatoum wrote: > SiFive SoCs have separate I-Caches that require self-modifying code > like barebox' relocation and PBL extraction code to do cache > maintenance. Implement sync_caches_for_execution and use it where > appropriate. > > Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> > --- > arch/riscv/Kconfig.socs | 2 ++ > arch/riscv/boot/uncompress.c | 2 ++ > arch/riscv/cpu/core.c | 7 +++++++ > arch/riscv/include/asm/barebox-riscv.h | 2 ++ > arch/riscv/lib/reloc.c | 8 ++++++++ > arch/riscv/lib/setupc.S | 2 ++ > 6 files changed, 23 insertions(+) > > diff --git a/arch/riscv/Kconfig.socs b/arch/riscv/Kconfig.socs > index 9c82a36fe4bd..d2970ba1d67f 100644 > --- a/arch/riscv/Kconfig.socs > +++ b/arch/riscv/Kconfig.socs > @@ -18,6 +18,7 @@ config SOC_VIRT > select RISCV_S_MODE > select BOARD_RISCV_GENERIC_DT > select CLINT_TIMER > + select HAS_CACHE > help > Generates an image tht can be be booted by QEMU. The image is called > barebox-dt-2nd.img > @@ -30,6 +31,7 @@ config SOC_SIFIVE > select RISCV_TIMER > select HAS_MACB > select HAS_ASM_DEBUG_LL > + select HAS_CACHE > help > This enables support for SiFive SoC platform hardware. > > diff --git a/arch/riscv/boot/uncompress.c b/arch/riscv/boot/uncompress.c > index 35a91e8cb62a..9f1d25efb59b 100644 > --- a/arch/riscv/boot/uncompress.c > +++ b/arch/riscv/boot/uncompress.c > @@ -63,6 +63,8 @@ void __noreturn barebox_pbl_start(unsigned long membase, unsigned long memsize, > > pbl_barebox_uncompress((void*)barebox_base, pg_start, pg_len); > > + sync_caches_for_execution(); > + > barebox = (void *)barebox_base; > > pr_debug("jumping to uncompressed image at 0x%p. dtb=0x%p\n", barebox, fdt); > diff --git a/arch/riscv/cpu/core.c b/arch/riscv/cpu/core.c > index 62eb0ca87164..b4727fe7449b 100644 > --- a/arch/riscv/cpu/core.c > +++ b/arch/riscv/cpu/core.c > @@ -18,6 +18,7 @@ > #include <linux/clk.h> > #include <linux/err.h> > #include <memory.h> > +#include <asm/barebox-riscv.h> > #include <asm-generic/memory_layout.h> > #include <globalvar.h> > #include <magicvar.h> > @@ -91,3 +92,9 @@ static struct driver_d riscv_driver = { > .of_compatible = riscv_dt_ids, > }; > postcore_platform_driver(riscv_driver); > + > +static void arch_shutdown(void) > +{ > + sync_caches_for_execution(); > +} > +archshutdown_exitcall(arch_shutdown); > diff --git a/arch/riscv/include/asm/barebox-riscv.h b/arch/riscv/include/asm/barebox-riscv.h > index bbe6cd040642..abb320242769 100644 > --- a/arch/riscv/include/asm/barebox-riscv.h > +++ b/arch/riscv/include/asm/barebox-riscv.h > @@ -27,6 +27,8 @@ void setup_c(void); > void relocate_to_current_adr(void); > void relocate_to_adr(unsigned long target); > > +void sync_caches_for_execution(void); > + > void __noreturn __naked barebox_riscv_entry(unsigned long membase, unsigned long memsize, > void *boarddata, unsigned int flags); > > diff --git a/arch/riscv/lib/reloc.c b/arch/riscv/lib/reloc.c > index 2fc8818cd698..165190775361 100644 > --- a/arch/riscv/lib/reloc.c > +++ b/arch/riscv/lib/reloc.c > @@ -24,6 +24,12 @@ > > #define RISC_R_TYPE(x) ((x) & 0xFF) > > +void sync_caches_for_execution(void) > +{ > + if (IS_ENABLED(CONFIG_HAS_CACHE)) > + asm volatile ("fence.i" ::: "memory"); If Erizo on FPGA chokes on this, we can have it pass along a feature flag from PBL that says it doesn't need cache maintenance. Please advise. > +} > + > void relocate_to_current_adr(void) > { > unsigned long offset; > @@ -63,4 +69,6 @@ void relocate_to_current_adr(void) > panic(""); > } > } > + > + sync_caches_for_execution(); > } > diff --git a/arch/riscv/lib/setupc.S b/arch/riscv/lib/setupc.S > index 5fdd81c2c3ec..d225186c79fd 100644 > --- a/arch/riscv/lib/setupc.S > +++ b/arch/riscv/lib/setupc.S > @@ -46,6 +46,8 @@ ENTRY(relocate_to_adr) > > jal __memcpy > > + jal sync_caches_for_execution > + > REG_L a0, (SZREG * 1)(sp) > jr a0 /* jump to relocated address */ > copied: > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2021-05-31 7:43 UTC|newest] Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-05-31 7:38 [PATCH 00/20] RISC-V: prepare for BeagleV pre-production board support Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 01/20] RISC-V: socs: add Kconfig entry for StarFive JH7100 Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 02/20] net: designware: add support for IP integrated into StarFive SoC Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 03/20] mfd: add TI TPS65086 PMIC restart driver Ahmad Fatoum 2021-06-07 6:44 ` Sascha Hauer 2021-05-31 7:38 ` [PATCH 04/20] mtd: spi-nor: cadence: fix 64-bit issues Ahmad Fatoum 2021-06-07 6:51 ` Sascha Hauer 2021-05-31 7:38 ` [PATCH 05/20] nvmem: add StarFive OTP support Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 06/20] RISC-V: dma: support multiple dma_alloc_coherent backends Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 07/20] RISC-V: support incoherent I-Cache Ahmad Fatoum 2021-05-31 7:40 ` Ahmad Fatoum [this message] 2021-06-07 7:33 ` Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 08/20] soc: add support for StarFive JH7100 incoherent interconnect Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 09/20] soc: sifive: l2_cache: enable maximum available cache ways Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 10/20] net: designware: fix 64-bit incompatibilities Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 11/20] dma: support marking SRAM for coherent DMA use Ahmad Fatoum 2021-06-07 7:34 ` Sascha Hauer 2021-06-07 7:40 ` Ahmad Fatoum 2021-06-07 7:39 ` Sascha Hauer 2021-05-31 7:38 ` [PATCH 12/20] mci: allocate DMA-able memory Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 13/20] mci: allocate sector_buf on demand Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 14/20] dma: allocate 32-byte aligned buffers by default Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 15/20] mci: dw_mmc: enable use on 64-bit CPUs Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 16/20] mci: dw_mmc: match against generic "snps, dw-mshc" compatible Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 17/20] clk: add initial StarFive clock support Ahmad Fatoum 2021-05-31 8:41 ` Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 18/20] reset: add StarFive reset controller driver Ahmad Fatoum 2021-06-07 8:00 ` Sascha Hauer 2021-05-31 7:38 ` [PATCH 19/20] watchdog: add StarFive watchdog driver Ahmad Fatoum 2021-05-31 7:38 ` [PATCH 20/20] hw_random: add driver for RNG on StarFive SoC Ahmad Fatoum
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=d193ad83-21f2-cbc5-a8d9-01ffa6cbe149@pengutronix.de \ --to=a.fatoum@pengutronix.de \ --cc=antonynpavlov@gmail.com \ --cc=barebox@lists.infradead.org \ --subject='Re: [PATCH 07/20] RISC-V: support incoherent I-Cache' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox