Home | History | Annotate | Download | only in boot32
History log of /src/sys/arch/acorn32/stand/boot32/boot32.c
RevisionDateAuthorComments
 1.50  24-May-2022  andvar fix various typos in comments, docs and log messages.
 1.49  29-Apr-2022  rin Fix fallout from libsa change; stand.h includes <sys/param.h> now.

Use '\0' instead of NULL for NUL-character.
 1.48  10-Nov-2021  msaitoh s/compatability/compatibility/ in comment.
 1.47  27-Dec-2019  msaitoh s/suport/support/
 1.46  23-Jan-2019  sborrill Don't call OS_ReadSysInfo Platform class call on RISC OS 3
 1.45  30-Oct-2018  christos no param names in prototype.
 1.44  30-Oct-2018  christos provide a main prototype (this is standalone)
 1.43  24-Jan-2018  skrll branches: 1.43.2; 1.43.4;
Remove port-acorn26

OK core@
 1.42  11-Jun-2016  dholland PR 51200 gets in libsa considered harmful: use kgets
 1.41  21-Mar-2014  christos branches: 1.41.6;
kill sprintf
 1.40  04-Nov-2013  christos remove unused variable
 1.39  10-May-2012  skrll branches: 1.39.2; 1.39.4;
_int*_t -> uint*_t

Same code before and after.
 1.38  22-Jan-2011  joerg branches: 1.38.4; 1.38.8;
Drop bootprog_maker (formerly enabled by -M) and bootprog_date (formerly
disabled by -D) from the output of newvers_stand.sh. Change -D to the
inverted logic, so that it adds the date to bootprog_rev in ().

Change all platforms accordingly. -D is added if MKREPRO is not yes and
wasn't present before. Platforms that didn't use -D don't depend on
MKREPRO now either.
 1.37  02-Aug-2009  gavan branches: 1.37.4; 1.37.6; 1.37.8;
Don't reset devices if booting an Iyonix. It's fine for acorn32 devices
because we know how to configure all of the hardware, but as we don't know
how to configure the Iyonix graphics card we must rely on RISC OS to do
it for us.

While we're here, space separate the kernel arguments. It's a bit hard
parsing them in the kernel when they're all run together.
 1.36  18-Mar-2009  cegger bzero -> memset
 1.35  23-Nov-2008  chris branches: 1.35.4;
Stop attempts to boot a kernel that is bigger than the first DRAM block.

At the moment too much stuff assumes that the kernel is contiguous in
physical memory.

While this doesn't make an INSTALL kernel work for me it at least now
indicates what the fault is, and I can swap the memory sticks round.
 1.34  12-Apr-2008  chris branches: 1.34.4; 1.34.10; 1.34.12;
Ignore size alignment issues, as we're never going to have a case where
copying a three extra bytes will cause an issue.
 1.33  03-Feb-2008  chris branches: 1.33.6;
Fix-up boot32 to work on A7000+

Logically the previous code should have worked but didn't. It appeared to
fail when reading the relocation table from physical memory.

To work-around this issue we now compact the relocation table (it shrinks
from ~800 entries to ~15 on a 2.5MB kernel) The compacted table is small
enough to copy into the page of memory we use to do the relocations. The
relocation code can now find the table, and carry out the relocations.

To help with debugging the screen border will change colour:
Red: Running without the MMU turned on (IE 1-1 physical mapping)
Note that the border will stay red a while as we're copying the
kernel over at this point.
Green: We've finished copying the kernel over (unless the code breaks
this will be rarely seen)
Blue: We're running on the bootstrap L1 table, and just about to call
the kernel.

Other tweaks include:
* copy the kernel 32bits at a time, rather than 8 bits at a time.
* assert that the relocations are 32bit aligned (so the above works)
* flush the cache and write buffers before turning off the MMU.

Tested by myself on an A7000+. Tested by skrll@ on Risc-PC and A7000.
 1.32  26-Jan-2008  chris Fix support for kinetic in the bootloader.

With these changes the kinetic dram blocks are correctly identified and
passed into the kernel.

Note that I've a pending kernel change to understand the kinetic blocks
and do something useful with them.
 1.31  21-Jan-2008  chris Zero out the whole of the structure, not just the first 4 bytes. IE use
