94 Commits

Author SHA1 Message Date
Bernhard Nortmann
f3960f4a77 fel: Change order of includes
For Windows portable_endian.h relies on and includes <winsock2.h>.
Thus it needs to be requested first, otherwise other includes might
pull in <windows.h> and cause a preprocessor warning / compilation
failure (observed with MinGW).

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-10-26 21:38:33 +02:00
Bernhard Nortmann
4564e7822b Fix some issues that showed up as compiler warnings with mingw64
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-10-26 21:37:29 +02:00
NiteHawk
74d22ad65f Merge pull request #62 from n1tehawk/20161021_autoversion
Add support for version information
2016-10-26 20:44:02 +02:00
Bernhard Nortmann
2ae30430bc fel: Minor fixup - rename "progress" to "callback" for clarity
This commit renames the function pointer of type progress_cb_t
for file_upload(). That might help to avoid potential confusion
with other routines that use a boolean "progress" parameter to
indicate whether progress information is desired (at all).

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-10-25 21:04:33 +02:00
howientc
60601d611a fel: Improve file_upload() when no progress callback is passed
Until now, the function would always pass `true` as the "progress"
parameter to aw_write_buffer(). This has the potential drawback
of limiting the maximum USB transfer size.

By selectively passing `false` instead (with no progress function
active), we hint that aw_write_buffer() and subsequent routines
don't have to care about callbacks; so that usb_bulk_send() is
free to select a transfer size of AW_USB_MAX_BULK_SEND.

