With demand paging, it is possible for data pages to not be
present in physical memory. The gen_mmu.py script is updated
so that, if so desired, the generic sections are marked
non-present so the paging mechanism can bring them in
if needed.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
If the BSS section is not present in physical memory at boot,
do not zero the section, or else page faults would occur.
The zeroing of BSS will be done once the paging mechanism
has been initialized.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
With demand paging, the heap object and its backing memory
may not be in physical memory. So initialize those heaps
in pinned region at PRE_KERNEL_1 and the remaining heaps
once paging mechanism has been initialized.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This adds the kconfig to allow reserving a number of page frames
which do not count towards free memory. This is to ensure that
there are enough page frames available for paging code and data.
Or else, it would be possible to exhaust all page frames via
anonymous memory mappings.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
Although they are marked as an inline functions, the compiler
may decide not to inline them which would result in them being
outside the pinned text section. Since these functions are
required for userspace to work correctly, pin them in physical
memory. This also applies to k_is_user_context().
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This allows memory partitions to be put into the pinned
section so they are available during boot. For example,
the stack guard (in libc partition) is needed during boot
but before the paging mechanism is initialized. Without
pinning it in physical memory, it would fault in early
boot process.
A new cmake property app_smem,pinned_partitions is
introduced so that additional partitions can be pinned
if needed.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
During boot process, the boot sections need to be pinned in
memory to prevent them from being paged out (to avoid
pages being paged out and immediately paged in again).
Once the boot process is completed (just before calling main()),
the boot sections can be unpinned so the memory can be
used for demand paging for paging in data pages.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
If BSS section is not present in memory at boot, it would not
have been cleared as the data pages are not in physical memory.
Manipulating those pages would result in page faults.
In this scenario, zeroing BSS can only be done once the paging
mechanism has been initialized. So do it there.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
With demand paging and pinned sections enabled, it is possible for
data to be brought into physical memory as required by current
execution context. However, the kernel still assumes that all data
pages are present at boot which may not be desirable for certain
scenarios. This introduces a new kconfig to specify that those
data pages other than the boot and pinned sections are not present,
and they would be paged in on demand.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
The beginning of code in do_page_fault() is to pin the page
in memory if it is already present in physical memory.
It is there so that if a page is not present, it can proceed
to perform page-in and then pin it. So the counting of
page faults needs to be moved after the pinning code so
it actually counts page faults, and not counting pinning
operations when the page is already present.
Also clarify the comment on the goto statement as it is not
correct.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
The z_main_stack is needed before paging mechanism is initialized
so put the stack into the pinned section to avoid page faults.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This introduces two new macros K_THREAD_PINNED_STACK_DEFINE()
and K_THREAD_PINNED_STACK_ARRAY_DEFINE() to define thread
stack and thread stack array in pinned section.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
In do_page_fault(), the incoming page fault address is not
aligned, and it was unconditionally assigned to the page
frame virtual address field. If the backing store simply
returns the virtual address without processing in
k_mem_paging_backing_store_location_get(), this unaligned
address will be passed to arch_mem_page_out(). On x86,
it is further passed to range_map() which asserts if
the physical address is not page aligned. So align
the address to page size before assigning it to the page
frame virtual address field.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This groups the device state variables in their own linker section.
This is needed for demand paging as these variables are needed
during boot where the paging mechanism has not been initialized.
These variables need to be in the pinned section so they can
be accessed during boot.
Note that if device PM is not enabled, the device state variables
are put into BSS. So we need to pin these.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This attaches a unique section attribute for each mem slab
buffer defined with K_MEM_SLAB_DEFINE(). This allows them
to be placed as needed via linker scripts. This is useful
for demand paging as developers can choose which memory
slab buffer is pinned in memory.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This attaches a unique section attribute for each kheap
buffer defined with K_HEAP_DEFINE(). This allows them
to be placed as needed via linker scripts. This is useful
for demand paging as developers can choose which can be
pinned in memory.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This adds a new __noinit_named() macro which can be used to
attach named section attributes for symbols. The original
__noinit creates a section attribute with source file name
and a sequential counter. This simply replaces the counter
with the supplied name. This is useful for demand paging
as developers can choose which symbols is pinned memory.
Signed-off-by: Daniel Leung <daniel.leung@intel.com>
Introduce new Kconfig option MCUBOOT_ENCRYPTION_KEY_FILE. If the
string is not empty Cmake will try to encrypt the final binaries using
the given key file.
Signed-off-by: Helge Juul <helge@fastmail.com>
Some GPIO related calls were not being checked for error.
This patch also fixes coverity issue 236651.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Some GPIO related functions were not being checked for errors.
This patch fixes coverity issue 236653.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Some GPIO related calls were not being checked for errors.
This patch fixes coverity issue 236650.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
gpio_add_callback was not being error-checked. Some other minor cleanups
(rc var to the top, remove redundant log).
This patch fixes coverity issue 236649.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Some GPIO related calls were not being checked for error.
This patch fixes coverity issue 236648.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Some GPIO related calls were not being checked for error.
This patch fixes coverity issue 236647.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Fix the formula used to compute RH/ticks formula according to the Table
9 of the datasheet.
This patch also fixes coverity issue 238360.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Fix the formula that computes T/ticks according to the details found on
Table 9 of the datasheet.
This patch fixes coverity issue 238343.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Since periodic advertising chains are available there is
a possibility to send multiple PDUs including CTE in
a periodic advertising event.
This commit enables such functionality in direction finding
transmitter sample.
Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
STM32U5 support is not yet supported in upstream openocd.
Provide instructions to use STMicro openocd fork as a temporary
workaround.
Additionally, provide openocd configuration to be used for this
target.
Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
Some targets require no 'halt' to be issued i the gdb server command.
Add a --no-halt option to make it possible.
Keep use of halt as the default case.
Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
I2S direction was not checked correctly in the i2s_nrfx_configure
function.
This patch also fixes coverity issue 238365.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Enable support for Atmel SAM DAC driver on the following boards:
- sam_e70_xplained
- sam_e70b_xplained
- sam_v71_xult
- sam_v71b_xult
Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
Enable support for Atmel SAM DAC driver on the following boards:
- sam_e70_xplained
- sam_e70b_xplained
- sam_v71_xult
- sam_v71b_xult
Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
Add Digital-to-Analog Converter driver (based on DACC module) for Atmel
SAM MCU family. Only SAME70, SAMV71 series devices are supported in
this version.
Tested on Atmel SMART SAM E70 Xplained board.
Origin: Original
Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
This ensures that all mesh settings were removed from persistent storage
after node reset.
Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
This commit adds a test checking that a node removes all data from
persistent storage after being unprovisioned.
Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
Add sam4l full finite state machine based on Atmel Software Framework.
This allows driver detect protocol errors and sync all requests. This
version is compliance with Linux USB tests.
Note: Tests are timing sensitive and log may affect results.
Signed-off-by: Gerson Fernando Budke <nandojve@gmail.com>
Fix maximum radio packet size configuration to use 255 bytes
for Extended Scanning and Periodic Synchronization.
Add a Kconfig option so that application can reduce RAM
usage if a specific user scenario can live with smaller PDU
receptions.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
In the calculation of auxiliary PDU offset for periodic advertising
AUX_CHAIN_IND PDUs there were used old macro that was removed.
The code didn't compile.
Also there were no support for S2 Coded PHY in the offset calculation.
Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>