Date: Fri, 22 Apr 2016 23:31:37 +0200 From: Marko Zec <zec@fer.hr> To: Ruslan Bukin <br@freebsd.org> Cc: <src-committers@freebsd.org>, <svn-src-all@freebsd.org>, <svn-src-head@freebsd.org> Subject: Re: svn commit: r298477 - in head/sys: conf riscv/riscv Message-ID: <20160422233137.7f37bb47@x23> In-Reply-To: <201604221615.u3MGFxCM088374@repo.freebsd.org> References: <201604221615.u3MGFxCM088374@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 22 Apr 2016 16:15:59 +0000 Ruslan Bukin <br@freebsd.org> wrote: > Author: br > Date: Fri Apr 22 16:15:58 2016 > New Revision: 298477 > URL: https://svnweb.freebsd.org/changeset/base/298477 > > Log: > Clear the DDR memory. This should be done by bootloaders, > but they have no such feature yet. > > This fixes operation on Rocket Core and lowRISC. > > Modified: > head/sys/conf/options.riscv > head/sys/riscv/riscv/locore.S > > Modified: head/sys/conf/options.riscv > ============================================================================== > --- head/sys/conf/options.riscv Fri Apr 22 15:12:05 > 2016 (r298476) +++ head/sys/conf/options.riscv Fri Apr > 22 16:15:58 2016 (r298477) @@ -2,3 +2,4 @@ > > RISCV opt_global.h > VFP opt_global.h > +DDR_CLEAR_SIZE opt_global.h > > Modified: head/sys/riscv/riscv/locore.S > ============================================================================== > --- head/sys/riscv/riscv/locore.S Fri Apr 22 15:12:05 > 2016 (r298476) +++ head/sys/riscv/riscv/locore.S Fri > Apr 22 16:15:58 2016 (r298477) @@ -126,6 +126,17 @@ _start: > csrr a0, mhartid > bnez a0, mpentry > > +#if defined(DDR_CLEAR_SIZE) > + /* Clear DDR memory */ > + la t0, _end > + li t1, DDR_CLEAR_SIZE > +1: > + sd zero, 0(t0) > + addi t0, t0, 8 > + bltu t0, t1, 1b Usually _end appears to be (double) word aligned, but that happens out of pure luck, since compilers do not provide firm guarantees about _end's alignment (at least gcc doesn't, as far as I know). So depending on which kind of RV this code would run, sometimes it may end up doing a lot of traps emulating unaligned access in software, or worse... Hence it would't hurt to check for _end's alignment first and do a few byte-by-byte bzero()ing if needed, before proceeding a dword pace. > + /* End */ > +#endif > + > /* Build event queue for current core */ > build_ring > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160422233137.7f37bb47>