Commit Graph

3765 Commits

Author SHA1 Message Date
Toomas Soome
07672e9c19 libefi/time.c cstyle cleanup
libefi/time.c is mix of different styles, this update does cleanup.
Also fix 0 versus NULL, and zero the tv structure for case we get error
from UEFI firmware.

Reviewed by:	imp
Differential Revision:	https://reviews.freebsd.org/D11861
2017-08-05 05:20:03 +00:00
Warner Losh
9990efd2e2 Move EFI fmtdev functionality to libefi
This patch moves code necessary for the fmtdev functionality from
loader to libefi, allowing other applications to make use of it

Submitted by: Eric McCorkle
Differential Revision: https://reviews.freebsd.org/D11862
2017-08-04 16:33:36 +00:00
Warner Losh
f48bfebce1 Add EFI utility functions to libefi
This patch adds additional EFI utility functions to convert errno
values to EFI_STATUS errors, as well as EFI times to UNIX times.

Submitted by: Eric McCorkle
Differential Revision: https://reviews.freebsd.org/D11858
2017-08-04 04:20:11 +00:00
Warner Losh
457ea3bce3 Move EFI ZFS functions to libefi
This patch moves some EFI ZFS functions from loader to libefi,
allowing them to be used by anything that links against libefi.

Submitted by: Eric McCorkle
Differential Revision: https://reviews.freebsd.org/D11855
2017-08-04 04:20:06 +00:00
Warner Losh
acf82d2659 Add definitions and utilities for EFI drivers
This patch adds definitions and utility code for creating EFI drivers
using the EFI_DRIVER_BINDING_PROTOCOL.

Submitted by: Eric McCorkle
Differential Revision: https://reviews.freebsd.org/D11852
2017-08-04 04:16:41 +00:00
Enji Cooper
1ef2a611de Revert r321969
My change had good intentions, but the implementation was incorrect:
- printf was returning the number of characters in the format string
  plus the NUL, but failed in two regards implementation wise:
-- the pathological case, printf(""), wasn't being handled properly since
   the pointer is always incremented, so the value returned would be
   off-by-one.
-- printf(3) reports the number of characters printed post-conversion via
   vfprintf, etc.
- putchar(3) should return the character printed or EOF, not the number
  of characters output to the screen.

My goal in making the change (again) was to increase parity, but as bde
pointed out these are freestanding functions, so they don't have to
conform to libc/POSIX. I argued that the functions should be named
differently since the implementation is different enough to warrant it
and to allow boot2 code to be usable when linked against sys/boot and
libstand and other libraries in base. I have no interest in pushing
this change forward more though, as the original concern I had behind
the change with zfsboottest was resolved in r321849 and r321852. The
next person that updates the toolchain gets to deal with the
inconsistency if it's flagged by a newer compiler.

MFC after:	1 month
Reported by:	ed, markj
2017-08-03 13:50:46 +00:00
Enji Cooper
b9fe1d4f15 Fix the return types for printf and putchar to match their libc and
POSIX equivalents

Both printf and putchar return int, not void.

This will allow code that leverages the libcalls and checks/rely on the
return type to interchangeably between loader code and non-loader
code.

MFC after:	1 month
2017-08-03 05:27:05 +00:00
Emmanuel Vadot
5393952249 Alwinner: nanopi-neo: Remove r_i2c node from DTS as it isn't used on the board 2017-08-01 19:22:00 +00:00
Enji Cooper
20cce726e6 Standardize paths on SRCTOP instead of .CURDIR-relative paths
MFC after:	1 week
2017-08-01 05:39:40 +00:00
Enji Cooper
88abac8f06 Clean up style in print_state(..) and pager_printf(..)
No functional change intended.

MFC after:	3 days
2017-08-01 05:16:14 +00:00
Andrew Turner
b56e404049 Always set the receive mask in loader.efi. Some UEFI implementations set
this to be too restrictive. We need to have both broadcast and unicast
enabled for loader to work. Set them in all cases to ensure this is true.

This allows the Cavium ThunderX 2s in the netperf cluster to netboot using
a USB NIC.