Reviewed-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-10-25 21:04:33 +02:00
Bernhard Nortmann
569f189693 Have programs display version information in their usage help
This way we don't have to introduce new options for retrieving
version info. For those programs that do not output their usage
by default (e.g. because they would process stdin), you may pass
a "-?" option to get help - and thus version information.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-10-24 14:53:02 +02:00
NiteHawk
a8eadb9be8 fel: Add the ability to pass uEnv-style data via FEL (#60)
* fel: Add the ability to pass uEnv-style data via FEL

The corresponding format is recognized by having the environment
data (= text) start with a special "#=uEnv" marker. Upon transfer
of such a file, sunxi-fel will detect this condition, and set a
field in the SPL header accordingly - which in turn also requests
U-Boot to auto-import it (i.e. merge with the default environment).

(Note that this requires a U-Boot version that knows about the
new meaning of this field, namely v2016.09 or later. Older U-Boot
versions will fail to import the uEnv-style data.)

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-10-24 12:18:46 +02:00
Bernhard Nortmann
6392ecf630 fel: bugfix: aw_fel_writel_n() transfers need to do endian conversion 2016-10-22 13:33:48 +02:00
Bernhard Nortmann
23f239d0f3 fel: Implement "reset64" command to force warm reset into AArch64
This commit adds a new "reset64 <addr>" command "rmr32" that could
be helpful with new 64-bit SoCs. It takes an entry point (address)
parameter, stores it via RVBAR and then issues a RMR write to
request a warm boot into AArch64 mode.

For now, this is useful with the boot process of A64, where we might
wish to transfer control to a 64-bit binary (for ATF or U-Boot).
See e.g. http://linux-sunxi.org/Pine64#Boot_sequence

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-27 16:46:12 +02:00
Siarhei Siamashka
52768471b8 fel: Add fel spl command support for Allwinner A64
The SCTLR bits are somewhat different because the V bit is set
to 0 on A64 (Low exception vectors, base address 0x00000000) and
the UNK bit (Reads of this bit return an UNKNOWN value) is also not
the same as on the other SoCs. So the SCTLR check can be relaxed.

Changes in v2:
 - Because the SRAM A and SRAM C reside back-to-back in the address
   space, it is possible to use 40 KiB of SRAM by the SPL for its
   code+data+stack. So the FEL backup storage is moved from 0x18000
   to 0x1A000 to support this.

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2016-05-12 02:19:22 +03:00
Siarhei Siamashka
9e7f3a3a93 fel: Move the backup storage to the SRAM section A1 on H3
This allows the SRAM section A2 to be exclusively used by
the OpenRISC core.

There are no substantial differences between H3 and A10/A13/A20.
It just has 64 KiB of SRAM starting at the address 0x0 instead
of 48 KiB.

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2016-05-08 12:15:47 +02:00
Siarhei Siamashka
55f364129b fel: Move the backup storage to the SRAM B on A31
This allows the SRAM section A2 to be exclusively used by
the OpenRISC core.

Regarding the potential U-Boot SPL size. The SRAM section A1
only has 32 KiB. But at least the stack can be set at the end
of the SRAM section B. Or runtime UCL or LZO decompression can
be used to unpack the SPL code to 0x24000-0x2FFFF and have
48 KiB of available space there.

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Reviewed-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-08 12:15:47 +02:00
Siarhei Siamashka
39df14323b fel: Rename the backup buffers which use AR100 (OpenRISC) SRAM
That would be a more appropriate name. And A31 is going to
implement this in a different way and give the SRAM back to
OpenRISC.

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Acked-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-08 12:15:47 +02:00
Siarhei Siamashka
9a80504edd fel: Move backup area to higher addresses in SRAM on A10/A13/A20
Previously the backup area was allocated at the address 0x8000.
This is not very good because it means that the U-Boot SPL can
only safely use memory at addresses 0x0000-0x7FFF (32 KiB). But
if we move the backup area to the end of the SRAM A4, this can
allow U-Boot SPL to use memory 0x0000-0x9FFF (40 KiB). The BROM
can't load such large SPLs from the SD card. But the SPL still
can move its stack up to the 40 KiB boundary or do UCL or LZO
decompression at runtime to squeeze more code into it.

This patch makes the sunxi-fel tool compatible with 40 KiB SPLs,
even though the current U-Boot releases do not use them yet.

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Acked-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-08 12:15:47 +02:00
Bernhard Nortmann
49cbb064a4 fel: Cosmetic fixes
- Convert C++ style comments for a uniform coding style.
- Some small formatting adjustments.
- Change "sid" command to print ':' separators instead of spaces.

Apart from "sid" output, no functional changes involved.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-06 14:08:27 +02:00
Bernhard Nortmann
848a054c6d fel: add "sid" command to print SID (128-bit key) on supported SoCs
This patch makes use of the new aw_fel_readl_n() function to output
the first four 32-bit values (SID key) from an SoC-specific address.
The corresponding e-fuses may not necessarily start at the SID
"base" address, e.g. on H3/A83T they are at <base+0x200>.

Note: SoC support is currently incomplete. In particular, reading
the SID on A31(s) is unsupported. Accessing it there is complicated
by the fact that Allwinner moved this information from the SoC into
the PMIC/AXP221.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-05 08:29:50 +02:00
Bernhard Nortmann
3269b96319 fel: Add "readl" and "writel" commands
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>

Squashed commit of the following:

commit 95f3614357446c4a35ec541bb2c21503c54d3fac
Author: Bernhard Nortmann <bernhard.nortmann@web.de>
Date:   Fri Apr 8 09:10:17 2016 +0200

    fel: Add support for multiple sequential readl/writel

    There are cases where "long" reads/writes might be used to transfer
    multiple values from/to sequential addresses.

    When doing so, we can avoid having to setup and upload the entire
    scratch buffer (ARM code) every time, by making the underlying
    functions auto-increment the address on each invocation.

    The patch implements this functionality, and maps the existing
    aw_fel_readl() and aw_fel_writel() to special cases (count == 1).

    Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>

commit 20ececdfc7f3c4070469a7b74ba77bb74e01f876
Author: Bernhard Nortmann <bernhard.nortmann@web.de>
Date:   Fri Apr 8 09:00:20 2016 +0200

    fel: Modify handling of command line args for "readl"/"writel"

    Most other commands use their decoded argument values directly,
    without storing them to local vars first. Also "writel" needs
    an (argc > 3).

    Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>

commit b4216371b97e9f1dd19f7fc2ce720b9cb8e2434e
Author: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Date:   Sat Dec 19 08:22:26 2015 +0200

    fel: Add "readl" and "writel" commands

    The read/write operations done by FEL are not suitable for accessing
    hardware registers. For example, trying to read a SID value using
    the "read" or "hexdump" commands results in the following:

      $ sunxi-fel hexdump 0x01c23800 4
      01c23800: 87 00 00 00 __ __ __ __ __ __ __ __ __ __ __ __

    Apparently, FEL tries to read data one byte at a time and this does
    not always work correctly. Introducing new commands to explicitly
    do 32-bit reads and writes helps:

      $ sunxi-fel readl 0x01c23800
      0x16254187

    Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
    Tested-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-05 08:29:50 +02:00
Siarhei Siamashka
118dfa8efe fel: Move the temporary scratch buffer under the IRQ stack
Doing certain operations may need uploading and executing code
on the device. For example, such operations right now are
reading/writing ARM CP15 coprocessor registers. Uploading the
code to the device is naturally overwriting some part of SRAM
as a side effect. Right now it is not a problem, because the
CP15 coprocessor registers are only accessed as part of uploading
and executing U-Boot SPL. They are nicely timed not to cause
problems and the temporary scratch area gets overwritten by
the SPL code anyway.

But if we decide to provide access to such operations via
command line interface, then any side effects may potentially
cause problems for the users. Consider the following scenario:

  sunxi-fel clear 0x2000 0x100 \
            advanced-command-which-uploads-and-executes-code \
            hexdump 0x2000 0x100

The user may rightfully expect that clearing a buffer in SRAM
to zero and then reading it back should show all zero bytes.
But inserting advanced commands in the middle may cause data
corruption.

In order to resolve this problem, just move the scratch area
away from the 0x2000-0x5BFF addresses range. These particular
addresses are already known to the users as a safe place for
their bare metal expariments in FEL mode. The "sunxi-fel spl"
command is a special case though and it is expected to
overwrite data in this area too.

A possible alternative would be to just backup & restore data
in the scratch area. But this has some disadvantages:
  1. Extra code in the sunxi-fel tool and extra roundtrips over
     USB to do the backup/restore job.
  2. If we allow the OpenRISC core to use the 0x2000-0x5C00
     range in SRAM A1, then this becomes unsafe and racy
     (we can't really backup & restore data without causing
     a temporarily glitch for the currently running code on
     the OpenRISC core).

To sum it up. With this patch we make it so that now the
0x2000-0x5BFF range is freely available for the users of the
sunxi-fel tool. The 0x1000-0x1FFF range is off limits (the
upper part of it is used by the FEL IRQ handler, the lower
part of it is reserved for internal use by the sunxi-fel
tool). The 0x0000-0x0FFF addresses range is reserved for
passing data from the SPL to the main U-Boot binary (via
the SPL header) and is also off limits.

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Tested-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-05 08:29:50 +02:00
Bernhard Nortmann
b00b9a7fe9 fel: Silence possible compiler warnings on "end of table" markers
This is done by explicitly setting at least one member field
(preferably the one that gets tested for validity later),
instead of just using "{ 0 }".

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-04 22:34:27 +02:00
Bernhard Nortmann
c4507cbc87 fel: Avoid -Wunused-variable (iface_detached) on non-Linux platforms
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-04 22:34:27 +02:00
Bernhard Nortmann
73c20eea7b Makefile: Have portable_endian.h properly expose all functions
For Linux, this requires additional #defines, see
https://gist.github.com/panzi/6856583#gistcomment-1656524

Placing those #defines into portable_endian.h would mean we
depend on the specific order of #includes (whatever pulls
in endian.h first, including other system includes). Avoid
this by using symbols provided "globally" via the Makefile.

