2256 Commits

Author SHA1 Message Date
marius
100c1f73e9 - For Cheetah- and Zeus-class CPUs don't flush all unlocked entries from
the TLBs in order to get rid of the user mappings but instead traverse
  them an flush only the latter like we also do for the Spitfire-class.
  Also flushing the unlocked kernel entries can cause instant faults which
  when called from within cpu_switch() are handled with the scheduler lock
  held which in turn can cause timeouts on the acquisition of the lock by
  other CPUs. This was easily seen with a 16-core V890 but occasionally
  also happened with 2-way machines.
  While at it, move the SPARC64-V support code entirely to zeus.c. This
  causes a little bit of duplication but is less confusing than partially
  using Cheetah-class bits for these.
- For SPARC64-V ensure that 4-Mbyte page entries are stored in the 1024-
  entry, 2-way set associative TLB.
- In {d,i}tlb_get_data_sun4u() turn off the interrupts in order to ensure
  that ASI_{D,I}TLB_DATA_ACCESS_REG actually are read twice back-to-back.

Tested by:      Peter Jeremy (16-core US-IV), Michael Moll (2-way SPARC64-V)
2011-07-02 11:14:54 +00:00
marius
88b120a13d Fix r223695 to compile on architectures which don't use the MBR scheme; wrap
the MBR support in the common part of the loader in #ifdef's and enable it
only for userboot for now.
2011-07-01 18:31:59 +00:00
dfr
2b9b009195 Add a version of the FreeBSD bootloader which can run in userland, packaged
as a shared library. This is intended to be used by BHyVe to load FreeBSD
kernels into new virtual machines.
2011-06-30 16:08:56 +00:00
jhb
86a602b0bf Revert the entry point label to 'start' to unbreak the build.
Pointy hat to:	jhb
2011-06-27 21:43:56 +00:00
jhb
89aadb1676 - Remove the fake BPB from zfsldr. zfsldr doesn't support booting from
floppies, so it will not be used as the start of an emulated floppy
  image on a bootable CD which is what the fake BPB was used for.
- Only check that EDD packet mode is available once at the start of
  zfsldr rather than for each disk sector now that we read data in one
  sector at a time.  As a result, collapse the remaining bits of read
  up into nread and rename nread to read.
- Restore a return at the end of putstr that I removed in the previous
  revision.