PR:		221001
Reviewed by:	emaste, tsoome
Sponsored by:	DARPA, AFRL
Differential Revision:	https://reviews.freebsd.org/D11732
2017-07-27 15:06:34 +00:00
Dimitry Andric
04a7769aa2 Fix printf format warning in zfs_module.c
Clang 5.0.0 got better warnings about print format strings using %zd,
and this leads to the following -Werror warning on e.g. arm:

    sys/boot/efi/boot1/zfs_module.c:186:18: error: format specifies type 'ssize_t' (aka 'int') but the argument has type 'off_t' (aka 'long long') [-Werror,-Wformat]
                        "(%lu)\n", st.st_size, spa->spa_name, filepath, EFI_ERROR_CODE(status));
                                   ^~~~~~~~~~

Fix this by casting off_t arguments to intmax_t, and using %jd instead.

Reviewed by:	tsoome
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D11678
2017-07-20 20:27:19 +00:00
Emmanuel Vadot
2353f805ff dts: arm: Fix our local patches for H3
sun4i-a10.h is not included anymore, define directly the drive strengh
of the pins.
2017-07-09 13:56:34 +00:00
Allan Jude
e11bad9d2b Integer underflow in efipart_realstrategy when I/O starts after end of disk
This fixes an integer underflow in efipart_realstrategy, which causes
crashes when an I/O operation's start point is after the end of the disk.
This can happen when trying to detect filesystems on very small disks.
This can occur if a BIOS freebsd-boot partition exists on a system when the
EFI loader is being used.

PR:		219000
Submitted by:	Eric McCorkle <eric@metricspace.net>
Reviewed by:	cem (previous version), tsoome (previous version)
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D10559
2017-07-01 20:25:22 +00:00
Ed Maste
22ef11ee47 Link EFI/uboot loaders with -znotext
By default LLD links with relocations disallowed against readonly
sections (e.g., .text), but the 32-bit ARM EFI & uboot boot bits require
such relocations. -znotext is either ignored as an unknown -z option
(in-tree lld 2.17.50) or is already the default (GNU ld or GNU gold from
ports) so we can just add it unconditionally to allow building with LLD.

This is similar to the change in r320179 for the kernel link.

Sponsored by:	The FreeBSD Foundation
2017-07-01 18:48:15 +00:00
Andrew Turner
edca29bf48 As with arm64 mark the EFI PE header as allocated on arm. This is needed
for lld to link laoder.efi and boot1.efi.

Reported by:	emaste
2017-06-29 22:09:32 +00:00
Toomas Soome
ee059e6369 loader: chain load relocate data declaration is bad
The implementation is using fixed size array allocated in asm module,
need to use proper array declaration for C source.

CID:		1376405
Reported by:	Coverity, cem
Reviewed by:	cem
Differential Revision:	https://reviews.freebsd.org/D11321
2017-06-29 04:33:55 +00:00
Emmanuel Vadot
644e7b2956 loader.efi: Disable smbios for arm
The smbios code does a lot of unaligned access, since we don't really
care about smbios info on ARM (not all board expose information and those
who does don't expose useful ones) disable smbios for this arch (at least
for now).
2017-06-24 09:33:25 +00:00
Ed Maste
22398b764e Allow Clang's integrated assembler to assemble boot0
dim@ compared clang IAS-built and GNU as-built boot0 and found them
equivalent.  IAS encoded one instruction using two bytes where GNU as
used three, and another instruction using three bytes where GNU as used
two.  The net result is equivalent and tested, so there is no need to
force IAS off for boot0.
2017-06-23 18:41:49 +00:00
Ed Maste
4267fb758b Make structure padding explicit in EFI_MEMORY_DESCRIPTOR
The EFI memory descriptor 64-bit aligns PhysicalStart on both 32- and
64-bit platforms.  Make the padding explicit for i386 EFI.

Submitted by:	Siva Mahadevan <smahadevan@freebsdfoundation.org>
MFC after:	3 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D11301
2017-06-22 14:30:09 +00:00
Zbigniew Bodek
3706b98788 Enable arm,io-coherent property of PL310 L2 cache on Armada 38x platforms
This patch disables outer cache sync in PL310 driver
by adding "arm,io-coherent" property. In addition to
the previous patches it was the last bit needed
for enabling proper operation of Armada 38x SoCs
with the IO cache coherency.