Also nuke the _NETBSD_SOURCE definition in fel.c

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-05-03 08:02:09 +02:00
Bernhard Nortmann
d47c3a3649 Replace endian_compat.h with portable_endian.h
Our previous include file only supplied a very limited set of
wrapper redefinitions for platforms that define __APPLE__ (i.e.
Mac OS). In particular, some needed big endian conversions were
missing, causing "symbol(s) not found" errors when linking.

Instead of patching the existing file, let's do away with it
completely and replace it by something more sophisticated.
The portable_endian.h used is in the public domain, and was
taken from https://gist.github.com/panzi/6856583

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-04-20 09:45:26 +02:00
Bernhard Nortmann
f3b60f43e3 fel: Introduce helper function for reporting libusb errors
Commit 472ac4759df557c00248e557beb869f4fe7d75f7 introduced
a possible regression by relying on the availability of
libusb_strerror(). There are libusb versions out there _not_
offering this function, which breaks compilation.

Introducing a separate helper function allows us to work around
this, refactor existing code and have more streamlined error
reporting - avoiding the message string retrieval where needed.
The usb_error() function can also optionally abort execution
with a given exit code.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-04-20 09:45:26 +02:00
Bernhard Nortmann
b59f4584f5 fel: Convert "needs_l2en" to boolean type
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-04-20 09:29:50 +02:00
Bernhard Nortmann
3acd9a9dc0 fel: Fix a possible format/conversion error in aw_write_buffer()
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-04-20 09:29:50 +02:00
Bernhard Nortmann
a8054dfa9a fel: Remove surplus colons on perror() messages
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-04-20 09:29:50 +02:00
Bernhard Nortmann
b4aab6baec fel: Use initializers for aw_usb_request and aw_fel_request
instead of memset() and strcpy() to clear / assign member fields.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-04-20 09:29:50 +02:00
Bernhard Nortmann
499529966e fel: Simplify hexdump() single character output, using putchar()
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-04-20 09:29:50 +02:00
Bernhard Nortmann
425278ac0d fel: Do a clean exit(0) after printing usage help
Gracefully shut down the FEL utility, instead of continuing
execution. This avoids a possible "ERROR: Allwinner USB FEL
device not found!" when doing a plain `./sunxi-fel` without
any arguments (and no suitable USB device connected).

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
2016-04-20 09:28:08 +02:00
Jens Kuske
b7e092ec3f fel: add fel spl support for Allwinner A80
The A80 has the V bit in SCTLR set to 0 because of the BROM
being at 0x00000000 now, so the SCTLR check has to be relaxed.