Tested by:	Henri Hennebert (earlier version)
MFC after:	1 week
2011-06-27 13:58:24 +00:00
marius
063a61ac25 As with EFI, OFW and U-Boot etc only compile FDT support on those
architectures that actually use it.
2011-06-25 16:01:45 +00:00
jhb
6e30ce7ac2 The recent change to increase the zfsboot size to 64k made a few BIOSes
unhappy (probably they don't handle crossing the 64k boundary, etc.).
Fix this by changing zfsldr to use a loop reading from the disk one
sector at a time.  To avoid trashing the saved copy of the MBR which is
used for disk I/O, read zfsboot2 at address 0x9000.  This has the
advantage that BTX no longer needs to be relocated as it is read into
the correct location.  However, the loop to relocate zfsboot2.bin can
now cross a 64k boundary, so change it to use relative segments instead.
(This will need further work if zfsboot2.bin ever exceeds 64k.)

While here, stop storing a relocated copy of zfsldr at 0x700.  This was
only used by the xread hack which has recently been removed (and even
that use was dubious).  Also, include the BIOS error code as hex when
reporting read errors to aid in debugging.

Much thanks to Henri Hennebert for patiently testing various iterations
of the patch as well as fixing the zfsboot2.bin relocation to use
relative segments.

MFC after:	1 week
2011-06-23 15:53:17 +00:00
kan
13e3e9fd02 Minimize backward seeks when trying to load ELF relocatable modules.
Some of loader filesystems are very ill equipped to handle seeking
backwards within the file. Namely, tftp requires trasfer to be
restarted from the start of the file every time we go backwards.
2011-06-19 13:35:41 +00:00
benl
2071e3510a Fix clang warnings.
Approved by:	philip (mentor)
2011-06-18 13:56:33 +00:00
nwhitehorn
e01ce27c8f Revert changes to this file in r222417. This unconditionally enabled the
boot menu on all platforms, which breaks loader completely on at least
powerpc for reasons that are not understood yet.

Reviewed by:	Devin Teske
2011-06-15 14:07:16 +00:00
dim
d4c7939bea Upgrade our copy of llvm/clang to r132879, from upstream's trunk. 2011-06-12 18:01:31 +00:00
marcel
9a4ce80d98 o Bump the EFI loader version to 3.1.
o   Add the about, pbvm and reboot commands.
o   Trim the banner (suppress maker and date).
2011-06-07 00:59:31 +00:00
marcel
a37f8a9db4 Add ia64_sync_icache() and use it to make the I-cache coherent
after loading the kernel's text segment. The kernel will do the
same for loaded modules, so don't worry about that.
2011-06-07 00:39:15 +00:00
uqs
1c9f17fc8b mdoc: fix markup 2011-06-02 09:56:42 +00:00
julian
1d72c8b97a Include forgotten framework changes to get some of the new menu files installed correctly on non x86/amd systems.
pointy-hut to  devin
2011-05-30 04:23:33 +00:00
andreast
7396cbef12 Add some missing files. Without we hang in the OF prompt asking for screen.4th.
Approved by:	nwhitehorn (mentor)
2011-05-29 14:27:11 +00:00
julian
36cd7cef5e New boot loader menus from Devin Teske.
Discussed on hackers and recommended for inclusion into 9.0 at the devsummit.
All support email to devin   dteske at vicor dot ignoreme dot com .

Submitted by:	dteske at vicor dot ignoreme dot com
Reviewed by:	me and many others
2011-05-28 08:50:38 +00:00
attilio
96139278ce Disconnect sun4v architecture from the three.
Some files keep the SUN4V tags as a code reference, for the future,
if any rewamped sun4v support wants to be added again.

Reviewed by:	marius
Tested by:	sbruno
Approved by:	re
2011-05-14 01:53:38 +00:00
avg
11604ee85b a whitespace nit
Reminder from:	kib
MFC after:	4 days
2011-05-07 13:57:30 +00:00
avg
4592e9fe92 a whitespace nit
MFC after:	4 days
2011-05-07 10:40:57 +00:00
dim
26ae1aec4f Fine-tune llvm optimization for sys/boot/i386/boot2, which shaves off
some more bytes from the final boot2 image.

Submitted by:	rdivacky
2011-05-05 18:47:24 +00:00
marcel
2bce8b194c Fix corner case where the size is a power of two. 2011-05-03 01:43:04 +00:00
dim
20dc4d4d1e Clang r130700 can now compile sys/boot/i386/boot2 with room to spare. 2011-05-02 21:13:08 +00:00
marcel
9a015a5a31 Turn PBVM page table entries into PTEs so that they can be inserted
into the TLB as-is.

While here, have ia64_platform_alloc() return ~0UL on failure.
2011-04-30 20:16:49 +00:00
jhb
251e6e3d22 Due to space constraints, the UFS boot2 and boot1 use an evil hack where
boot2 calls back into boot1 to perform disk reads.  The ZFS MBR boot blocks
do not have the same space constraints, so remove this hack for ZFS.
While here, remove commented out code to support C/H/S addressing from
zfsldr.  The ZFS and GPT bootstraps always just use EDD LBA addressing.

MFC after:	2 weeks
2011-04-28 17:44:24 +00:00
ae
efbdd528e8 Remove all object files during 'make clean'.
MFC after:	1 week
2011-04-21 14:17:36 +00:00
nyan
82c088adf3 MFi386: revisions 220389 and 220392
- Mark getc() as inline, this has no effect on gcc but helps clang.
  - Move getc() body before xgetc() so gcc does not emit a warning about
    function having no body.
2011-04-16 06:20:49 +00:00
philip
7df95651a2 Add basic support for the Marvell Orion TS-7800.
Submitted by:	Kristof Provost <kristof -at- freebsd.org>
2011-04-15 13:37:43 +00:00
pluknet
a07e3dbd25 Remove the now defunct kern.ipc.nmbufs tunable.
PR:		kern/132497 (part)
MFC after:	1 week
2011-04-13 12:19:03 +00:00
rdivacky
54a18d388a Move getc() body before xgetc() so gcc does not emit a warning about function
having no body.

Approved by:    jhb
2011-04-06 17:54:12 +00:00
rdivacky
1f9ba05458 Mark getc() as inline, this has no effect on gcc but helps clang.
Approved by:    jhb
2011-04-06 17:29:40 +00:00
nyan
d8728201a1 MFi386: revision 220337
Build boot2 with -mregparm=3.
2011-04-05 13:48:53 +00:00
rdivacky
fd38f1e08c Build boot2 with -mregparm=3, ie. pass upto 3 arguments via registers.
This modifies CFLAGS and tweaks sio.S to use the new calling convention.
The sio_init() and sio_putc() prototypes are modified so that other
users of this code know the correct calling convention.

This makes the code smaller when compiled with clang.

Reviewed by:    jhb
Tested by:      me and Freddie Cash <fjwcash gmail com>
2011-04-04 18:23:55 +00:00
marcel
8bd7372b19 Fix a long standing bug where file_load() passes down the global loadaddr
to the l_load() method in the file_formats structure, while being passed
an address as an argument (dest). With file_load() calling arch_loadaddr()
now, this bug is a little bit more significant.

Spotted by: nyan@ (nice catch!)
2011-04-04 16:59:46 +00:00
marcel
09f8bacb54 Use the new arch_loadaddr I/F to align ELF objects to PBVM page
boundaries. For good measure, align all other objects to cache
lines boundaries.

Use the new arch_loadseg I/F to keep track of kernel text and
data so that we can wire as much of it as is possible. It is
the responsibility of the kernel to link critical (read IVT
related) code and data at the front of the respective segment
so that it's covered by TRs before the kernel has a chance to
add more translations.

Use a better way of determining whether we're loading a legacy
kernel or not. We can't check for the presence of the PBVM page
table, because we may have unloaded that kernel and loaded an
older (legacy) kernel after that. Simply use the latest load
address for it.
2011-04-03 23:49:20 +00:00
marcel
e253ede763 Add 2 new archsw interfaces:
1.  arch_loadaddr - used by platform code to adjust the address at which
    the object gets loaded. Implement PC98 using this new interface instead
    of using conditional compilation. For ELF objects the ELF header is
    passed as the data pointer. For raw files it's the filename. Note that
    ELF objects are first considered as raw files.
2.  arch_loadseg - used by platform code to keep track of actual segments,
    so that (instruction) caches can be flushed or translations can be
    created. Both the ELF header as well as the program header are passed
    to allow platform code to treat the kernel proper differently from any
    additional modules and to have all the relevant details of the loaded
    segment (e.g. protection).
2011-04-03 22:31:51 +00:00
marcel
0e834fdaf3 Revert rev 165325. The arch_maphint interface hasn't been in use for
more than 4 years.
2011-04-03 05:09:25 +00:00
marcel
169dc84837 Make the ski loader functional again after the previous set of changes. 2011-04-03 03:26:12 +00:00
nyan
ccc0d4f324 MFi386: the part of 219452
- bunch of variables are turned into uint8_t.
  - the setting and reading of "fmt" in load() is removed.
  - buf in printf() is made static to save space.
2011-03-24 15:09:36 +00:00
ae
f98b43bbe5 The size of zfsboot2 grown up to 64 Kbytes in r219089.
Increase NSECT up to 128 sectors too.

Reviewed by:	jhb, pjd
2011-03-16 20:19:48 +00:00
ae
470b15e021 Set control flags in putc(). This should fix zfsboot hangs in drvread().
PR:		kern/153552
Reviewed by:	jhb
MFC after:	1 week
2011-03-16 20:04:56 +00:00
marcel
8e0b0a2284 MFaltix:
Add support for Pre-Boot Virtual Memory (PBVM) to the loader.

PBVM allows us to link the kernel at a fixed virtual address without
having to make any assumptions about the physical memory layout. On
the SGI Altix 350 for example, there's no usuable physical memory
below 192GB. Also, the PBVM allows us to control better where we're
going to physically load the kernel and its modules so that we can
make sure we load the kernel in memory that's close to the BSP.

The PBVM is managed by a simple page table. The minimum size of the
page table is 4KB (EFI page size) and the maximum is currently set
to 1MB. A page in the PBVM is 64KB, as that's the maximum alignment
one can specify in a linker script. The bottom line is that PBVM is
between 64KB and 8GB in size.

The loader maps the PBVM page table at a fixed virtual address and
using a single translations. The PBVM itself is also mapped using a
single translation for a maximum of 32MB.

While here, increase the heap in the EFI loader from 512KB to 2MB
and set the stage for supporting relocatable modules.
2011-03-16 03:53:18 +00:00
marcel
c8313b3029 Revert previous commit: EFI_STATUS is a 64-bit integral on ia64. Fix the
compile warning on i386 (where EFI_STATUS is a 32-bit integral) by casting
the status argument to u_long instead.

Pointy hat: brucec
MFC after: 3 days
2011-03-16 00:08:10 +00:00
davidch
4cf0ebe1b2 - Initial release of bxe(4) to support Broadcom NetXtreme II 10GbE.
(BCM57710, BCM57711, BCM57711E)

MFC after:	One month
2011-03-14 22:42:41 +00:00
jhb
9ecfc66935 Remove all object files during 'make clean'.
PR:		kern/154888
Submitted by:	arundel
MFC after:	1 week
2011-03-11 13:11:15 +00:00
rdivacky
f386257f6a Some more shrinking.
o    bunch of variables are turned into uint8_t

   o    initial setting of namep[] in lookup() is removed
        as it's only overwritten a few lines down

   o    kname is explicitly initialized in main() as BSS
        in boot2 is not zeroed

   o    the setting and reading of "fmt" in load() is removed

   o    buf in printf() is made static to save space

Reviewed by:    jhb
Tested by:      me and Fabian Keil <freebsd-listen fabiankeil de>
2011-03-10 16:40:13 +00:00
nyan
3edd099649 MFi386: revision 219186
This patch shrinks boot2 a little.

  o    It switches kname to be just a pointer instead of an array.
  o    It changes ioctl to unsigned from uint8_t.
  o    It changes the second keyhit limit to 3 seconds from 5.
  o    It removes bi_basemem/bi_extmem/bi_memsizes_valid setting.
2011-03-03 11:45:54 +00:00
rdivacky
d456b2027b This patch shrinks boot2 a little.
o    It switches kname to be just a pointer instead of an array
     thus avoiding a couple of memcpy()s.

o    It changes ioctl to unsigned from uint8_t.

o    It changes the second keyhit limit to 3 seconds from 5
     so that constant propagation can take place.

o    It changes the ticks overflow computation as suggested by bde@.

o    It removes bi_basemem/bi_extmem/bi_memsizes_valid setting from
     bootinfo as it is unused.

Reviewed by: jhb
2011-03-02 18:53:12 +00:00
brucec
318d44b9bc Remove duplicate "in".
Suggested by:	Rob Farmer <rfarmer at predatorlabs.net>
MFC after:	3 days
2011-03-01 11:47:51 +00:00
brucec
3c9e970368 Revert some of r177626. "in in" is valid in certain sentences.
PR:		121490
MFC after:	3 days
2011-02-28 10:03:48 +00:00