Submitted by: Michal Mazur <mkm@semihalf.com>
Obtained from: Semihalf
Sponsored by: Stormshield
Reviewed by: mmel
Differential revision: https://reviews.freebsd.org/D11204
2017-06-21 18:28:37 +00:00
Emmanuel Vadot
ef7b0c3b49 Remove some custom DTS files as we are using upstream ones. 2017-06-20 03:41:06 +00:00
Bryan Drewery
c99b67a794 Utilize SYSROOT from r320119 in places where DESTDIR may be wanting WORLDTMP.
Since buildenv exports SYSROOT all of these uses will now look in
WORLDTMP by default.

sys/boot/efi/loader/Makefile
        A LIBSTAND hack is no longer required for buildenv.

MFC after:	2 weeks
Sponsored by:	Dell EMC Isilon
2017-06-19 20:47:24 +00:00
Toomas Soome
769bad9f8a Add chain loader support for loader
Implement simple chain loader in loader; this update does add chain command,
taking device or file as argument to load and start new boot loader.

In case of BIOS, the chain will read the boot block to address 0000:7c00 and
jumps on it. In case of UEFI, the chain command is to be used with efi
application, typically stored in EFI System Partition.

The update also does add simple menu entry, if the variable chain_disk is set.
The value of the variable chain_disk is used as argument for chain loading.

Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D5992
2017-06-16 20:08:44 +00:00
Zbigniew Bodek
08d94c6eab Enable HWPMC overflow IRQ on both CPUs in MPIC
This commit enables usage of HWPMC interrupts for the
Marvell SoCs, which use MPIC (Armada38x and ArmadaXP).
Those interrupts require extra unmasking, comparing to
others. Also, in order to process counters per-CPU,
they are masked/unmasked using separate registers' sets
for each core.

Submitted by: Michal Mazur <mkm@semihalf.com>
    	      Marcin Wojtas <mw@semihalf.com>
Obtained from: Semihalf
Sponsored by: Stormshield, Netgate
Differential revision: https://reviews.freebsd.org/D10913
2017-06-13 18:55:21 +00:00
Zbigniew Bodek
0f7028d7f8 Enable in-band link management on A388-Clearfog board
This patch adds in-band link management over SGMII of the
SFP transceiver on Armada-388-Clearfog board.

Submitted by: Marcin Wojtas <mw@semihalf.com>
Obtained from: Semihalf
Sponsored by: Netgate
Reviewed by: loos
Differential revision: https://reviews.freebsd.org/D10708
2017-06-13 18:48:51 +00:00
Edward Tomasz Napierala
4c7008824b Switch the example name for variables controlling loading memory images
in /boot/defaults/loader.conf to something that's actually commonly used,
"mdroot".  It's arbitrary, but it's easier to find this way.

MFC after:	2 weeks
2017-06-10 19:05:45 +00:00
Zbigniew Bodek
1717c1f1a3 Restore DTS node of PCIe controller for A38X boards
Add pcie-controller node as a bus-parent of pcie nodes for Armada38x
boards. This reduces diff between Linux and FreeBSD PCIe device tree
representation to the minimum. This commit also allows for using multiple
PCIe ports, thanks to the recent driver updates, which support such
hierarchy. Restore original PCIe nodes in armada-385.dtsi and
apply necessary changes in hitherto unused armada-380.dtsi.

Submitted by:	Michal Mazur <mkm@semihalf.com>
		Marcin Wojtas <mw@semihalf.com>
Obtained from:	Semihalf
Sponsored by:	Stormshield, Netgate
Differential revision: https://reviews.freebsd.org/D10907
2017-06-08 16:55:58 +00:00
Toomas Soome
8878df0d15 Small cleanup in dev_net.c
The variable servip is unused. One leftover printf and small cstyle nit.

Reviewed by:	bapt
Differential Revision:	https://reviews.freebsd.org/D10980
2017-05-28 21:20:55 +00:00
Baptiste Daroussin
41131c64be Followup on the user-class changes
Reported by:	Jose Luis Duran (via github)
2017-05-28 18:31:13 +00:00
Baptiste Daroussin
04238e0a32 Update the comments concerning net_parse_rootpath to reflect what it is now
really doing