Signed-off-by: Jens Kuske <jenskuske@gmail.com>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2016-03-21 19:33:21 +02:00
Jens Kuske
035167cb14 fel: only read MMU control registers if MMU is enabled
This workaround is necessary for A80, which sometimes
fails at reading DACR.

Signed-off-by: Jens Kuske <jenskuske@gmail.com>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2016-03-21 19:07:06 +02:00
Bernhard Nortmann
472ac4759d fel: support selection of specific USB bus and device number
See https://github.com/linux-sunxi/sunxi-tools/issues/37

The patch was originally inspired by
https://github.com/NextThingCo/sunxi-tools/commit/16386a7
and
https://github.com/NextThingCo/sunxi-tools/commit/47bafaf

It introduces a "--dev" (-d) option to specify the desired FEL
device. This is useful if multiple target devices are connected
to the same host.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2016-03-20 15:03:58 +01:00
Lourens Rozema
806030a4e6 fel: Add release USB interface to allow proper operation on Mac OS X.
Closes #24. See https://groups.google.com/forum/#!topic/linux-sunxi/sEJ1eTBoCvw

Tested-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2016-03-20 14:43:52 +01:00
Bernhard Nortmann
be1b4c7400 fel: fix memory leak, properly shut down USB library
The aw_fel_process_spl_and_uboot() was missing a free() for the file
buffer. This patch also adds a proper libusb cleanup/shutdown.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-17 02:00:57 +02:00
Bernhard Nortmann
887a0a7560 fel: unify handling of "prefix"-type command line arguments
This patch forces relevant options to be placed at the beginning of
the command line, but also makes sure that their specific order does
not matter.
Currently this applies to "-p" (--progress) and "-v" (--verbose).

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-17 02:00:50 +02:00
Bernhard Nortmann
4a57273df0 fel: bugfix - revert autostart change from d99d59c
Commit d99d59c introduces a bug when the "spl" command is used with a
file that contains a U-Boot binary. "spl" will now try to execute it,
while it's not supposed to. (The command should only start the SPL.)

