Commit Graph

34153 Commits

Author SHA1 Message Date
Sebastian Huber
fec2b72472 validation: Use support functions 2021-03-23 07:57:13 +01:00
Sebastian Huber
8afe332348 validation: Add test case support functions 2021-03-23 07:57:13 +01:00
G S Niteesh Babu
bd9e45d91f rtems-fdt/rtems-fdt.c: Fix bug in loop termination
The while loop, loops infinitely in case of raw FDT data.
The loop condition (size) is not modified during iterations.
2021-03-21 12:33:08 +01:00
G S Niteesh Babu
56074644a7 bsp/beagle: Ported Beagle pinmux driver to RTEMS
The following files have been ported
1) ti_pinmux.c
2) ti_pinmux.h
3) am335x_scm_padconf.c
4) am335x_scm_padconf.h

Update #3784
2021-03-21 12:30:48 +01:00
G S Niteesh Babu
7589f1e01a bsps/beagle: Added SOC detection using FDT
Detects the SOC type using FDT and also replaces the ti_cpuid.h
header in FreeBSD with custom one.
2021-03-21 12:30:48 +01:00
G S Niteesh Babu
5c656ead88 bsp/beagle: Import Beagle pinmux from FreeBSD
This patch imports the beagle pinmux driver from FreeBSD into
RTEMS. Previously this driver was placed in RTEMS-libBSD but
this caused double initialization of few pins once during RTEMS
initialization and second time during libBSD initialization.
The following patches port the driver from FreeBSD to RTEMS and
will remove the driver from RTEMS-libBSD.

RTEMS Ticket Update: #3784

FreeBSD head: ca12b7e9534b10af022fed60c043984dbaf4003d

The following files have been imported from FreeBSD:
1) freebsd/sys/arm/ti/am335x/am335x_scm_padconf.h
2) freebsd/sys/arm/ti/am335x/am335x_scm_padconf.c
3) freebsd/sys/arm/ti/ti_pinmux.h
4) freebsd/sys/arm/ti/ti_pinmux.c
2021-03-21 12:30:48 +01:00
G S Niteesh Babu
fc7129067d bsps/shared/ofw: Add rtems_ofw_is_node_compatible
This patch extends the RTEMS OFW API by adding
rtems_ofw_find_device_by_compat

This function checks if a node has the expected compatible
property.
2021-03-21 12:30:47 +01:00
Christian Mauderer
65ab1cda10 bsps/arm/imxrt: Add FDT and FDT helper for QTMR
Makes it simpler to access the QTMR in an application via a FDT name or
link in an application specific FDT entry.
2021-03-21 12:30:29 +01:00
Sebastian Huber
53bd5e3246 rtems: Relax mode checks in rtems_signal_catch()
Check only for invalid modes if a valid handler is presented to
rtems_signal_catch().  When NULL is used for the handler, ASR processing
is disabled and the mode is not used.

Update #4244.
2021-03-19 16:55:48 +01:00
Sebastian Huber
fa1e7ea054 validation: Reduce source code/rodata size
Use a common wording for the tests.  Use the new templates for action
requirements described in the RTEMS Software Engineering manual.
2021-03-19 16:55:48 +01:00
Sebastian Huber
eb1cd404d0 build: Add test exclude for arm/lpc2362 2021-03-19 16:55:11 +01:00
Sebastian Huber
50abce31ef rtems: Fix rtems_task_mode()
Do the ASR and preemption mode change only if requested by the mode
mask.  The bug was introduced by
508f868237.
2021-03-18 10:38:53 +01:00
Sebastian Huber
b4eb937ecd rtems: Improve semaphore create error checks
Do not mix checks for different error indicators (RTEMS_NOT_DEFINED and
RTEMS_INVALID_NUMBER).  This simplifies the specification of
rtems_semaphore_create().
2021-03-16 14:57:41 +01:00
Sebastian Huber
4ebdbee815 rtems: Allow initially locked MrsP semaphores
Rejecting initially locked MrsP semaphores was due to a limitiation of
the early limitiation of the MrsP protocol.  This limitation no longer
exists.
2021-03-16 14:57:41 +01:00
Sebastian Huber
0965b7c8b7 rtems: Require RTEMS_PRIORITY for MrsP semaphores
MrsP semaphores are a generalization of the priority ceiling semaphores
for SMP configurations.  Priority ceiling semaphores are required to use
the priority task wait queue discipline.  Require this discipline also
for MrsP semaphores.

Close #4347.
2021-03-16 14:47:25 +01:00
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