sizeof(*bconfig) not sizeof(bconfig)

Now a small kernel will boot up on my RISC-PC, an install kernel won't
though, it hangs at the switch from RISC-OS to NetBSD.
 1.30  04-Mar-2007  christos branches: 1.30.16; 1.30.20; 1.30.22; 1.30.28; 1.30.34;
Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
 1.29  19-Aug-2006  bjh21 branches: 1.29.6; 1.29.8; 1.29.12; 1.29.16;
Add support to boot32 for passing a real vsync frequency to NetBSD.
Unfortunately, RISC OS doesn't seem to provide a sensible way to ask what
frame rate it's using so we resort to measuring it ourselves.
 1.28  25-Jun-2006  christos GCC4 fixes from Mike Pumford
 1.27  25-Mar-2006  bjh21 branches: 1.27.4;
Don't rely on first_mapped_PODRAM_page_index being zero on systems without
PODRAM, especially since it's initialised to -1. Instead, use
(podram_blocks != 0) to decide when to use it. This still doesn't make
my Risc PC boot, but it generates a believable relocation table now.
 1.26  25-Mar-2006  bjh21 When looking for somewhere to put the relocation table, reset the counter of
contingous pages to zero when we find a non-contiguous one. This way, we'll
actually find a contiguous block of the correct size (assuming there is one).
The updated version still boots my NC correctly, and fails slightly more
pleasantly on mr Risc PC.
 1.25  23-Mar-2006  bjh21 Use normal array subscripting syntax in place of addition and dereferencing.
No binary code change.
 1.24  23-Mar-2006  bjh21 Ah yes, _that's_ why we don't use field widths in printf() here: libsa's
printf() doesn't support them. Revert to using print0() while I ponder the
matter.
 1.23  23-Mar-2006  bjh21 Use slightly more advanced printf() formats to replace the horrid print0()
function.
 1.22  23-Mar-2006  bjh21 Substantial syntactic KNF, mostly removing surplus punctuation.
Generated code is unchanged.
 1.21  23-Mar-2006  bjh21 Reduce to 80 columns again. It's over two years since Reinoud touched this
code, so I hope this won't affect him too adversely.

Compiled binaries are (modulo date stamps) the same before and after.
 1.20  11-Dec-2005  christos branches: 1.20.4; 1.20.6; 1.20.8; 1.20.10; 1.20.12;
merge ktrace-lwp.
 1.19  26-May-2004  abs branches: 1.19.12;
Adjust the reserved heap space based on memory size. This avoids running out
of heap on machines with large amounts of memory. Tested on 33MB RISC OS 4
and 128MB RISC OS 5 machines. Updated version to 3.40.
 1.18  19-May-2004  abs Add qsort to libsa (taken from sys/dev/vinum/vinumqsort.c) and use instead of
bubblesort in acorn32 bootloader. Reduces time to sort memory on A710 equipped
RiscPC from over twenty seconds to effectively instantaneous.
Update boot version to 3.30
 1.17  18-May-2004  gavan Claim maximum available memory during boot32 startup. This removes
the need to explicitly set the WIMP slot size before running the bootloader.

Conditional on BOOT_MAXIMISE_MEMORY, so as not to interfere with potential
future uses of libriscos.

Also remove references to increasing WIMP slot size, as this is now
meaningless.
 1.16  20-Jul-2003  reinoud branches: 1.16.2;
First step towards more KNF; but most of all hopefully solving PR
acorn32/15850
 1.15  03-Jun-2003  reinoud branches: 1.15.2;
Cleanup DRAM video memory allocation. This needed to be done anyway and it
also ought to solve bootproblems with the A7000(+) family.