This patch brings back the `uboot_autostart` flag, which is meant to
remain `false` for the "spl" command, and gets set by "uboot" only.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-17 02:00:45 +02:00
Bernhard Nortmann
7755022252 fel: support updating the caption for "dialog --gauge"
This patch adds an "echo-gauge" command that is intended for use with
sunxi-fel's output piped into the dialog utility. "echo-gauge" will
output its string argument in a way that updates (i.e. overwrites)
the prompt text that dialog displays, so it's possible to change that
inbetween file transfers from sunxi-fel.

Example:
	sunxi-fel uboot ${UBOOT} \
		echo-gauge "Uploading kernel (1/2)" \
		write-with-gauge 0x42000000 ${KERNEL} \
		write 0x43100000 ${SCRIPT} \
		echo-gauge "Uploading rootfs (2/2)" \
		write-with-gauge 0x44000000 ${ROOTFS} \
		| dialog --gauge "" 6 70

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-16 08:20:46 +02:00
Bernhard Nortmann
6712eb84a0 fel: support FEL progress gauge via dialog utility
This patch adds some additional commands, and implements corresponding
progress callbacks that produce output for the 'dialog' utility:
http://invisible-island.net/dialog/dialog.html

The simple "*-with-gauge" just emits percentage numbers, line by line,
while "*-with-xgauge" outputs extended information to update the
dialog prompt. Both are meant for directly piping the output:
sunxi-fel write-with-gauge <...> | dialog --gauge "FEL upload" 6 70

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Acked-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-16 08:20:46 +02:00
Bernhard Nortmann
3626803f64 fel: implement "write-with-progress" and "multiwrite"
The two new commands both imply that a (simple) progress bar
display is requested. "multi[write]" allows to upload a group
of files with a single command, resulting in their transfer
showing a common, 'overall' progress status.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Acked-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-16 08:20:45 +02:00
Bernhard Nortmann
b3c02a0a55 fel: Add file_size() and factor out a reusable file_upload()
This patch moves some code out of the "write" handler, with the intention
to reuse it later for similar commands.

At the same time, it also discards the previous transfer rate output when
using "-v", as that has become redundant with the 'progress bar' display
available by "-p".

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Acked-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-16 08:20:45 +02:00
Bernhard Nortmann
3f0584aaa7 fel: implement simple progress bar for larger transfers
Add "--progress" option and a progress bar display for FEL
transfers. This picks up on a suggestion from Alexander Kaplan
and the discussion at
https://groups.google.com/forum/#!topic/linux-sunxi/lz0oQBwjex0

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-07 12:28:37 +01:00
Bernhard Nortmann
447eb661a9 fel: extend usb_bulk_send() for progress updates
This patch adds a boolean parameter "progress" to several functions.
When set (true), it will cause usb_bulk_send() to notify the progress
framework, using progress_update() to convey the current transfer
status.

The feature gets enabled for the "write" command, and is forced
inactive in most other places, e.g. aw_fel_write_uboot_image().
Also, we specifically want the internal use of aw_fel_write() to
never use it.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-07 12:28:32 +01:00
Bernhard Nortmann
edc48b5e93 fel: refactor aw_fel_write()
This patch introduces a new function aw_write_buffer() to
allow a better distinction between FEL write operations.

aw_fel_write() is meant for "privileged" internal use, while
aw_write_buffer() now represents the preferred entry point
for user code like the "write", "fill" or "clear" commands.