Reported by:	rgrimes
Reviewed by:	rgrimes
Differential Revision:	https://reviews.freebsd.org/D10959
2017-05-27 18:46:00 +00:00
Baptiste Daroussin
b5b274ce12 Catch with the change in the user class 2017-05-27 14:07:46 +00:00
Baptiste Daroussin
4e2a7b5c99 Capitalize DHCP
Reported by:	danfe
2017-05-27 13:55:20 +00:00
Baptiste Daroussin
aff810f1b2 Document recent changes on pxeboot 2017-05-27 13:26:18 +00:00
Baptiste Daroussin
e9ce925773 Partially revert r314948
While it sounds like a good idea to extract the RFC1048 data from PXE, in the
end it is not and it is causing lots of issues.  Our pxeloader might need
options which are incompatible with other pxe servers (for example iPXE, but
not only).

Our pxe loaders are also now settings their own user class, so it is useful to
issue our own pxe request at startup

Reviewed by:	tsoome
Differential Revision:	https://reviews.freebsd.org/D10953
2017-05-27 12:46:46 +00:00
Baptiste Daroussin
4dfd16670e Always issue the pxe request
All the code are now only issueing one single dhcp request at startup of the
loader meaning we can always request a the PXE informations from the
dhcp server.

Previous code lost that information, meaning no option 55 anymore (meaning not
working with the kea dhcp server) and no request for rootpath etc, no user class

Remove the flags from the bootp function which is not needed anymore

Reviewed by:	tsoome
Differential Revision:	https://reviews.freebsd.org/D10952
2017-05-27 12:35:01 +00:00
Baptiste Daroussin
5fe86cd909 Always build tftpfs support along with nfs for pxeboot
This change was already done for loader.efi
2017-05-27 12:20:13 +00:00
Baptiste Daroussin
404f5b6b29 Support URI scheme for root-path in netbooting
Rather that previous attempts to add tftpfs support at the same time as NFS
support. This time decide on a proper URI parser rather than hacks.

root-path can now be define the following way:
For tftpfs:

tftp://ip/path
tftp:/path (this one will consider the tftp server is the same as the one where
the pxeboot file was fetched from)

For nfs:
nfs:/path
nfs://ip/path

The historical
ip:/path
/path

are kept on NFS

Reviewed by:	tsoom, rgrimes
Differential Revision:	https://reviews.freebsd.org/D10947
2017-05-27 12:06:52 +00:00
John Baldwin
a0320759e7 Pass -N directly to ld via -Wl rather than passing it to the compiler driver.
In particular, clang doesn't accept -N.

Obtained from:	CheriBSD
Sponsored by:	DARPA / AFRL
2017-05-23 17:41:09 +00:00
Mariusz Zaborski
490b79db02 Replacing iterating over rootpath by strsep(3).
Submitted by:	kczekirda
Reviewed by:	tsoome, bapt, jhb, oshogbo
MFC after:	3 weeks
Sponsored by:	Oktawave
Differential Revision:	https://reviews.freebsd.org/D10726
2017-05-22 20:11:40 +00:00
Luiz Otavio O Souza
c1212a7a74 Fix the offset for the CPU0 MPIC registers.
Please note that only a subset of CPU0 registers are exported.  CPU1
registers are not touched.

Obtained from:	ARMADA38X Functional Specifications
Sponsored by:	Rubicon Communications, LLC (Netgate)
2017-05-17 22:05:07 +00:00
Toomas Soome
136b6a0f5f libstand: increase nfs max read size to 16k
With ip fragment reassembly implemented, it makes sense to allow
larger nfs reads. Note due to loader heap size limit, we do not want
to set too large maximum read size. Also we do not change default read size.

Reviewed by:	bcr, allanjude
Differential Revision:	https://reviews.freebsd.org/D10754
2017-05-16 17:35:05 +00:00
Mark Johnston
cf55254f20 Set the right variable when overriding the default console speed.
MFC after:	1 week
2017-05-11 18:53:28 +00:00
Bryan Drewery
07676084ec DIRDEPS_BUILD: Update dependencies.
Sponsored by:	Dell EMC Isilon
2017-05-09 01:48:23 +00:00
Toomas Soome
da8fb057e5 loader: network read rework
The current read from network is working from up to down - we have some
protocol needing the data from the network, so we build the buffer space
for that protocol, add the extra space for headers and pass this buffer
down to be filled by nif get call in hope, we have guessed the incoming
packet size right. Amazingly enough this approach mostly does work, but
not always...

So, this update does work from down to up - we allocate buffer (based
on MTU or frame size info), fill it up, and pass on for upper layers.
The obvious problem is that when we should free the buffer - if at all.

