Commit Graph

34138 Commits

Author SHA1 Message Date
Sebastian Huber
5d752e7b48 sp14: Fix for SMP or robust thread dispatch
Close #4343.
2021-03-16 14:01:08 +01:00
Sebastian Huber
c9a41b0043 score: Add Thread_Configuration::cpu_time_budget
Move the CPU time budget to the thread configuration.  This simplifies
_Thread_Initialize().
2021-03-16 12:48:37 +01:00
Sebastian Huber
5babc54d8d validation: Task create/construct
Run the task create/construct tests also on validation test suite 1
which has exactly one processor configured.
2021-03-16 12:47:52 +01:00
Sebastian Huber
586e06ec62 validation: Improve wording 2021-03-11 21:59:52 +01:00
Eshan dhawan
a26a326e55 Test suite for FTW.H methods
Signed-off-by: Eshan Dhawan <eshandhawan51@gmail.com>
2021-03-11 11:40:13 -06:00
Daniel Hellstrom
b2da982c87 leon,tn-0018: work around GRLIB-TN-0018 errata
Overview
========

The errata is worked around in the kernel without requiring toolchain
modifications. It is triggered the JMPL/RETT return from trap instruction
sequence never generated by the compiler and. There are also other
conditions that must must be true to trigger the errata, for example the
instruction that the trap returns to has to be a JMPL instruction. The
errata can only be triggered if certain data is corrected by ECC
(inflicted by radiation), thus it can not be triggered under normal
operation. For more information see:
	 www.gaisler.com/notes

Affected RTEMS target BSPs:
 * GR712RC
 * UT699
 * UT700/699E

The work around is enabled by defining __FIX_LEON3_TN0018 at build time.
After applying the following GCC patch, GCC will set the define when
compiling for an affected multilib:
  * GR712RC (-mcpu=leon3 -mfix-gr712rc)
  * UT700/UT699E (-mpcu=leon3 -mfix-ut700)
  * UT699 (-mcpu=leon -mfix-ut699)
When building for another multilib and TN0018 is still required, it
is possible to enable it on the RTEMS kernel configure line using the
TARGET_CFLAGS (-D__FIX_LEON3FT_TN0018) or other by other means.

The following GCC patch sets __FIX_LEON3FT_TN0018 for the affected RTEMS
multilibs:
---------
diff --git a/gcc/config/sparc/rtemself.h b/gcc/config/sparc/rtemself.h
index 6570590..ddec98c 100644
--- a/gcc/config/sparc/rtemself.h
+++ b/gcc/config/sparc/rtemself.h
@@ -33,6 +33,8 @@
        builtin_assert ("system=rtems");        \
        if (sparc_fix_b2bst)                    \
          builtin_define ("__FIX_LEON3FT_B2BST"); \
+       if (sparc_fix_gr712rc || sparc_fix_ut700 || sparc_fix_ut699) \
+         builtin_define ("__FIX_LEON3FT_TN0018"); \
     }                                          \
   while (0)
---------

Workaround Implementation
=========================

In general there are two approaches that the workaround uses:
 A) avoid ECC restarting the RETT instruction
 B) avoid returning from trap to a JMPL instruction

Where A) comes at a higher performance cost than B), so B) is used
where posssible. B) can be achived for certain returns from trap
handlers if trap entry is controlled by assembly, such as system calls.

A)
A special JMPL/RETT sequence where instruction cache is disabled
temporarily to avoid RETT containing ECC errors, and reading of RETT
source registers to "clean" them from incorrect ECC just before RETT
is executed.

B)
The work around prevents JMPL after system calls (TA instruction) and
modifies assembly code on return from traps jumping back to application
code. Note that for some traps the trapped instruction is always
re-executed and can therefore not trigger the errata, for example the
SAVE instruction causing window overflow or an float instruction causing
FPU disabled trap.

RTEMS SPARC traps workaround implementation:
   NAME                 NOTE   TRAP   COMMENT
 * window overflow         1 - 0x05   always returns to a SAVE
 * window underflow        1 - 0x06   always returns to a RESTORE
 * interrupt traps         2 - 0x10..1f special rett sequence workaround
 * syscall                 3 - 0x80   shutdown system - never returns
 * ABI flush windows       2 - 0x83   special rett sequence workaround
 * syscall_irqdis          4 - 0x89
 * syscall_irqen           4 - 0x8A
 * syscall_irqdis_fp       1 - 0x8B   always jumps back to FP instruction
 * syscall_lazy_fp_switch  5 - 0x04   A) jumps back to FP instruction, or to
                                      B) _Internal_error() starting with SAVE

 Notes:
 1) no workaround needed because trap always returns to non-JMPL instruction
 2) workaround implemented by special rett sequence
 3) no workaround needed because system call never returns
 4) workaround implemented by inserting NOP in system call generation. Thus
    fall into 1) when workaround is enabled and no trap handler fix needed.
 5) trap handler branches into both 1) and returning to _Internal_error()
    which starts with a SAVE and besides since it shuts down the system that
    RETT should never be in cache (only executed once) so fix not necessary
    in this case.