There is some deliberate code duplication here that makes sense
when combined with the next patch, where the aw_usb_write()
call will differ. We want aw_fel_write() to enforce no progress
update/callback, while aw_write_buffer() will (optionally)
support it.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-07 12:28:27 +01:00
Bernhard Nortmann
70951fa99a fel: Introduce progress framework
This patch adds two new source files that will deal with code
related to progress callbacks and display. I have decided to
keep this separate, as there will be many smaller routines
involved, which otherwise would bloat fel.c unnecessarily.

For starters, let's also move the gettime() function there.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Reviewed-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-12-07 12:28:22 +01:00
Siarhei Siamashka
c32eeb88ff fel: Enable MMU on Allwinner-H3 to improve FEL transfer speed
When the CPU clock speed is set to 480 MHz by the U-Boot SPL,
the performance of 'sunxi-fel write' transfers to DRAM improves
from ~95 KB/s to ~510 KB/s.

When the CPU clock speed is set to 1008 MHz by the U-Boot SPL,
the performance of 'sunxi-fel write' transfers to DRAM improves
from ~180 KB/s to ~510 KB/s.

This means that the CPU is not a bottleneck for FEL transfers
anymore. Further performance improvements are possible by
increasing the AHB1 clock speed in the U-Boot SPL (up to
something like ~900 KB/s).

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Acked-by: Peter Korsgaard <peter@korsgaard.com>
2015-11-24 04:50:26 +02:00
Siarhei Siamashka
a275b246a4 fel: Support for enabling MMU after running SPL on new SoC variants
The BROM in newer SoC variants doesn't enable MMU by default anymore.
So in order to benefit from e4b3da2b17ee9d7c5cab9b80e708b3a309fc4c96
("fel: Faster USB transfers via 'fel write' to DRAM"), we need to
be able to enable it from the 'sunxi-fel' tool.

This patch can be interpreted as simply reverting the changes done
by Allwinner and bringing back the MMU support in roughly the same
way as it was before. That's why the values in the hardware
registers and the translation table entries replicate the A20 setup.

Additionally, the code is now more defensive and introduces new
"canary" checks for certain known magic values in the coprocessor
registers in order to safeguard against any unpleasant surprises.

MMU tuning for A80 and A64 will probably need a more sophisticated
setup with a second level page table. Because both the SRAM and
the BROM reside in the same 1MB section there and we need finer
granularity. In other words, enabling the MMU on A80 and A64 is
not supported yet.

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Acked-by: Peter Korsgaard <peter@korsgaard.com>
2015-11-24 04:50:26 +02:00
Siarhei Siamashka
d971b08e5d fel: Helper functions for reading/writing ARM coprocessor registers
This helps to reduce code duplication if we want to read and write
many different kinds of coprocessor registers.

Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Acked-by: Peter Korsgaard <peter@korsgaard.com>
2015-11-24 04:50:26 +02:00
Bernhard Nortmann
a9cb1c4c66 sunxi-tools: make use of proper boolean data types
Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Acked-by: Peter Korsgaard <peter@korsgaard.com>
2015-11-19 18:04:53 +01:00
Bernhard Nortmann
d99d59c058 sunxi-tools: some trivial fixes
- get rid of double includes
- fix U-Boot source reference
- get rid of "uboot_autostart" variable

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Acked-by: Peter Korsgaard <peter@korsgaard.com>
2015-11-19 18:04:48 +01:00
Bernhard Nortmann
6cc91f1062 fel: add a mechanism to provide boot information via FEL
This patch makes use of a new sunxi SPL header format, where
fields for passing data to U-Boot are reserved. This allows the
"fel" utility to provide specific pieces of information by
setting these fields (which will be evaluated by U-Boot then).

For now, we provide the memory location of the boot script file
(boot.scr) this way. A suitably modified U-Boot can adjust the
boot process accordingly and will auto-execute the script.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
Acked-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
2015-10-03 08:24:26 +03:00