In the current implementation the upper layer will free the packet on error
or when the packet is no longer needed.

While working on the issue, the additional issue did pop up - the bios
implementation does not have generic get/put interface but is using pxe
udpsend/udpreceive instead. So the udp calls are gone and undi interface
is implemented instead. Which in turn means slight other changes as we
do not need to have duplicated pxe implementation and can just use dev_net.

To align packet content, the actual read from nic is using shifted buffer by
ETHER_ALIGN (2).

Reviewed by:	bapt
Differential Revision:	https://reviews.freebsd.org/D10232
2017-05-06 20:32:27 +00:00
Baptiste Daroussin
a872bf12f8 distinguish NFS versus TFTP boot by rootpath
Don't use DHCP 150 option to decide which protocol use to netboot. When
root-path includes ip address - go thru NFS, if ip address not exists in
root-path - go thru TFTP from server which ip address is in next-server.  But
there is one limitation - only one tftp server in network to provide loader and
everything else.  Does enybody use more than only one?

Submitted by:	kczekirda
Sponsored by:	Oktawave
MFC after:	3 weeks
Relnote:	Yes
Differential Revision:	https://reviews.freebsd.org/D8740
2017-05-06 19:23:58 +00:00
Adrian Chadd
5c99cda025 [arm] [rt1310] add initial RT1310 SoC code.
This code base on lpc code. Ralink RT1310 is oem from 5V Technologies.
RT1310 is ARM926EJS(arm5t).

Tested:

* Buffalo WZR2-G300N

Submitted by:	Hiroki Mori <yamori813@yahoo.co.jp>
Reviewed by:	mizhka
Differential Revision:	https://reviews.freebsd.org/D7238
2017-05-06 06:14:46 +00:00
Toomas Soome
f6bd3d520f zfsboot: drvsize() may be unusable on some systems
From user report, the errors are seen:
error 1
error 1
gptzfsboot: error 1 lba 4294967288
gptzfsboot: error 1 lba 1
gptzfsboot: no ZFS pools located, can't boot

The first two errors above are from issuing INT13 EAX=0x4800, meaning we
need to check if EDD is available and use EAX=0x800 if not.

For an workaround I'm using the similar idea as in biosdisk.c - first probe
ah=8h, then check if we have EDD.

Note we would like to see the correct disk size info, but we *may*
get away with anything >64MB, so we could at least test 2 zfs pool labels
on whole disk setup and not to freak out the INT13 interface.

If we get away with initial disk probing, then we have partition sizes from
the partition table and we should be able to complete the disk probing.

Note: this update does not provide full fix to all errors, but we get
the drvsize() errors removed.

Reported by:	Michael W. Lucas
Reviewed by:	julian
Differential Revision:	https://reviews.freebsd.org/D10591
2017-05-04 05:26:37 +00:00
Toomas Soome
8428b4c343 loader.efi: ResetSystem does not use data with EFI_SUCCESS
The current reboot command in efi/loader/main.c is passing extra data with
ResetSystem, however, UEFI spec 2.6, page 265 does state:

"ResetData is only valid if ResetStatus is something other than EFI_SUCCESS
unless the ResetType is EfiResetPlatformSpecific where a minimum amount of
ResetData is always required."

Therefore we should use DataSize 0 and ResetData NULL - those are two last
arguments for the call.

Reviewed by:	emaste
Differential Revision:	https://reviews.freebsd.org/D10562
2017-05-01 16:56:34 +00:00
Brooks Davis
a7dc31283a Remove the NATM framework including the en(4), fatm(4), hatm(4), and
patm(4) devices.

Maintaining an address family and framework has real costs when we make
infrastructure improvements.  In the case of NATM we support no devices
manufactured in the last 20 years and some will not even work in modern
motherboards (some newer devices that patm(4) could be updated to
support apparently exist, but we do not currently have support).

With this change, support remains for some netgraph modules that don't
require NATM support code. It is unclear if all these should remain,
though ng_atmllc certainly stands alone.

Note well: FreeBSD 11 supports NATM and will continue to do so until at
least September 30, 2021.  Improvements to the code in FreeBSD 11 are
certainly welcome.

Reviewed by:	philip
Approved by:	harti
2017-04-24 21:21:49 +00:00