Any custom trap handlers may also have to be updated. To simplify that,
helper work around assembly code in macros are available in a separate
include file <libcpu/grlib-tn-0018.h>.

Close #4155.
2021-03-11 17:35:28 +01:00
Daniel Hellstrom
89d90c0019 sparc,leon: avoid triggering LEON3FT errata TN-0009
Close #4336.
2021-03-11 17:35:28 +01:00
Daniel Hellstrom
acad761b9c sparc,leon: avoid triggering TN-0009 bad sequence
Update #4336.
2021-03-11 17:35:28 +01:00
Daniel Hellstrom
6caff4d61d grlib,grspw_pkt: correct link state enum numbering
Not used by the driver itself, but shuold be correct if used by
application.
2021-03-11 17:35:28 +01:00
Martin Aberg
4e0735c650 leon, l2cache: prevent unused diagnostic access 2021-03-11 17:35:28 +01:00
Martin Aberg
51564f6383 leon, ahbstat: register definitions for AHBSTAT version 1 2021-03-11 17:35:27 +01:00
Martin Aberg
8660602ae2 leon, grspw_router: added router_port_link_div()
Allows user to set SpaceWire run clock divisor for an individual port.
2021-03-11 17:35:27 +01:00
Daniel Hellstrom
1d804cbcd4 sparc: fix bad register alignment for 64 bit store 2021-03-11 17:35:27 +01:00
Daniel Hellstrom
dfe7901c7f leon: restart and load timer counter at initialization
Without this smp05 and smpthreadlife01 tests may fail
depending on how the boot loader initialized the GPTIMER.
Before the time counter stopped counting when reaching
zero, but tests could work since it could take 2^32 us
before stopping.

The timer driver will potentially overwrite this, but it
happens later due to the initialization order having
RTEMS_SYSINIT_CPU_COUNTER very early.
2021-03-11 17:35:27 +01:00
Daniel Hellstrom
9c00cc1301 leon,ckinit: avoid assuming 1MHz timer pre-scaler clock 2021-03-11 17:35:27 +01:00
Daniel Hellstrom
b57436c8fc leon3: avoid dependency on apbuart/timer driver
Moves drvmgr_drivers[] from amba.c to a separate file in order
to avoid the dependecy on APBUART/GPTIMER drivers. This has
an effect when user configured not to use timer or uart
in their project.
2021-03-11 17:35:27 +01:00
Daniel Hellstrom
053b17ce8e leon,greth: added support for variable sized descriptor table sizes
The descriptor table size is equal to its alignment and set when
configuring the HW IP through VHDL generics. This SW patch simply
probes the HW how large the RX/TX descriptor tables are and adjusts
accordingly.

The number of descriptors actual used are controlled by other
settings (rxDescs and txDescs) controlled by the user.
2021-03-11 17:34:57 +01:00
Daniel Hellstrom
9bf8a9d147 leon,grcan: split out GRCAN non-FD specific support in separate file
Close #4324.
2021-03-11 17:31:21 +01:00
Daniel Hellstrom
9c76ca0c0c leon,grcanfd: split out GRCANFD specific support in separate file
Update #4324.
2021-03-11 17:31:21 +01:00
Daniel Hellstrom
43c903a1dc leon,grcan: added support for GRCANFD
The new GRCAN_FD IP supports CAN FD standard and is mostly backwards
compatible with GRCAN SW interface. The GRCAN driver have been extended
to support the GRCANFD IP using the same driver.

Additional functions have been added that uses a new CAN FD frame
format and read/write/baud-rate functions that supports both GRCANFD
and GRCAN. To keep the SW API fully backwards compatible with GRCAN,
the old functions remain.

Update #4324.
2021-03-11 17:31:21 +01:00
Daniel Hellstrom
b98d6b67f6 grlib: added 64-bit read no-cache function
Update #4324.
2021-03-11 17:31:21 +01:00
Daniel Hellstrom
65237ba01d leon,occan: use common CAN baud-rate calculation routine
Close #4323.
2021-03-11 17:31:21 +01:00
Daniel Hellstrom
4d19220742 leon,grcan: use common CAN baud-rate calculation routine
Update #4323.
2021-03-11 17:31:21 +01:00
Daniel Hellstrom
cff99cf1fa leon,can: introduce common CAN baud-rate calculation function
Reimplemented the baud-rate algorithm from scratch to cope with
GRCAN, GRCANFD and OC_CAN devices.

Update #4323.
2021-03-11 17:31:21 +01:00
Daniel Hellstrom
68c882ef45 grlib,ambapp: added new IP core IDs 2021-03-11 17:31:21 +01:00
Daniel Hellstrom
e227ae53ab leon,grspw: fix for SET_PACKET_SIZE
When the DMA table has been allocated dynamically, the IOCTL_SET_PACKETSIZE
will trigger an issue where pDev->rx and pDev->tx are not updated with
the new DMA tables base address. Instead the old pointers are used.