As an extra benefit, the surplus memory of the screen is returned to the
memorypool.
 1.14  20-Apr-2003  bjh21 KNF doesn't apply to Reinoud -- back out my last two changes.
 1.13  20-Apr-2003  bjh21 KNF
 1.12  20-Apr-2003  bjh21 80 columns, dammit!
 1.11  15-Jan-2003  reinoud Small typo and add initialisation for the `bank' counter
 1.10  08-Jan-2003  reinoud Fixup serious loading problems (together with the former commit of start.S)
major code cleanup esp. types used. Also cleanup up a major BUG that for
some odd reason worked :-/ makes me puzzled. It signifies that there might
be copies around in physical space of the DRAM ??? and thus its function
was motherboard dependent? It must have been old cruft from before the
cleanup of the relocation engine.
 1.9  06-Jan-2003  reinoud Fix miscelanious small errors that arose from having non Mb aligned memory
for the videoscreen.
 1.8  06-Jan-2003  reinoud Small fixes that showed up during boot-testing of a Pace DSL4000 running
the RISC OS-STB 4.0.0 version of RISC OS.
 1.7  06-Jan-2003  reinoud We have version 3.02 now : just a small fix for bootkernel name guessing.
 1.6  30-Dec-2002  reinoud In the case there is just one SIMM and one memory bank from the SIMM things
got wrong when no VRAM was there.

Placing the video DRAM in front of the kernel is OK when its 1Mb since the
kernel wants to be on a Mb boundary. Placing the video DRAM in the last
SIMM bank at the front is also OK unless there is just one SIMM and just one
bank; then it got in the way again!

Solution is to put the DRAM at the end of the SIMM instead of the beginning!
This however can result in the non 16 kb alignment of the top of physical
RAM where the temporary L1 page tables are situated. If its not 16 kb aligned
then move the L1 page table address down and down until it is 16 kb aligned.
This memory will be reused later on anyway.

What to do when we really support changing screensizes... see it as a max?
or use a different sceme alltogether? It might not even be a bootloader
problem then allthough its memory is not showing up in the DRAM/VRAM
block counts wich needs to be fixed one day.
 1.5  30-Dec-2002  reinoud Since we dont support switching screenmodes (yet) we might as well claim
just enough for the screenmemory to be in instead of the maximum of 1Mb.
Small machines like my 8Mb NC get a 700 kb back and thats really noticeable.
 1.4  30-Dec-2002  reinoud If we don't have VRAM then at least account the screensize correctly :) it goes
pretty wierd if it is set wrongly.
 1.3  30-Dec-2002  reinoud If we nick memory from the DRAM for video then please account it correctly!
 1.2  29-Dec-2002  reinoud branches: 1.2.2;
The unique machine ID is used in some networking stuff to generate a
unique-ish number, so better add it again!
 1.1  28-Dec-2002  reinoud Initial commit of the 3rd generation of bootloaders for the Acorn32
platform. It features far better support for newer architectures and is
fully rewritten in C and compile-able under NetBSD.

Since it shares code with `boot26' for Acorn26 merging the common parts is
likely to be next on the list.
 1.2.2.7  17-Jan-2003  thorpej Sync with HEAD.
 1.2.2.6  15-Jan-2003  thorpej Sync with HEAD.
 1.2.2.5  07-Jan-2003  thorpej Sync with HEAD.
 1.2.2.4  06-Jan-2003  reinoud Pull up the bootloader to -current
 1.2.2.3  03-Jan-2003  thorpej Sync with HEAD.
 1.2.2.2  29-Dec-2002  thorpej Sync with HEAD.
 1.2.2.1  29-Dec-2002  thorpej file boot32.c was added on branch nathanw_sa on 2002-12-29 19:15:06 +0000
 1.15.2.3  21-Sep-2004  skrll Fix the sync with head I botched.
 1.15.2.2  18-Sep-2004  skrll Sync with HEAD.
 1.15.2.1  03-Aug-2004  skrll Sync with HEAD
 1.16.2.3  29-May-2004  tron Pull up revision 1.19 (requested by abs in ticket #404):
Adjust the reserved heap space based on memory size. This avoids running out
of heap on machines with large amounts of memory. Tested on 33MB RISC OS 4
and 128MB RISC OS 5 machines. Updated version to 3.40.
 1.16.2.2  22-May-2004  he Pull up revision 1.18 (requested by abs in ticket #369):
Add qsort to libsa (taken from sys/dev/vinum/vinumqsort.c)
and use instead of bubblesort in acorn32 bootloader. Reduces
time to sort memory on A710 equipped RiscPC from over twenty
seconds to effectively instantaneous. Update boot version
to 3.30
 1.16.2.1  22-May-2004  he Pull up revision 1.17 (requested by abs in ticket #365):
Claim maximum available memory during boot32 startup. This
removes the need to explicitly set the WIMP slot size before
running the bootloader.
Conditional on BOOT_MAXIMISE_MEMORY, so as not to interfere
with potential future uses of libriscos.
Also remove references to increasing WIMP slot size, as
this is now meaningless.
 1.19.12.5  04-Feb-2008  yamt sync with head.
 1.19.12.4  21-Jan-2008  yamt sync with head
 1.19.12.3  03-Sep-2007  yamt sync with head.
 1.19.12.2  30-Dec-2006  yamt sync with head.
 1.19.12.1  21-Jun-2006  yamt sync with head.
 1.20.12.1  28-Mar-2006  tron Merge 2006-03-28 NetBSD-current into the "peter-altq" branch.
 1.20.10.1  19-Apr-2006  elad sync with head - hopefully this will work
 1.20.8.3  03-Sep-2006  yamt sync with head.
 1.20.8.2  26-Jun-2006  yamt sync with head.
 1.20.8.1  01-Apr-2006  yamt sync with head.
 1.20.6.1  22-Apr-2006  simonb Sync with head.
 1.20.4.1  09-Sep-2006  rpaulo sync with head
 1.27.4.1  13-Jul-2006  gdamore Merge from HEAD.
 1.29.16.1  23-Feb-2008  bouyer Pull up following revision(s) (requested by chris in ticket #1063):
sys/arch/acorn32/stand/boot32/boot32.c: revision 1.31
Zero out the whole of the structure, not just the first 4 bytes. IE use
sizeof(*bconfig) not sizeof(bconfig)
Now a small kernel will boot up on my RISC-PC, an install kernel won't
though, it hangs at the switch from RISC-OS to NetBSD.
 1.29.12.1  03-Jun-2008  skrll Sync with netbsd-4.
 1.29.8.1  12-Mar-2007  rmind Sync with HEAD.
 1.29.6.1  23-Feb-2008  bouyer Pull up following revision(s) (requested by chris in ticket #1063):
sys/arch/acorn32/stand/boot32/boot32.c: revision 1.31
Zero out the whole of the structure, not just the first 4 bytes. IE use
sizeof(*bconfig) not sizeof(bconfig)
Now a small kernel will boot up on my RISC-PC, an install kernel won't
though, it hangs at the switch from RISC-OS to NetBSD.
 1.30.34.1  23-Jan-2008  bouyer Sync with HEAD.
 1.30.28.1  18-Feb-2008  mjf Sync with HEAD.
 1.30.22.1  23-Mar-2008  matt sync with HEAD
 1.30.20.2  09-Feb-2008  chris Sync to HEAD.
 1.30.20.1  27-Jan-2008  chris Sync to HEAD.
 1.30.16.1  28-Feb-2008  rjs Sync with HEAD.
 1.33.6.2  17-Jan-2009  mjf Sync with HEAD.
 1.33.6.1  02-Jun-2008  mjf Sync with HEAD.
 1.34.12.2  28-Apr-2009  skrll Sync with HEAD.
 1.34.12.1  19-Jan-2009  skrll Sync with HEAD.
 1.34.10.1  13-Dec-2008  haad Update haad-dm branch to haad-dm-base2.
 1.34.4.2  19-Aug-2009  yamt sync with head.
 1.34.4.1  04-May-2009  yamt sync with head.
 1.35.4.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.37.8.1  08-Feb-2011  bouyer Sync with HEAD
 1.37.6.1  06-Jun-2011  jruoho Sync with HEAD.
 1.37.4.1  05-Mar-2011  rmind sync with head
 1.38.8.1  02-Jun-2012  mrg sync to latest -current.
 1.38.4.2  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.38.4.1  23-May-2012  yamt sync with head.
 1.39.4.1  18-May-2014  rmind sync with head
 1.39.2.2  03-Dec-2017  jdolecek update from HEAD
 1.39.2.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.41.6.1  09-Jul-2016  skrll Sync with HEAD
 1.43.4.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.43.4.1  10-Jun-2019  christos Sync with HEAD
 1.43.2.2  26-Jan-2019  pgoyette Sync with HEAD
 1.43.2.1  26-Nov-2018  pgoyette Sync with HEAD, resolve a couple of conflicts

RSS XML Feed