There is no point in reallocting the DMA tables because there is no
configuration option to it. Therefore the DMA tables allocation is
moved to a separate function never called from SET_PACKETSIZE.
2021-03-11 17:31:21 +01:00
Arvid Bjorkengren
50db7f2d6b leon,gr1553b: Only align allocated memory. Verify alignment of memory. 2021-03-11 17:31:21 +01:00
Arvid Bjorkengren
70f87f9e87 leon,gr1553b: set codec version
This is enables the updated codec for GR740 and is backwards compatible
with all other versions of the IP.
2021-03-11 17:31:21 +01:00
Arvid Bjorkengren
3344d0299f leon,gr1553rt: Fixed spinlock unlock 2021-03-11 17:31:21 +01:00
Arvid Bjorkengren
f798a75cd5 leon,gr1553rt: Fixed memory leak 2021-03-11 17:31:21 +01:00
Daniel Cederman
0cae482a45 sparc: Remove sequences that the B2BST scan script warns about
Update #4336.
2021-03-11 17:31:21 +01:00
Sebastian Huber
bfd1b6eef3 validation: Use common wording 2021-03-11 07:58:19 +01:00
Jan Sommer
92239318b1 bsps/xilinx_zynq: Add SPI driver to autotools build
Closes #4320
2021-03-10 20:12:08 +01:00
Jan Sommer
06129897a9 bsps/xilinx_zynq: Add SPI driver to waf
Updates #4320
2021-03-10 20:12:08 +01:00
Jan Sommer
cc825d0322 bsps/xilinx_zynq: Add SPI driver for cadence-spi
Updates #4320
2021-03-10 20:12:08 +01:00
Frank Kühndel
14bb077059 basedefs: Clarify RTEMS_STRING(), RTEMS_XSTRING() 2021-03-09 13:03:15 +01:00
Sebastian Huber
ba48f20e2a build: Fix broken link 2021-03-09 13:03:15 +01:00
Alex White
10db41e6f1 spec/aarch64: Enable previously disabled tests
This enables several testsuites that were initially disabled during
development.
2021-03-08 15:18:51 -06:00
Ryan Long
fbab8325a9 main_help.c: Unchecked return value from library (CID #1437650)
CID 1437650: Unchecked return value from library in rtems_shell_help().

Closes #4291
2021-03-08 14:04:10 -06:00
Ryan Long
55ba229d22 pwdgrp.c: Fix Unchecked return value from library (CID #1255518)
CID 1255518: Unchecked return value from library in pwdgrp_init().

Closes #4282
2021-03-08 14:04:10 -06:00
Ryan Long
8e34aa3b7b main_chmod.c: Fix Unchecked return value from library (CID #1063856)
CID 1063856: Unchecked return value from library in
rtems_shell_main_chmod().

Closes #4281
2021-03-08 14:04:10 -06:00
Ryan Long
597e4f4765 gen_uuid.c: Fix two Unchecked return value from library errors
CID 1049146: Unchecked return value from library in get_clock().
CID 1049147: Unchecked return value from library in get_random_fd().

Closes #4280
2021-03-08 14:04:10 -06:00
Ryan Long
3246fa42e2 main_edit.c: Fix Unchecked return value (CID #1255318)
CID 1255318: Unchecked return value in display_line().

Updates #4257
2021-03-08 14:04:10 -06:00
Sebastian Huber
e76470dfa7 validation: Use common wording 2021-03-08 11:04:55 +01:00
Sebastian Huber
1ce127e9df validation: Use common wording 2021-03-05 21:19:54 +01:00
Ryan Long
f762b7c272 grcan.c: Fix Unused value (CID #1437613)
CID 1437613: Unused value in grcan_set_filter().
This fix was recommended by Daniel Hellstrom (daniel@gaisler.com).

Closes #4301
2021-03-05 14:00:07 -06:00
Ryan Long
c57079a814 b1553brm.c: Fix Unsigned compared against 0 (CID #1399773)
CID 1399773: Unsigned compared against 0 in brm_write().

Closes #4295
2021-03-05 14:00:07 -06:00
Ryan Long
1f29ee4528 satcan.c: Fix Unsigned compared against 0 (CID #1399768)
CID 1399768: Unsigned compared against 0 in satcan_ioctl().

Closes #4294
2021-03-05 14:00:07 -06:00
Ryan Long
f804778881 gr_cpci_gr740.c: Unchecked return value from library (CID #1437630)
CID 1437630: Unchecked return value from library in gr_cpci_gr740_init1().

Closes #4290
2021-03-05 14:00:07 -06:00
Ryan Long
5f0a7ceb81 gr_tmtc_1553.c: Unchecked return value from library (CID #1399785)
CID 1399785: Unchecked return value from library in gr_tmtc_1553_init1().

Closes #4289
2021-03-05 14:00:07 -06:00